[
  {
    "path": ".gitignore",
    "content": "# OS X\n.DS_Store\n\n# Xcode\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\nprofile\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n\n# Bundler\n.bundle\n\nCarthage\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control\n# \n# Note: if you ignore the Pods directory, make sure to uncomment\n# `pod install` in .travis.yml\n#\n# Pods/\n"
  },
  {
    "path": ".travis.yml",
    "content": "# references:\n# * http://www.objc.io/issue-6/travis-ci.html\n# * https://github.com/supermarin/xcpretty#usage\n\nlanguage: objective-c\n# cache: cocoapods\n# podfile: Example/Podfile\n# before_install:\n# - gem install cocoapods # Since Travis is not always on latest version\n# - pod install --project-directory=Example\ninstall:\n- gem install xcpretty --no-rdoc --no-ri --no-document --quiet\nscript:\n- set -o pipefail && xcodebuild test -workspace Example/MWPhotoBrowser.xcworkspace -scheme MWPhotoBrowser-Example -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO | xcpretty -c\n- pod lib lint --quick\n"
  },
  {
    "path": "Example/MWPhotoBrowser/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  PhotoBrowserDemo\n//\n//  Created by Michael Waterfall on 31/12/2011.\n//  Copyright (c) 2011 __MyCompanyName__. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n//@property (strong, nonatomic) UIViewController *viewController;\n\n@end\n"
  },
  {
    "path": "Example/MWPhotoBrowser/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  PhotoBrowserDemo\n//\n//  Created by Michael Waterfall on 31/12/2011.\n//  Copyright (c) 2011 __MyCompanyName__. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n//#import \"Menu.h\"\n\n@implementation AppDelegate\n\n@synthesize window = _window;\n//@synthesize viewController = _viewController;\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n//    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n//    \n//    Menu *menu = [[Menu alloc] initWithStyle:UITableViewStylePlain];\n//    self.viewController = (UIViewController *)[[UINavigationController alloc] initWithRootViewController:menu];\n//    self.window.rootViewController = self.viewController;\n//    [self.window makeKeyAndVisible];\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application\n{\n    /*\n     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.\n     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.\n     */\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application\n{\n    /*\n     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. \n     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n     */\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application\n{\n    /*\n     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.\n     */\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application\n{\n    /*\n     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.\n     */\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application\n{\n    /*\n     Called when the application is about to terminate.\n     Save data if appropriate.\n     See also applicationDidEnterBackground:.\n     */\n}\n\n@end\n"
  },
  {
    "path": "Example/MWPhotoBrowser/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/MWPhotoBrowser/Images.xcassets/ImageSelected.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"ImageSelectedOn.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"ImageSelectedOn@2x.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"filename\" : \"ImageSelectedOn@3x.png\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/MWPhotoBrowser/Images.xcassets/ImageSelectedSmall.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"ImageSelectedSmallOn.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"ImageSelectedSmallOn@2x.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\",\n      \"filename\" : \"ImageSelectedSmallOn@3x.png\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/MWPhotoBrowser/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "Example/MWPhotoBrowser/MWPhotoBrowser-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>Main</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UIStatusBarHidden</key>\n\t<false/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/MWPhotoBrowser/MWPhotoBrowser-Prefix.pch",
    "content": "//\n//  Prefix header\n//\n//  The contents of this file are implicitly included at the beginning of every source file.\n//\n\n#import <Availability.h>\n\n#ifndef __IPHONE_5_0\n#warning \"This project uses features only available in iOS SDK 5.0 and later.\"\n#endif\n\n#ifdef __OBJC__\n    @import UIKit;\n    @import Foundation;\n#endif\n"
  },
  {
    "path": "Example/MWPhotoBrowser/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"7706\" systemVersion=\"14D136\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"8Em-Co-Whx\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"7703\"/>\n    </dependencies>\n    <scenes>\n        <!--Menu-->\n        <scene sceneID=\"bcX-tD-0Ce\">\n            <objects>\n                <tableViewController id=\"VlM-DX-ts7\" customClass=\"Menu\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" id=\"Bpp-Ma-Crj\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <prototypes>\n                            <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"Cell\" textLabel=\"bHz-NT-x6r\" detailTextLabel=\"a3v-7Z-Kqj\" style=\"IBUITableViewCellStyleSubtitle\" id=\"oXf-5T-fhe\">\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"oXf-5T-fhe\" id=\"CLw-kI-zDf\">\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Title\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"bHz-NT-x6r\">\n                                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                            <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Subtitle\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"a3v-7Z-Kqj\">\n                                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"11\"/>\n                                            <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                </tableViewCellContentView>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"VlM-DX-ts7\" id=\"ewK-DE-fVf\"/>\n                            <outlet property=\"delegate\" destination=\"VlM-DX-ts7\" id=\"Z6g-Dl-KKT\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" id=\"0QW-cc-jCd\"/>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"oXG-Nu-YBi\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1067\" y=\"321\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"XvD-ns-vqR\">\n            <objects>\n                <navigationController automaticallyAdjustsScrollViewInsets=\"NO\" id=\"8Em-Co-Whx\" sceneMemberID=\"viewController\">\n                    <toolbarItems/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"7ge-VD-Vvk\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <nil name=\"viewControllers\"/>\n                    <connections>\n                        <segue destination=\"VlM-DX-ts7\" kind=\"relationship\" relationship=\"rootViewController\" id=\"8g2-ng-Wa2\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"viC-r8-maL\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"331\" y=\"321\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example/MWPhotoBrowser/Menu.h",
    "content": "//\n//  Menu.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 21/10/2010.\n//  Copyright 2010 d3i. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"MWPhotoBrowser.h\"\n#import <AssetsLibrary/AssetsLibrary.h>\n\n@interface Menu : UITableViewController <MWPhotoBrowserDelegate> {\n    UISegmentedControl *_segmentedControl;\n    NSMutableArray *_selections;\n}\n\n@property (nonatomic, strong) NSMutableArray *photos;\n@property (nonatomic, strong) NSMutableArray *thumbs;\n@property (nonatomic, strong) NSMutableArray *assets;\n\n@property (nonatomic, strong) ALAssetsLibrary *ALAssetsLibrary;\n\n- (void)loadAssets;\n\n@end\n"
  },
  {
    "path": "Example/MWPhotoBrowser/Menu.m",
    "content": "//\n//  Menu.m\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 21/10/2010.\n//  Copyright 2010 d3i. All rights reserved.\n//\n\n#import <Photos/Photos.h>\n#import \"Menu.h\"\n#import \"SDImageCache.h\"\n#import \"MWCommon.h\"\n\n@implementation Menu\n\n#pragma mark -\n#pragma mark Initialization\n\n- (id)initWithCoder:(NSCoder *)aDecoder {\n    if ((self = [super initWithCoder:aDecoder])) {\n\t\tself.title = @\"MWPhotoBrowser\";\n        \n        // Clear cache for testing\n        [[SDImageCache sharedImageCache] clearDisk];\n        [[SDImageCache sharedImageCache] clearMemory];\n        \n        _segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@\"Push\", @\"Modal\", nil]];\n        _segmentedControl.selectedSegmentIndex = 0;\n        [_segmentedControl addTarget:self action:@selector(segmentChange) forControlEvents:UIControlEventValueChanged];\n        \n        UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:_segmentedControl];\n        self.navigationItem.rightBarButtonItem = item;\n        self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@\"Back\" style:UIBarButtonItemStyleBordered target:nil action:nil];\n\n        [self loadAssets];\n        \n    }\n    return self;\n}\n\n- (void)segmentChange {\n    [self.tableView reloadData];\n}\n\n\n#pragma mark -\n#pragma mark View\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    // Test toolbar hiding\n//    [self setToolbarItems: @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil]]];\n//    [[self navigationController] setToolbarHidden:NO animated:NO];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    [super viewWillAppear:animated];\n//    self.navigationController.navigationBar.barTintColor = [UIColor greenColor];\n//    self.navigationController.navigationBar.translucent = NO;\n//    [self.navigationController setNavigationBarHidden:YES animated:YES];\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n    [super viewWillDisappear:animated];\n//    [self.navigationController setNavigationBarHidden:NO animated:YES];\n}\n\n- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {\n    return YES;\n}\n\n- (BOOL)prefersStatusBarHidden {\n    return NO;\n}\n\n- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {\n    return UIStatusBarAnimationNone;\n}\n\n#pragma mark -\n#pragma mark Table view data source\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {\n    return 1;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n    NSInteger rows = 9;\n    @synchronized(_assets) {\n        if (_assets.count) rows++;\n    }\n    return rows;\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n    \n\t// Create\n    static NSString *CellIdentifier = @\"Cell\";\n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];\n    if (cell == nil) {\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];\n    }\n    cell.accessoryType = _segmentedControl.selectedSegmentIndex == 0 ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;\n\n    // Configure\n\tswitch (indexPath.row) {\n\t\tcase 0: {\n            cell.textLabel.text = @\"Single photo\";\n            cell.detailTextLabel.text = @\"with caption, no grid button\";\n            break;\n        }\n\t\tcase 1: {\n            cell.textLabel.text = @\"Multiple photos and video\";\n            cell.detailTextLabel.text = @\"with captions\";\n            break;\n        }\n\t\tcase 2: {\n            cell.textLabel.text = @\"Multiple photo grid\";\n            cell.detailTextLabel.text = @\"showing grid first, nav arrows enabled\";\n            break;\n        }\n\t\tcase 3: {\n            cell.textLabel.text = @\"Photo selections\";\n            cell.detailTextLabel.text = @\"selection enabled\";\n            break;\n        }\n\t\tcase 4: {\n            cell.textLabel.text = @\"Photo selection grid\";\n            cell.detailTextLabel.text = @\"selection enabled, start at grid\";\n            break;\n        }\n\t\tcase 5: {\n            cell.textLabel.text = @\"Web photos\";\n            cell.detailTextLabel.text = @\"photos from web\";\n            break;\n        }\n        case 6: {\n            cell.textLabel.text = @\"Web photo grid\";\n            cell.detailTextLabel.text = @\"showing grid first\";\n            break;\n        }\n        case 7: {\n            cell.textLabel.text = @\"Single video\";\n            cell.detailTextLabel.text = @\"with auto-play\";\n            break;\n        }\n        case 8: {\n            cell.textLabel.text = @\"Web videos\";\n            cell.detailTextLabel.text = @\"showing grid first\";\n            break;\n        }\n\t\tcase 9: {\n            cell.textLabel.text = @\"Library photos and videos\";\n            cell.detailTextLabel.text = @\"media from device library\";\n            break;\n        }\n\t\tdefault: break;\n\t}\n    return cell;\n\t\n}\n\n#pragma mark -\n#pragma mark Table view delegate\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {\n\t\n\t// Browser\n\tNSMutableArray *photos = [[NSMutableArray alloc] init];\n\tNSMutableArray *thumbs = [[NSMutableArray alloc] init];\n    MWPhoto *photo, *thumb;\n    BOOL displayActionButton = YES;\n    BOOL displaySelectionButtons = NO;\n    BOOL displayNavArrows = NO;\n    BOOL enableGrid = YES;\n    BOOL startOnGrid = NO;\n    BOOL autoPlayOnAppear = NO;\n\tswitch (indexPath.row) {\n\t\tcase 0:\n            // Photos\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo2\" ofType:@\"jpg\"]]];\n            photo.caption = @\"The London Eye is a giant Ferris wheel situated on the banks of the River Thames, in London, England.\";\n\t\t\t[photos addObject:photo];\n            // Options\n            enableGrid = NO;\n\t\t\tbreak;\n\t\tcase 1: {\n            // Local Photos and Videos\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo5\" ofType:@\"jpg\"]]];\n            photo.caption = @\"Fireworks\";\n\t\t\t[photos addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo2\" ofType:@\"jpg\"]]];\n            photo.caption = @\"The London Eye is a giant Ferris wheel situated on the banks of the River Thames, in London, England.\";\n\t\t\t[photos addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo3\" ofType:@\"jpg\"]]];\n            photo.caption = @\"York Floods\";\n            [photos addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"video_thumb\" ofType:@\"jpg\"]]];\n            photo.videoURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"video\" ofType:@\"mp4\"]];\n            photo.caption = @\"Big Buck Bunny\";\n            [photos addObject:photo];\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo4\" ofType:@\"jpg\"]]];\n            photo.caption = @\"Campervan\";\n\t\t\t[photos addObject:photo];\n            // Options\n            enableGrid = NO;\n\t\t\tbreak;\n        }\n\t\tcase 2: {\n            // Photos\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo5\" ofType:@\"jpg\"]]];\n            photo.caption = @\"White Tower\";\n\t\t\t[photos addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo2\" ofType:@\"jpg\"]]];\n            photo.caption = @\"The London Eye is a giant Ferris wheel situated on the banks of the River Thames, in London, England.\";\n\t\t\t[photos addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo3\" ofType:@\"jpg\"]]];\n            photo.caption = @\"York Floods\";\n\t\t\t[photos addObject:photo];\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo4\" ofType:@\"jpg\"]]];\n            photo.caption = @\"Campervan\";\n\t\t\t[photos addObject:photo];\n            // Thumbs\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo5t\" ofType:@\"jpg\"]]];\n\t\t\t[thumbs addObject:photo];\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo2t\" ofType:@\"jpg\"]]];\n\t\t\t[thumbs addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo3t\" ofType:@\"jpg\"]]];\n\t\t\t[thumbs addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo4t\" ofType:@\"jpg\"]]];\n\t\t\t[thumbs addObject:photo];\n            // Options\n            startOnGrid = YES;\n            displayNavArrows = YES;\n\t\t\tbreak;\n        }\n\t\tcase 3:\n\t\tcase 4: {\n            // Photos\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo4\" ofType:@\"jpg\"]]];\n\t\t\t[photos addObject:photo];\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo1\" ofType:@\"jpg\"]]];\n\t\t\t[photos addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo2\" ofType:@\"jpg\"]]];\n\t\t\t[photos addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo3\" ofType:@\"jpg\"]]];\n\t\t\t[photos addObject:photo];\n            // Thumbs\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo4t\" ofType:@\"jpg\"]]];\n\t\t\t[thumbs addObject:photo];\n            photo = [MWPhoto photoWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@\"photo1t\" ofType:@\"jpg\"]]];\n\t\t\t[thumbs addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo2t\" ofType:@\"jpg\"]]];\n\t\t\t[thumbs addObject:photo];\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo3t\" ofType:@\"jpg\"]]];\n\t\t\t[thumbs addObject:photo];\n            // Options\n            displayActionButton = NO;\n            displaySelectionButtons = YES;\n            startOnGrid = indexPath.row == 4;\n            enableGrid = NO;\n\t\t\tbreak;\n        }\n\t\tcase 5:\n            // Photos\n\t\t\t[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3567/3523321514_371d9ac42f_b.jpg\"]]];\n\t\t\t[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b_b.jpg\"]]];\n\t\t\t[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3364/3338617424_7ff836d55f_b.jpg\"]]];\n\t\t\t[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3590/3329114220_5fbc5bc92b_b.jpg\"]]];\n\t\t\t[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2449/4052876281_6e068ac860_b.jpg\"]]];\n            // Thumbs\n\t\t\t[thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3567/3523321514_371d9ac42f_q.jpg\"]]];\n\t\t\t[thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b_q.jpg\"]]];\n\t\t\t[thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3364/3338617424_7ff836d55f_q.jpg\"]]];\n\t\t\t[thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3590/3329114220_5fbc5bc92b_q.jpg\"]]];\n\t\t\t[thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2449/4052876281_6e068ac860_q.jpg\"]]];\n            // Options\n\t\t\tbreak;\n\t\tcase 6:\n            // Photos & thumbs\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3779/9522424255_28a5a9d99c_b.jpg\"]];\n            photo.caption = @\"Tube\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3779/9522424255_28a5a9d99c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3777/9522276829_fdea08ffe2_b.jpg\"]];\n            photo.caption = @\"Flat White at Elliot's\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3777/9522276829_fdea08ffe2_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm9.static.flickr.com/8379/8530199945_47b386320f_b.jpg\"]];\n            photo.caption = @\"Woburn Abbey\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm9.static.flickr.com/8379/8530199945_47b386320f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm9.static.flickr.com/8364/8268120482_332d61a89e_b.jpg\"]];\n            photo.caption = @\"Frosty walk\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm9.static.flickr.com/8364/8268120482_332d61a89e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm8.static.flickr.com/7109/7604416018_f23733881b_b.jpg\"]];\n            photo.caption = @\"Jury's Inn\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm8.static.flickr.com/7109/7604416018_f23733881b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm7.static.flickr.com/6002/6020924733_b21874f14c_b.jpg\"]];\n            photo.caption = @\"Heavy Rain\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm7.static.flickr.com/6002/6020924733_b21874f14c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm5.static.flickr.com/4012/4501918517_5facf1a8c4_b.jpg\"]];\n            photo.caption = @\"iPad Application Sketch Template v1\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm5.static.flickr.com/4012/4501918517_5facf1a8c4_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2667/4072710001_f36316ddc7_b.jpg\"]];\n            photo.caption = @\"Grotto of the Madonna\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2667/4072710001_f36316ddc7_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2449/4052876281_6e068ac860_b.jpg\"]];\n            photo.caption = @\"Beautiful Eyes\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2449/4052876281_6e068ac860_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3528/4052875665_53e5b4dc61_b.jpg\"]];\n            photo.caption = @\"Cousin Portrait\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3528/4052875665_53e5b4dc61_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3520/3846053408_6ecf775a3e_b.jpg\"]];\n            photo.caption = @\"iPhone Application Sketch Template v1.3\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3520/3846053408_6ecf775a3e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3624/3559209373_003152b4fd_b.jpg\"]];\n            photo.caption = @\"Door Knocker of Capitanía General\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3624/3559209373_003152b4fd_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3551/3523421738_30455b63e0_b.jpg\"]];\n            photo.caption = @\"Parroquia Sta Maria del Mar\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3551/3523421738_30455b63e0_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3224/3523355044_6551552f93_b.jpg\"]];\n            photo.caption = @\"Central Atrium in Casa Batlló\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3224/3523355044_6551552f93_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3567/3523321514_371d9ac42f_b.jpg\"]];\n            photo.caption = @\"Gaudí's Casa Batlló spiral ceiling\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3567/3523321514_371d9ac42f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b_b.jpg\"]];\n            photo.caption = @\"The Royal Albert Hall\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3338/3339119002_e0d8ec2f2e_b.jpg\"]];\n            photo.caption = @\"Midday & Midnight at the RAH\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3338/3339119002_e0d8ec2f2e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3364/3338617424_7ff836d55f_b.jpg\"]];\n            photo.caption = @\"Westminster Bridge\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3364/3338617424_7ff836d55f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3604/3328356821_5503b332aa_b.jpg\"]];\n            photo.caption = @\"Prime Meridian Sculpture\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3604/3328356821_5503b332aa_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3590/3329114220_5fbc5bc92b_b.jpg\"]];\n            photo.caption = @\"Docklands\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3590/3329114220_5fbc5bc92b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3602/3329107762_64a1454080_b.jpg\"]];\n            photo.caption = @\"Planetarium\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3602/3329107762_64a1454080_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3122/3143635211_80b29ab354_b.jpg\"]];\n            photo.caption = @\"Eurostar Perspective\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3122/3143635211_80b29ab354_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3091/3144451298_db6f6da3f9_b.jpg\"]];\n            photo.caption = @\"The Meeting Place\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3091/3144451298_db6f6da3f9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3110/3143623585_a12fa172fc_b.jpg\"]];\n            photo.caption = @\"Embrace\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3110/3143623585_a12fa172fc_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3107/3143613445_d9562105ea_b.jpg\"]];\n            photo.caption = @\"See to the Sky with the Station Saver\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3107/3143613445_d9562105ea_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3203/3144431930_db55ee05a2_b.jpg\"]];\n            photo.caption = @\"Sir John Betjeman\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3203/3144431930_db55ee05a2_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3102/3143588227_5d0d806b43_b.jpg\"]];\n            photo.caption = @\"St Pancras, London\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3102/3143588227_5d0d806b43_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3194/2987143528_2ee4a9e3cc_b.jpg\"]];\n            photo.caption = @\"Shelter from the Storm\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3194/2987143528_2ee4a9e3cc_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3219/2983541189_467dc559ed_b.jpg\"]];\n            photo.caption = @\"Alexander, Molly & George\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3219/2983541189_467dc559ed_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3277/2978593618_25a24b5348_b.jpg\"]];\n            photo.caption = @\"It's Eerie Underground\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3277/2978593618_25a24b5348_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3043/2977609977_241fe844be_b.jpg\"]];\n            photo.caption = @\"VW Camper\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3043/2977609977_241fe844be_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3257/2871822885_890c7d969d_b.jpg\"]];\n            photo.caption = @\"York Floods - September 2008\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3257/2871822885_890c7d969d_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3170/2860137277_ecefb94bb9_b.jpg\"]];\n            photo.caption = @\"Still Standing\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3170/2860137277_ecefb94bb9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3209/2799943935_81840a6dcc_b.jpg\"]];\n            photo.caption = @\"The Edge of the World\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3209/2799943935_81840a6dcc_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3269/2800788836_8ae7c988a9_b.jpg\"]];\n            photo.caption = @\"Beautiful Bark\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3269/2800788836_8ae7c988a9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3080/2800766694_5c87a0238c_b.jpg\"]];\n            photo.caption = @\"What's the name of this flower?\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3080/2800766694_5c87a0238c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3110/2799879647_f9ee50054e_b.jpg\"]];\n            photo.caption = @\"Flamborough Lighthouse\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3110/2799879647_f9ee50054e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3176/2575404273_6f2f135801_b.jpg\"]];\n            photo.caption = @\"Looking into London's Eye\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3176/2575404273_6f2f135801_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3147/2575402639_3e1e60a0e7_b.jpg\"]];\n            photo.caption = @\"Large Ben\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3147/2575402639_3e1e60a0e7_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3002/2576229168_276565ac08_b.jpg\"]];\n            photo.caption = @\"The Leaning Tower of London\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3002/2576229168_276565ac08_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3290/2530710337_90d3160da0_b.jpg\"]];\n            photo.caption = @\"Monkey Features\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3290/2530710337_90d3160da0_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2342/2499163392_0c8125cbf7_b.jpg\"]];\n            photo.caption = @\"Metal and Stone\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2342/2499163392_0c8125cbf7_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3241/2499162188_1097d7280f_b.jpg\"]];\n            photo.caption = @\"York Minster Interior\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3241/2499162188_1097d7280f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3162/2499161250_4100c907ee_b.jpg\"]];\n            photo.caption = @\"Colour Below a Heart\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3162/2499161250_4100c907ee_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2411/2386560315_c0b237ed0e_b.jpg\"]];\n            photo.caption = @\"Tremendous Tulip\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2411/2386560315_c0b237ed0e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2140/2375307082_ea04b45d8f_b.jpg\"]];\n            photo.caption = @\"Rose Reflection\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2140/2375307082_ea04b45d8f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3035/2375304830_e894d29141_b.jpg\"]];\n            photo.caption = @\"Cliffords Tower, York\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3035/2375304830_e894d29141_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3197/2367543868_af828a6543_b.jpg\"]];\n            photo.caption = @\"Cog & Chain\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3197/2367543868_af828a6543_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2286/2367542014_6d8145711c_b.jpg\"]];\n            photo.caption = @\"Rocket\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2286/2367542014_6d8145711c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3217/2323979971_3a6209b41e_b.jpg\"]];\n            photo.caption = @\"Snowdrops\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3217/2323979971_3a6209b41e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3182/2324797228_dec69be7b4_b.jpg\"]];\n            photo.caption = @\"Castle Howard Fountain\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3182/2324797228_dec69be7b4_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2266/2323974229_e21e0e3fe1_b.jpg\"]];\n            photo.caption = @\"Castle Howard House Lines\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2266/2323974229_e21e0e3fe1_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3018/2323969673_e6d9cc74d7_b.jpg\"]];\n            photo.caption = @\"Castle Howard Wide\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3018/2323969673_e6d9cc74d7_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3103/2323967485_694a897d5f_b.jpg\"]];\n            photo.caption = @\"Castle Howard House\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3103/2323967485_694a897d5f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3086/2324784818_8cd6123633_b.jpg\"]];\n            photo.caption = @\"Castle Howard Fountain\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3086/2324784818_8cd6123633_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2318/2324783136_56bed1f7ab_b.jpg\"]];\n            photo.caption = @\"Castle Howard House Back\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2318/2324783136_56bed1f7ab_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2228/2323959487_113c1c26fe_b.jpg\"]];\n            photo.caption = @\"Castle Howard House Side\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2228/2323959487_113c1c26fe_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3058/2324776658_da476bbb32_b.jpg\"]];\n            photo.caption = @\"Castle Howard\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3058/2324776658_da476bbb32_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2359/2323944883_a277e1becf_b.jpg\"]];\n            photo.caption = @\"Peacock\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2359/2323944883_a277e1becf_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2172/2323940209_ae2d69fb51_b.jpg\"]];\n            photo.caption = @\"Castle Howard Fountain\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2172/2323940209_ae2d69fb51_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2143/2268578601_464af2fabc_b.jpg\"]];\n            photo.caption = @\"Outlook\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2143/2268578601_464af2fabc_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2165/2268575867_d3c1bc5b65_b.jpg\"]];\n            photo.caption = @\"Stones & Sand\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2165/2268575867_d3c1bc5b65_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2149/2269364904_bc4a63f3e0_b.jpg\"]];\n            photo.caption = @\"Pebbles and Stones\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2149/2269364904_bc4a63f3e0_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2176/2268569547_99197322f9_b.jpg\"]];\n            photo.caption = @\"Fisherman\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2176/2268569547_99197322f9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2095/2268567981_ac142a0409_b.jpg\"]];\n            photo.caption = @\"Walking on Water\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2095/2268567981_ac142a0409_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2074/2268528659_e7f1d60e8f_b.jpg\"]];\n            photo.caption = @\"Viking Boat York\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2074/2268528659_e7f1d60e8f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2326/2268524733_5f40d784d4_b.jpg\"]];\n            photo.caption = @\"Hot Air Balloon Colours\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2326/2268524733_5f40d784d4_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2022/2268522293_470659cdec_b.jpg\"]];\n            photo.caption = @\"Hot Air Balloon Lift Off\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2022/2268522293_470659cdec_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2420/2268520049_d33bb30b6f_b.jpg\"]];\n            photo.caption = @\"Hot Air Balloon Take Off\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2420/2268520049_d33bb30b6f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2403/2269308580_24e5e8cb1d_b.jpg\"]];\n            photo.caption = @\"Hot Air Balloon High\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2403/2269308580_24e5e8cb1d_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2040/2268515857_7708793db8_b.jpg\"]];\n            photo.caption = @\"Hot Air Balloon Blue Sky\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2040/2268515857_7708793db8_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2176/2137556633_ce7f55d97c_b.jpg\"]];\n            photo.caption = @\"Christmas Lights\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2176/2137556633_ce7f55d97c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2256/2138335766_532c98183b_b.jpg\"]];\n            photo.caption = @\"Christmas Dinner\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2256/2138335766_532c98183b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2309/2137552857_b3a866d66a_b.jpg\"]];\n            photo.caption = @\"Christmas Tree\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2309/2137552857_b3a866d66a_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2151/2137550333_30a80de9dd_b.jpg\"]];\n            photo.caption = @\"Christmas Gifts\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2151/2137550333_30a80de9dd_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2217/1800632013_f5b6f430ea_b.jpg\"]];\n            photo.caption = @\"Firework Flower\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2217/1800632013_f5b6f430ea_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2025/1800630921_05c119b257_b.jpg\"]];\n            photo.caption = @\"Fireworks 1\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2025/1800630921_05c119b257_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2283/1800622021_a69274fe8e_b.jpg\"]];\n            photo.caption = @\"Sunset\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2283/1800622021_a69274fe8e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2296/1800493695_05e8f99119_b.jpg\"]];\n            photo.caption = @\"Morning Fields\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm3.static.flickr.com/2296/1800493695_05e8f99119_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1318/1258684849_5423b2b0a7_b.jpg\"]];\n            photo.caption = @\"Garden Window\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1318/1258684849_5423b2b0a7_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1169/1214182813_92ef4b864e_b.jpg\"]];\n            photo.caption = @\"Storm Clouds\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1169/1214182813_92ef4b864e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1060/1214995776_c6ccc7b589_b.jpg\"]];\n            photo.caption = @\"South Light\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1060/1214995776_c6ccc7b589_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1271/1213967453_8f5927b62a_b.jpg\"]];\n            photo.caption = @\"Cala Gal Dana, Panoramic\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1271/1213967453_8f5927b62a_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1052/1214735762_1fa7af8cf9_b.jpg\"]];\n            photo.caption = @\"Coloured Glass\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1052/1214735762_1fa7af8cf9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1108/1214725784_392c7236cb_b.jpg\"]];\n            photo.caption = @\"Well\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1108/1214725784_392c7236cb_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1261/1214721656_3e50b51adb_b.jpg\"]];\n            photo.caption = @\"Ciutadella\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1261/1214721656_3e50b51adb_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1422/1213857765_dd59feadff_b.jpg\"]];\n            photo.caption = @\"Columbus\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1422/1213857765_dd59feadff_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1075/1214720084_9ec6163320_b.jpg\"]];\n            photo.caption = @\"Watch Tower\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1075/1214720084_9ec6163320_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1413/1213849449_689f6c5b34_b.jpg\"]];\n            photo.caption = @\"White Tower\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1413/1213849449_689f6c5b34_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1310/1213846529_9a1fc08f0f_b.jpg\"]];\n            photo.caption = @\"White & Blue\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1310/1213846529_9a1fc08f0f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1320/1213843939_6f5594ffca_b.jpg\"]];\n            photo.caption = @\"Jesus, Monte Toro\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1320/1213843939_6f5594ffca_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1290/1213774167_804edea2a8_b.jpg\"]];\n            photo.caption = @\"York Minster\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1290/1213774167_804edea2a8_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1340/1214632114_7587edf8dc_b.jpg\"]];\n            photo.caption = @\"York Minster\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1340/1214632114_7587edf8dc_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1126/1213763123_b2e0ad8954_b.jpg\"]];\n            photo.caption = @\"York Minster\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1126/1213763123_b2e0ad8954_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1157/1213707107_43444cf13b_b.jpg\"]];\n            photo.caption = @\"Water Plant\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1157/1213707107_43444cf13b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1033/1082797343_87d812258f_b.jpg\"]];\n            photo.caption = @\"Micklegate, York\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1033/1082797343_87d812258f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1106/1083643878_f9082c3f58_b.jpg\"]];\n            photo.caption = @\"Tea Rooms\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1106/1083643878_f9082c3f58_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1188/1082780169_3d189a56d5_b.jpg\"]];\n            photo.caption = @\"York Minster\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1188/1082780169_3d189a56d5_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1274/1083627286_9bb558047b_b.jpg\"]];\n            photo.caption = @\"Constantine\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1274/1083627286_9bb558047b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1276/1082759563_41eb4412d7_b.jpg\"]];\n            photo.caption = @\"York Minster\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1276/1082759563_41eb4412d7_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1326/1082740813_e6c9b5fc87_b.jpg\"]];\n            photo.caption = @\"I Do\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1326/1082740813_e6c9b5fc87_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1407/1083588060_c10e3abcb3_b.jpg\"]];\n            photo.caption = @\"Hanging Basket\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1407/1083588060_c10e3abcb3_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1268/1083499110_80bfba3a27_b.jpg\"]];\n            photo.caption = @\"Hover Fly\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1268/1083499110_80bfba3a27_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1022/1082562763_03ac6b462a_b.jpg\"]];\n            photo.caption = @\"Pylon\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1022/1082562763_03ac6b462a_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1154/1083348824_790abf6c45_b.jpg\"]];\n            photo.caption = @\"Drenched Cars\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1154/1083348824_790abf6c45_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1356/1082760752_204933b13c_b.jpg\"]];\n            photo.caption = @\"Wedding Cake\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1356/1082760752_204933b13c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1310/1081997284_f45d03e3e9_b.jpg\"]];\n            photo.caption = @\"Wedding Rings\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1310/1081997284_f45d03e3e9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1235/1080940411_1dbfd6e577_b.jpg\"]];\n            photo.caption = @\"Brides Mother\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1235/1080940411_1dbfd6e577_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1352/1041732121_d1a1dab44b_b.jpg\"]];\n            photo.caption = @\"Wedding Roses\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1352/1041732121_d1a1dab44b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1246/1041698487_fd91c19893_b.jpg\"]];\n            photo.caption = @\"Butterfly Bridesmaid\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1246/1041698487_fd91c19893_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1168/1042508712_877068e029_b.jpg\"]];\n            photo.caption = @\"Bridesmaid Stairs\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1168/1042508712_877068e029_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1406/1037917833_087badcaaf_b.jpg\"]];\n            photo.caption = @\"Red & White Night\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1406/1037917833_087badcaaf_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1202/1037911739_a2d684d0d3_b.jpg\"]];\n            photo.caption = @\"Red & White Night Portrait\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1202/1037911739_a2d684d0d3_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1336/1038760638_42b348543d_b.jpg\"]];\n            photo.caption = @\"Red & White Night Sign\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1336/1038760638_42b348543d_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1182/1038749330_6eeceea376_b.jpg\"]];\n            photo.caption = @\"White Whip Light\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1182/1038749330_6eeceea376_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1121/1038747138_ed4388600e_b.jpg\"]];\n            photo.caption = @\"Red Long Exp\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1121/1038747138_ed4388600e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1174/1037890363_5918979b27_b.jpg\"]];\n            photo.caption = @\"M6 Sign\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1174/1037890363_5918979b27_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1160/1037797119_e535914f06_b.jpg\"]];\n            photo.caption = @\"Sunlit Leaf\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1160/1037797119_e535914f06_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1037/1037789909_d320b9d759_b.jpg\"]];\n            photo.caption = @\"Water Covered Leaf\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1037/1037789909_d320b9d759_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1293/1037658807_048f125b28_b.jpg\"]];\n            photo.caption = @\"Transparent Light Leaf\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1293/1037658807_048f125b28_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1111/1038457510_2aa6edc766_b.jpg\"]];\n            photo.caption = @\"Winter Nettle\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1111/1038457510_2aa6edc766_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1418/1037593249_87a705a0e9_b.jpg\"]];\n            photo.caption = @\"Frost Edged Leaf\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1418/1037593249_87a705a0e9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1416/1038320230_14bb31307c_b.jpg\"]];\n            photo.caption = @\"Large Sunset\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1416/1038320230_14bb31307c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1382/1038307382_19d06a3c7f_b.jpg\"]];\n            photo.caption = @\"Band Stand at Night\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1382/1038307382_19d06a3c7f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1187/1037444897_9c6bb617bd_b.jpg\"]];\n            photo.caption = @\"Stafford Street at Night\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1187/1037444897_9c6bb617bd_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1235/1020112582_892713cc72_b.jpg\"]];\n            photo.caption = @\"Villa\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1235/1020112582_892713cc72_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1438/1019238601_78d489ab5d_b.jpg\"]];\n            photo.caption = @\"Offshore Silhouette 2\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1438/1019238601_78d489ab5d_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1234/1020080322_572763d9f1_b.jpg\"]];\n            photo.caption = @\"Perfect Circle\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1234/1020080322_572763d9f1_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1016/1019200909_574df6bf54_b.jpg\"]];\n            photo.caption = @\"VW Golf\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1016/1019200909_574df6bf54_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1114/1020056296_c4dc0d50b1_b.jpg\"]];\n            photo.caption = @\"Spanish Villa House\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1114/1020056296_c4dc0d50b1_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1197/1020049432_4db0f8efd5_b.jpg\"]];\n            photo.caption = @\"Bend in the Road\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1197/1020049432_4db0f8efd5_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1189/1020036286_f8cf41ac69_b.jpg\"]];\n            photo.caption = @\"DoF Blue Chair\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1189/1020036286_f8cf41ac69_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1267/1019167123_e55e1bc56f_b.jpg\"]];\n            photo.caption = @\"Villa\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1267/1019167123_e55e1bc56f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1116/1019157385_8faf3e3573_b.jpg\"]];\n            photo.caption = @\"Yellow Flower\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1116/1019157385_8faf3e3573_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1191/1019151951_774b7b5402_b.jpg\"]];\n            photo.caption = @\"Villa\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1191/1019151951_774b7b5402_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1363/1019139793_b55ce199d0_b.jpg\"]];\n            photo.caption = @\"Luxury Spa at La Manga Club\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1363/1019139793_b55ce199d0_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1038/1019127559_0d0a57733f_b.jpg\"]];\n            photo.caption = @\"Lonely Boat\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1038/1019127559_0d0a57733f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1329/1019973422_b575f4961c_b.jpg\"]];\n            photo.caption = @\"Garden Chair\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1329/1019973422_b575f4961c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1168/1019745098_545403ede6_b.jpg\"]];\n            photo.caption = @\"Rust for Sale!\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1168/1019745098_545403ede6_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1394/1019735146_8875d55079_b.jpg\"]];\n            photo.caption = @\"Safety\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1394/1019735146_8875d55079_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1223/1019727992_af62bf470d_b.jpg\"]];\n            photo.caption = @\"Monster VW\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1223/1019727992_af62bf470d_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1297/1019721148_796385dcb6_b.jpg\"]];\n            photo.caption = @\"Yeah it is!\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1297/1019721148_796385dcb6_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1093/1018853687_a162a984ca_b.jpg\"]];\n            photo.caption = @\"VDub Little Buggers Club\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1093/1018853687_a162a984ca_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1069/1018846077_9576590764_b.jpg\"]];\n            photo.caption = @\"Shiny Alloys\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1069/1018846077_9576590764_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1229/1018838599_3f581eb852_b.jpg\"]];\n            photo.caption = @\"VW Headlights\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1229/1018838599_3f581eb852_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1187/1018830961_a4f97ea5a7_b.jpg\"]];\n            photo.caption = @\"VW Vinyl\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1187/1018830961_a4f97ea5a7_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1224/1019677202_116cc992e5_b.jpg\"]];\n            photo.caption = @\"VW Dude\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1224/1019677202_116cc992e5_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1207/1019670340_a6268b294a_b.jpg\"]];\n            photo.caption = @\"Large VW Logo\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1207/1019670340_a6268b294a_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1275/1018793735_a4172e3675_b.jpg\"]];\n            photo.caption = @\"IMG_1781\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1275/1018793735_a4172e3675_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1129/1018777423_1238c3249a_b.jpg\"]];\n            photo.caption = @\"IMG_1770\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1129/1018777423_1238c3249a_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1144/1019556448_4cd8a965f5_b.jpg\"]];\n            photo.caption = @\"Piano DoF\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1144/1019556448_4cd8a965f5_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1373/1018689833_03ae27b7c9_b.jpg\"]];\n            photo.caption = @\"Festive Ice\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1373/1018689833_03ae27b7c9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1132/1019542722_3723ac58f2_b.jpg\"]];\n            photo.caption = @\"Festivities\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1132/1019542722_3723ac58f2_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1162/1019517888_7982bcd84f_b.jpg\"]];\n            photo.caption = @\"Christmas Lights\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1162/1019517888_7982bcd84f_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1081/1019239012_d174b5daf3_b.jpg\"]];\n            photo.caption = @\"Water Steps\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1081/1019239012_d174b5daf3_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1241/1019218632_10255f1d43_b.jpg\"]];\n            photo.caption = @\"Water Steps Frozen in Time\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1241/1019218632_10255f1d43_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1029/1018206545_6e8e0ec1e5_b.jpg\"]];\n            photo.caption = @\"Daffo your Dill\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1029/1018206545_6e8e0ec1e5_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1261/1018910192_48fe1f5b6b_b.jpg\"]];\n            photo.caption = @\"Cock\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1261/1018910192_48fe1f5b6b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1228/1017960551_1a3d1b0a9c_b.jpg\"]];\n            photo.caption = @\"Fountain CU\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1228/1017960551_1a3d1b0a9c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1077/1017926975_1c9e8953e3_b.jpg\"]];\n            photo.caption = @\"Chatsworth\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1077/1017926975_1c9e8953e3_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1213/1018743552_7d0c410416_b.jpg\"]];\n            photo.caption = @\"Gardins\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1213/1018743552_7d0c410416_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1342/1017867885_5e90984ce5_b.jpg\"]];\n            photo.caption = @\"Water Sun Steps\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1342/1017867885_5e90984ce5_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1047/1018622228_056b0dfcbf_b.jpg\"]];\n            photo.caption = @\"Daffodil CU\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1047/1018622228_056b0dfcbf_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1415/1018615064_937b34cca7_b.jpg\"]];\n            photo.caption = @\"Twin Daffodil\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1415/1018615064_937b34cca7_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1436/1017097897_73a265e346_b.jpg\"]];\n            photo.caption = @\"Bird Sculpture\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1436/1017097897_73a265e346_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1004/1017051687_e281a77270_b.jpg\"]];\n            photo.caption = @\"Flower with Water Drops\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1004/1017051687_e281a77270_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1150/1017031825_53ba6f6ab9_b.jpg\"]];\n            photo.caption = @\"Bats\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1150/1017031825_53ba6f6ab9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1381/1017008087_c0eb892b47_b.jpg\"]];\n            photo.caption = @\"Stream Slow\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1381/1017008087_c0eb892b47_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1067/1017708680_82a427f18e_b.jpg\"]];\n            photo.caption = @\"Dog Sculpture\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1067/1017708680_82a427f18e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1438/1016801251_4817ff3b67_b.jpg\"]];\n            photo.caption = @\"Beads of Water on Grass\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1438/1016801251_4817ff3b67_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1398/1017654416_d9e7ad4370_b.jpg\"]];\n            photo.caption = @\"Beads of Water on Grass CU\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1398/1017654416_d9e7ad4370_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1035/1011726328_79c46b6af3_b.jpg\"]];\n            photo.caption = @\"Global Fence\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1035/1011726328_79c46b6af3_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1129/1011721614_8a5de7701c_b.jpg\"]];\n            photo.caption = @\"Barb Wire Fence\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1129/1011721614_8a5de7701c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1152/1010860101_e9ac61fe2c_b.jpg\"]];\n            photo.caption = @\"Barb Wire\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1152/1010860101_e9ac61fe2c_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1276/1011685542_9e5bc95aaf_b.jpg\"]];\n            photo.caption = @\"Church Light\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1276/1011685542_9e5bc95aaf_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1008/1011667622_94607012d3_b.jpg\"]];\n            photo.caption = @\"My Car in Snow\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1008/1011667622_94607012d3_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1408/1011656768_62713e265a_b.jpg\"]];\n            photo.caption = @\"Frost\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1408/1011656768_62713e265a_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1351/1011575570_433c62399d_b.jpg\"]];\n            photo.caption = @\"Memorial\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1351/1011575570_433c62399d_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1284/1011559728_ad59fa81ce_b.jpg\"]];\n            photo.caption = @\"Cracked Cloud Sun\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1284/1011559728_ad59fa81ce_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1045/1010555983_6cca0484e9_b.jpg\"]];\n            photo.caption = @\"Frosted Grass CU\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1045/1010555983_6cca0484e9_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1300/1010519417_00b75cc013_b.jpg\"]];\n            photo.caption = @\"Water Leaves\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1300/1010519417_00b75cc013_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1227/1010469785_4111f8b6ae_b.jpg\"]];\n            photo.caption = @\"Sunset Tree\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1227/1010469785_4111f8b6ae_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1099/1011324558_c8f4802d4b_b.jpg\"]];\n            photo.caption = @\"Sunset\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1099/1011324558_c8f4802d4b_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1224/1011283712_5750c5ba8e_b.jpg\"]];\n            photo.caption = @\"Mannequin Half Light\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1224/1011283712_5750c5ba8e_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1384/1010423817_56b81c6f24_b.jpg\"]];\n            photo.caption = @\"Mannequin Side Light\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1384/1010423817_56b81c6f24_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1429/1011276778_e97457682a_b.jpg\"]];\n            photo.caption = @\"Mannequin\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1429/1011276778_e97457682a_q.jpg\"]]];\n            photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1235/1010416375_fe91e5ce22_b.jpg\"]];\n            photo.caption = @\"Mannequin DoF\";\n            [photos addObject:photo];\n            [thumbs addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm2.static.flickr.com/1235/1010416375_fe91e5ce22_q.jpg\"]]];\n            // Options\n            startOnGrid = YES;\n\t\t\tbreak;\n        case 7: {\n            \n            // Single video\n            photo = [MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"video_thumb\" ofType:@\"jpg\"]]];\n            photo.videoURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"video\" ofType:@\"mp4\"]];\n            [photos addObject:photo];\n            enableGrid = NO;\n            autoPlayOnAppear = YES;\n            break;\n            \n        }\n\t\tcase 8: {\n            \n            // Videos\n            \n            photo = [MWPhoto photoWithURL:[[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/e15/11192696_824079697688618_1761661_n.jpg\"]];\n            photo.videoURL = [[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xpa1/t50.2886-16/11200303_1440130956287424_1714699187_n.mp4\"];\n            [photos addObject:photo];\n            thumb = [MWPhoto photoWithURL:[[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/s150x150/e15/11192696_824079697688618_1761661_n.jpg\"]];\n            thumb.isVideo = YES;\n            [thumbs addObject:thumb];\n            \n            // Test video with no poster frame\n//            photo = [MWPhoto videoWithURL:[[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xfa1/t50.2886-16/11237510_945154435524423_2137519922_n.mp4\"]];\n//            [photos addObject:photo];\n//            thumb = [MWPhoto new];\n//            thumb.isVideo = YES;\n//            [thumbs addObject:thumb];\n            \n            photo = [MWPhoto photoWithURL:[[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xaf1/t51.2885-15/e15/11240463_963135443745570_1519872157_n.jpg\"]];\n            photo.videoURL = [[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xfa1/t50.2886-16/11237510_945154435524423_2137519922_n.mp4\"];\n            [photos addObject:photo];\n            thumb = [MWPhoto photoWithURL:[[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xaf1/t51.2885-15/s150x150/e15/11240463_963135443745570_1519872157_n.jpg\"]];\n            thumb.isVideo = YES;\n            [thumbs addObject:thumb];\n            \n            photo = [MWPhoto photoWithURL:[[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xaf1/t51.2885-15/e15/11313531_1625089227727682_169403963_n.jpg\"]];\n            photo.videoURL = [[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xfa1/t50.2886-16/11336249_1783839318509644_116225363_n.mp4\"];\n            [photos addObject:photo];\n            thumb = [MWPhoto photoWithURL:[[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xaf1/t51.2885-15/s150x150/e15/11313531_1625089227727682_169403963_n.jpg\"]];\n            thumb.isVideo = YES;\n            [thumbs addObject:thumb];\n            \n            // Options\n            startOnGrid = YES;\n            break;\n        }\n\t\tcase 9: {\n            @synchronized(_assets) {\n                NSMutableArray *copy = [_assets copy];\n                if (NSClassFromString(@\"PHAsset\")) {\n                    // Photos library\n                    UIScreen *screen = [UIScreen mainScreen];\n                    CGFloat scale = screen.scale;\n                    // Sizing is very rough... more thought required in a real implementation\n                    CGFloat imageSize = MAX(screen.bounds.size.width, screen.bounds.size.height) * 1.5;\n                    CGSize imageTargetSize = CGSizeMake(imageSize * scale, imageSize * scale);\n                    CGSize thumbTargetSize = CGSizeMake(imageSize / 3.0 * scale, imageSize / 3.0 * scale);\n                    for (PHAsset *asset in copy) {\n                        [photos addObject:[MWPhoto photoWithAsset:asset targetSize:imageTargetSize]];\n                        [thumbs addObject:[MWPhoto photoWithAsset:asset targetSize:thumbTargetSize]];\n                    }\n                } else {\n                    // Assets library\n                    for (ALAsset *asset in copy) {\n                        MWPhoto *photo = [MWPhoto photoWithURL:asset.defaultRepresentation.url];\n                        [photos addObject:photo];\n                        MWPhoto *thumb = [MWPhoto photoWithImage:[UIImage imageWithCGImage:asset.thumbnail]];\n                        [thumbs addObject:thumb];\n                        if ([asset valueForProperty:ALAssetPropertyType] == ALAssetTypeVideo) {\n                            photo.videoURL = asset.defaultRepresentation.url;\n                            thumb.isVideo = true;\n                        }\n                    }\n                }\n            }\n\t\t\tbreak;\n        }\n\t\tdefault: break;\n\t}\n    self.photos = photos;\n    self.thumbs = thumbs;\n\t\n\t// Create browser\n\tMWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];\n    browser.displayActionButton = displayActionButton;\n    browser.displayNavArrows = displayNavArrows;\n    browser.displaySelectionButtons = displaySelectionButtons;\n    browser.alwaysShowControls = displaySelectionButtons;\n    browser.zoomPhotosToFill = YES;\n    browser.enableGrid = enableGrid;\n    browser.startOnGrid = startOnGrid;\n    browser.enableSwipeToDismiss = NO;\n    browser.autoPlayOnAppear = autoPlayOnAppear;\n    [browser setCurrentPhotoIndex:0];\n    \n    // Test custom selection images\n//    browser.customImageSelectedIconName = @\"ImageSelected.png\";\n//    browser.customImageSelectedSmallIconName = @\"ImageSelectedSmall.png\";\n    \n    // Reset selections\n    if (displaySelectionButtons) {\n        _selections = [NSMutableArray new];\n        for (int i = 0; i < photos.count; i++) {\n            [_selections addObject:[NSNumber numberWithBool:NO]];\n        }\n    }\n    \n    // Show\n    if (_segmentedControl.selectedSegmentIndex == 0) {\n        // Push\n        [self.navigationController pushViewController:browser animated:YES];\n    } else {\n        // Modal\n        UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:browser];\n        nc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;\n        [self presentViewController:nc animated:YES completion:nil];\n    }\n    \n    // Release\n\t\n\t// Deselect\n\t[self.tableView deselectRowAtIndexPath:indexPath animated:YES];\n    \n    // Test reloading of data after delay\n    double delayInSeconds = 3;\n    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));\n    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){\n    \n//        // Test removing an object\n//        [_photos removeLastObject];\n//        [browser reloadData];\n//    \n//        // Test all new\n//        [_photos removeAllObjects];\n//        [_photos addObject:[MWPhoto photoWithFilePath:[[NSBundle mainBundle] pathForResource:@\"photo3\" ofType:@\"jpg\"]]];\n//        [browser reloadData];\n//    \n//        // Test changing photo index\n//        [browser setCurrentPhotoIndex:9];\n    \n//        // Test updating selections\n//        _selections = [NSMutableArray new];\n//        for (int i = 0; i < [self numberOfPhotosInPhotoBrowser:browser]; i++) {\n//            [_selections addObject:[NSNumber numberWithBool:YES]];\n//        }\n//        [browser reloadData];\n        \n    });\n\n}\n\n#pragma mark - MWPhotoBrowserDelegate\n\n- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser {\n    return _photos.count;\n}\n\n- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index {\n    if (index < _photos.count)\n        return [_photos objectAtIndex:index];\n    return nil;\n}\n\n- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index {\n    if (index < _thumbs.count)\n        return [_thumbs objectAtIndex:index];\n    return nil;\n}\n\n//- (MWCaptionView *)photoBrowser:(MWPhotoBrowser *)photoBrowser captionViewForPhotoAtIndex:(NSUInteger)index {\n//    MWPhoto *photo = [self.photos objectAtIndex:index];\n//    MWCaptionView *captionView = [[MWCaptionView alloc] initWithPhoto:photo];\n//    return [captionView autorelease];\n//}\n\n//- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser actionButtonPressedForPhotoAtIndex:(NSUInteger)index {\n//    NSLog(@\"ACTION!\");\n//}\n\n- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser didDisplayPhotoAtIndex:(NSUInteger)index {\n    NSLog(@\"Did start viewing photo at index %lu\", (unsigned long)index);\n}\n\n- (BOOL)photoBrowser:(MWPhotoBrowser *)photoBrowser isPhotoSelectedAtIndex:(NSUInteger)index {\n    return [[_selections objectAtIndex:index] boolValue];\n}\n\n//- (NSString *)photoBrowser:(MWPhotoBrowser *)photoBrowser titleForPhotoAtIndex:(NSUInteger)index {\n//    return [NSString stringWithFormat:@\"Photo %lu\", (unsigned long)index+1];\n//}\n\n- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index selectedChanged:(BOOL)selected {\n    [_selections replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:selected]];\n    NSLog(@\"Photo at index %lu selected %@\", (unsigned long)index, selected ? @\"YES\" : @\"NO\");\n}\n\n- (void)photoBrowserDidFinishModalPresentation:(MWPhotoBrowser *)photoBrowser {\n    // If we subscribe to this method we must dismiss the view controller ourselves\n    NSLog(@\"Did finish modal presentation\");\n    [self dismissViewControllerAnimated:YES completion:nil];\n}\n\n#pragma mark - Load Assets\n\n- (void)loadAssets {\n    if (NSClassFromString(@\"PHAsset\")) {\n        \n        // Check library permissions\n        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];\n        if (status == PHAuthorizationStatusNotDetermined) {\n            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {\n                if (status == PHAuthorizationStatusAuthorized) {\n                    [self performLoadAssets];\n                }\n            }];\n        } else if (status == PHAuthorizationStatusAuthorized) {\n            [self performLoadAssets];\n        }\n        \n    } else {\n        \n        // Assets library\n        [self performLoadAssets];\n        \n    }\n}\n\n- (void)performLoadAssets {\n    \n    // Initialise\n    _assets = [NSMutableArray new];\n    \n    // Load\n    if (NSClassFromString(@\"PHAsset\")) {\n        \n        // Photos library iOS >= 8\n        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n            PHFetchOptions *options = [PHFetchOptions new];\n            options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@\"creationDate\" ascending:NO]];\n            PHFetchResult *fetchResults = [PHAsset fetchAssetsWithOptions:options];\n            [fetchResults enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n                [_assets addObject:obj];\n            }];\n            if (fetchResults.count > 0) {\n                [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];\n            }\n        });\n        \n    } else {\n        \n        // Assets Library iOS < 8\n        _ALAssetsLibrary = [[ALAssetsLibrary alloc] init];\n        \n        // Run in the background as it takes a while to get all assets from the library\n        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n            \n            NSMutableArray *assetGroups = [[NSMutableArray alloc] init];\n            NSMutableArray *assetURLDictionaries = [[NSMutableArray alloc] init];\n            \n            // Process assets\n            void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {\n                if (result != nil) {\n                    NSString *assetType = [result valueForProperty:ALAssetPropertyType];\n                    if ([assetType isEqualToString:ALAssetTypePhoto] || [assetType isEqualToString:ALAssetTypeVideo]) {\n                        [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];\n                        NSURL *url = result.defaultRepresentation.url;\n                        [_ALAssetsLibrary assetForURL:url\n                                          resultBlock:^(ALAsset *asset) {\n                                              if (asset) {\n                                                  @synchronized(_assets) {\n                                                      [_assets addObject:asset];\n                                                      if (_assets.count == 1) {\n                                                          // Added first asset so reload data\n                                                          [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];\n                                                      }\n                                                  }\n                                              }\n                                          }\n                                         failureBlock:^(NSError *error){\n                                             NSLog(@\"operation was not successfull!\");\n                                         }];\n                        \n                    }\n                }\n            };\n            \n            // Process groups\n            void (^ assetGroupEnumerator) (ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {\n                if (group != nil) {\n                    [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:assetEnumerator];\n                    [assetGroups addObject:group];\n                }\n            };\n            \n            // Process!\n            [_ALAssetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll\n                                            usingBlock:assetGroupEnumerator\n                                          failureBlock:^(NSError *error) {\n                                              NSLog(@\"There is an error\");\n                                          }];\n            \n        });\n        \n    }\n    \n}\n\n@end\n\n"
  },
  {
    "path": "Example/MWPhotoBrowser/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Example/MWPhotoBrowser/main.m",
    "content": "//\n//  main.m\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 07/04/2015.\n//  Copyright (c) 2015 Michael Waterfall. All rights reserved.\n//\n\n@import UIKit;\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[])\n{\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "Example/MWPhotoBrowser.xcodeproj/project.pbxproj",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>archiveVersion</key>\n\t<string>1</string>\n\t<key>classes</key>\n\t<dict/>\n\t<key>objectVersion</key>\n\t<string>46</string>\n\t<key>objects</key>\n\t<dict>\n\t\t<key>02040E41C46EB311FEA82F90</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array/>\n\t\t\t<key>inputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXShellScriptBuildPhase</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Embed Pods Frameworks</string>\n\t\t\t<key>outputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t\t<key>shellPath</key>\n\t\t\t<string>/bin/sh</string>\n\t\t\t<key>shellScript</key>\n\t\t\t<string>\"${SRCROOT}/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests-frameworks.sh\"\n</string>\n\t\t\t<key>showEnvVarsInLog</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>0EC5D4A41B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo1.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo1.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4A51B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo1t.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo1t.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4A61B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo2.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo2.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4A71B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo2t.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo2t.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4A81B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo3.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo3.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4A91B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo3t.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo3t.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4AA1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo4.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo4.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4AB1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo4t.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo4t.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4AC1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo5.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo5.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4AD1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo5t.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo5t.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4AE1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo6.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo6.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4AF1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo6t.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo6t.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4B01B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo7.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo7.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4B11B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo7t.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo7t.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4B21B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo8.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo8.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4B31B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>photo8t.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/photo8t.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4B41B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>file</string>\n\t\t\t<key>name</key>\n\t\t\t<string>video.mp4</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/video.mp4</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4B51B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4A41B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4B61B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4A51B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4B71B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4A61B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4B81B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4A71B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4B91B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4A81B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4BA1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4A91B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4BB1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4AA1B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4BC1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4AB1B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4BD1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4AC1B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4BE1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4AD1B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4BF1B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4AE1B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4C01B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4AF1B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4C11B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4B01B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4C21B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4B11B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4C31B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4B21B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4C41B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4B31B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4C51B4C46E50092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4B41B4C46E50092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0EC5D4C81B4C480E0092ACC1</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>image.jpeg</string>\n\t\t\t<key>name</key>\n\t\t\t<string>video_thumb.jpg</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser/Local Media/video_thumb.jpg</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t</dict>\n\t\t<key>0EC5D4C91B4C480E0092ACC1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0EC5D4C81B4C480E0092ACC1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>234A7CACC7671133BED1A091</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests.release.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests.release.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2BD41C6E3DA363EE7B81636E</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libPods-MWPhotoBrowser_Tests.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>3CC5A2FF9CBF1B37D7CB6F91</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array/>\n\t\t\t<key>inputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXShellScriptBuildPhase</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Copy Pods Resources</string>\n\t\t\t<key>outputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t\t<key>shellPath</key>\n\t\t\t<string>/bin/sh</string>\n\t\t\t<key>shellScript</key>\n\t\t\t<string>\"${SRCROOT}/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests-resources.sh\"\n</string>\n\t\t\t<key>showEnvVarsInLog</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>42FCB8D314CA85E2DF2C6434</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text</string>\n\t\t\t<key>name</key>\n\t\t\t<string>LICENSE</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../LICENSE</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4C18E1171B47E72800E3D63A</key>\n\t\t<dict>\n\t\t\t<key>fileEncoding</key>\n\t\t\t<string>4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>AppDelegate.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4C18E1181B47E72800E3D63A</key>\n\t\t<dict>\n\t\t\t<key>fileEncoding</key>\n\t\t\t<string>4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>AppDelegate.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4C18E1191B47E72800E3D63A</key>\n\t\t<dict>\n\t\t\t<key>fileEncoding</key>\n\t\t\t<string>4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Menu.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4C18E11A1B47E72800E3D63A</key>\n\t\t<dict>\n\t\t\t<key>fileEncoding</key>\n\t\t\t<string>4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Menu.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4C18E11B1B47E72800E3D63A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>4C18E1181B47E72800E3D63A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>4C18E11C1B47E72800E3D63A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>4C18E11A1B47E72800E3D63A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>4C18E1431B47F05900E3D63A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>0EC5D4C81B4C480E0092ACC1</string>\n\t\t\t\t<string>0EC5D4A41B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4A51B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4A61B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4A71B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4A81B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4A91B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4AA1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4AB1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4AC1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4AD1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4AE1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4AF1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B01B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B11B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B21B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B31B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B41B4C46E50092ACC1</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Local Media</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Photos</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4D7FBE8AC8249BBC4ADD838E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example.release.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example.release.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4E0A14EFB687307A0833E979</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser.podspec</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../MWPhotoBrowser.podspec</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>542176705B9DBC22BBCDF3E4</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>6E2C60685D353B336094E4E7</string>\n\t\t\t\t<string>4D7FBE8AC8249BBC4ADD838E</string>\n\t\t\t\t<string>CA6EC4575DA50FD5A6F8685B</string>\n\t\t\t\t<string>234A7CACC7671133BED1A091</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>5FDE805C8BB47D59B5BCB5FA</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array/>\n\t\t\t<key>inputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXShellScriptBuildPhase</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Copy Pods Resources</string>\n\t\t\t<key>outputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t\t<key>shellPath</key>\n\t\t\t<string>/bin/sh</string>\n\t\t\t<key>shellScript</key>\n\t\t\t<string>\"${SRCROOT}/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example-resources.sh\"\n</string>\n\t\t\t<key>showEnvVarsInLog</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>6003F581195388D10070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>4E0A14EFB687307A0833E979</string>\n\t\t\t\t<string>B5C85CB7FE89F584D392C9CF</string>\n\t\t\t\t<string>42FCB8D314CA85E2DF2C6434</string>\n\t\t\t\t<string>6003F593195388D20070C39A</string>\n\t\t\t\t<string>6003F5B5195388D20070C39A</string>\n\t\t\t\t<string>6003F58C195388D20070C39A</string>\n\t\t\t\t<string>6003F58B195388D20070C39A</string>\n\t\t\t\t<string>542176705B9DBC22BBCDF3E4</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F582195388D10070C39A</key>\n\t\t<dict>\n\t\t\t<key>attributes</key>\n\t\t\t<dict>\n\t\t\t\t<key>CLASSPREFIX</key>\n\t\t\t\t<string>MW</string>\n\t\t\t\t<key>LastUpgradeCheck</key>\n\t\t\t\t<string>0730</string>\n\t\t\t\t<key>ORGANIZATIONNAME</key>\n\t\t\t\t<string>Michael Waterfall</string>\n\t\t\t\t<key>TargetAttributes</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>6003F5AD195388D20070C39A</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>TestTargetID</key>\n\t\t\t\t\t\t<string>6003F589195388D20070C39A</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>6003F585195388D10070C39A</string>\n\t\t\t<key>compatibilityVersion</key>\n\t\t\t<string>Xcode 3.2</string>\n\t\t\t<key>developmentRegion</key>\n\t\t\t<string>English</string>\n\t\t\t<key>hasScannedForEncodings</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXProject</string>\n\t\t\t<key>knownRegions</key>\n\t\t\t<array>\n\t\t\t\t<string>en</string>\n\t\t\t\t<string>Base</string>\n\t\t\t</array>\n\t\t\t<key>mainGroup</key>\n\t\t\t<string>6003F581195388D10070C39A</string>\n\t\t\t<key>productRefGroup</key>\n\t\t\t<string>6003F58B195388D20070C39A</string>\n\t\t\t<key>projectDirPath</key>\n\t\t\t<string></string>\n\t\t\t<key>projectReferences</key>\n\t\t\t<array/>\n\t\t\t<key>projectRoot</key>\n\t\t\t<string></string>\n\t\t\t<key>targets</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F589195388D20070C39A</string>\n\t\t\t\t<string>6003F5AD195388D20070C39A</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<key>6003F585195388D10070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5BD195388D20070C39A</string>\n\t\t\t\t<string>6003F5BE195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>6003F586195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>4C18E11B1B47E72800E3D63A</string>\n\t\t\t\t<string>6003F59A195388D20070C39A</string>\n\t\t\t\t<string>4C18E11C1B47E72800E3D63A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>6003F587195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F590195388D20070C39A</string>\n\t\t\t\t<string>6003F592195388D20070C39A</string>\n\t\t\t\t<string>6003F58E195388D20070C39A</string>\n\t\t\t\t<string>BDF7E0625C136532C64B3038</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>6003F588195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>0EC5D4B51B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4C31B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B71B4C46E50092ACC1</string>\n\t\t\t\t<string>873B8AEB1B1F5CCA007FD442</string>\n\t\t\t\t<string>6003F5A9195388D20070C39A</string>\n\t\t\t\t<string>0EC5D4BD1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4BF1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4BE1B4C46E50092ACC1</string>\n\t\t\t\t<string>6003F598195388D20070C39A</string>\n\t\t\t\t<string>0EC5D4BB1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4C41B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4C51B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4C21B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4C01B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4C11B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B61B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4C91B4C480E0092ACC1</string>\n\t\t\t\t<string>0EC5D4BC1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4BA1B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B91B4C46E50092ACC1</string>\n\t\t\t\t<string>0EC5D4B81B4C46E50092ACC1</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXResourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>6003F589195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>6003F5BF195388D20070C39A</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>81B3EFFED33BEA59184A897C</string>\n\t\t\t\t<string>6003F586195388D20070C39A</string>\n\t\t\t\t<string>6003F587195388D20070C39A</string>\n\t\t\t\t<string>6003F588195388D20070C39A</string>\n\t\t\t\t<string>5FDE805C8BB47D59B5BCB5FA</string>\n\t\t\t\t<string>C7E06D0576A92A1C834427BE</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser_Example</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>6003F58A195388D20070C39A</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.application</string>\n\t\t</dict>\n\t\t<key>6003F58A195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>wrapper.application</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser_Example.app</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>6003F58B195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F58A195388D20070C39A</string>\n\t\t\t\t<string>6003F5AE195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Products</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F58C195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F58D195388D20070C39A</string>\n\t\t\t\t<string>6003F58F195388D20070C39A</string>\n\t\t\t\t<string>6003F591195388D20070C39A</string>\n\t\t\t\t<string>6003F5AF195388D20070C39A</string>\n\t\t\t\t<string>9C165E5EE0D40A4673EB6CB0</string>\n\t\t\t\t<string>2BD41C6E3DA363EE7B81636E</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Frameworks</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F58D195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Foundation.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>System/Library/Frameworks/Foundation.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SDKROOT</string>\n\t\t</dict>\n\t\t<key>6003F58E195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F58D195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F58F195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>CoreGraphics.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>System/Library/Frameworks/CoreGraphics.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SDKROOT</string>\n\t\t</dict>\n\t\t<key>6003F590195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F58F195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F591195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIKit.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>System/Library/Frameworks/UIKit.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SDKROOT</string>\n\t\t</dict>\n\t\t<key>6003F592195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F591195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F593195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>4C18E1171B47E72800E3D63A</string>\n\t\t\t\t<string>4C18E1181B47E72800E3D63A</string>\n\t\t\t\t<string>4C18E1191B47E72800E3D63A</string>\n\t\t\t\t<string>4C18E11A1B47E72800E3D63A</string>\n\t\t\t\t<string>873B8AEA1B1F5CCA007FD442</string>\n\t\t\t\t<string>6003F5A8195388D20070C39A</string>\n\t\t\t\t<string>4C18E1431B47F05900E3D63A</string>\n\t\t\t\t<string>6003F594195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Example</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F594195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F595195388D20070C39A</string>\n\t\t\t\t<string>6003F596195388D20070C39A</string>\n\t\t\t\t<string>6003F599195388D20070C39A</string>\n\t\t\t\t<string>6003F59B195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Supporting Files</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F595195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.plist.xml</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser-Info.plist</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F596195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F597195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXVariantGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>InfoPlist.strings</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F597195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.plist.strings</string>\n\t\t\t<key>name</key>\n\t\t\t<string>en</string>\n\t\t\t<key>path</key>\n\t\t\t<string>en.lproj/InfoPlist.strings</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F598195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F596195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F599195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>main.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F59A195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F599195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F59B195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser-Prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F5A8195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>folder.assetcatalog</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Images.xcassets</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F5A9195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F5A8195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F5AA195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5BC195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>6003F5AB195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5B0195388D20070C39A</string>\n\t\t\t\t<string>6003F5B2195388D20070C39A</string>\n\t\t\t\t<string>6003F5B1195388D20070C39A</string>\n\t\t\t\t<string>BBD9ABBBC6D859245030E9BA</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>6003F5AC195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5BA195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXResourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>6003F5AD195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>6003F5C2195388D20070C39A</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>F7D70421FEADB9922E5F26C7</string>\n\t\t\t\t<string>6003F5AA195388D20070C39A</string>\n\t\t\t\t<string>6003F5AB195388D20070C39A</string>\n\t\t\t\t<string>6003F5AC195388D20070C39A</string>\n\t\t\t\t<string>3CC5A2FF9CBF1B37D7CB6F91</string>\n\t\t\t\t<string>02040E41C46EB311FEA82F90</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5B4195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser_Tests</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>MWPhotoBrowserTests</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>6003F5AE195388D20070C39A</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.bundle.unit-test</string>\n\t\t</dict>\n\t\t<key>6003F5AE195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>wrapper.cfbundle</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser_Tests.xctest</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>6003F5AF195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>XCTest.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Library/Frameworks/XCTest.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>DEVELOPER_DIR</string>\n\t\t</dict>\n\t\t<key>6003F5B0195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F5AF195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F5B1195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F58D195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F5B2195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F591195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F5B3195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>6003F582195388D10070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>6003F589195388D20070C39A</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t</dict>\n\t\t<key>6003F5B4195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>target</key>\n\t\t\t<string>6003F589195388D20070C39A</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>6003F5B3195388D20070C39A</string>\n\t\t</dict>\n\t\t<key>6003F5B5195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5BB195388D20070C39A</string>\n\t\t\t\t<string>6003F5B6195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Tests</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F5B6195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5B7195388D20070C39A</string>\n\t\t\t\t<string>6003F5B8195388D20070C39A</string>\n\t\t\t\t<string>606FC2411953D9B200FFA9A0</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Supporting Files</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F5B7195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.plist.xml</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Tests-Info.plist</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F5B8195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5B9195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXVariantGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>InfoPlist.strings</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F5B9195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.plist.strings</string>\n\t\t\t<key>name</key>\n\t\t\t<string>en</string>\n\t\t\t<key>path</key>\n\t\t\t<string>en.lproj/InfoPlist.strings</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F5BA195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F5B8195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F5BB195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Tests.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6003F5BC195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6003F5BB195388D20070C39A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6003F5BD195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ALWAYS_SEARCH_USER_PATHS</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>CLANG_CXX_LANGUAGE_STANDARD</key>\n\t\t\t\t<string>gnu++0x</string>\n\t\t\t\t<key>CLANG_CXX_LIBRARY</key>\n\t\t\t\t<string>libc++</string>\n\t\t\t\t<key>CLANG_ENABLE_MODULES</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_ENABLE_OBJC_ARC</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_BOOL_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_CONSTANT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_DIRECT_OBJC_ISA_USAGE</key>\n\t\t\t\t<string>YES_ERROR</string>\n\t\t\t\t<key>CLANG_WARN_EMPTY_BODY</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_ENUM_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_INT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_OBJC_ROOT_CLASS</key>\n\t\t\t\t<string>YES_ERROR</string>\n\t\t\t\t<key>CLANG_WARN__DUPLICATE_METHOD_MATCH</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CODE_SIGN_IDENTITY[sdk=iphoneos*]</key>\n\t\t\t\t<string>iPhone Developer</string>\n\t\t\t\t<key>COPY_PHASE_STRIP</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>ENABLE_TESTABILITY</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_C_LANGUAGE_STANDARD</key>\n\t\t\t\t<string>gnu99</string>\n\t\t\t\t<key>GCC_DYNAMIC_NO_PIC</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>GCC_OPTIMIZATION_LEVEL</key>\n\t\t\t\t<string>0</string>\n\t\t\t\t<key>GCC_PREPROCESSOR_DEFINITIONS</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>DEBUG=1</string>\n\t\t\t\t\t<string>$(inherited)</string>\n\t\t\t\t</array>\n\t\t\t\t<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_ABOUT_RETURN_TYPE</key>\n\t\t\t\t<string>YES_ERROR</string>\n\t\t\t\t<key>GCC_WARN_UNDECLARED_SELECTOR</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNINITIALIZED_AUTOS</key>\n\t\t\t\t<string>YES_AGGRESSIVE</string>\n\t\t\t\t<key>GCC_WARN_UNUSED_FUNCTION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNUSED_VARIABLE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.1</string>\n\t\t\t\t<key>ONLY_ACTIVE_ARCH</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>TARGETED_DEVICE_FAMILY</key>\n\t\t\t\t<string>1,2</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>6003F5BE195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ALWAYS_SEARCH_USER_PATHS</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>CLANG_CXX_LANGUAGE_STANDARD</key>\n\t\t\t\t<string>gnu++0x</string>\n\t\t\t\t<key>CLANG_CXX_LIBRARY</key>\n\t\t\t\t<string>libc++</string>\n\t\t\t\t<key>CLANG_ENABLE_MODULES</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_ENABLE_OBJC_ARC</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_BOOL_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_CONSTANT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_DIRECT_OBJC_ISA_USAGE</key>\n\t\t\t\t<string>YES_ERROR</string>\n\t\t\t\t<key>CLANG_WARN_EMPTY_BODY</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_ENUM_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_INT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_OBJC_ROOT_CLASS</key>\n\t\t\t\t<string>YES_ERROR</string>\n\t\t\t\t<key>CLANG_WARN__DUPLICATE_METHOD_MATCH</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CODE_SIGN_IDENTITY[sdk=iphoneos*]</key>\n\t\t\t\t<string>iPhone Developer</string>\n\t\t\t\t<key>COPY_PHASE_STRIP</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>ENABLE_NS_ASSERTIONS</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>GCC_C_LANGUAGE_STANDARD</key>\n\t\t\t\t<string>gnu99</string>\n\t\t\t\t<key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_ABOUT_RETURN_TYPE</key>\n\t\t\t\t<string>YES_ERROR</string>\n\t\t\t\t<key>GCC_WARN_UNDECLARED_SELECTOR</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNINITIALIZED_AUTOS</key>\n\t\t\t\t<string>YES_AGGRESSIVE</string>\n\t\t\t\t<key>GCC_WARN_UNUSED_FUNCTION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNUSED_VARIABLE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.1</string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>TARGETED_DEVICE_FAMILY</key>\n\t\t\t\t<string>1,2</string>\n\t\t\t\t<key>VALIDATE_PRODUCT</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>6003F5BF195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5C0195388D20070C39A</string>\n\t\t\t\t<string>6003F5C1195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>6003F5C0195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>6E2C60685D353B336094E4E7</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ASSETCATALOG_COMPILER_APPICON_NAME</key>\n\t\t\t\t<string>AppIcon</string>\n\t\t\t\t<key>ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME</key>\n\t\t\t\t<string>LaunchImage</string>\n\t\t\t\t<key>GCC_PRECOMPILE_PREFIX_HEADER</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>MWPhotoBrowser/MWPhotoBrowser-Prefix.pch</string>\n\t\t\t\t<key>INFOPLIST_FILE</key>\n\t\t\t\t<string>MWPhotoBrowser/MWPhotoBrowser-Info.plist</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MODULE_NAME</key>\n\t\t\t\t<string>ExampleApp</string>\n\t\t\t\t<key>PRODUCT_BUNDLE_IDENTIFIER</key>\n\t\t\t\t<string>org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>WRAPPER_EXTENSION</key>\n\t\t\t\t<string>app</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>6003F5C1195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>4D7FBE8AC8249BBC4ADD838E</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ASSETCATALOG_COMPILER_APPICON_NAME</key>\n\t\t\t\t<string>AppIcon</string>\n\t\t\t\t<key>ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME</key>\n\t\t\t\t<string>LaunchImage</string>\n\t\t\t\t<key>GCC_PRECOMPILE_PREFIX_HEADER</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>MWPhotoBrowser/MWPhotoBrowser-Prefix.pch</string>\n\t\t\t\t<key>INFOPLIST_FILE</key>\n\t\t\t\t<string>MWPhotoBrowser/MWPhotoBrowser-Info.plist</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MODULE_NAME</key>\n\t\t\t\t<string>ExampleApp</string>\n\t\t\t\t<key>PRODUCT_BUNDLE_IDENTIFIER</key>\n\t\t\t\t<string>org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>WRAPPER_EXTENSION</key>\n\t\t\t\t<string>app</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>6003F5C2195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>6003F5C3195388D20070C39A</string>\n\t\t\t\t<string>6003F5C4195388D20070C39A</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>6003F5C3195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>CA6EC4575DA50FD5A6F8685B</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>BUNDLE_LOADER</key>\n\t\t\t\t<string>$(TEST_HOST)</string>\n\t\t\t\t<key>FRAMEWORK_SEARCH_PATHS</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>$(SDKROOT)/Developer/Library/Frameworks</string>\n\t\t\t\t\t<string>$(inherited)</string>\n\t\t\t\t\t<string>$(DEVELOPER_FRAMEWORKS_DIR)</string>\n\t\t\t\t</array>\n\t\t\t\t<key>GCC_PRECOMPILE_PREFIX_HEADER</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Tests/Tests-Prefix.pch</string>\n\t\t\t\t<key>GCC_PREPROCESSOR_DEFINITIONS</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>DEBUG=1</string>\n\t\t\t\t\t<string>$(inherited)</string>\n\t\t\t\t</array>\n\t\t\t\t<key>INFOPLIST_FILE</key>\n\t\t\t\t<string>Tests/Tests-Info.plist</string>\n\t\t\t\t<key>PRODUCT_BUNDLE_IDENTIFIER</key>\n\t\t\t\t<string>org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>TEST_HOST</key>\n\t\t\t\t<string>$(BUILT_PRODUCTS_DIR)/MWPhotoBrowser_Example.app/MWPhotoBrowser_Example</string>\n\t\t\t\t<key>WRAPPER_EXTENSION</key>\n\t\t\t\t<string>xctest</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>6003F5C4195388D20070C39A</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>234A7CACC7671133BED1A091</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>BUNDLE_LOADER</key>\n\t\t\t\t<string>$(TEST_HOST)</string>\n\t\t\t\t<key>FRAMEWORK_SEARCH_PATHS</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>$(SDKROOT)/Developer/Library/Frameworks</string>\n\t\t\t\t\t<string>$(inherited)</string>\n\t\t\t\t\t<string>$(DEVELOPER_FRAMEWORKS_DIR)</string>\n\t\t\t\t</array>\n\t\t\t\t<key>GCC_PRECOMPILE_PREFIX_HEADER</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Tests/Tests-Prefix.pch</string>\n\t\t\t\t<key>INFOPLIST_FILE</key>\n\t\t\t\t<string>Tests/Tests-Info.plist</string>\n\t\t\t\t<key>PRODUCT_BUNDLE_IDENTIFIER</key>\n\t\t\t\t<string>org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>TEST_HOST</key>\n\t\t\t\t<string>$(BUILT_PRODUCTS_DIR)/MWPhotoBrowser_Example.app/MWPhotoBrowser_Example</string>\n\t\t\t\t<key>WRAPPER_EXTENSION</key>\n\t\t\t\t<string>xctest</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>606FC2411953D9B200FFA9A0</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Tests-Prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6E2C60685D353B336094E4E7</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example.debug.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example.debug.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>81B3EFFED33BEA59184A897C</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array/>\n\t\t\t<key>inputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXShellScriptBuildPhase</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Check Pods Manifest.lock</string>\n\t\t\t<key>outputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t\t<key>shellPath</key>\n\t\t\t<string>/bin/sh</string>\n\t\t\t<key>shellScript</key>\n\t\t\t<string>diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" &gt; /dev/null\nif [[ $? != 0 ]] ; then\n    cat &lt;&lt; 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</string>\n\t\t\t<key>showEnvVarsInLog</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>873B8AEA1B1F5CCA007FD442</key>\n\t\t<dict>\n\t\t\t<key>fileEncoding</key>\n\t\t\t<string>4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>file.storyboard</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Main.storyboard</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>873B8AEB1B1F5CCA007FD442</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>873B8AEA1B1F5CCA007FD442</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>9C165E5EE0D40A4673EB6CB0</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libPods-MWPhotoBrowser_Example.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>B5C85CB7FE89F584D392C9CF</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>net.daringfireball.markdown</string>\n\t\t\t<key>name</key>\n\t\t\t<string>README.md</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../README.md</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>BBD9ABBBC6D859245030E9BA</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>2BD41C6E3DA363EE7B81636E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>BDF7E0625C136532C64B3038</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9C165E5EE0D40A4673EB6CB0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>C7E06D0576A92A1C834427BE</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array/>\n\t\t\t<key>inputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXShellScriptBuildPhase</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Embed Pods Frameworks</string>\n\t\t\t<key>outputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t\t<key>shellPath</key>\n\t\t\t<string>/bin/sh</string>\n\t\t\t<key>shellScript</key>\n\t\t\t<string>\"${SRCROOT}/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example-frameworks.sh\"\n</string>\n\t\t\t<key>showEnvVarsInLog</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>CA6EC4575DA50FD5A6F8685B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests.debug.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests.debug.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F7D70421FEADB9922E5F26C7</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array/>\n\t\t\t<key>inputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXShellScriptBuildPhase</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Check Pods Manifest.lock</string>\n\t\t\t<key>outputPaths</key>\n\t\t\t<array/>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t\t<key>shellPath</key>\n\t\t\t<string>/bin/sh</string>\n\t\t\t<key>shellScript</key>\n\t\t\t<string>diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" &gt; /dev/null\nif [[ $? != 0 ]] ; then\n    cat &lt;&lt; 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</string>\n\t\t\t<key>showEnvVarsInLog</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t</dict>\n\t<key>rootObject</key>\n\t<string>6003F582195388D10070C39A</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/MWPhotoBrowser.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:MWPhotoBrowser.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/MWPhotoBrowser.xcodeproj/xcshareddata/xcschemes/MWPhotoBrowser-Example.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6003F589195388D20070C39A\"\n               BuildableName = \"MWPhotoBrowser_Example.app\"\n               BlueprintName = \"MWPhotoBrowser_Example\"\n               ReferencedContainer = \"container:MWPhotoBrowser.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6003F5AD195388D20070C39A\"\n               BuildableName = \"MWPhotoBrowser_Tests.xctest\"\n               BlueprintName = \"MWPhotoBrowser_Tests\"\n               ReferencedContainer = \"container:MWPhotoBrowser.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6003F589195388D20070C39A\"\n            BuildableName = \"MWPhotoBrowser_Example.app\"\n            BlueprintName = \"MWPhotoBrowser_Example\"\n            ReferencedContainer = \"container:MWPhotoBrowser.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6003F589195388D20070C39A\"\n            BuildableName = \"MWPhotoBrowser_Example.app\"\n            BlueprintName = \"MWPhotoBrowser_Example\"\n            ReferencedContainer = \"container:MWPhotoBrowser.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6003F589195388D20070C39A\"\n            BuildableName = \"MWPhotoBrowser_Example.app\"\n            BlueprintName = \"MWPhotoBrowser_Example\"\n            ReferencedContainer = \"container:MWPhotoBrowser.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Example/MWPhotoBrowser.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:MWPhotoBrowser.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/Podfile",
    "content": "source 'https://github.com/CocoaPods/Specs.git'\n\ntarget 'MWPhotoBrowser_Example', :exclusive => true do\n  pod \"MWPhotoBrowser\", :path => \"../\"\nend\n\ntarget 'MWPhotoBrowser_Tests', :exclusive => true do\n  pod \"MWPhotoBrowser\", :path => \"../\"\n\n  pod 'Specta'\n  pod 'Expecta'\n  pod 'FBSnapshotTestCase'\n  pod 'Expecta+Snapshots'\nend\n"
  },
  {
    "path": "Example/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.h",
    "content": "//\n//  DACircularProgressView.h\n//  DACircularProgress\n//\n//  Created by Daniel Amitay on 2/6/12.\n//  Copyright (c) 2012 Daniel Amitay. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface DACircularProgressView : UIView\n\n@property(nonatomic, strong) UIColor *trackTintColor UI_APPEARANCE_SELECTOR;\n@property(nonatomic, strong) UIColor *progressTintColor UI_APPEARANCE_SELECTOR;\n@property(nonatomic, strong) UIColor *innerTintColor UI_APPEARANCE_SELECTOR;\n@property(nonatomic) NSInteger roundedCorners UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-(\n@property(nonatomic) CGFloat thicknessRatio UI_APPEARANCE_SELECTOR;\n@property(nonatomic) NSInteger clockwiseProgress UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-(\n@property(nonatomic) CGFloat progress;\n\n@property(nonatomic) CGFloat indeterminateDuration UI_APPEARANCE_SELECTOR;\n@property(nonatomic) NSInteger indeterminate UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-(\n\n- (void)setProgress:(CGFloat)progress animated:(BOOL)animated;\n- (void)setProgress:(CGFloat)progress animated:(BOOL)animated initialDelay:(CFTimeInterval)initialDelay;\n- (void)setProgress:(CGFloat)progress animated:(BOOL)animated initialDelay:(CFTimeInterval)initialDelay withDuration:(CFTimeInterval)duration;\n\n@end\n"
  },
  {
    "path": "Example/Pods/DACircularProgress/DACircularProgress/DACircularProgressView.m",
    "content": "//\n//  DACircularProgressView.m\n//  DACircularProgress\n//\n//  Created by Daniel Amitay on 2/6/12.\n//  Copyright (c) 2012 Daniel Amitay. All rights reserved.\n//\n\n#import \"DACircularProgressView.h\"\n\n#import <QuartzCore/QuartzCore.h>\n\n@interface DACircularProgressLayer : CALayer\n\n@property(nonatomic, strong) UIColor *trackTintColor;\n@property(nonatomic, strong) UIColor *progressTintColor;\n@property(nonatomic, strong) UIColor *innerTintColor;\n@property(nonatomic) NSInteger roundedCorners;\n@property(nonatomic) CGFloat thicknessRatio;\n@property(nonatomic) CGFloat progress;\n@property(nonatomic) NSInteger clockwiseProgress;\n\n@end\n\n@implementation DACircularProgressLayer\n\n@dynamic trackTintColor;\n@dynamic progressTintColor;\n@dynamic innerTintColor;\n@dynamic roundedCorners;\n@dynamic thicknessRatio;\n@dynamic progress;\n@dynamic clockwiseProgress;\n\n+ (BOOL)needsDisplayForKey:(NSString *)key\n{\n    if ([key isEqualToString:@\"progress\"]) {\n        return YES;\n    } else {\n        return [super needsDisplayForKey:key];\n    }\n}\n\n- (void)drawInContext:(CGContextRef)context\n{\n    CGRect rect = self.bounds;\n    CGPoint centerPoint = CGPointMake(rect.size.width / 2.0f, rect.size.height / 2.0f);\n    CGFloat radius = MIN(rect.size.height, rect.size.width) / 2.0f;\n    \n    BOOL clockwise = (self.clockwiseProgress != 0);\n    \n    CGFloat progress = MIN(self.progress, 1.0f - FLT_EPSILON);\n    CGFloat radians = 0;\n    if (clockwise) {\n        radians = (float)((progress * 2.0f * M_PI) - M_PI_2);\n    } else {\n        radians = (float)(3 * M_PI_2 - (progress * 2.0f * M_PI));\n    }\n    \n    CGContextSetFillColorWithColor(context, self.trackTintColor.CGColor);\n    CGMutablePathRef trackPath = CGPathCreateMutable();\n    CGPathMoveToPoint(trackPath, NULL, centerPoint.x, centerPoint.y);\n    CGPathAddArc(trackPath, NULL, centerPoint.x, centerPoint.y, radius, (float)(2.0f * M_PI), 0.0f, TRUE);\n    CGPathCloseSubpath(trackPath);\n    CGContextAddPath(context, trackPath);\n    CGContextFillPath(context);\n    CGPathRelease(trackPath);\n    \n    if (progress > 0.0f) {\n        CGContextSetFillColorWithColor(context, self.progressTintColor.CGColor);\n        CGMutablePathRef progressPath = CGPathCreateMutable();\n        CGPathMoveToPoint(progressPath, NULL, centerPoint.x, centerPoint.y);\n        CGPathAddArc(progressPath, NULL, centerPoint.x, centerPoint.y, radius, (float)(3.0f * M_PI_2), radians, !clockwise);\n        CGPathCloseSubpath(progressPath);\n        CGContextAddPath(context, progressPath);\n        CGContextFillPath(context);\n        CGPathRelease(progressPath);\n    }\n    \n    if (progress > 0.0f && self.roundedCorners) {\n        CGFloat pathWidth = radius * self.thicknessRatio;\n        CGFloat xOffset = radius * (1.0f + ((1.0f - (self.thicknessRatio / 2.0f)) * cosf(radians)));\n        CGFloat yOffset = radius * (1.0f + ((1.0f - (self.thicknessRatio / 2.0f)) * sinf(radians)));\n        CGPoint endPoint = CGPointMake(xOffset, yOffset);\n        \n        CGRect startEllipseRect = (CGRect) {\n            .origin.x = centerPoint.x - pathWidth / 2.0f,\n            .origin.y = 0.0f,\n            .size.width = pathWidth,\n            .size.height = pathWidth\n        };\n        CGContextAddEllipseInRect(context, startEllipseRect);\n        CGContextFillPath(context);\n        \n        CGRect endEllipseRect = (CGRect) {\n            .origin.x = endPoint.x - pathWidth / 2.0f,\n            .origin.y = endPoint.y - pathWidth / 2.0f,\n            .size.width = pathWidth,\n            .size.height = pathWidth\n        };\n        CGContextAddEllipseInRect(context, endEllipseRect);\n        CGContextFillPath(context);\n    }\n\n    CGContextSetBlendMode(context, kCGBlendModeClear);\n    CGFloat innerRadius = radius * (1.0f - self.thicknessRatio);\n    CGRect clearRect = (CGRect) {\n        .origin.x = centerPoint.x - innerRadius,\n        .origin.y = centerPoint.y - innerRadius,\n        .size.width = innerRadius * 2.0f,\n        .size.height = innerRadius * 2.0f\n    };\n    CGContextAddEllipseInRect(context, clearRect);\n    CGContextFillPath(context);\n\n    if (self.innerTintColor) {\n        CGContextSetBlendMode(context, kCGBlendModeNormal);\n        CGContextSetFillColorWithColor(context, [self.innerTintColor CGColor]);\n        CGContextAddEllipseInRect(context, clearRect);\n        CGContextFillPath(context);\n    }\n}\n\n@end\n\n@interface DACircularProgressView ()\n\n@end\n\n@implementation DACircularProgressView\n\n+ (void) initialize\n{\n    if (self == [DACircularProgressView class]) {\n        DACircularProgressView *circularProgressViewAppearance = [DACircularProgressView appearance];\n        [circularProgressViewAppearance setTrackTintColor:[[UIColor whiteColor] colorWithAlphaComponent:0.3f]];\n        [circularProgressViewAppearance setProgressTintColor:[UIColor whiteColor]];\n        [circularProgressViewAppearance setInnerTintColor:nil];\n        [circularProgressViewAppearance setBackgroundColor:[UIColor clearColor]];\n        [circularProgressViewAppearance setThicknessRatio:0.3f];\n        [circularProgressViewAppearance setRoundedCorners:NO];\n        [circularProgressViewAppearance setClockwiseProgress:YES];\n        \n        [circularProgressViewAppearance setIndeterminateDuration:2.0f];\n        [circularProgressViewAppearance setIndeterminate:NO];\n    }\n}\n\n+ (Class)layerClass\n{\n    return [DACircularProgressLayer class];\n}\n\n- (DACircularProgressLayer *)circularProgressLayer\n{\n    return (DACircularProgressLayer *)self.layer;\n}\n\n- (id)init\n{\n    return [super initWithFrame:CGRectMake(0.0f, 0.0f, 40.0f, 40.0f)];\n}\n\n- (void)didMoveToWindow\n{\n    CGFloat windowContentsScale = self.window.screen.scale;\n    self.circularProgressLayer.contentsScale = windowContentsScale;\n    [self.circularProgressLayer setNeedsDisplay];\n}\n\n\n#pragma mark - Progress\n\n- (CGFloat)progress\n{\n    return self.circularProgressLayer.progress;\n}\n\n- (void)setProgress:(CGFloat)progress\n{\n    [self setProgress:progress animated:NO];\n}\n\n- (void)setProgress:(CGFloat)progress animated:(BOOL)animated\n{\n    [self setProgress:progress animated:animated initialDelay:0.0];\n}\n\n- (void)setProgress:(CGFloat)progress\n           animated:(BOOL)animated\n       initialDelay:(CFTimeInterval)initialDelay\n{\n    CGFloat pinnedProgress = MIN(MAX(progress, 0.0f), 1.0f);\n    [self setProgress:progress\n             animated:animated\n         initialDelay:initialDelay\n         withDuration:fabs(self.progress - pinnedProgress)];\n}\n\n- (void)setProgress:(CGFloat)progress\n           animated:(BOOL)animated\n       initialDelay:(CFTimeInterval)initialDelay\n       withDuration:(CFTimeInterval)duration\n{\n    [self.layer removeAnimationForKey:@\"indeterminateAnimation\"];\n    [self.circularProgressLayer removeAnimationForKey:@\"progress\"];\n    \n    CGFloat pinnedProgress = MIN(MAX(progress, 0.0f), 1.0f);\n    if (animated) {\n        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@\"progress\"];\n        animation.duration = duration;\n        animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];\n        animation.fillMode = kCAFillModeForwards;\n        animation.fromValue = [NSNumber numberWithFloat:self.progress];\n        animation.toValue = [NSNumber numberWithFloat:pinnedProgress];\n        animation.beginTime = CACurrentMediaTime() + initialDelay;\n        animation.delegate = self;\n        [self.circularProgressLayer addAnimation:animation forKey:@\"progress\"];\n    } else {\n        [self.circularProgressLayer setNeedsDisplay];\n        self.circularProgressLayer.progress = pinnedProgress;\n    }\n}\n\n- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)flag\n{\n   NSNumber *pinnedProgressNumber = [animation valueForKey:@\"toValue\"];\n   self.circularProgressLayer.progress = [pinnedProgressNumber floatValue];\n}\n\n\n#pragma mark - UIAppearance methods\n\n- (UIColor *)trackTintColor\n{\n    return self.circularProgressLayer.trackTintColor;\n}\n\n- (void)setTrackTintColor:(UIColor *)trackTintColor\n{\n    self.circularProgressLayer.trackTintColor = trackTintColor;\n    [self.circularProgressLayer setNeedsDisplay];\n}\n\n- (UIColor *)progressTintColor\n{\n    return self.circularProgressLayer.progressTintColor;\n}\n\n- (void)setProgressTintColor:(UIColor *)progressTintColor\n{\n    self.circularProgressLayer.progressTintColor = progressTintColor;\n    [self.circularProgressLayer setNeedsDisplay];\n}\n\n- (UIColor *)innerTintColor\n{\n    return self.circularProgressLayer.innerTintColor;\n}\n\n- (void)setInnerTintColor:(UIColor *)innerTintColor\n{\n    self.circularProgressLayer.innerTintColor = innerTintColor;\n    [self.circularProgressLayer setNeedsDisplay];\n}\n\n- (NSInteger)roundedCorners\n{\n    return self.roundedCorners;\n}\n\n- (void)setRoundedCorners:(NSInteger)roundedCorners\n{\n    self.circularProgressLayer.roundedCorners = roundedCorners;\n    [self.circularProgressLayer setNeedsDisplay];\n}\n\n- (CGFloat)thicknessRatio\n{\n    return self.circularProgressLayer.thicknessRatio;\n}\n\n- (void)setThicknessRatio:(CGFloat)thicknessRatio\n{\n    self.circularProgressLayer.thicknessRatio = MIN(MAX(thicknessRatio, 0.f), 1.f);\n    [self.circularProgressLayer setNeedsDisplay];\n}\n\n- (NSInteger)indeterminate\n{\n    CAAnimation *spinAnimation = [self.layer animationForKey:@\"indeterminateAnimation\"];\n    return (spinAnimation == nil ? 0 : 1);\n}\n\n- (void)setIndeterminate:(NSInteger)indeterminate\n{\n    if (indeterminate) {\n        if (!self.indeterminate) {\n            CABasicAnimation *spinAnimation = [CABasicAnimation animationWithKeyPath:@\"transform.rotation\"];\n            spinAnimation.byValue = [NSNumber numberWithDouble:indeterminate > 0 ? 2.0f*M_PI : -2.0f*M_PI];\n            spinAnimation.duration = self.indeterminateDuration;\n            spinAnimation.repeatCount = HUGE_VALF;\n            [self.layer addAnimation:spinAnimation forKey:@\"indeterminateAnimation\"];\n        }\n    } else {\n        [self.layer removeAnimationForKey:@\"indeterminateAnimation\"];\n    }\n}\n\n- (NSInteger)clockwiseProgress\n{\n    return self.circularProgressLayer.clockwiseProgress;\n}\n\n- (void)setClockwiseProgress:(NSInteger)clockwiseProgres\n{\n    self.circularProgressLayer.clockwiseProgress = clockwiseProgres;\n    [self.circularProgressLayer setNeedsDisplay];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/DACircularProgress/DACircularProgress/DALabeledCircularProgressView.h",
    "content": "//\n//  DALabeledCircularProgressView.h\n//  DACircularProgressExample\n//\n//  Created by Josh Sklar on 4/8/14.\n//  Copyright (c) 2014 Shout Messenger. All rights reserved.\n//\n\n#import \"DACircularProgressView.h\"\n\n/**\n @class DALabeledCircularProgressView\n \n @brief Subclass of DACircularProgressView that adds a UILabel.\n */\n@interface DALabeledCircularProgressView : DACircularProgressView\n\n/**\n UILabel placed right on the DACircularProgressView.\n */\n@property (strong, nonatomic) UILabel *progressLabel;\n\n@end\n"
  },
  {
    "path": "Example/Pods/DACircularProgress/DACircularProgress/DALabeledCircularProgressView.m",
    "content": "//\n//  DALabeledCircularProgressView.m\n//  DACircularProgressExample\n//\n//  Created by Josh Sklar on 4/8/14.\n//  Copyright (c) 2014 Shout Messenger. All rights reserved.\n//\n\n#import \"DALabeledCircularProgressView.h\"\n\n@implementation DALabeledCircularProgressView\n\n- (id)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self initializeLabel];\n    }\n    return self;\n}\n\n- (id)initWithCoder:(NSCoder *)aDecoder\n{\n    self = [super initWithCoder:aDecoder];\n    if (self) {\n        [self initializeLabel];\n    }\n    return self;\n}\n\n\n#pragma mark - Internal methods\n\n/**\n Creates and initializes\n -[DALabeledCircularProgressView progressLabel].\n */\n- (void)initializeLabel\n{\n    self.progressLabel = [[UILabel alloc] initWithFrame:self.bounds];\n    self.progressLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;\n    self.progressLabel.textAlignment = NSTextAlignmentCenter;\n    self.progressLabel.backgroundColor = [UIColor clearColor];\n    [self addSubview:self.progressLabel];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/DACircularProgress/LICENSE.md",
    "content": "# License\n\n## MIT License\n\nCopyright (c) 2013 Daniel Amitay (http://danielamitay.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "Example/Pods/DACircularProgress/README.md",
    "content": "## DACircularProgress\n\n`DACircularProgress` is a `UIView` subclass with circular `UIProgressView` properties.\n\nIt was originally built to be an imitation of Facebook's photo progress indicator.\n\nView the included example project for a demonstration.\n\n![Screenshot](https://github.com/danielamitay/DACircularProgress/raw/master/screenshot.png)\n\n## Installation\n\nTo use `DACircularProgress`:\n\n- Copy over the `DACircularProgress` folder to your project folder.\n- Make sure that your project includes `<QuartzCore.framework>`.\n- `#import \"DACircularProgressView.h\"`\n\n### Example Code\n\n```objective-c\n\nself.progressView = [[DACircularProgressView alloc] initWithFrame:CGRectMake(140.0f, 30.0f, 40.0f, 40.0f)];\nself.progressView.roundedCorners = YES;\nself.progressView.trackTintColor = [UIColor clearColor];\n[self.view addSubview:self.progressView];\n```\n\n- You can also use Interface Builder by adding a `UIView` element and setting its class to `DACircularProgress`\n\n## Notes\n\n### Compatibility\n\niOS5.0+\n\n### Automatic Reference Counting (ARC) support\n\n`DACircularProgress` was made with ARC enabled by default.\n\n## Contact\n\n- [Personal website](http://danielamitay.com)\n- [GitHub](http://github.com/danielamitay)\n- [Twitter](http://twitter.com/danielamitay)\n- [LinkedIn](http://www.linkedin.com/in/danielamitay)\n- [Email](hello@danielamitay.com)\n\nIf you use/enjoy `DACircularProgress`, let me know!\n\n## Credits\n\n`DACircularProgress` is brought to you by [Daniel Amitay](http://www.amitay.us) and [contributors to the project](https://github.com/danielamitay/DACircularProgress/contributors). A special thanks to [Cédric Luthi](https://github.com/0xced) for a significant amount of changes. If you have feature suggestions or bug reports, feel free to help out by sending pull requests or by [creating new issues](https://github.com/danielamitay/DACircularProgress/issues/new).\n\n## License\n\n### MIT License\n\nCopyright (c) 2013 Daniel Amitay (http://danielamitay.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPBlockDefinedMatcher.h",
    "content": "//\n//  EXPRuntimeMatcher.h\n//  Expecta\n//\n//  Created by Luke Redpath on 26/03/2012.\n//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"EXPMatcher.h\"\n#import \"EXPDefines.h\"\n\n@interface EXPBlockDefinedMatcher : NSObject <EXPMatcher> {\n  EXPBoolBlock prerequisiteBlock;\n  EXPBoolBlock matchBlock;\n  EXPStringBlock failureMessageForToBlock;\n  EXPStringBlock failureMessageForNotToBlock;\n}\n\n@property(nonatomic, copy) EXPBoolBlock prerequisiteBlock;\n@property(nonatomic, copy) EXPBoolBlock matchBlock;\n@property(nonatomic, copy) EXPStringBlock failureMessageForToBlock;\n@property(nonatomic, copy) EXPStringBlock failureMessageForNotToBlock;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPBlockDefinedMatcher.m",
    "content": "//\n//  EXPRuntimeMatcher.m\n//  Expecta\n//\n//  Created by Luke Redpath on 26/03/2012.\n//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.\n//\n\n#import \"EXPBlockDefinedMatcher.h\"\n\n@implementation EXPBlockDefinedMatcher\n\n- (void)dealloc\n{\n    self.prerequisiteBlock = nil;\n    self.matchBlock = nil;\n    self.failureMessageForToBlock = nil;\n    self.failureMessageForNotToBlock = nil;\n    \n    [super dealloc];\n}\n\n@synthesize prerequisiteBlock;\n@synthesize matchBlock;\n@synthesize failureMessageForToBlock;\n@synthesize failureMessageForNotToBlock;\n\n- (BOOL)meetsPrerequesiteFor:(id)actual\n{\n  if (self.prerequisiteBlock) {\n    return self.prerequisiteBlock();\n  }\n  return YES;\n}\n\n- (BOOL)matches:(id)actual\n{\n  if (self.matchBlock) {\n    return self.matchBlock();\n  }\n  return YES;\n}\n\n- (NSString *)failureMessageForTo:(id)actual\n{\n  if (self.failureMessageForToBlock) {\n    return self.failureMessageForToBlock();\n  }\n  return nil;\n}\n\n- (NSString *)failureMessageForNotTo:(id)actual\n{\n  if (self.failureMessageForNotToBlock) {\n    return self.failureMessageForNotToBlock();\n  }\n  return nil;\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPDefines.h",
    "content": "//\n//  EXPDefines.h\n//  Expecta\n//\n//  Created by Luke Redpath on 26/03/2012.\n//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.\n//\n\n#ifndef Expecta_EXPDefines_h\n#define Expecta_EXPDefines_h\n\ntypedef void (^EXPBasicBlock)();\ntypedef id (^EXPIdBlock)();\ntypedef BOOL (^EXPBoolBlock)();\ntypedef NSString *(^EXPStringBlock)();\n\n#endif\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPDoubleTuple.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface EXPDoubleTuple : NSObject {\n    double *_values;\n    size_t _size;\n}\n\n@property (nonatomic, assign) double *values;\n@property (nonatomic, assign) size_t size;\n\n- (instancetype)initWithDoubleValues:(double *)values size:(size_t)size NS_DESIGNATED_INITIALIZER;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPDoubleTuple.m",
    "content": "#import \"EXPDoubleTuple.h\"\n\n@implementation EXPDoubleTuple\n\n@synthesize values = _values, size = _size;\n\n- (instancetype)initWithDoubleValues:(double *)values size:(size_t)size {\n    if ((self = [super init])) {\n        self.values = malloc(sizeof(double) * size);\n        memcpy(self.values, values, sizeof(double) * size);\n        self.size = size;\n    }\n    return self;\n}\n\n- (void)dealloc {\n    free(self.values);\n    [super dealloc];\n}\n\n- (BOOL)isEqual:(id)object {\n    if (![object isKindOfClass:[EXPDoubleTuple class]]) return NO;\n    EXPDoubleTuple *other = (EXPDoubleTuple *)object;\n    if (self.size == other.size) {\n        for (int i = 0; i < self.size; ++i) {\n            if (self.values[i] != other.values[i]) return NO;\n        }\n        return YES;\n    }\n    return NO;\n}\n\n- (NSString *)description {\n    if (self.size == 2) {\n        return [NSString stringWithFormat:@\"Double tuple: {%f, %f}\", self.values[0], self.values[1]];\n    } else if (self.size == 4) {\n        return [NSString stringWithFormat:@\"Double tuple: {%f, %f, %f, %f}\", self.values[0], self.values[1], self.values[2], self.values[3]];\n    }\n    return [NSString stringWithFormat:@\"Double tuple of unexpected size %zd, sadly\", self.size];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPExpect.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"EXPMatcher.h\"\n#import \"EXPDefines.h\"\n\n@interface EXPExpect : NSObject {\n  EXPIdBlock _actualBlock;\n  id _testCase;\n  int _lineNumber;\n  char *_fileName;\n  BOOL _negative;\n  BOOL _asynchronous;\n  NSTimeInterval _timeout;\n}\n\n@property(nonatomic, copy) EXPIdBlock actualBlock;\n@property(nonatomic, readonly) id actual;\n@property(nonatomic, assign) id testCase;\n@property(nonatomic) int lineNumber;\n@property(nonatomic) const char *fileName;\n@property(nonatomic) BOOL negative;\n@property(nonatomic) BOOL asynchronous;\n@property(nonatomic) NSTimeInterval timeout;\n\n@property(nonatomic, readonly) EXPExpect *to;\n@property(nonatomic, readonly) EXPExpect *toNot;\n@property(nonatomic, readonly) EXPExpect *notTo;\n@property(nonatomic, readonly) EXPExpect *will;\n@property(nonatomic, readonly) EXPExpect *willNot;\n@property(nonatomic, readonly) EXPExpect *(^after)(NSTimeInterval timeInterval);\n\n- (instancetype)initWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName NS_DESIGNATED_INITIALIZER;\n+ (EXPExpect *)expectWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName;\n\n- (void)applyMatcher:(id<EXPMatcher>)matcher;\n- (void)applyMatcher:(id<EXPMatcher>)matcher to:(NSObject **)actual;\n\n@end\n\n@interface EXPDynamicPredicateMatcher : NSObject <EXPMatcher> {\n  EXPExpect *_expectation;\n  SEL _selector;\n}\n- (instancetype)initWithExpectation:(EXPExpect *)expectation selector:(SEL)selector NS_DESIGNATED_INITIALIZER;\n@property (nonatomic, readonly, copy) void (^dispatch)(void);\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPExpect.m",
    "content": "#import \"EXPExpect.h\"\n#import \"NSObject+Expecta.h\"\n#import \"Expecta.h\"\n#import \"EXPUnsupportedObject.h\"\n#import \"EXPMatcher.h\"\n#import \"EXPBlockDefinedMatcher.h\"\n#import <libkern/OSAtomic.h>\n\n@implementation EXPExpect\n\n@dynamic\n  actual,\n  to,\n  toNot,\n  notTo,\n  will,\n  willNot,\n  after;\n\n@synthesize\n  actualBlock=_actualBlock,\n  testCase=_testCase,\n  negative=_negative,\n  asynchronous=_asynchronous,\n  timeout=_timeout,\n  lineNumber=_lineNumber,\n  fileName=_fileName;\n\n- (instancetype)initWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName {\n  self = [super init];\n  if(self) {\n    self.actualBlock = actualBlock;\n    self.testCase = testCase;\n    self.negative = NO;\n    self.asynchronous = NO;\n    self.timeout = [Expecta asynchronousTestTimeout];\n    self.lineNumber = lineNumber;\n    self.fileName = fileName;\n  }\n  return self;\n}\n\n- (void)dealloc\n{\n  _actualBlock = nil;\n  [super dealloc];\n}\n\n+ (EXPExpect *)expectWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName {\n  return [[[EXPExpect alloc] initWithActualBlock:actualBlock testCase:(id)testCase lineNumber:lineNumber fileName:fileName] autorelease];\n}\n\n#pragma mark -\n\n- (EXPExpect *)to {\n  return self;\n}\n\n- (EXPExpect *)toNot {\n  self.negative = !self.negative;\n  return self;\n}\n\n- (EXPExpect *)notTo {\n  return [self toNot];\n}\n\n- (EXPExpect *)will {\n  self.asynchronous = YES;\n  return self;\n}\n\n- (EXPExpect *)willNot {\n  return self.will.toNot;\n}\n\n- (EXPExpect *(^)(NSTimeInterval))after\n{\n  EXPExpect * (^block)(NSTimeInterval) = [^EXPExpect *(NSTimeInterval timeout) {\n    self.asynchronous = YES;\n    self.timeout = timeout;\n    return self;\n  } copy];\n\n  return [block autorelease];\n}\n\n#pragma mark -\n\n- (id)actual {\n  if(self.actualBlock) {\n    return self.actualBlock();\n  }\n  return nil;\n}\n\n- (void)applyMatcher:(id<EXPMatcher>)matcher\n{\n  id actual = [self actual];\n  [self applyMatcher:matcher to:&actual];\n}\n\n- (void)applyMatcher:(id<EXPMatcher>)matcher to:(NSObject **)actual {\n  if([*actual isKindOfClass:[EXPUnsupportedObject class]]) {\n    EXPFail(self.testCase, self.lineNumber, self.fileName,\n            [NSString stringWithFormat:@\"expecting a %@ is not supported\", ((EXPUnsupportedObject *)*actual).type]);\n  } else {\n    BOOL failed = NO;\n    if([matcher respondsToSelector:@selector(meetsPrerequesiteFor:)] &&\n       ![matcher meetsPrerequesiteFor:*actual]) {\n      failed = YES;\n    } else {\n      BOOL matchResult = NO;\n      if(self.asynchronous) {\n        NSTimeInterval timeOut = self.timeout;\n        NSDate *expiryDate = [NSDate dateWithTimeIntervalSinceNow:timeOut];\n        while(1) {\n          matchResult = [matcher matches:*actual];\n          failed = self.negative ? matchResult : !matchResult;\n          if(!failed || ([(NSDate *)[NSDate date] compare:expiryDate] == NSOrderedDescending)) {\n            break;\n          }\n          [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];\n          OSMemoryBarrier();\n          *actual = self.actual;\n        }\n      } else {\n        matchResult = [matcher matches:*actual];\n      }\n      failed = self.negative ? matchResult : !matchResult;\n    }\n    if(failed) {\n      NSString *message = nil;\n\n      if(self.negative) {\n        if ([matcher respondsToSelector:@selector(failureMessageForNotTo:)]) {\n          message = [matcher failureMessageForNotTo:*actual];\n        }\n      } else {\n        if ([matcher respondsToSelector:@selector(failureMessageForTo:)]) {\n          message = [matcher failureMessageForTo:*actual];\n        }\n      }\n      if (message == nil) {\n        message = @\"Match Failed.\";\n      }\n\n      EXPFail(self.testCase, self.lineNumber, self.fileName, message);\n    }\n  }\n  self.negative = NO;\n}\n\n#pragma mark - Dynamic predicate dispatch\n\n- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector\n{\n  if ([self.actual respondsToSelector:aSelector]) {\n    return [self.actual methodSignatureForSelector:aSelector];\n  }\n  return [super methodSignatureForSelector:aSelector];\n}\n\n- (void)forwardInvocation:(NSInvocation *)anInvocation\n{\n  if ([self.actual respondsToSelector:anInvocation.selector]) {\n    EXPDynamicPredicateMatcher *matcher = [[EXPDynamicPredicateMatcher alloc] initWithExpectation:self selector:anInvocation.selector];\n    [anInvocation setSelector:@selector(dispatch)];\n    [anInvocation invokeWithTarget:matcher];\n    [matcher release];\n  }\n  else {\n    [super forwardInvocation:anInvocation];\n  }\n}\n\n@end\n\n@implementation EXPDynamicPredicateMatcher\n\n- (instancetype)initWithExpectation:(EXPExpect *)expectation selector:(SEL)selector\n{\n  if ((self = [super init])) {\n    _expectation = expectation;\n    _selector = selector;\n  }\n  return self;\n}\n\n- (BOOL)matches:(id)actual\n{\n  return (BOOL)[actual performSelector:_selector];\n}\n\n- (NSString *)failureMessageForTo:(id)actual\n{\n  return [NSString stringWithFormat:@\"expected %@ to be true\", NSStringFromSelector(_selector)];\n}\n\n- (NSString *)failureMessageForNotTo:(id)actual\n{\n  return [NSString stringWithFormat:@\"expected %@ to be false\", NSStringFromSelector(_selector)];\n}\n\n- (void (^)(void))dispatch\n{\n  __block id blockExpectation = _expectation;\n\n  return [[^{\n    [blockExpectation applyMatcher:self];\n  } copy] autorelease];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPFloatTuple.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface EXPFloatTuple : NSObject {\n    float *_values;\n    size_t _size;\n}\n\n@property (nonatomic, assign) float *values;\n@property (nonatomic, assign) size_t size;\n\n- (instancetype)initWithFloatValues:(float *)values size:(size_t)size NS_DESIGNATED_INITIALIZER;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPFloatTuple.m",
    "content": "#import \"EXPFloatTuple.h\"\n\n@implementation EXPFloatTuple\n\n@synthesize values = _values, size = _size;\n\n- (instancetype)initWithFloatValues:(float *)values size:(size_t)size {\n    if ((self = [super init])) {\n        self.values = malloc(sizeof(float) * size);\n        memcpy(self.values, values, sizeof(float) * size);\n        self.size = size;\n    }\n    return self;\n}\n\n- (void)dealloc {\n    free(self.values);\n    [super dealloc];\n}\n\n- (BOOL)isEqual:(id)object {\n    if (![object isKindOfClass:[EXPFloatTuple class]]) return NO;\n    EXPFloatTuple *other = (EXPFloatTuple *)object;\n    if (self.size == other.size) {\n        for (int i = 0; i < self.size; ++i) {\n            if (self.values[i] != other.values[i]) return NO;\n        }\n        return YES;\n    }\n    return NO;\n}\n\n- (NSUInteger)hash\n{\n    NSUInteger prime = 31;\n    NSUInteger hash = 0;\n    for (int i=0; i<self.size; i++) {\n        hash = prime * hash + (NSUInteger)self.values[i];\n    }\n    return hash;\n}\n\n- (NSString *)description {\n    if (self.size == 2) {\n        return [NSString stringWithFormat:@\"Float tuple: {%f, %f}\", self.values[0], self.values[1]];\n    } else if (self.size == 4) {\n        return [NSString stringWithFormat:@\"Float tuple: {%f, %f, %f, %f}\", self.values[0], self.values[1], self.values[2], self.values[3]];\n    }\n    return [NSString stringWithFormat:@\"Float tuple of unexpected size %zd, sadly\", self.size];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPMatcher.h",
    "content": "//\n//  EXPMatcher.h\n//  Expecta\n//\n//  Created by Luke Redpath on 26/03/2012.\n//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@protocol EXPMatcher <NSObject>\n\n- (BOOL)matches:(id)actual;\n\n@optional\n- (BOOL)meetsPrerequesiteFor:(id)actual;\n- (NSString *)failureMessageForTo:(id)actual;\n- (NSString *)failureMessageForNotTo:(id)actual;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPUnsupportedObject.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface EXPUnsupportedObject : NSObject {\n  NSString *_type;\n}\n\n@property (nonatomic, retain) NSString *type;\n\n- (instancetype)initWithType:(NSString *)type NS_DESIGNATED_INITIALIZER;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/EXPUnsupportedObject.m",
    "content": "#import \"EXPUnsupportedObject.h\"\n\n@implementation EXPUnsupportedObject\n\n@synthesize type=_type;\n\n- (instancetype)initWithType:(NSString *)type {\n  self = [super init];\n  if(self) {\n    self.type = type;\n  }\n  return self;\n}\n\n- (void)dealloc {\n  self.type = nil;\n  [super dealloc];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Expecta.h",
    "content": "#import <Foundation/Foundation.h>\n\n//! Project version number for Expecta.\nFOUNDATION_EXPORT double ExpectaVersionNumber;\n\n//! Project version string for Expecta.\nFOUNDATION_EXPORT const unsigned char ExpectaVersionString[];\n\n#import <Expecta/ExpectaObject.h>\n#import <Expecta/ExpectaSupport.h>\n#import <Expecta/EXPMatchers.h>\n\n// Enable shorthand by default\n#define expect(...) EXP_expect((__VA_ARGS__))\n#define failure(...) EXP_failure((__VA_ARGS__))"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/ExpectaObject.h",
    "content": "#import <Foundation/Foundation.h>\n\n#define EXPObjectify(value) _EXPObjectify(@encode(__typeof__((value))), (value))\n#define EXP_expect(actual) _EXP_expect(self, __LINE__, __FILE__, ^id{ return EXPObjectify((actual)); })\n#define EXPMatcherInterface(matcherName, matcherArguments) _EXPMatcherInterface(matcherName, matcherArguments)\n#define EXPMatcherImplementationBegin(matcherName, matcherArguments) _EXPMatcherImplementationBegin(matcherName, matcherArguments)\n#define EXPMatcherImplementationEnd _EXPMatcherImplementationEnd\n#define EXPMatcherAliasImplementation(newMatcherName, oldMatcherName, matcherArguments) _EXPMatcherAliasImplementation(newMatcherName, oldMatcherName, matcherArguments)\n\n#define EXP_failure(message) EXPFail(self, __LINE__, __FILE__, message)\n\n\n@interface Expecta : NSObject\n\n+ (NSTimeInterval)asynchronousTestTimeout;\n+ (void)setAsynchronousTestTimeout:(NSTimeInterval)timeout;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/ExpectaObject.m",
    "content": "#import \"ExpectaObject.h\"\n\n@implementation Expecta\n\nstatic NSTimeInterval _asynchronousTestTimeout = 1.0;\n\n+ (NSTimeInterval)asynchronousTestTimeout {\n  return _asynchronousTestTimeout;\n}\n\n+ (void)setAsynchronousTestTimeout:(NSTimeInterval)timeout {\n  _asynchronousTestTimeout = timeout;\n}\n\n@end"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/ExpectaSupport.h",
    "content": "#import \"EXPExpect.h\"\n#import \"EXPBlockDefinedMatcher.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nid _EXPObjectify(const char *type, ...);\nEXPExpect *_EXP_expect(id testCase, int lineNumber, const char *fileName, EXPIdBlock actualBlock);\n\nvoid EXPFail(id testCase, int lineNumber, const char *fileName, NSString *message);\nNSString *EXPDescribeObject(id obj);\n\nvoid EXP_prerequisite(EXPBoolBlock block);\nvoid EXP_match(EXPBoolBlock block);\nvoid EXP_failureMessageForTo(EXPStringBlock block);\nvoid EXP_failureMessageForNotTo(EXPStringBlock block);\n\n#if __has_feature(objc_arc)\n#define _EXP_release(x)\n#define _EXP_autorelease(x) (x)\n\n#else\n#define _EXP_release(x) [x release]\n#define _EXP_autorelease(x) [x autorelease]\n#endif\n\n// workaround for the categories bug: http://developer.apple.com/library/mac/#qa/qa1490/_index.html\n#define EXPFixCategoriesBug(name) \\\n__attribute__((constructor)) static void EXPFixCategoriesBug##name() {}\n\n#define _EXPMatcherInterface(matcherName, matcherArguments) \\\n@interface EXPExpect (matcherName##Matcher) \\\n@property (nonatomic, readonly) void(^ matcherName) matcherArguments; \\\n@end\n\n#define _EXPMatcherImplementationBegin(matcherName, matcherArguments) \\\nEXPFixCategoriesBug(EXPMatcher##matcherName##Matcher); \\\n@implementation EXPExpect (matcherName##Matcher) \\\n@dynamic matcherName;\\\n- (void(^) matcherArguments) matcherName { \\\n  EXPBlockDefinedMatcher *matcher = [[EXPBlockDefinedMatcher alloc] init]; \\\n  [[[NSThread currentThread] threadDictionary] setObject:matcher forKey:@\"EXP_currentMatcher\"]; \\\n  __block id actual = self.actual; \\\n  __block void (^prerequisite)(EXPBoolBlock block) = ^(EXPBoolBlock block) { EXP_prerequisite(block); }; \\\n  __block void (^match)(EXPBoolBlock block) = ^(EXPBoolBlock block) { EXP_match(block); }; \\\n  __block void (^failureMessageForTo)(EXPStringBlock block) = ^(EXPStringBlock block) { EXP_failureMessageForTo(block); }; \\\n  __block void (^failureMessageForNotTo)(EXPStringBlock block) = ^(EXPStringBlock block) { EXP_failureMessageForNotTo(block); }; \\\n  prerequisite(nil); match(nil); failureMessageForTo(nil); failureMessageForNotTo(nil); \\\n  void (^matcherBlock) matcherArguments = [^ matcherArguments { \\\n    {\n\n#define _EXPMatcherImplementationEnd \\\n    } \\\n    [self applyMatcher:matcher to:&actual]; \\\n  } copy]; \\\n  _EXP_release(matcher); \\\n  return _EXP_autorelease(matcherBlock); \\\n} \\\n@end\n\n#define _EXPMatcherAliasImplementation(newMatcherName, oldMatcherName, matcherArguments) \\\nEXPFixCategoriesBug(EXPMatcher##newMatcherName##Matcher); \\\n@implementation EXPExpect (newMatcherName##Matcher) \\\n@dynamic newMatcherName;\\\n- (void(^) matcherArguments) newMatcherName { \\\n  return [self oldMatcherName]; \\\n}\\\n@end\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/ExpectaSupport.m",
    "content": "#import \"ExpectaSupport.h\"\n#import \"NSValue+Expecta.h\"\n#import \"NSObject+Expecta.h\"\n#import \"EXPUnsupportedObject.h\"\n#import \"EXPFloatTuple.h\"\n#import \"EXPDoubleTuple.h\"\n#import \"EXPDefines.h\"\n#import <objc/runtime.h>\n\n@interface NSObject (ExpectaXCTestRecordFailure)\n\n// suppress warning\n- (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected;\n\n@end\n\nid _EXPObjectify(const char *type, ...) {\n  va_list v;\n  va_start(v, type);\n  id obj = nil;\n  if(strcmp(type, @encode(char)) == 0) {\n    char actual = (char)va_arg(v, int);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(_Bool)) == 0) {\n    _Static_assert(sizeof(_Bool) <= sizeof(int), \"Expected _Bool to be subject to vararg type promotion\");\n    _Bool actual = (_Bool)va_arg(v, int);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(double)) == 0) {\n    double actual = (double)va_arg(v, double);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(float)) == 0) {\n    float actual = (float)va_arg(v, double);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(int)) == 0) {\n    int actual = (int)va_arg(v, int);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(long)) == 0) {\n    long actual = (long)va_arg(v, long);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(long long)) == 0) {\n    long long actual = (long long)va_arg(v, long long);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(short)) == 0) {\n    short actual = (short)va_arg(v, int);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(unsigned char)) == 0) {\n    unsigned char actual = (unsigned char)va_arg(v, unsigned int);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(unsigned int)) == 0) {\n    unsigned int actual = (int)va_arg(v, unsigned int);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(unsigned long)) == 0) {\n    unsigned long actual = (unsigned long)va_arg(v, unsigned long);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(unsigned long long)) == 0) {\n    unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long);\n    obj = @(actual);\n  } else if(strcmp(type, @encode(unsigned short)) == 0) {\n    unsigned short actual = (unsigned short)va_arg(v, unsigned int);\n    obj = @(actual);\n  } else if(strstr(type, @encode(EXPBasicBlock)) != NULL) {\n      // @encode(EXPBasicBlock) returns @? as of clang 4.1.\n      // This condition must occur before the test for id/class type,\n      // otherwise blocks will be treated as vanilla objects.\n      id actual = va_arg(v, EXPBasicBlock);\n      obj = [[actual copy] autorelease];\n  } else if((strstr(type, @encode(id)) != NULL) || (strstr(type, @encode(Class)) != 0)) {\n    id actual = va_arg(v, id);\n    obj = actual;\n  } else if(strcmp(type, @encode(__typeof__(nil))) == 0) {\n    obj = nil;\n  } else if(strstr(type, \"ff}{\") != NULL) { //TODO: of course this only works for a 2x2 e.g. CGRect\n    obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[4]) size:4] autorelease];\n  } else if(strstr(type, \"=ff}\") != NULL) {\n    obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[2]) size:2] autorelease];\n  } else if(strstr(type, \"=ffff}\") != NULL) {\n    obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[4]) size:4] autorelease];\n  } else if(strstr(type, \"dd}{\") != NULL) { //TODO: same here\n    obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[4]) size:4] autorelease];\n  } else if(strstr(type, \"=dd}\") != NULL) {\n    obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[2]) size:2] autorelease];\n  } else if(strstr(type, \"=dddd}\") != NULL) {\n    obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[4]) size:4] autorelease];\n  } else if(type[0] == '{') {\n    EXPUnsupportedObject *actual = [[[EXPUnsupportedObject alloc] initWithType:@\"struct\"] autorelease];\n    obj = actual;\n  } else if(type[0] == '(') {\n    EXPUnsupportedObject *actual = [[[EXPUnsupportedObject alloc] initWithType:@\"union\"] autorelease];\n    obj = actual;\n  } else {\n    void *actual = va_arg(v, void *);\n    obj = (actual == NULL ? nil :[NSValue valueWithPointer:actual]);\n  }\n  if([obj isKindOfClass:[NSValue class]] && ![obj isKindOfClass:[NSNumber class]]) {\n    [(NSValue *)obj set_EXP_objCType:type];\n  }\n  va_end(v);\n  return obj;\n}\n\nEXPExpect *_EXP_expect(id testCase, int lineNumber, const char *fileName, EXPIdBlock actualBlock) {\n  return [EXPExpect expectWithActualBlock:actualBlock testCase:testCase lineNumber:lineNumber fileName:fileName];\n}\n\nvoid EXPFail(id testCase, int lineNumber, const char *fileName, NSString *message) {\n  NSLog(@\"%s:%d %@\", fileName, lineNumber, message);\n  NSString *reason = [NSString stringWithFormat:@\"%s:%d %@\", fileName, lineNumber, message];\n  NSException *exception = [NSException exceptionWithName:@\"Expecta Error\" reason:reason userInfo:nil];\n\n  if(testCase && [testCase respondsToSelector:@selector(recordFailureWithDescription:inFile:atLine:expected:)]){\n      [testCase recordFailureWithDescription:message\n                                      inFile:@(fileName)\n                                      atLine:lineNumber\n                                    expected:NO];\n  } else {\n    [exception raise];\n  }\n}\n\nNSString *EXPDescribeObject(id obj) {\n  if(obj == nil) {\n    return @\"nil/null\";\n  } else if([obj isKindOfClass:[NSValue class]] && ![obj isKindOfClass:[NSNumber class]]) {\n    const char *type = [(NSValue *)obj _EXP_objCType];\n    if(type) {\n      if(strcmp(type, @encode(SEL)) == 0) {\n        return [NSString stringWithFormat:@\"@selector(%@)\", NSStringFromSelector([obj pointerValue])];\n      } else if(strcmp(type, @encode(Class)) == 0) {\n        return NSStringFromClass([obj pointerValue]);\n      }\n    }\n  }\n  NSString *description = [obj description];\n  if([obj isKindOfClass:[NSArray class]]) {\n    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]];\n    for(id o in obj) {\n      [arr addObject:EXPDescribeObject(o)];\n    }\n    description = [NSString stringWithFormat:@\"(%@)\", [arr componentsJoinedByString:@\", \"]];\n  } else if([obj isKindOfClass:[NSSet class]] || [obj isKindOfClass:[NSOrderedSet class]]) {\n    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]];\n    for(id o in obj) {\n      [arr addObject:EXPDescribeObject(o)];\n    }\n    description = [NSString stringWithFormat:@\"{(%@)}\", [arr componentsJoinedByString:@\", \"]];\n  } else if([obj isKindOfClass:[NSDictionary class]]) {\n    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]];\n    for(id k in obj) {\n      id v = obj[k];\n      [arr addObject:[NSString stringWithFormat:@\"%@ = %@;\",EXPDescribeObject(k), EXPDescribeObject(v)]];\n    }\n    description = [NSString stringWithFormat:@\"{%@}\", [arr componentsJoinedByString:@\" \"]];\n  } else if([obj isKindOfClass:[NSAttributedString class]]) {\n    description = [obj string];\n  } else {\n    description = [description stringByReplacingOccurrencesOfString:@\"\\n\" withString:@\"\\\\n\"];\n  }\n  return description;\n}\n\nvoid EXP_prerequisite(EXPBoolBlock block) {\n  [[[NSThread currentThread] threadDictionary][@\"EXP_currentMatcher\"] setPrerequisiteBlock:block];\n}\n\nvoid EXP_match(EXPBoolBlock block) {\n  [[[NSThread currentThread] threadDictionary][@\"EXP_currentMatcher\"] setMatchBlock:block];\n}\n\nvoid EXP_failureMessageForTo(EXPStringBlock block) {\n  [[[NSThread currentThread] threadDictionary][@\"EXP_currentMatcher\"] setFailureMessageForToBlock:block];\n}\n\nvoid EXP_failureMessageForNotTo(EXPStringBlock block) {\n  [[[NSThread currentThread] threadDictionary][@\"EXP_currentMatcher\"] setFailureMessageForNotToBlock:block];\n}\n\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatcherHelpers.h",
    "content": "#import <Foundation/Foundation.h>\n\nBOOL EXPIsValuePointer(NSValue *value);\nBOOL EXPIsNumberFloat(NSNumber *number);\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatcherHelpers.m",
    "content": "#import \"EXPMatcherHelpers.h\"\n\nBOOL EXPIsValuePointer(NSValue *value) {\n  return [value objCType][0] == @encode(void *)[0];\n}\n\nBOOL EXPIsNumberFloat(NSNumber *number) {\n  return strcmp([number objCType], @encode(float)) == 0;\n}\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beCloseTo.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beCloseToWithin, (id expected, id within));\nEXPMatcherInterface(beCloseToWithin, (id expected, id within));\n\n#define beCloseTo(expected) _beCloseToWithin(EXPObjectify((expected)), nil)\n#define beCloseToWithin(expected, range) _beCloseToWithin(EXPObjectify((expected)), EXPObjectify((range)))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beCloseTo.m",
    "content": "#import \"EXPMatchers+beCloseTo.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beCloseToWithin, (id expected, id within)) {\n  prerequisite(^BOOL{\n    return [actual isKindOfClass:[NSNumber class]] &&\n\t\t[expected isKindOfClass:[NSNumber class]] &&\n\t\t([within isKindOfClass:[NSNumber class]] || (within == nil));\n  });\n\n  match(^BOOL{\n\t\tdouble actualValue = [actual doubleValue];\n\t\tdouble expectedValue = [expected doubleValue];\n\n\t\tif (within != nil) {\n\t\t\tdouble withinValue = [within doubleValue];\n\t\t\tdouble lowerBound = expectedValue - withinValue;\n\t\t\tdouble upperBound = expectedValue + withinValue;\n\t\t\treturn (actualValue >= lowerBound) && (actualValue <= upperBound);\n\t\t} else {\n\t\t\tdouble diff = fabs(actualValue - expectedValue);\n\t\t\tactualValue = fabs(actualValue);\n\t\t\texpectedValue = fabs(expectedValue);\n\t\t\tdouble largest = (expectedValue > actualValue) ? expectedValue : actualValue;\n\t\t\treturn (diff <= largest * FLT_EPSILON);\n\t\t}\n  });\n\n  failureMessageForTo(^NSString *{\n    if (within) {\n      return [NSString stringWithFormat:@\"expected %@ to be close to %@ within %@\",\n              EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];\n    } else {\n      return [NSString stringWithFormat:@\"expected %@ to be close to %@\",\n              EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    }\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if (within) {\n      return [NSString stringWithFormat:@\"expected %@ not to be close to %@ within %@\",\n              EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];\n    } else {\n      return [NSString stringWithFormat:@\"expected %@ not to be close to %@\",\n              EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    }\n  });\n}\nEXPMatcherImplementationEnd"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beFalsy.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beFalsy, (void));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beFalsy.m",
    "content": "#import \"EXPMatchers+beFalsy.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(beFalsy, (void)) {\n  match(^BOOL{\n    if([actual isKindOfClass:[NSNumber class]]) {\n      return ![(NSNumber *)actual boolValue];\n    } else if([actual isKindOfClass:[NSValue class]]) {\n      if(EXPIsValuePointer((NSValue *)actual)) {\n        return ![(NSValue *)actual pointerValue];\n      }\n    }\n    return !actual;\n  });\n\n  failureMessageForTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: a falsy value, got: %@, which is truthy\", EXPDescribeObject(actual)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: a non-falsy value, got: %@, which is falsy\", EXPDescribeObject(actual)];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beGreaterThan.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beGreaterThan, (id expected));\nEXPMatcherInterface(beGreaterThan, (id expected));\n\n#define beGreaterThan(expected) _beGreaterThan(EXPObjectify((expected)))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beGreaterThan.m",
    "content": "#import \"EXPMatchers+beGreaterThan.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beGreaterThan, (id expected)) {\n    match(^BOOL{\n        if ([actual respondsToSelector:@selector(compare:)]) {\n            return [actual compare:expected] == NSOrderedDescending;\n        }\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ to be greater than %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ not to be greater than %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    });\n}\nEXPMatcherImplementationEnd"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beGreaterThanOrEqualTo, (id expected));\nEXPMatcherInterface(beGreaterThanOrEqualTo, (id expected));\n\n#define beGreaterThanOrEqualTo(expected) _beGreaterThanOrEqualTo(EXPObjectify((expected)))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.m",
    "content": "#import \"EXPMatchers+beGreaterThanOrEqualTo.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beGreaterThanOrEqualTo, (id expected)) {\n    match(^BOOL{\n        if ([actual respondsToSelector:@selector(compare:)]) {\n            return [actual compare:expected] != NSOrderedAscending;\n        }\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ to be greater than or equal to %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ not to be greater than or equal to %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    });\n}\nEXPMatcherImplementationEnd"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beIdenticalTo.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beIdenticalTo, (void *expected));\nEXPMatcherInterface(beIdenticalTo, (void *expected)); // to aid code completion\n\n#if __has_feature(objc_arc)\n#define beIdenticalTo(expected) _beIdenticalTo((__bridge void*)expected)\n#else\n#define beIdenticalTo(expected) _beIdenticalTo(expected)\n#endif\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beIdenticalTo.m",
    "content": "#import \"EXPMatchers+equal.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beIdenticalTo, (void *expected)) {\n  match(^BOOL{\n    if(actual == expected) {\n      return YES;\n    } else if([actual isKindOfClass:[NSValue class]] && EXPIsValuePointer((NSValue *)actual)) {\n      if([(NSValue *)actual pointerValue] == expected) {\n        return YES;\n      }\n    }\n    return NO;\n  });\n\n  failureMessageForTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: <%p>, got: <%p>\", expected, actual];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: not <%p>, got: <%p>\", expected, actual];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beInTheRangeOf.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound));\nEXPMatcherInterface(beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound));\n\n#define beInTheRangeOf(expectedLowerBound, expectedUpperBound) _beInTheRangeOf(EXPObjectify((expectedLowerBound)), EXPObjectify((expectedUpperBound)))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beInTheRangeOf.m",
    "content": "#import \"EXPMatchers+beInTheRangeOf.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound)) {\n    match(^BOOL{\n        if ([actual respondsToSelector:@selector(compare:)]) {\n            NSComparisonResult compareLowerBound = [expectedLowerBound compare: actual];\n            NSComparisonResult compareUpperBound = [expectedUpperBound compare: actual];\n            if (compareLowerBound == NSOrderedSame) {\n                return YES;\n            }\n            if (compareUpperBound == NSOrderedSame) {\n                return YES;\n            }\n            if ((compareLowerBound == NSOrderedAscending) && (compareUpperBound == NSOrderedDescending)) {\n                return YES;\n            }\n        }\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ to be in the range [%@, %@] (inclusive)\", EXPDescribeObject(actual), EXPDescribeObject(expectedLowerBound), EXPDescribeObject(expectedUpperBound)];\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ not to be in the range [%@, %@] (inclusive)\", EXPDescribeObject(actual), EXPDescribeObject(expectedLowerBound), EXPDescribeObject(expectedUpperBound)];\n    });\n}\nEXPMatcherImplementationEnd"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beInstanceOf.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beInstanceOf,   (Class expected));\nEXPMatcherInterface(beAnInstanceOf, (Class expected));\nEXPMatcherInterface(beMemberOf,     (Class expected));\nEXPMatcherInterface(beAMemberOf,    (Class expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beInstanceOf.m",
    "content": "#import \"EXPMatchers+beInstanceOf.h\"\n\nEXPMatcherImplementationBegin(beInstanceOf, (Class expected)) {\n  BOOL actualIsNil = (actual == nil);\n  BOOL expectedIsNil = (expected == nil);\n\n  prerequisite(^BOOL{\n    return !(actualIsNil || expectedIsNil);\n  });\n\n  match(^BOOL{\n    return [actual isMemberOfClass:expected];\n  });\n\n  failureMessageForTo(^NSString *{\n    if(actualIsNil) return @\"the actual value is nil/null\";\n    if(expectedIsNil) return @\"the expected value is nil/null\";\n    return [NSString stringWithFormat:@\"expected: an instance of %@, got: an instance of %@\", [expected class], [actual class]];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if(actualIsNil) return @\"the actual value is nil/null\";\n    if(expectedIsNil) return @\"the expected value is nil/null\";\n    return [NSString stringWithFormat:@\"expected: not an instance of %@, got: an instance of %@\", [expected class], [actual class]];\n  });\n}\nEXPMatcherImplementationEnd\n\nEXPMatcherAliasImplementation(beAnInstanceOf, beInstanceOf, (Class expected));\nEXPMatcherAliasImplementation(beMemberOf,     beInstanceOf, (Class expected));\nEXPMatcherAliasImplementation(beAMemberOf,    beInstanceOf, (Class expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beKindOf.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beKindOf,  (Class expected));\nEXPMatcherInterface(beAKindOf, (Class expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beKindOf.m",
    "content": "#import \"EXPMatchers+beKindOf.h\"\n\nEXPMatcherImplementationBegin(beKindOf, (Class expected)) {\n  BOOL actualIsNil = (actual == nil);\n  BOOL expectedIsNil = (expected == nil);\n\n  prerequisite(^BOOL{\n    return !(actualIsNil || expectedIsNil);\n  });\n\n  match(^BOOL{\n    return [actual isKindOfClass:expected];\n  });\n\n  failureMessageForTo(^NSString *{\n    if(actualIsNil) return @\"the actual value is nil/null\";\n    if(expectedIsNil) return @\"the expected value is nil/null\";\n    return [NSString stringWithFormat:@\"expected: a kind of %@, got: an instance of %@, which is not a kind of %@\", [expected class], [actual class], [expected class]];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if(actualIsNil) return @\"the actual value is nil/null\";\n    if(expectedIsNil) return @\"the expected value is nil/null\";\n    return [NSString stringWithFormat:@\"expected: not a kind of %@, got: an instance of %@, which is a kind of %@\", [expected class], [actual class], [expected class]];\n  });\n}\nEXPMatcherImplementationEnd\n\nEXPMatcherAliasImplementation(beAKindOf, beKindOf, (Class expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beLessThan.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beLessThan, (id expected));\nEXPMatcherInterface(beLessThan, (id expected));\n\n#define beLessThan(expected) _beLessThan(EXPObjectify((expected)))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beLessThan.m",
    "content": "#import \"EXPMatchers+beLessThan.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beLessThan, (id expected)) {\n    match(^BOOL{\n        if ([actual respondsToSelector:@selector(compare:)]) {\n            return [actual compare:expected] == NSOrderedAscending;\n        }\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ to be less than %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ not to be less than %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    });\n}\nEXPMatcherImplementationEnd"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_beLessThanOrEqualTo, (id expected));\nEXPMatcherInterface(beLessThanOrEqualTo, (id expected));\n\n#define beLessThanOrEqualTo(expected) _beLessThanOrEqualTo(EXPObjectify((expected)))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.m",
    "content": "#import \"EXPMatchers+beLessThanOrEqualTo.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_beLessThanOrEqualTo, (id expected)) {\n    match(^BOOL{\n        if ([actual respondsToSelector:@selector(compare:)]) {\n            return [actual compare:expected] != NSOrderedDescending;\n        }\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ to be less than or equal to %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ not to be less than or equal to %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n    });\n}\nEXPMatcherImplementationEnd"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beNil.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beNil, (void));\nEXPMatcherInterface(beNull, (void));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beNil.m",
    "content": "#import \"EXPMatchers+beNil.h\"\n\nEXPMatcherImplementationBegin(beNil, (void)) {\n  match(^BOOL{\n    return actual == nil;\n  });\n\n  failureMessageForTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: nil/null, got: %@\", EXPDescribeObject(actual)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: not nil/null, got: %@\", EXPDescribeObject(actual)];\n  });\n}\nEXPMatcherImplementationEnd\n\nEXPMatcherAliasImplementation(beNull, beNil, (void));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beSubclassOf.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beSubclassOf,  (Class expected));\nEXPMatcherInterface(beASubclassOf, (Class expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beSubclassOf.m",
    "content": "#import \"EXPMatchers+beSubclassOf.h\"\n#import \"NSValue+Expecta.h\"\n#import <objc/runtime.h>\n\nEXPMatcherImplementationBegin(beSubclassOf, (Class expected)) {\n  __block BOOL actualIsClass = YES;\n\n  prerequisite(^BOOL {\n    actualIsClass = class_isMetaClass(object_getClass(actual));\n    return actualIsClass;\n  });\n\n  match(^BOOL{\n    return [actual isSubclassOfClass:expected];\n  });\n\n  failureMessageForTo(^NSString *{\n    if(!actualIsClass) return @\"the actual value is not a Class\";\n    return [NSString stringWithFormat:@\"expected: a subclass of %@, got: a class %@, which is not a subclass of %@\", [expected class], actual, [expected class]];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if(!actualIsClass) return @\"the actual value is not a Class\";\n    return [NSString stringWithFormat:@\"expected: not a subclass of %@, got: a class %@, which is a subclass of %@\", [expected class], actual, [expected class]];\n  });\n}\nEXPMatcherImplementationEnd\n\nEXPMatcherAliasImplementation(beASubclassOf, beSubclassOf, (Class expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beSupersetOf.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beSupersetOf, (id subset));\n\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beSupersetOf.m",
    "content": "#import \"EXPMatchers+contain.h\"\n\nEXPMatcherImplementationBegin(beSupersetOf, (id subset)) {\n  BOOL actualIsCompatible = [actual isKindOfClass:[NSDictionary class]] || [actual respondsToSelector:@selector(containsObject:)];\n  BOOL subsetIsNil = (subset == nil);\n\n  // For some instances the isKindOfClass: method returns false, even though\n  // they are both actually dictionaries. e.g. Comparing a NSCFDictionary and a\n  // NSDictionary.\n  // Or in cases when you compare NSMutableArray (which implementation is __NSArrayM:NSMutableArray:NSArray)\n  // and NSArray (which implementation is __NSArrayI:NSArray)\n  BOOL bothAreIdenticalCollectionClasses = ([actual isKindOfClass:[NSDictionary class]] && [subset isKindOfClass:[NSDictionary class]]) ||\n        ([actual isKindOfClass:[NSArray class]] && [subset isKindOfClass:[NSArray class]]) ||\n        ([actual isKindOfClass:[NSSet class]] && [subset isKindOfClass:[NSSet class]]) ||\n        ([actual isKindOfClass:[NSOrderedSet class]] && [subset isKindOfClass:[NSOrderedSet class]]);\n\n  BOOL classMatches = bothAreIdenticalCollectionClasses || [subset isKindOfClass:[actual class]];\n\n  prerequisite(^BOOL{\n    return actualIsCompatible && !subsetIsNil && classMatches;\n  });\n\n  match(^BOOL{\n    if(!actualIsCompatible) return NO;\n\n    if([actual isKindOfClass:[NSDictionary class]]) {\n      for (id key in subset) {\n        id actualValue = [actual valueForKey:key];\n        id subsetValue = [subset valueForKey:key];\n\n        if (![subsetValue isEqual:actualValue]) return NO;\n      }\n    } else {\n      for (id object in subset) {\n        if (![actual containsObject:object]) return NO;\n      }\n    }\n\n    return YES;\n  });\n\n  failureMessageForTo(^NSString *{\n    if(!actualIsCompatible) return [NSString stringWithFormat:@\"%@ is not an instance of NSDictionary and does not implement -containsObject:\", EXPDescribeObject(actual)];\n\n    if(subsetIsNil) return @\"the expected value is nil/null\";\n\n    if(!classMatches) return [NSString stringWithFormat:@\"%@ does not match the class of %@\", EXPDescribeObject(subset), EXPDescribeObject(actual)];\n\n    return [NSString stringWithFormat:@\"expected %@ to be a superset of %@\", EXPDescribeObject(actual), EXPDescribeObject(subset)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if(!actualIsCompatible) return [NSString stringWithFormat:@\"%@ is not an instance of NSDictionary and does not implement -containsObject:\", EXPDescribeObject(actual)];\n\n    if(subsetIsNil) return @\"the expected value is nil/null\";\n\n    if(!classMatches) return [NSString stringWithFormat:@\"%@ does not match the class of %@\", EXPDescribeObject(subset), EXPDescribeObject(actual)];\n\n    return [NSString stringWithFormat:@\"expected %@ not to be a superset of %@\", EXPDescribeObject(actual), EXPDescribeObject(subset)];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beTruthy.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beTruthy, (void));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beTruthy.m",
    "content": "#import \"EXPMatchers+beTruthy.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(beTruthy, (void)) {\n  match(^BOOL{\n    if([actual isKindOfClass:[NSNumber class]]) {\n      return !![(NSNumber *)actual boolValue];\n    } else if([actual isKindOfClass:[NSValue class]]) {\n      if(EXPIsValuePointer((NSValue *)actual)) {\n        return !![(NSValue *)actual pointerValue];\n      }\n    }\n    return !!actual;\n  });\n\n  failureMessageForTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: a truthy value, got: %@, which is falsy\", EXPDescribeObject(actual)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: a non-truthy value, got: %@, which is truthy\", EXPDescribeObject(actual)];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beginWith.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(beginWith, (id expected));\nEXPMatcherInterface(startWith, (id expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+beginWith.m",
    "content": "#import \"EXPMatchers+beginWith.h\"\n\nEXPMatcherImplementationBegin(beginWith, (id expected)) {\n  BOOL actualIsNil = (actual == nil);\n  BOOL expectedIsNil = (expected == nil);\n  //This condition allows the comparison of an immutable string or ordered collection to the mutable type of the same\n  BOOL actualAndExpectedAreCompatible = (([actual isKindOfClass:[NSString class]] && [expected isKindOfClass:[NSString class]])\n                                         || ([actual isKindOfClass:[NSArray class]] && [expected isKindOfClass:[NSArray class]])\n                                         || ([actual isKindOfClass:[NSOrderedSet class]] && [expected isKindOfClass:[NSOrderedSet class]]));\n  \n  prerequisite(^BOOL {\n    return actualAndExpectedAreCompatible;\n  });\n  \n  match(^BOOL {\n    if ([actual isKindOfClass:[NSString class]]) {\n      return [actual hasPrefix:expected];\n    } else if ([actual isKindOfClass:[NSArray class]]) {\n      if ([expected count] > [actual count] || [expected count] == 0) {\n        return NO;\n      }\n      NSArray *subArray = [actual subarrayWithRange:NSMakeRange(0, [expected count])];\n      return [subArray isEqualToArray:expected];\n    } else {\n      if ([expected count] > [actual count] || [expected count] == 0) {\n        return NO;\n      }\n      \n      NSOrderedSet *subset = [NSOrderedSet orderedSetWithOrderedSet:actual range:NSMakeRange(0, [expected count]) copyItems:NO];\n      return [subset isEqualToOrderedSet:expected];\n    }\n  });\n  \n  failureMessageForTo(^NSString *{\n    if (actualIsNil) return @\"the object is nil/null\";\n    if (expectedIsNil) return @\"the expected value is nil/null\";\n    if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@\"%@ and %@ are not instances of one of %@, %@, or %@\", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]];\n    return [NSString stringWithFormat:@\"expected: %@ to begin with %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n  });\n  \n  failureMessageForNotTo(^NSString *{\n    if (actualIsNil) return @\"the object is nil/null\";\n    if (expectedIsNil) return @\"the expected value is nil/null\";\n    if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@\"%@ and %@ are not instances of one of %@, %@, or %@\", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]];\n    \n    return [NSString stringWithFormat:@\"expected: %@ not to begin with %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n  });\n}\nEXPMatcherImplementationEnd\n\nEXPMatcherAliasImplementation(startWith, beginWith, (id expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+conformTo.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(conformTo, (Protocol *expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+conformTo.m",
    "content": "#import \"EXPMatchers+conformTo.h\"\n#import \"NSValue+Expecta.h\"\n#import <objc/runtime.h>\n\nEXPMatcherImplementationBegin(conformTo, (Protocol *expected)) {\n    BOOL actualIsNil = (actual == nil);\n    BOOL expectedIsNil = (expected == nil);\n\n    prerequisite(^BOOL{\n        return !(actualIsNil || expectedIsNil);\n    });\n\n    match(^BOOL{\n        return [actual conformsToProtocol:expected];\n    });\n\n    failureMessageForTo(^NSString *{\n        if(actualIsNil) return @\"the object is nil/null\";\n        if(expectedIsNil) return @\"the protocol is nil/null\";\n\n        NSString *name = NSStringFromProtocol(expected);\n        return [NSString stringWithFormat:@\"expected: %@ to conform to %@\", actual, name];\n    });\n\n    failureMessageForNotTo(^NSString *{\n        if(actualIsNil) return @\"the object is nil/null\";\n        if(expectedIsNil) return @\"the protocol is nil/null\";\n\n        NSString *name = NSStringFromProtocol(expected);\n        return [NSString stringWithFormat:@\"expected: %@ not to conform to %@\", actual, name];\n    });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+contain.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_contain, (id expected));\nEXPMatcherInterface(contain, (id expected)); // to aid code completion\n#define contain(expected) _contain(EXPObjectify((expected)))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+contain.m",
    "content": "#import \"EXPMatchers+contain.h\"\n\nEXPMatcherImplementationBegin(_contain, (id expected)) {\n  BOOL actualIsCompatible = [actual isKindOfClass:[NSString class]] || [actual conformsToProtocol:@protocol(NSFastEnumeration)];\n  BOOL expectedIsNil = (expected == nil);\n\n  prerequisite(^BOOL{\n    return actualIsCompatible && !expectedIsNil;\n  });\n\n  match(^BOOL{\n    if(actualIsCompatible) {\n      if([actual isKindOfClass:[NSString class]]) {\n        return [(NSString *)actual rangeOfString:[expected description]].location != NSNotFound;\n      } else {\n        for (id object in actual) {\n          if ([object isEqual:expected]) {\n            return YES;\n          }\n        }\n      }\n    }\n    return NO;\n  });\n\n  failureMessageForTo(^NSString *{\n    if(!actualIsCompatible) return [NSString stringWithFormat:@\"%@ is not an instance of NSString or NSFastEnumeration\", EXPDescribeObject(actual)];\n    if(expectedIsNil) return @\"the expected value is nil/null\";\n    return [NSString stringWithFormat:@\"expected %@ to contain %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if(!actualIsCompatible) return [NSString stringWithFormat:@\"%@ is not an instance of NSString or NSFastEnumeration\", EXPDescribeObject(actual)];\n    if(expectedIsNil) return @\"the expected value is nil/null\";\n    return [NSString stringWithFormat:@\"expected %@ not to contain %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+endWith.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(endWith, (id expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+endWith.m",
    "content": "#import \"EXPMatchers+endWith.h\"\n\nEXPMatcherImplementationBegin(endWith, (id expected)) {\n  BOOL actualIsNil = (actual == nil);\n  BOOL expectedIsNil = (expected == nil);\n  //This condition allows the comparison of an immutable string or ordered collection to the mutable type of the same\n  BOOL actualAndExpectedAreCompatible = (([actual isKindOfClass:[NSString class]] && [expected isKindOfClass:[NSString class]])\n                                         || ([actual isKindOfClass:[NSArray class]] && [expected isKindOfClass:[NSArray class]])\n                                         || ([actual isKindOfClass:[NSOrderedSet class]] && [expected isKindOfClass:[NSOrderedSet class]]));\n  \n  prerequisite(^BOOL {\n    return actualAndExpectedAreCompatible;\n  });\n  \n  match(^BOOL {\n    if ([actual isKindOfClass:[NSString class]]) {\n      return [actual hasSuffix:expected];\n    } else if ([actual isKindOfClass:[NSArray class]]) {\n      if ([expected count] > [actual count] || [expected count] == 0) {\n        return NO;\n      }\n      NSArray *subArray = [actual subarrayWithRange:NSMakeRange([actual count] - [expected count], [expected count])];\n      return [subArray isEqualToArray:expected];\n    } else {\n      if ([expected count] > [actual count] || [expected count] == 0) {\n        return NO;\n      }\n      \n      NSOrderedSet *subset = [NSOrderedSet orderedSetWithOrderedSet:actual range:NSMakeRange([actual count] - [expected count], [expected count]) copyItems:NO];\n      return [subset isEqualToOrderedSet:expected];\n    }\n  });\n  \n  failureMessageForTo(^NSString *{\n    if (actualIsNil) return @\"the object is nil/null\";\n    if (expectedIsNil) return @\"the expected value is nil/null\";\n    if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@\"%@ and %@ are not instances of one of %@, %@, or %@\", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]];\n    return [NSString stringWithFormat:@\"expected: %@ to end with %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n  });\n  \n  failureMessageForNotTo(^NSString *{\n    if (actualIsNil) return @\"the object is nil/null\";\n    if (expectedIsNil) return @\"the expected value is nil/null\";\n    if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@\"%@ and %@ are not instances of one of %@, %@, or %@\", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]];\n    \n    return [NSString stringWithFormat:@\"expected: %@ not to end with %@\", EXPDescribeObject(actual), EXPDescribeObject(expected)];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+equal.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(_equal, (id expected));\nEXPMatcherInterface(equal, (id expected)); // to aid code completion\n#define equal(...) _equal(EXPObjectify((__VA_ARGS__)))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+equal.m",
    "content": "#import \"EXPMatchers+equal.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(_equal, (id expected)) {\n  match(^BOOL{\n    if((actual == expected) || [actual isEqual:expected]) {\n      return YES;\n    } else if([actual isKindOfClass:[NSNumber class]] && [expected isKindOfClass:[NSNumber class]]) {\n      if([actual isKindOfClass:[NSDecimalNumber class]] || [expected isKindOfClass:[NSDecimalNumber class]]) {\n        NSDecimalNumber *actualDecimalNumber = [NSDecimalNumber decimalNumberWithDecimal:[(NSNumber *) actual decimalValue]];\n        NSDecimalNumber *expectedDecimalNumber = [NSDecimalNumber decimalNumberWithDecimal:[(NSNumber *) expected decimalValue]];\n        return [actualDecimalNumber isEqualToNumber:expectedDecimalNumber];\n      }\n      else {\n        if(EXPIsNumberFloat((NSNumber *)actual) || EXPIsNumberFloat((NSNumber *)expected)) {\n          return [(NSNumber *)actual floatValue] == [(NSNumber *)expected floatValue];\n        }\n      }\n    }\n    return NO;\n  });\n\n  failureMessageForTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: %@, got: %@\", EXPDescribeObject(expected), EXPDescribeObject(actual)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: not %@, got: %@\", EXPDescribeObject(expected), EXPDescribeObject(actual)];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+haveCountOf.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(haveCountOf,   (NSUInteger expected));\nEXPMatcherInterface(haveCount,     (NSUInteger expected));\nEXPMatcherInterface(haveACountOf,  (NSUInteger expected));\nEXPMatcherInterface(haveLength,    (NSUInteger expected));\nEXPMatcherInterface(haveLengthOf,  (NSUInteger expected));\nEXPMatcherInterface(haveALengthOf, (NSUInteger expected));\n\n#define beEmpty() haveCountOf(0)\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+haveCountOf.m",
    "content": "#import \"EXPMatchers+haveCountOf.h\"\n\nEXPMatcherImplementationBegin(haveCountOf, (NSUInteger expected)) {\n  BOOL actualIsStringy = [actual isKindOfClass:[NSString class]] || [actual isKindOfClass:[NSAttributedString class]];\n  BOOL actualIsCompatible = actualIsStringy || [actual respondsToSelector:@selector(count)];\n\n  prerequisite(^BOOL{\n    return actualIsCompatible;\n  });\n\n  NSUInteger (^count)(id) = ^(id actual) {\n    if(actualIsStringy) {\n      return [actual length];\n  } else {\n      return [actual count];\n    }\n  };\n\n  match(^BOOL{\n    if(actualIsCompatible) {\n      return count(actual) == expected;\n    }\n    return NO;\n  });\n\n  failureMessageForTo(^NSString *{\n    if(!actualIsCompatible) return [NSString stringWithFormat:@\"%@ is not an instance of NSString, NSAttributedString, NSArray, NSSet, NSOrderedSet, or NSDictionary\", EXPDescribeObject(actual)];\n    return [NSString stringWithFormat:@\"expected %@ to have a count of %zi but got %zi\", EXPDescribeObject(actual), expected, count(actual)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if(!actualIsCompatible) return [NSString stringWithFormat:@\"%@ is not an instance of NSString, NSAttributedString, NSArray, NSSet, NSOrderedSet, or NSDictionary\", EXPDescribeObject(actual)];\n    return [NSString stringWithFormat:@\"expected %@ not to have a count of %zi\", EXPDescribeObject(actual), expected];\n  });\n}\nEXPMatcherImplementationEnd\n\nEXPMatcherAliasImplementation(haveCount,     haveCountOf, (NSUInteger expected));\nEXPMatcherAliasImplementation(haveACountOf,  haveCountOf, (NSUInteger expected));\nEXPMatcherAliasImplementation(haveLength,    haveCountOf, (NSUInteger expected));\nEXPMatcherAliasImplementation(haveLengthOf,  haveCountOf, (NSUInteger expected));\nEXPMatcherAliasImplementation(haveALengthOf, haveCountOf, (NSUInteger expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+match.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(match, (NSString *expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+match.m",
    "content": "#import \"EXPMatchers+match.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(match, (NSString *expected)) {\n  BOOL actualIsNil = (actual == nil);\n  BOOL expectedIsNil = (expected == nil);\n  \n  __block NSRegularExpression *regex = nil;\n  __block NSError *regexError = nil;\n  \n  prerequisite (^BOOL {\n    BOOL nilInput = (actualIsNil || expectedIsNil);\n    if (!nilInput) {\n      regex = [NSRegularExpression regularExpressionWithPattern:expected options:0 error:&regexError];\n    }\n    return !nilInput && regex;\n  });\n  \n  match(^BOOL {\n    NSRange range = [regex rangeOfFirstMatchInString:actual options:0 range:NSMakeRange(0, [actual length])];\n    return !NSEqualRanges(range, NSMakeRange(NSNotFound, 0));\n  });\n  \n  failureMessageForTo(^NSString *{\n    if (actualIsNil) return @\"the object is nil/null\";\n    if (expectedIsNil) return @\"the expression is nil/null\";\n    if (regexError) return [NSString stringWithFormat:@\"unable to create regular expression from given parameter: %@\", [regexError localizedDescription]];\n    return [NSString stringWithFormat:@\"expected: %@ to match to %@\", EXPDescribeObject(actual), expected];\n  });\n  \n  failureMessageForNotTo(^NSString *{\n    if (actualIsNil) return @\"the object is nil/null\";\n    if (expectedIsNil) return @\"the expression is nil/null\";\n    if (regexError) return [NSString stringWithFormat:@\"unable to create regular expression from given parameter: %@\", [regexError localizedDescription]];\n    return [NSString stringWithFormat:@\"expected: %@ not to match to %@\", EXPDescribeObject(actual), expected];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+postNotification.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(postNotification, (id expectedNotification));\nEXPMatcherInterface(notify, (id expectedNotification));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+postNotification.m",
    "content": "#import \"EXPMatchers+postNotification.h\"\n\n@implementation NSNotification (EXPEquality)\n\n- (BOOL)exp_isFunctionallyEqualTo:(NSNotification *)otherNotification\n{\n  if (![otherNotification isKindOfClass:[NSNotification class]]) return NO;\n\n  BOOL namesMatch = [otherNotification.name isEqualToString:self.name];\n\n  BOOL objectsMatch = YES;\n  if (otherNotification.object || self.object) {\n    objectsMatch = [otherNotification.object isEqual:self.object];\n  }\n\n  BOOL userInfoMatches = YES;\n  if (otherNotification.userInfo || self.userInfo) {\n    userInfoMatches = [otherNotification.userInfo isEqual:self.userInfo];\n  }\n\n  return (namesMatch && objectsMatch && userInfoMatches);\n}\n\n@end\n\nEXPMatcherImplementationBegin(postNotification, (id expected)){\n  BOOL actualIsNil = (actual == nil);\n  BOOL expectedIsNil = (expected == nil);\n  BOOL isNotification = [expected isKindOfClass:[NSNotification class]];\n  BOOL isName = [expected isKindOfClass:[NSString class]];\n\n  __block NSString *expectedName;\n  __block BOOL expectedNotificationOccurred = NO;\n  __block id observer;\n\n  prerequisite(^BOOL{\n    expectedNotificationOccurred = NO;\n    if (actualIsNil || expectedIsNil) return NO;\n    if (isNotification) {\n      expectedName = [expected name];\n    }else if(isName) {\n      expectedName = expected;\n    }else{\n      return NO;\n    }\n\n    observer = [[NSNotificationCenter defaultCenter] addObserverForName:expectedName object:nil queue:nil usingBlock:^(NSNotification *note){\n      if (isNotification) {\n        expectedNotificationOccurred |= [expected exp_isFunctionallyEqualTo:note];\n      }else{\n        expectedNotificationOccurred = YES;\n      }\n    }];\n    ((EXPBasicBlock)actual)();\n    return YES;\n  });\n\n  match(^BOOL{\n    if(expectedNotificationOccurred) {\n      [[NSNotificationCenter defaultCenter] removeObserver:observer];\n    }\n    return expectedNotificationOccurred;\n  });\n\n  failureMessageForTo(^NSString *{\n    if (observer) {\n      [[NSNotificationCenter defaultCenter] removeObserver:observer];\n    }\n    if(actualIsNil) return @\"the actual value is nil/null\";\n    if(expectedIsNil) return @\"the expected value is nil/null\";\n    if(!(isNotification || isName)) return @\"the actual value is not a notification or string\";\n    return [NSString stringWithFormat:@\"expected: %@, got: none\",expectedName];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if (observer) {\n      [[NSNotificationCenter defaultCenter] removeObserver:observer];\n    }\n    if(actualIsNil) return @\"the actual value is nil/null\";\n    if(expectedIsNil) return @\"the expected value is nil/null\";\n    if(!(isNotification || isName)) return @\"the actual value is not a notification or string\";\n    return [NSString stringWithFormat:@\"expected: none, got: %@\", expectedName];\n  });\n}\n\nEXPMatcherImplementationEnd\n\nEXPMatcherAliasImplementation(notify, postNotification, (id expectedNotification))\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+raise.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(raise, (NSString *expectedExceptionName));\n#define raiseAny() raise(nil)\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+raise.m",
    "content": "#import \"EXPMatchers+raise.h\"\n#import \"EXPDefines.h\"\n\nEXPMatcherImplementationBegin(raise, (NSString *expectedExceptionName)) {\n  __block NSException *exceptionCaught = nil;\n\n  match(^BOOL{\n    BOOL expectedExceptionCaught = NO;\n    @try {\n      ((EXPBasicBlock)actual)();\n    } @catch(NSException *e) {\n      exceptionCaught = e;\n      expectedExceptionCaught = (expectedExceptionName == nil) || [[exceptionCaught name] isEqualToString:expectedExceptionName];\n    }\n    return expectedExceptionCaught;\n  });\n\n  failureMessageForTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: %@, got: %@\",\n            expectedExceptionName ? expectedExceptionName : @\"any exception\",\n            exceptionCaught ? [exceptionCaught name] : @\"no exception\"];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    return [NSString stringWithFormat:@\"expected: %@, got: %@\",\n            expectedExceptionName ? [NSString stringWithFormat:@\"not %@\", expectedExceptionName] : @\"no exception\",\n            exceptionCaught ? [exceptionCaught name] : @\"no exception\"];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+raiseWithReason.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+raiseWithReason.m",
    "content": "#import \"EXPMatchers+raiseWithReason.h\"\n#import \"EXPDefines.h\"\n\nEXPMatcherImplementationBegin(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason)) {\n    __block NSException *exceptionCaught = nil;\n    \n    match(^BOOL{\n        BOOL expectedExceptionCaught = NO;\n        @try {\n            ((EXPBasicBlock)actual)();\n        } @catch(NSException *e) {\n            exceptionCaught = e;\n            expectedExceptionCaught = (((expectedExceptionName == nil) || [[exceptionCaught name] isEqualToString:expectedExceptionName]) &&\n                                       ((expectedReason == nil) || ([[exceptionCaught reason] isEqualToString:expectedReason])));\n        }\n        return expectedExceptionCaught;\n    });\n    \n    failureMessageForTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ (%@), got: %@ (%@)\",\n                expectedExceptionName ?: @\"any exception\",\n                expectedReason ?: @\"any reason\",\n                exceptionCaught ? [exceptionCaught name] : @\"no exception\",\n                exceptionCaught ? [exceptionCaught reason] : @\"\"];\n    });\n    \n    failureMessageForNotTo(^NSString *{\n        return [NSString stringWithFormat:@\"expected: %@ (%@), got: %@ (%@)\",\n                expectedExceptionName ? [NSString stringWithFormat:@\"not %@\", expectedExceptionName] : @\"no exception\",\n                expectedReason ? [NSString stringWithFormat:@\"not '%@'\", expectedReason] : @\"no reason\",\n                exceptionCaught ? [exceptionCaught name] : @\"no exception\",\n                exceptionCaught ? [exceptionCaught reason] : @\"no reason\"];\n    });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+respondTo.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(respondTo, (SEL expected));\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers+respondTo.m",
    "content": "#import \"EXPMatchers+respondTo.h\"\n#import \"EXPMatcherHelpers.h\"\n\nEXPMatcherImplementationBegin(respondTo, (SEL expected)) {\n  BOOL actualIsNil = (actual == nil);\n  BOOL expectedIsNull = (expected == NULL);\n\n  prerequisite (^BOOL {\n    return !(actualIsNil || expectedIsNull);\n  });\n\n  match(^BOOL {\n    return [actual respondsToSelector:expected];\n  });\n\n  failureMessageForTo(^NSString *{\n    if (actualIsNil) return @\"the object is nil/null\";\n    if (expectedIsNull) return @\"the selector is null\";\n    return [NSString stringWithFormat:@\"expected: %@ to respond to %@\", EXPDescribeObject(actual), NSStringFromSelector(expected)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if (actualIsNil) return @\"the object is nil/null\";\n    if (expectedIsNull) return @\"the selector is null\";\n    return [NSString stringWithFormat:@\"expected: %@ not to respond to %@\", EXPDescribeObject(actual), NSStringFromSelector(expected)];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/Matchers/EXPMatchers.h",
    "content": "#import \"EXPMatchers+beNil.h\"\n#import \"EXPMatchers+equal.h\"\n#import \"EXPMatchers+beInstanceOf.h\"\n#import \"EXPMatchers+beKindOf.h\"\n#import \"EXPMatchers+beSubclassOf.h\"\n#import \"EXPMatchers+conformTo.h\"\n#import \"EXPMatchers+beTruthy.h\"\n#import \"EXPMatchers+beFalsy.h\"\n#import \"EXPMatchers+contain.h\"\n#import \"EXPMatchers+beSupersetOf.h\"\n#import \"EXPMatchers+haveCountOf.h\"\n#import \"EXPMatchers+beIdenticalTo.h\"\n#import \"EXPMatchers+beGreaterThan.h\"\n#import \"EXPMatchers+beGreaterThanOrEqualTo.h\"\n#import \"EXPMatchers+beLessThan.h\"\n#import \"EXPMatchers+beLessThanOrEqualTo.h\"\n#import \"EXPMatchers+beInTheRangeOf.h\"\n#import \"EXPMatchers+beCloseTo.h\"\n#import \"EXPMatchers+raise.h\"\n#import \"EXPMatchers+raiseWithReason.h\"\n#import \"EXPMatchers+respondTo.h\"\n#import \"EXPMatchers+postNotification.h\"\n#import \"EXPMatchers+beginWith.h\"\n#import \"EXPMatchers+endWith.h\"\n#import \"EXPMatchers+match.h\"\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/NSObject+Expecta.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface NSObject (Expecta)\n\n- (void)recordFailureWithDescription:(NSString *)description\n                              inFile:(NSString *)filename\n                              atLine:(NSUInteger)lineNumber\n                            expected:(BOOL)expected;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/NSValue+Expecta.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface NSValue (Expecta)\n\n@property (nonatomic) const char *_EXP_objCType;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/Expecta/NSValue+Expecta.m",
    "content": "#import \"NSValue+Expecta.h\"\n#import <objc/runtime.h>\n#import \"Expecta.h\"\n\nEXPFixCategoriesBug(NSValue_Expecta);\n\n@implementation NSValue (Expecta)\n\nstatic char _EXP_typeKey;\n\n- (const char *)_EXP_objCType {\n  return [(NSString *)objc_getAssociatedObject(self, &_EXP_typeKey) cStringUsingEncoding:NSASCIIStringEncoding];\n}\n\n- (void)set_EXP_objCType:(const char *)_EXP_objCType {\n  objc_setAssociatedObject(self, &_EXP_typeKey,\n                           @(_EXP_objCType),\n                           OBJC_ASSOCIATION_COPY_NONATOMIC);\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Expecta/LICENSE",
    "content": "Copyright (c) 2011-2015 Specta Team - https://github.com/specta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "Example/Pods/Expecta/README.md",
    "content": "#Expecta\n\n[![Build Status](http://img.shields.io/travis/specta/expecta/master.svg?style=flat)](https://travis-ci.org/specta/expecta)\n[![Pod Version](http://img.shields.io/cocoapods/v/Expecta.svg?style=flat)](http://cocoadocs.org/docsets/Expecta/)\n[![Pod Platform](http://img.shields.io/cocoapods/p/Expecta.svg?style=flat)](http://cocoadocs.org/docsets/Expecta/)\n[![Pod License](http://img.shields.io/cocoapods/l/Expecta.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html)\n\nA matcher framework for Objective-C and Cocoa.\n\n## Introduction\n\nThe main advantage of using Expecta over other matcher frameworks is that you do not have to specify the data types. Also, the syntax of Expecta matchers is much more readable and does not suffer from parenthesitis.\n\n```objective-c\nexpect(@\"foo\").to.equal(@\"foo\"); // `to` is a syntactic sugar and can be safely omitted.\nexpect(foo).notTo.equal(1);\nexpect([bar isBar]).to.equal(YES);\nexpect(baz).to.equal(3.14159);\n```\n\nExpecta is framework-agnostic: it works well with XCTest and XCTest-compatible test frameworks such as [Specta](http://github.com/petejkim/specta/).\n\n\n## Setup\n\nYou can setup Expecta using [Carthage](https://github.com/Carthage/Carthage), [CocoaPods](http://github.com/CocoaPods/CocoaPods) or [completely manually](#setting-up-manually).\n\n### Carthage\n\n1. Add Expecta to your project's `Cartfile.private`:\n\n\t```ruby\n\tgithub \"specta/expecta\" \"master\"\n\t```\n\n2. Run `carthage update` in your project directory.\n3. Drag the appropriate **Expecta.framework** for your platform (located in `Carthage/Build/`) into your application’s Xcode project, and add it to your test target(s).\n\n### CocoaPods\n\n1. Add Expecta to your project's `Podfile`:\n\n\t```ruby\n\ttarget :MyApp do\n\t# Your app's dependencies\n\tend\n\n\ttarget :MyAppTests do\n\t  pod 'Expecta', '~> 0.2.4'\n\tend\n\t```\n\t\n2. Run `pod update` or `pod install` in your project directory.\n\n### Setting Up Manually\n\n1. Clone Expecta from Github.\n2. Run `rake` in your project directory to build the frameworks and libraries.\n3. Add a Cocoa or Cocoa Touch Unit Testing Bundle target to your Xcode project if you don't already have one.\n4. For **OS X projects**, copy and add `Expecta.framework` in the `Products/osx` folder to your project's test target.\n\n   For **iOS projects**, copy and add `Expecta.framework` in the `Products/ios` folder to your project's test target.\n   \n   You can also use `libExpecta.a` if you prefer to link Expecta as a static library — iOS 7.x and below require this.\n   \n6. Add `-ObjC` and `-all_load` to the **Other Linker Flags** build setting for the test target in your Xcode project.\n7. You can now use Expecta in your test classes by adding the following import:\n\n\t```objective-c\n\t@import Expecta; // If you're using Expecta.framework\n\t\n\t// OR\n\t\n\t#import <Expecta/Expecta.h> // If you're using the static library, or the framework\n\t```\n\n## Built-in Matchers\n\n> `expect(x).to.equal(y);` compares objects or primitives x and y and passes if they are identical (==) or equivalent isEqual:).\n\n> `expect(x).to.beIdenticalTo(y);` compares objects x and y and passes if they are identical and have the same memory address.\n\n> `expect(x).to.beNil();` passes if x is nil.\n\n> `expect(x).to.beTruthy();` passes if x evaluates to true (non-zero).\n\n> `expect(x).to.beFalsy();` passes if x evaluates to false (zero).\n\n> `expect(x).to.contain(y);` passes if an instance of NSArray or NSString x contains y.\n\n> `expect(x).to.beSupersetOf(y);` passes if an instance of NSArray, NSSet, NSDictionary or NSOrderedSet x contains all elements of y.\n\n> `expect(x).to.haveCountOf(y);` passes if an instance of NSArray, NSSet, NSDictionary or NSString x has a count or length of y.\n\n> `expect(x).to.beEmpty();` passes if an instance of NSArray, NSSet, NSDictionary or NSString x has a count or length of .\n\n> `expect(x).to.beInstanceOf([Foo class]);` passes if x is an instance of a class Foo.\n\n> `expect(x).to.beKindOf([Foo class]);` passes if x is an instance of a class Foo or if x is an instance of any class that inherits from the class Foo.\n\n> `expect([Foo class]).to.beSubclassOf([Bar class]);` passes if the class Foo is a subclass of the class Bar or if it is identical to the class Bar. Use beKindOf() for class clusters.\n\n> `expect(x).to.beLessThan(y);` passes if `x` is less than `y`.\n\n> `expect(x).to.beLessThanOrEqualTo(y);` passes if `x` is less than or equal to `y`.\n\n> `expect(x).to.beGreaterThan(y);` passes if `x` is greater than `y`.\n\n> `expect(x).to.beGreaterThanOrEqualTo(y);` passes if `x` is greater than or equal to `y`.\n\n> `expect(x).to.beInTheRangeOf(y,z);` passes if `x` is in the range of `y` and `z`.\n\n> `expect(x).to.beCloseTo(y);` passes if `x` is close to `y`.\n\n> `expect(x).to.beCloseToWithin(y, z);` passes if `x` is close to `y` within `z`.\n\n> `expect(^{ /* code */ }).to.raise(@\"ExceptionName\");` passes if a given block of code raises an exception named `ExceptionName`.\n\n> `expect(^{ /* code */ }).to.raiseAny();` passes if a given block of code raises any exception.\n\n> `expect(x).to.conformTo(y);` passes if `x` conforms to the protocol `y`.\n\n> `expect(x).to.respondTo(y);` passes if `x` responds to the selector `y`.\n\n> `expect(^{ /* code */ }).to.notify(@\"NotificationName\");` passes if a given block of code generates an NSNotification amed `NotificationName`.\n\n> `expect(^{ /* code */ }).to.notify(notification);` passes if a given block of code generates an NSNotification equal to the passed `notification`.\n\n> `expect(x).to.beginWith(y);` passes if an instance of NSString, NSArray, or NSOrderedSet `x` begins with `y`. Also liased by `startWith`\n\n> `expect(x).to.endWith(y);` passes if an instance of NSString, NSArray, or NSOrderedSet `x` ends with `y`.\n\n> `expect(x).to.match(y);` passes if an instance of NSString `x` matches regular expression (given as NSString) `y` one or more times.\n\n## Inverting Matchers\n\nEvery matcher's criteria can be inverted by prepending `.notTo` or `.toNot`:\n\n>`expect(x).notTo.equal(y);` compares objects or primitives x and y and passes if they are *not* equivalent.\n\n## Asynchronous Testing\n\nEvery matcher can be made to perform asynchronous testing by prepending `.will`, `.willNot` or `after(...)`:\n\n>`expect(x).will.beNil();` passes if x becomes nil before the default timeout.\n>\n>`expect(x).willNot.beNil();` passes if x becomes non-nil before the default timeout.\n>\n>`expect(x).after(3).to.beNil();` passes if x becoms nil after 3.0 seconds.\n>\n>`expect(x).after(2.5).notTo.equal(42);` passes if x doesn't equal 42 after 2.5 seconds.\n\nThe default timeout is 1.0 second and is used for all matchers if not otherwise specified. This setting can be changed by calling `[Expecta setAsynchronousTestTimeout:x]`, where `x` is the desired timeout in seconds.\n\n```objective-c\ndescribe(@\"Foo\", ^{\n  beforeAll(^{\n    // All asynchronous matching using `will` and `willNot`\n    // will have a timeout of 2.0 seconds\n    [Expecta setAsynchronousTestTimeout:2];\n  });\n\n  it(@\"will not be nil\", ^{\n    // Test case where default timeout is used\n    expect(foo).willNot.beNil();\n  });\n\n  it(@\"should equal 42 after 3 seconds\", ^{\n    // Signle case where timeout differs from the default\n    expect(foo).after(3).to.equal(42);\n  });\n});\n```\n\n## Forced Failing\n\nYou can fail a test by using the `failure` attribute. This can be used to test branching.\n\n> `failure(@\"This should not happen\");` outright fails a test.\n\n\n## Writing New Matchers\n\nWriting a new matcher is easy with special macros provided by Expecta. Take a look at how `.beKindOf()` matcher is defined:\n\n`EXPMatchers+beKindOf.h`\n\n```objective-c\n#import \"Expecta.h\"\n\nEXPMatcherInterface(beKindOf, (Class expected));\n// 1st argument is the name of the matcher function\n// 2nd argument is the list of arguments that may be passed in the function\n// call.\n// Multiple arguments are fine. (e.g. (int foo, float bar))\n\n#define beAKindOf beKindOf\n```\n\n`EXPMatchers+beKindOf.m`\n\n```objective-c\n#import \"EXPMatchers+beKindOf.h\"\n\nEXPMatcherImplementationBegin(beKindOf, (Class expected)) {\n  BOOL actualIsNil = (actual == nil);\n  BOOL expectedIsNil = (expected == nil);\n\n  prerequisite(^BOOL {\n    return !(actualIsNil || expectedIsNil);\n    // Return `NO` if matcher should fail whether or not the result is inverted\n    // using `.Not`.\n  });\n\n  match(^BOOL {\n    return [actual isKindOfClass:expected];\n    // Return `YES` if the matcher should pass, `NO` if it should not.\n    // The actual value/object is passed as `actual`.\n    // Please note that primitive values will be wrapped in NSNumber/NSValue.\n  });\n\n  failureMessageForTo(^NSString * {\n    if (actualIsNil)\n      return @\"the actual value is nil/null\";\n    if (expectedIsNil)\n      return @\"the expected value is nil/null\";\n    return [NSString\n        stringWithFormat:@\"expected: a kind of %@, \"\n                          \"got: an instance of %@, which is not a kind of %@\",\n                         [expected class], [actual class], [expected class]];\n    // Return the message to be displayed when the match function returns `YES`.\n  });\n\n  failureMessageForNotTo(^NSString * {\n    if (actualIsNil)\n      return @\"the actual value is nil/null\";\n    if (expectedIsNil)\n      return @\"the expected value is nil/null\";\n    return [NSString\n        stringWithFormat:@\"expected: not a kind of %@, \"\n                          \"got: an instance of %@, which is a kind of %@\",\n                         [expected class], [actual class], [expected class]];\n    // Return the message to be displayed when the match function returns `NO`.\n  });\n}\nEXPMatcherImplementationEnd\n```\n\n## Dynamic Predicate Matchers\n\nIt is possible to add predicate matchers by simply defining the matcher interface, with the matcher implementation being handled at runtime by delegating to the predicate method on your object.\n\nFor instance, if you have the following class:\n\n```objc\n@interface LightSwitch : NSObject\n@property (nonatomic, assign, getter=isTurnedOn) BOOL turnedOn;\n@end\n\n@implementation LightSwitch\n@synthesize turnedOn;\n@end\n```\n\nThe normal way to write an assertion that the switch is turned on would be:\n\n```objc\nexpect([lightSwitch isTurnedOn]).to.beTruthy();\n```\n\nHowever, if we define a custom predicate matcher:\n\n```objc\nEXPMatcherInterface(isTurnedOn, (void));\n```\n\n(Note: we haven't defined the matcher implementation, just it's interface)\n\nYou can now write your assertion as follows:\n\n```objc\nexpect(lightSwitch).isTurnedOn();\n```\n\n## Contribution Guidelines\n\n* Please use only spaces and indent 2 spaces at a time.\n* Please prefix instance variable names with a single underscore (`_`).\n* Please prefix custom classes and functions defined in the global scope with `EXP`.\n\n## License\n\nCopyright (c) 2012-2015 [Specta Team](https://github.com/specta?tab=members). This software is licensed under the [MIT License](http://github.com/specta/specta/raw/master/LICENSE).\n"
  },
  {
    "path": "Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h",
    "content": "//\n//  EXPMatchers+FBSnapshotTest.h\n//  Artsy\n//\n//  Created by Daniel Doubrovkine on 1/14/14.\n//  Copyright (c) 2014 Artsy Inc. All rights reserved.\n//\n\n#import <Expecta/Expecta.h>\n\n@interface EXPExpectFBSnapshotTest : NSObject\n@end\n\n/// Set the default folder for image tests to run in\nextern void setGlobalReferenceImageDir(char *reference);\n\nEXPMatcherInterface(haveValidSnapshot, (void));\nEXPMatcherInterface(recordSnapshot, (void));\n\nEXPMatcherInterface(haveValidSnapshotNamed, (NSString *snapshot));\nEXPMatcherInterface(recordSnapshotNamed, (NSString *snapshot));\n"
  },
  {
    "path": "Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.m",
    "content": "//\n//  EXPMatchers+FBSnapshotTest.h\n//  Artsy\n//\n//  Created by Daniel Doubrovkine on 1/14/14.\n//  Copyright (c) 2014 Artsy Inc. All rights reserved.\n//\n\n#import \"EXPMatchers+FBSnapshotTest.h\"\n#import <Expecta/EXPMatcherHelpers.h>\n#import <FBSnapshotTestCase/FBSnapshotTestController.h>\n\n@interface EXPExpectFBSnapshotTest()\n@property (nonatomic, strong) NSString *referenceImagesDirectory;\n@end\n\n@implementation EXPExpectFBSnapshotTest\n\n+ (id)instance\n{\n    static EXPExpectFBSnapshotTest *instance = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        instance = [[self alloc] init];\n    });\n    return instance;\n}\n\n+ (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer snapshot:(NSString *)snapshot testCase:(id)testCase record:(BOOL)record referenceDirectory:(NSString *)referenceDirectory error:(NSError **)error\n\n{\n    FBSnapshotTestController *snapshotController = [[FBSnapshotTestController alloc] initWithTestClass:[testCase class]];\n    snapshotController.recordMode = record;\n    snapshotController.referenceImagesDirectory = referenceDirectory;\n\n    if (! snapshotController.referenceImagesDirectory) {\n        [NSException raise:@\"Missing value for referenceImagesDirectory\" format:@\"Call [[EXPExpectFBSnapshotTest instance] setReferenceImagesDirectory\"];\n    }\n\n    return [snapshotController compareSnapshotOfViewOrLayer:viewOrLayer\n                                                   selector:NSSelectorFromString(snapshot)\n                                                 identifier:nil\n                                                      error:error];\n}\n\n+ (NSString *)combinedError:(NSString *)message test:(NSString *)test error:(NSError *)error\n{\n    NSAssert(message, @\"missing message\");\n    NSAssert(test, @\"missing test name\");\n\n    NSMutableArray *ary = [NSMutableArray array];\n\n    [ary addObject:[NSString stringWithFormat:@\"%@ %@\", message, test]];\n\n    for(NSString *key in error.userInfo.keyEnumerator) {\n        [ary addObject:[NSString stringWithFormat:@\" %@: %@\", key, [error.userInfo valueForKey:key]]];\n    }\n\n    return [ary componentsJoinedByString:@\"\\n\"];\n}\n\n@end\n\nvoid setGlobalReferenceImageDir(char *reference) {\n    NSString *referenceImagesDirectory = [NSString stringWithFormat:@\"%s\", reference];\n    [[EXPExpectFBSnapshotTest instance] setReferenceImagesDirectory:referenceImagesDirectory];\n};\n\n@interface EXPExpect(ReferenceDirExtension)\n- (NSString *)_getDefaultReferenceDirectory;\n@end\n\n@implementation EXPExpect(ReferenceDirExtension)\n\n- (NSString *)_getDefaultReferenceDirectory\n{\n    NSString *globalReference = [[EXPExpectFBSnapshotTest instance] referenceImagesDirectory];\n    if (globalReference) {\n        return globalReference;\n    }\n\n    // Search the test file's path to find the first folder with the substring \"tests\"\n    // then append \"/ReferenceImages\" and use that\n\n    NSString *testFileName = [NSString stringWithCString:self.fileName encoding:NSUTF8StringEncoding];\n    NSArray *pathComponents = [testFileName pathComponents];\n\n    for (NSString *folder in pathComponents) {\n        if ([folder.lowercaseString rangeOfString:@\"tests\"].location != NSNotFound) {\n\n            NSArray *folderPathComponents = [pathComponents subarrayWithRange:NSMakeRange(0, [pathComponents indexOfObject:folder] + 1)];\n            return [NSString stringWithFormat:@\"%@/ReferenceImages\", [folderPathComponents componentsJoinedByString:@\"/\"]];\n\n        }\n    }\n\n    [NSException raise:@\"Could not infer reference image folder\" format:@\"You should provide a reference dir using setGlobalReferenceImageDir(FB_REFERENCE_IMAGE_DIR);\"];\n    return nil;\n}\n@end\n\n\n\n// If you're bringing in Speca via CocoaPods\n// use the test path to get the test's image file URL\n\n#if __has_include(<Specta/Specta.h>)\n#import <Specta/Specta.h>\n#import <Specta/SpectaUtility.h>\n#import <Specta/SPTExample.h>\n\nNSString *sanitizedTestPath();\n\nNSString *sanitizedTestPath(){\n    id compiledExample = [[NSThread currentThread] threadDictionary][@\"SPTCurrentSpec\"]; // SPTSpec\n    NSString *name;\n    if ([compiledExample respondsToSelector:@selector(name)]) {\n        // Specta 0.3 syntax\n        name = [compiledExample performSelector:@selector(name)];\n    } else if ([compiledExample respondsToSelector:@selector(fileName)]) {\n        // Specta 0.2 syntax\n        name = [compiledExample performSelector:@selector(fileName)];\n    }\n    name = [[[[name componentsSeparatedByString:@\" test_\"] lastObject] stringByReplacingOccurrencesOfString:@\"__\" withString:@\"_\"] stringByReplacingOccurrencesOfString:@\"]\" withString:@\"\"];\n    return name;\n}\n\nEXPMatcherImplementationBegin(haveValidSnapshot, (void)){\n    __block NSError *error = nil;\n\n    match(^BOOL{\n        NSString *referenceImageDir = [self _getDefaultReferenceDirectory];\n        NSString *name = sanitizedTestPath();\n        if ([actual isKindOfClass:UIViewController.class]) {\n            [actual beginAppearanceTransition:YES animated:NO];\n            [actual endAppearanceTransition];\n            \n            actual = [actual view];\n        }\n\n        return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:name testCase:[self testCase] record:NO referenceDirectory:referenceImageDir error:&error];\n    });\n\n    failureMessageForTo(^NSString *{\n        return [EXPExpectFBSnapshotTest combinedError:@\"expected a matching snapshot in\" test:sanitizedTestPath() error:error];\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return [EXPExpectFBSnapshotTest combinedError:@\"expected to not have a matching snapshot in\" test:sanitizedTestPath() error:error];\n    });\n}\nEXPMatcherImplementationEnd\n\nEXPMatcherImplementationBegin(recordSnapshot, (void)) {\n    __block NSError *error = nil;\n\n    BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);\n\n    prerequisite(^BOOL{\n        return actualIsViewLayerOrViewController;\n    });\n\n    match(^BOOL{\n        NSString *referenceImageDir = [self _getDefaultReferenceDirectory];\n\n        // For view controllers do the viewWill/viewDid dance, then pass view through\n        if ([actual isKindOfClass:UIViewController.class]) {\n\n            [actual beginAppearanceTransition:YES animated:NO];\n            [actual endAppearanceTransition];\n            actual = [actual view];\n        }\n\n        [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:sanitizedTestPath() testCase:[self testCase] record:YES referenceDirectory:referenceImageDir error:&error];\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        if (!actualIsViewLayerOrViewController) {\n            return [EXPExpectFBSnapshotTest combinedError:@\"Expected a View, Layer or View Controller.\" test:sanitizedTestPath() error:nil];\n        }\n        if (error) {\n            return [EXPExpectFBSnapshotTest combinedError:@\"expected to record a snapshot in\" test:sanitizedTestPath() error:error];\n        } else {\n            return [NSString stringWithFormat:@\"snapshot %@ successfully recorded, replace recordSnapshot with a check\", sanitizedTestPath()];\n        }\n    });\n\n    failureMessageForNotTo(^NSString *{\n        if (error) {\n            return [EXPExpectFBSnapshotTest combinedError:@\"expected to record a snapshot in\" test:sanitizedTestPath() error:error];\n        } else {\n            return [NSString stringWithFormat:@\"snapshot %@ successfully recorded, replace recordSnapshot with a check\", sanitizedTestPath()];\n        }\n    });\n}\nEXPMatcherImplementationEnd\n\n#else\n\n// If you don't have Speca stub the functions\n\nEXPMatcherImplementationBegin(haveValidSnapshot, (void)){\n\n    prerequisite(^BOOL{\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        return @\"you need Specta installed via CocoaPods to use haveValidSnapshot, use haveValidSnapshotNamed instead\";\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return @\"you need Specta installed via CocoaPods to use haveValidSnapshot, use haveValidSnapshotNamed instead\";\n    });\n}\nEXPMatcherImplementationEnd\n\n\nEXPMatcherImplementationBegin(recordSnapshot, (void)) {\n    \n    prerequisite(^BOOL{\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        return @\"you need Specta installed via CocoaPods to use recordSnapshot, use recordSnapshotNamed instead\";\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return @\"you need Specta installed via CocoaPods to use recordSnapshot, use recordSnapshotNamed instead\";\n    });\n}\nEXPMatcherImplementationEnd\n\n\n#endif\n\n\n\nEXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){\n    BOOL snapshotIsNil = (snapshot == nil);\n    __block NSError *error = nil;\n\n    prerequisite(^BOOL{\n        return !(snapshotIsNil);\n    });\n\n    match(^BOOL{\n        NSString *referenceImageDir = [self _getDefaultReferenceDirectory];\n        if ([actual isKindOfClass:UIViewController.class]) {\n            [actual beginAppearanceTransition:YES animated:NO];\n            [actual endAppearanceTransition];\n\n            actual = [actual view];\n        }\n        return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:NO referenceDirectory:referenceImageDir error:&error];\n    });\n\n    failureMessageForTo(^NSString *{\n        return [EXPExpectFBSnapshotTest combinedError:@\"expected a matching snapshot named\" test:snapshot error:error];\n\n    });\n\n    failureMessageForNotTo(^NSString *{\n        return [EXPExpectFBSnapshotTest combinedError:@\"expected not to have a matching snapshot named\" test:snapshot error:error];\n    });\n}\nEXPMatcherImplementationEnd\n\nEXPMatcherImplementationBegin(recordSnapshotNamed, (NSString *snapshot)) {\n    BOOL snapshotExists = (snapshot != nil);\n    BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);\n    __block NSError *error = nil;\n    id actualRef = actual;\n\n    prerequisite(^BOOL{\n        return actualRef && snapshotExists && actualIsViewLayerOrViewController;\n    });\n\n    match(^BOOL{\n        NSString *referenceImageDir = [self _getDefaultReferenceDirectory];\n\n        // For view controllers do the viewWill/viewDid dance, then pass view through\n        if ([actual isKindOfClass:UIViewController.class]) {\n            [actual beginAppearanceTransition:YES animated:NO];\n            [actual endAppearanceTransition];\n            actual = [actual view];\n        }\n\n        [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:YES referenceDirectory:referenceImageDir error:&error];\n        return NO;\n    });\n\n    failureMessageForTo(^NSString *{\n        if (!actualIsViewLayerOrViewController) {\n            return [EXPExpectFBSnapshotTest combinedError:@\"Expected a View, Layer or View Controller.\" test:snapshot error:nil];\n        }\n        if (error) {\n            return [EXPExpectFBSnapshotTest combinedError:@\"expected to record a matching snapshot named\" test:snapshot error:error];\n        } else {\n            return [NSString stringWithFormat:@\"snapshot %@ successfully recorded, replace recordSnapshot with a check\", snapshot];\n        }\n    });\n\n    failureMessageForNotTo(^NSString *{\n        if (!actualIsViewLayerOrViewController) {\n            return [EXPExpectFBSnapshotTest combinedError:@\"Expected a View, Layer or View Controller.\" test:snapshot error:nil];\n        }\n        if (error) {\n            return [EXPExpectFBSnapshotTest combinedError:@\"expected to record a matching snapshot named\" test:snapshot error:error];\n        } else {\n            return [NSString stringWithFormat:@\"snapshot %@ successfully recorded, replace recordSnapshot with a check\", snapshot];\n        }\n    });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "Example/Pods/Expecta+Snapshots/LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2014 Daniel Doubrovkine, Artsy Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Example/Pods/Expecta+Snapshots/README.md",
    "content": "Expecta Matchers for FBSnapshotTestCase\n=======================================\n\n[Expecta](https://github.com/specta/expecta) matchers for [ios-snapshot-test-case](https://github.com/facebook/ios-snapshot-test-case).\n\n[![Build Status](https://travis-ci.org/dblock/ios-snapshot-test-case-expecta.png)](https://travis-ci.org/dblock/ios-snapshot-test-case-expecta)\n\n### Usage\n\nAdd `Expecta+Snapshots` to your Podfile, the latest `FBSnapshotTestCase` will come in as a dependency.\n\n``` ruby\npod 'Expecta+Snapshots'\n```\n\n### App setup\n\nUse `expect(view).to.recordSnapshotNamed(@\"unique snapshot name\")` to record a snapshot and `expect(view).to.haveValidSnapshotNamed(@\"unique snapshot name\")` to check it.\n\nIf you project was compiled with Specta included, you have two extra methods that use the spec hierarchy to generate the snapshot name for you: `recordSnapshot()` and `haveValidSnapshot()`. You should only call these once per `it()` block.\n\n``` Objective-C\n#define EXP_SHORTHAND\n#include <Specta/Specta.h>\n#include <Expecta/Expecta.h>\n#include <Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h>\n#include \"FBExampleView.h\"\n\nSpecBegin(FBExampleView)\n\ndescribe(@\"manual matching\", ^{\n\n    it(@\"matches view\", ^{\n        FBExampleView *view = [[FBExampleView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)];\n        expect(view).to.recordSnapshotNamed(@\"FBExampleView\");\n        expect(view).to.haveValidSnapshotNamed(@\"FBExampleView\");\n    });\n\n    it(@\"doesn't match a view\", ^{\n        FBExampleView *view = [[FBExampleView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)];\n        expect(view).toNot.haveValidSnapshotNamed(@\"FBExampleViewDoesNotExist\");\n    });\n\n});\n\ndescribe(@\"test name derived matching\", ^{\n\n    it(@\"matches view\", ^{\n        FBExampleView *view = [[FBExampleView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)];\n        expect(view).to.recordSnapshot();\n        expect(view).to.haveValidSnapshot();\n    });\n\n    it(@\"doesn't match a view\", ^{\n        FBExampleView *view = [[FBExampleView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)];\n        expect(view).toNot.haveValidSnapshot();\n    });\n\n});\n\nSpecEnd\n```\n\n### Sane defaults\n\n`EXPMatchers+FBSnapshotTest` will automatically figure out the tests folder, and [add a reference image](https://github.com/dblock/ios-snapshot-test-case-expecta/blob/master/EXPMatchers%2BFBSnapshotTest.m#L84-L85) directory, if you'd like to override this, you should include a `beforeAll` block setting the `setGlobalReferenceImageDir` in each file containing tests.\n\n```\nbeforeAll(^{\n    setGlobalReferenceImageDir(FB_REFERENCE_IMAGE_DIR);\n});\n```\n\n\n### Example\n\nA complete project can be found in [FBSnapshotTestCaseDemo](FBSnapshotTestCaseDemo).\n\nNotably, take a look at [FBSnapshotTestCaseDemoSpecs.m](FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemoTests/FBSnapshotTestCaseDemoSpecs.m) for a complete example, which is an expanded Specta version version of [FBSnapshotTestCaseDemoTests.m](https://github.com/facebook/ios-snapshot-test-case/blob/master/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemoTests/FBSnapshotTestCaseDemoTests.m).\n\nFinally you can consult the tests for [ARTiledImageView](https://github.com/dblock/ARTiledImageView/tree/master/IntegrationTests) or [NAMapKit](https://github.com/neilang/NAMapKit/tree/master/Demo/DemoTests).\n\n### License\n\nMIT, see [LICENSE](LICENSE.md)\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestCase.h",
    "content": "/*\n *  Copyright (c) 2013, Facebook, Inc.\n *  All rights reserved.\n *\n *  This source code is licensed under the BSD-style license found in the\n *  LICENSE file in the root directory of this source tree. An additional grant\n *  of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n#import <FBSnapshotTestCase/FBSnapshotTestCasePlatform.h>\n\n#import <QuartzCore/QuartzCore.h>\n\n#import <UIKit/UIKit.h>\n\n#import <XCTest/XCTest.h>\n\n#ifndef FB_REFERENCE_IMAGE_DIR\n#define FB_REFERENCE_IMAGE_DIR \"\\\"$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages\\\"\"\n#endif\n\n/**\n Similar to our much-loved XCTAssert() macros. Use this to perform your test. No need to write an explanation, though.\n @param view The view to snapshot\n @param identifier An optional identifier, used if there are multiple snapshot tests in a given -test method.\n @param suffixes An NSOrderedSet of strings for the different suffixes\n */\n#define FBSnapshotVerifyViewWithOptions(view__, identifier__, suffixes__) \\\n{ \\\nNSError *error__ = nil; \\\nBOOL comparisonSuccess__; \\\nXCTAssertTrue((suffixes__.count > 0), @\"Suffixes set cannot be empty %@\", suffixes__); \\\nfor (NSString *suffix__ in suffixes__) { \\\nNSString *referenceImagesDirectory__ = [NSString stringWithFormat:@\"%s%@\", FB_REFERENCE_IMAGE_DIR, suffix__]; \\\ncomparisonSuccess__ = [self compareSnapshotOfView:(view__) referenceImagesDirectory:referenceImagesDirectory__ identifier:(identifier__) error:&error__]; \\\nif (comparisonSuccess__ || self.recordMode) break; \\\n} \\\nXCTAssertTrue(comparisonSuccess__, @\"Snapshot comparison failed: %@\", error__); \\\nXCTAssertFalse(self.recordMode, @\"Test ran in record mode. Reference image is now saved. Disable record mode to perform an actual snapshot comparison!\"); \\\n}\n\n#define FBSnapshotVerifyView(view__, identifier__) \\\n{ \\\nFBSnapshotVerifyViewWithOptions(view__, identifier__, FBSnapshotTestCaseDefaultSuffixes()); \\\n}\n\n/**\n Similar to our much-loved XCTAssert() macros. Use this to perform your test. No need to write an explanation, though.\n @param layer The layer to snapshot\n @param identifier An optional identifier, used is there are multiple snapshot tests in a given -test method.\n @param suffixes An NSOrderedSet of strings for the different suffixes\n */\n#define FBSnapshotVerifyLayerWithOptions(layer__, identifier__, suffixes__) \\\n{ \\\nNSError *error__ = nil; \\\nBOOL comparisonSuccess__; \\\nXCTAssertTrue((suffixes__.count > 0), @\"Suffixes set cannot be empty %@\", suffixes__); \\\nfor (NSString *suffix__ in suffixes__) { \\\nNSString *referenceImagesDirectory__ = [NSString stringWithFormat:@\"%s%@\", FB_REFERENCE_IMAGE_DIR, suffix__]; \\\ncomparisonSuccess__ = [self compareSnapshotOfLayer:(layer__) referenceImagesDirectory:referenceImagesDirectory__ identifier:(identifier__) error:&error__]; \\\nif (comparisonSuccess__ || self.recordMode) break; \\\n} \\\nXCTAssertTrue(comparisonSuccess__, @\"Snapshot comparison failed: %@\", error__); \\\nXCTAssertFalse(self.recordMode, @\"Test ran in record mode. Reference image is now saved. Disable record mode to perform an actual snapshot comparison!\"); \\\n}\n\n#define FBSnapshotVerifyLayer(layer__, identifier__) \\\n{ \\\nFBSnapshotVerifyLayerWithOptions(layer__, identifier__, FBSnapshotTestCaseDefaultSuffixes()); \\\n}\n\n/**\n The base class of view snapshotting tests. If you have small UI component, it's often easier to configure it in a test\n and compare an image of the view to a reference image that write lots of complex layout-code tests.\n \n In order to flip the tests in your subclass to record the reference images set @c recordMode to @c YES.\n \n For example:\n @code\n - (void)setUp\n {\n    [super setUp];\n    self.recordMode = YES;\n }\n @endcode\n */\n@interface FBSnapshotTestCase : XCTestCase\n\n/**\n When YES, the test macros will save reference images, rather than performing an actual test.\n */\n@property (readwrite, nonatomic, assign) BOOL recordMode;\n\n/**\n Performs the comparison or records a snapshot of the layer if recordMode is YES.\n @param layer The Layer to snapshot\n @param referenceImagesDirectory The directory in which reference images are stored.\n @param identifier An optional identifier, used if there are multiple snapshot tests in a given -test method.\n @param errorPtr An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc).\n @returns YES if the comparison (or saving of the reference image) succeeded.\n */\n- (BOOL)compareSnapshotOfLayer:(CALayer *)layer\n      referenceImagesDirectory:(NSString *)referenceImagesDirectory\n                    identifier:(NSString *)identifier\n                         error:(NSError **)errorPtr;\n\n/**\n Performs the comparison or records a snapshot of the view if recordMode is YES.\n @param view The view to snapshot\n @param referenceImagesDirectory The directory in which reference images are stored.\n @param identifier An optional identifier, used if there are multiple snapshot tests in a given -test method.\n @param errorPtr An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc).\n @returns YES if the comparison (or saving of the reference image) succeeded.\n */\n- (BOOL)compareSnapshotOfView:(UIView *)view\n     referenceImagesDirectory:(NSString *)referenceImagesDirectory\n                   identifier:(NSString *)identifier\n                        error:(NSError **)errorPtr;\n\n@end\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestCase.m",
    "content": "/*\n *  Copyright (c) 2013, Facebook, Inc.\n *  All rights reserved.\n *\n *  This source code is licensed under the BSD-style license found in the\n *  LICENSE file in the root directory of this source tree. An additional grant\n *  of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n#import \"FBSnapshotTestCase.h\"\n\n#import \"FBSnapshotTestController.h\"\n\n@implementation FBSnapshotTestCase\n{\n  FBSnapshotTestController *_snapshotController;\n}\n\n- (void)setUp\n{\n  [super setUp];\n  _snapshotController = [[FBSnapshotTestController alloc] initWithTestName:NSStringFromClass([self class])];\n}\n\n- (void)tearDown\n{\n  _snapshotController = nil;\n  [super tearDown];\n}\n\n- (BOOL)recordMode\n{\n  return _snapshotController.recordMode;\n}\n\n- (void)setRecordMode:(BOOL)recordMode\n{\n  NSAssert1(_snapshotController, @\"%s cannot be called before [super setUp]\", __FUNCTION__);\n  _snapshotController.recordMode = recordMode;\n}\n\n- (BOOL)compareSnapshotOfLayer:(CALayer *)layer\n      referenceImagesDirectory:(NSString *)referenceImagesDirectory\n                    identifier:(NSString *)identifier\n                         error:(NSError **)errorPtr\n{\n  return [self _compareSnapshotOfViewOrLayer:layer\n                    referenceImagesDirectory:referenceImagesDirectory\n                                  identifier:identifier\n                                       error:errorPtr];\n}\n\n- (BOOL)compareSnapshotOfView:(UIView *)view\n     referenceImagesDirectory:(NSString *)referenceImagesDirectory\n                   identifier:(NSString *)identifier\n                        error:(NSError **)errorPtr\n{\n  return [self _compareSnapshotOfViewOrLayer:view\n                    referenceImagesDirectory:referenceImagesDirectory\n                                  identifier:identifier\n                                       error:errorPtr];\n}\n\n#pragma mark -\n#pragma mark Private API\n\n- (BOOL)_compareSnapshotOfViewOrLayer:(id)viewOrLayer\n             referenceImagesDirectory:(NSString *)referenceImagesDirectory\n                           identifier:(NSString *)identifier\n                                error:(NSError **)errorPtr\n{\n  _snapshotController.referenceImagesDirectory = referenceImagesDirectory;\n  return [_snapshotController compareSnapshotOfViewOrLayer:viewOrLayer\n                                                  selector:self.invocation.selector\n                                                identifier:identifier\n                                                     error:errorPtr];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestCasePlatform.h",
    "content": "/*\n *  Copyright (c) 2015, Facebook, Inc.\n *  All rights reserved.\n *\n *  This source code is licensed under the BSD-style license found in the\n *  LICENSE file in the root directory of this source tree. An additional grant\n *  of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n#import <Foundation/Foundation.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n Returns a Boolean value that indicates whether the snapshot test is running in 64Bit.\n This method is a convenience for creating the suffixes set based on the architecture\n that the test is running.\n \n @returns @c YES if the test is running in 64bit, otherwise @c NO.\n */\nBOOL FBSnapshotTestCaseIs64Bit(void);\n\n/**\n Returns a default set of strings that is used to append a suffix based on the architectures.\n @warning Do not modify this function, you can create your own and use it with @c FBSnapshotVerifyViewWithOptions()\n \n @returns An @c NSOrderedSet object containing strings that are appended to the reference images directory.\n */\nNSOrderedSet *FBSnapshotTestCaseDefaultSuffixes(void);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestCasePlatform.m",
    "content": "/*\n *  Copyright (c) 2015, Facebook, Inc.\n *  All rights reserved.\n *\n *  This source code is licensed under the BSD-style license found in the\n *  LICENSE file in the root directory of this source tree. An additional grant\n *  of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n#import <FBSnapshotTestCase/FBSnapshotTestCasePlatform.h>\n\nBOOL FBSnapshotTestCaseIs64Bit(void)\n{\n#if __LP64__\n  return YES;\n#else\n  return NO;\n#endif\n}\n\nNSOrderedSet *FBSnapshotTestCaseDefaultSuffixes(void)\n{\n  NSMutableOrderedSet *suffixesSet = [[NSMutableOrderedSet alloc] init];\n  [suffixesSet addObject:@\"_32\"];\n  [suffixesSet addObject:@\"_64\"];\n  if (FBSnapshotTestCaseIs64Bit()) {\n    return [suffixesSet reversedOrderedSet];\n  } \n  return [suffixesSet copy];\n}\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestController.h",
    "content": "/*\n *  Copyright (c) 2013, Facebook, Inc.\n *  All rights reserved.\n *\n *  This source code is licensed under the BSD-style license found in the\n *  LICENSE file in the root directory of this source tree. An additional grant\n *  of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\ntypedef NS_ENUM(NSInteger, FBSnapshotTestControllerErrorCode) {\n  FBSnapshotTestControllerErrorCodeUnknown,\n  FBSnapshotTestControllerErrorCodeNeedsRecord,\n  FBSnapshotTestControllerErrorCodePNGCreationFailed,\n  FBSnapshotTestControllerErrorCodeImagesDifferentSizes,\n  FBSnapshotTestControllerErrorCodeImagesDifferent,\n};\n/**\n Errors returned by the methods of FBSnapshotTestController use this domain.\n */\nextern NSString *const FBSnapshotTestControllerErrorDomain;\n\n/**\n Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary.\n */\nextern NSString *const FBReferenceImageFilePathKey;\n\n/**\n Provides the heavy-lifting for FBSnapshotTestCase. It loads and saves images, along with performing the actual pixel-\n by-pixel comparison of images.\n Instances are initialized with the test class, and directories to read and write to.\n */\n@interface FBSnapshotTestController : NSObject\n\n/**\n Record snapshots.\n **/\n@property (readwrite, nonatomic, assign) BOOL recordMode;\n\n/**\n @param testClass The subclass of FBSnapshotTestCase that is using this controller.\n @returns An instance of FBSnapshotTestController.\n */\n- (instancetype)initWithTestClass:(Class)testClass;\n\n/**\n Designated initializer.\n @param testName The name of the tests.\n @returns An instance of FBSnapshotTestController.\n */\n- (instancetype)initWithTestName:(NSString *)testName;\n\n\n/**\n Performs the comparison of the layer.\n @param layer The Layer to snapshot.\n @param selector The test method being run.\n @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method.\n @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc).\n @returns YES if the comparison (or saving of the reference image) succeeded.\n */\n- (BOOL)compareSnapshotOfLayer:(CALayer *)layer\n                      selector:(SEL)selector\n                    identifier:(NSString *)identifier\n                         error:(NSError **)errorPtr;\n\n/**\n Performs the comparison of the view.\n @param view The view to snapshot.\n @param selector The test method being run.\n @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method.\n @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc).\n @returns YES if the comparison (or saving of the reference image) succeeded.\n */\n- (BOOL)compareSnapshotOfView:(UIView *)view\n                     selector:(SEL)selector\n                   identifier:(NSString *)identifier\n                        error:(NSError **)errorPtr;\n\n/**\n Performs the comparison of a view or layer.\n @param view The view or layer to snapshot.\n @param selector The test method being run.\n @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method.\n @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc).\n @returns YES if the comparison (or saving of the reference image) succeeded.\n */\n- (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer\n                            selector:(SEL)selector\n                          identifier:(NSString *)identifier\n                               error:(NSError **)errorPtr;\n\n\n/**\n The directory in which referfence images are stored.\n */\n@property (readwrite, nonatomic, copy) NSString *referenceImagesDirectory;\n\n/**\n Loads a reference image.\n @param selector The test method being run.\n @param identifier The optional identifier, used when multiple images are tested in a single -test method.\n @param errorPtr An error, if this methods returns nil, the error will be something useful.\n @returns An image.\n */\n- (UIImage *)referenceImageForSelector:(SEL)selector\n                            identifier:(NSString *)identifier\n                                 error:(NSError **)errorPtr;\n\n/**\n Saves a reference image.\n @param selector The test method being run.\n @param identifier The optional identifier, used when multiple images are tested in a single -test method.\n @param errorPtr An error, if this methods returns NO, the error will be something useful.\n @returns An image.\n */\n- (BOOL)saveReferenceImage:(UIImage *)image\n                  selector:(SEL)selector\n                identifier:(NSString *)identifier\n                     error:(NSError **)errorPtr;\n\n/**\n Performs a pixel-by-pixel comparison of the two images.\n @param referenceImage The reference (correct) image.\n @param image The image to test against the reference.\n @param errorPtr An error that indicates why the comparison failed if it does.\n @returns YES if the comparison succeeded and the images are the same.\n */\n- (BOOL)compareReferenceImage:(UIImage *)referenceImage\n                      toImage:(UIImage *)image\n                        error:(NSError **)errorPtr;\n\n/**\n Saves the reference image and the test image to `failedOutputDirectory`.\n @param referenceImage The reference (correct) image.\n @param testImage The image to test against the reference.\n @param selector The test method being run.\n @param identifier The optional identifier, used when multiple images are tested in a single -test method.\n @param errorPtr An error that indicates why the comparison failed if it does.\n @returns YES if the save succeeded.\n */\n- (BOOL)saveFailedReferenceImage:(UIImage *)referenceImage\n                       testImage:(UIImage *)testImage\n                        selector:(SEL)selector\n                      identifier:(NSString *)identifier\n                           error:(NSError **)errorPtr;\n@end\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestController.m",
    "content": "/*\n *  Copyright (c) 2013, Facebook, Inc.\n *  All rights reserved.\n *\n *  This source code is licensed under the BSD-style license found in the\n *  LICENSE file in the root directory of this source tree. An additional grant\n *  of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n#import \"FBSnapshotTestController.h\"\n\n#import \"UIImage+Compare.h\"\n#import \"UIImage+Diff.h\"\n\n#import <UIKit/UIKit.h>\n\nNSString *const FBSnapshotTestControllerErrorDomain = @\"FBSnapshotTestControllerErrorDomain\";\n\nNSString *const FBReferenceImageFilePathKey = @\"FBReferenceImageFilePathKey\";\n\n@implementation FBSnapshotTestController\n{\n  NSString *_testName;\n  NSFileManager *_fileManager;\n}\n\n#pragma mark -\n#pragma mark Lifecycle\n\n- (instancetype)initWithTestClass:(Class)testClass;\n{\n  return [self initWithTestName:NSStringFromClass(testClass)];\n}\n\n- (instancetype)initWithTestName:(NSString *)testName\n{\n  if ((self = [super init])) {\n    _testName = [testName copy];\n    _fileManager = [[NSFileManager alloc] init];\n  }\n  return self;\n}\n\n#pragma mark -\n#pragma mark Properties\n\n- (NSString *)description\n{\n  return [NSString stringWithFormat:@\"%@ %@\", [super description], _referenceImagesDirectory];\n}\n\n#pragma mark -\n#pragma mark Public API\n\n- (UIImage *)referenceImageForSelector:(SEL)selector\n                            identifier:(NSString *)identifier\n                                 error:(NSError **)errorPtr\n{\n  NSString *filePath = [self _referenceFilePathForSelector:selector identifier:identifier];\n  UIImage *image = [UIImage imageWithContentsOfFile:filePath];\n  if (nil == image && NULL != errorPtr) {\n    BOOL exists = [_fileManager fileExistsAtPath:filePath];\n    if (!exists) {\n      *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain\n                                      code:FBSnapshotTestControllerErrorCodeNeedsRecord\n                                  userInfo:@{\n               FBReferenceImageFilePathKey: filePath,\n                 NSLocalizedDescriptionKey: @\"Unable to load reference image.\",\n          NSLocalizedFailureReasonErrorKey: @\"Reference image not found. You need to run the test in record mode\",\n                   }];\n    } else {\n      *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain\n                                      code:FBSnapshotTestControllerErrorCodeUnknown\n                                  userInfo:nil];\n    }\n  }\n  return image;\n}\n\n- (BOOL)saveReferenceImage:(UIImage *)image\n                  selector:(SEL)selector\n                identifier:(NSString *)identifier\n                     error:(NSError **)errorPtr\n{\n  BOOL didWrite = NO;\n  if (nil != image) {\n    NSString *filePath = [self _referenceFilePathForSelector:selector identifier:identifier];\n    NSData *pngData = UIImagePNGRepresentation(image);\n    if (nil != pngData) {\n      NSError *creationError = nil;\n      BOOL didCreateDir = [_fileManager createDirectoryAtPath:[filePath stringByDeletingLastPathComponent]\n                                  withIntermediateDirectories:YES\n                                                   attributes:nil\n                                                        error:&creationError];\n      if (!didCreateDir) {\n        if (NULL != errorPtr) {\n          *errorPtr = creationError;\n        }\n        return NO;\n      }\n      didWrite = [pngData writeToFile:filePath options:NSDataWritingAtomic error:errorPtr];\n      if (didWrite) {\n        NSLog(@\"Reference image save at: %@\", filePath);\n      }\n    } else {\n      if (nil != errorPtr) {\n        *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain\n                                        code:FBSnapshotTestControllerErrorCodePNGCreationFailed\n                                    userInfo:@{\n                 FBReferenceImageFilePathKey: filePath,\n                     }];\n      }\n    }\n  }\n  return didWrite;\n}\n\n- (BOOL)saveFailedReferenceImage:(UIImage *)referenceImage\n                       testImage:(UIImage *)testImage\n                        selector:(SEL)selector\n                      identifier:(NSString *)identifier\n                           error:(NSError **)errorPtr\n{\n  NSData *referencePNGData = UIImagePNGRepresentation(referenceImage);\n  NSData *testPNGData = UIImagePNGRepresentation(testImage);\n\n  NSString *referencePath = [self _failedFilePathForSelector:selector\n                                                  identifier:identifier\n                                                fileNameType:FBTestSnapshotFileNameTypeFailedReference];\n\n  NSError *creationError = nil;\n  BOOL didCreateDir = [_fileManager createDirectoryAtPath:[referencePath stringByDeletingLastPathComponent]\n                              withIntermediateDirectories:YES\n                                               attributes:nil\n                                                    error:&creationError];\n  if (!didCreateDir) {\n    if (NULL != errorPtr) {\n      *errorPtr = creationError;\n    }\n    return NO;\n  }\n\n  if (![referencePNGData writeToFile:referencePath options:NSDataWritingAtomic error:errorPtr]) {\n    return NO;\n  }\n\n  NSString *testPath = [self _failedFilePathForSelector:selector\n                                             identifier:identifier\n                                           fileNameType:FBTestSnapshotFileNameTypeFailedTest];\n\n  if (![testPNGData writeToFile:testPath options:NSDataWritingAtomic error:errorPtr]) {\n    return NO;\n  }\n\n  NSString *diffPath = [self _failedFilePathForSelector:selector\n                                             identifier:identifier\n                                           fileNameType:FBTestSnapshotFileNameTypeFailedTestDiff];\n\n  UIImage *diffImage = [referenceImage diffWithImage:testImage];\n  NSData *diffImageData = UIImagePNGRepresentation(diffImage);\n\n  if (![diffImageData writeToFile:diffPath options:NSDataWritingAtomic error:errorPtr]) {\n    return NO;\n  }\n\n  NSLog(@\"If you have Kaleidoscope installed you can run this command to see an image diff:\\n\"\n        @\"ksdiff \\\"%@\\\" \\\"%@\\\"\", referencePath, testPath);\n\n  return YES;\n}\n\n- (BOOL)compareReferenceImage:(UIImage *)referenceImage toImage:(UIImage *)image error:(NSError **)errorPtr\n{\n  if (CGSizeEqualToSize(referenceImage.size, image.size)) {\n\n    BOOL imagesEqual = [referenceImage compareWithImage:image];\n    if (NULL != errorPtr) {\n      *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain\n                                      code:FBSnapshotTestControllerErrorCodeImagesDifferent\n                                  userInfo:@{\n                 NSLocalizedDescriptionKey: @\"Images different\",\n                   }];\n    }\n    return imagesEqual;\n  }\n  if (NULL != errorPtr) {\n    *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain\n                                    code:FBSnapshotTestControllerErrorCodeImagesDifferentSizes\n                                userInfo:@{\n               NSLocalizedDescriptionKey: @\"Images different sizes\",\n        NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@\"referenceImage:%@, image:%@\",\n                                           NSStringFromCGSize(referenceImage.size),\n                                           NSStringFromCGSize(image.size)],\n                 }];\n  }\n  return NO;\n}\n\n#pragma mark -\n#pragma mark Private API\n\ntypedef NS_ENUM(NSUInteger, FBTestSnapshotFileNameType) {\n  FBTestSnapshotFileNameTypeReference,\n  FBTestSnapshotFileNameTypeFailedReference,\n  FBTestSnapshotFileNameTypeFailedTest,\n  FBTestSnapshotFileNameTypeFailedTestDiff,\n};\n\n- (NSString *)_fileNameForSelector:(SEL)selector\n                        identifier:(NSString *)identifier\n                      fileNameType:(FBTestSnapshotFileNameType)fileNameType\n{\n  NSString *fileName = nil;\n  switch (fileNameType) {\n    case FBTestSnapshotFileNameTypeFailedReference:\n      fileName = @\"reference_\";\n      break;\n    case FBTestSnapshotFileNameTypeFailedTest:\n      fileName = @\"failed_\";\n      break;\n    case FBTestSnapshotFileNameTypeFailedTestDiff:\n      fileName = @\"diff_\";\n      break;\n    default:\n      fileName = @\"\";\n      break;\n  }\n  fileName = [fileName stringByAppendingString:NSStringFromSelector(selector)];\n  if (0 < identifier.length) {\n    fileName = [fileName stringByAppendingFormat:@\"_%@\", identifier];\n  }\n  if ([[UIScreen mainScreen] scale] > 1) {\n    fileName = [fileName stringByAppendingFormat:@\"@%.fx\", [[UIScreen mainScreen] scale]];\n  }\n  fileName = [fileName stringByAppendingPathExtension:@\"png\"];\n  return fileName;\n}\n\n- (NSString *)_referenceFilePathForSelector:(SEL)selector identifier:(NSString *)identifier\n{\n  NSString *fileName = [self _fileNameForSelector:selector\n                                       identifier:identifier\n                                     fileNameType:FBTestSnapshotFileNameTypeReference];\n  NSString *filePath = [_referenceImagesDirectory stringByAppendingPathComponent:_testName];\n  filePath = [filePath stringByAppendingPathComponent:fileName];\n  return filePath;\n}\n\n- (NSString *)_failedFilePathForSelector:(SEL)selector\n                              identifier:(NSString *)identifier\n                            fileNameType:(FBTestSnapshotFileNameType)fileNameType\n{\n  NSString *fileName = [self _fileNameForSelector:selector\n                                       identifier:identifier\n                                     fileNameType:fileNameType];\n  NSString *folderPath = NSTemporaryDirectory();\n  if (getenv(\"IMAGE_DIFF_DIR\")) {\n    folderPath = @(getenv(\"IMAGE_DIFF_DIR\"));\n  }\n  NSString *filePath = [folderPath stringByAppendingPathComponent:_testName];\n  filePath = [filePath stringByAppendingPathComponent:fileName];\n  return filePath;\n}\n\n- (BOOL)compareSnapshotOfLayer:(CALayer *)layer\n                      selector:(SEL)selector\n                    identifier:(NSString *)identifier\n                         error:(NSError **)errorPtr\n{\n  return [self compareSnapshotOfViewOrLayer:layer\n                                   selector:selector\n                                 identifier:identifier\n                                      error:errorPtr];\n}\n\n- (BOOL)compareSnapshotOfView:(UIView *)view\n                     selector:(SEL)selector\n                   identifier:(NSString *)identifier\n                        error:(NSError **)errorPtr\n{\n  return [self compareSnapshotOfViewOrLayer:view\n                                   selector:selector\n                                 identifier:identifier\n                                      error:errorPtr];\n}\n\n- (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer\n                            selector:(SEL)selector\n                          identifier:(NSString *)identifier\n                               error:(NSError **)errorPtr\n{\n  if (self.recordMode) {\n    return [self _recordSnapshotOfViewOrLayer:viewOrLayer selector:selector identifier:identifier error:errorPtr];\n  } else {\n    return [self _performPixelComparisonWithViewOrLayer:viewOrLayer selector:selector identifier:identifier error:errorPtr];\n  }\n}\n\n#pragma mark -\n#pragma mark Private API\n\n- (BOOL)_performPixelComparisonWithViewOrLayer:(UIView *)viewOrLayer\n                                      selector:(SEL)selector\n                                    identifier:(NSString *)identifier\n                                         error:(NSError **)errorPtr\n{\n  UIImage *referenceImage = [self referenceImageForSelector:selector identifier:identifier error:errorPtr];\n  if (nil != referenceImage) {\n    UIImage *snapshot = [self _snapshotViewOrLayer:viewOrLayer];\n    BOOL imagesSame = [self compareReferenceImage:referenceImage toImage:snapshot error:errorPtr];\n    if (!imagesSame) {\n      [self saveFailedReferenceImage:referenceImage\n                           testImage:snapshot\n                            selector:selector\n                          identifier:identifier\n                               error:errorPtr];\n    }\n    return imagesSame;\n  }\n  return NO;\n}\n\n- (BOOL)_recordSnapshotOfViewOrLayer:(id)viewOrLayer\n                            selector:(SEL)selector\n                          identifier:(NSString *)identifier\n                               error:(NSError **)errorPtr\n{\n  UIImage *snapshot = [self _snapshotViewOrLayer:viewOrLayer];\n  return [self saveReferenceImage:snapshot selector:selector identifier:identifier error:errorPtr];\n}\n\n- (UIImage *)_snapshotViewOrLayer:(id)viewOrLayer\n{\n  CALayer *layer = nil;\n  \n  if ([viewOrLayer isKindOfClass:[UIView class]]) {\n    return [self _renderView:viewOrLayer];\n  } else if ([viewOrLayer isKindOfClass:[CALayer class]]) {\n    layer = (CALayer *)viewOrLayer;\n    [layer layoutIfNeeded];\n    return [self _renderLayer:layer];\n  } else {\n    [NSException raise:@\"Only UIView and CALayer classes can be snapshotted\" format:@\"%@\", viewOrLayer];\n  }\n  return nil;\n}\n\n- (UIImage *)_renderLayer:(CALayer *)layer\n{\n  CGRect bounds = layer.bounds;\n\n  NSAssert1(CGRectGetWidth(bounds), @\"Zero width for layer %@\", layer);\n  NSAssert1(CGRectGetHeight(bounds), @\"Zero height for layer %@\", layer);\n\n  UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0);\n  CGContextRef context = UIGraphicsGetCurrentContext();\n  NSAssert1(context, @\"Could not generate context for layer %@\", layer);\n  \n  CGContextSaveGState(context);\n  {\n    [layer renderInContext:context];\n  }\n  CGContextRestoreGState(context);\n  \n  UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();\n  UIGraphicsEndImageContext();\n  \n  return snapshot;\n}\n        \n- (UIImage *)_renderView:(UIView *)view\n{\n  [view layoutIfNeeded];\n  return [self _renderLayer:view.layer];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/UIImage+Compare.h",
    "content": "//\n//  Created by Gabriel Handford on 3/1/09.\n//  Copyright 2009-2013. All rights reserved.\n//  Created by John Boiles on 10/20/11.\n//  Copyright (c) 2011. All rights reserved\n//  Modified by Felix Schulze on 2/11/13.\n//  Copyright 2013. All rights reserved.\n//\n//  Permission is hereby granted, free of charge, to any person\n//  obtaining a copy of this software and associated documentation\n//  files (the \"Software\"), to deal in the Software without\n//  restriction, including without limitation the rights to use,\n//  copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the\n//  Software is furnished to do so, subject to the following\n//  conditions:\n//\n//  The above copyright notice and this permission notice shall be\n//  included in all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n//  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n//  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n//  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n//  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n//  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n//  OTHER DEALINGS IN THE SOFTWARE.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface UIImage (Compare)\n\n- (BOOL)compareWithImage:(UIImage *)image;\n\n@end\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/UIImage+Compare.m",
    "content": "//\n//  Created by Gabriel Handford on 3/1/09.\n//  Copyright 2009-2013. All rights reserved.\n//  Created by John Boiles on 10/20/11.\n//  Copyright (c) 2011. All rights reserved\n//  Modified by Felix Schulze on 2/11/13.\n//  Copyright 2013. All rights reserved.\n//\n//  Permission is hereby granted, free of charge, to any person\n//  obtaining a copy of this software and associated documentation\n//  files (the \"Software\"), to deal in the Software without\n//  restriction, including without limitation the rights to use,\n//  copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the\n//  Software is furnished to do so, subject to the following\n//  conditions:\n//\n//  The above copyright notice and this permission notice shall be\n//  included in all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n//  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n//  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n//  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n//  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n//  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n//  OTHER DEALINGS IN THE SOFTWARE.\n//\n\n#import \"UIImage+Compare.h\"\n\n@implementation UIImage (Compare)\n\n- (BOOL)compareWithImage:(UIImage *)image\n{\n  NSAssert(CGSizeEqualToSize(self.size, image.size), @\"Images must be same size.\");\n    \n  // The images have the equal size, so we could use the smallest amount of bytes because of byte padding\n  size_t minBytesPerRow = MIN(CGImageGetBytesPerRow(self.CGImage), CGImageGetBytesPerRow(image.CGImage));\n  size_t referenceImageSizeBytes = CGImageGetHeight(self.CGImage) * minBytesPerRow;\n  void *referenceImagePixels = calloc(1, referenceImageSizeBytes);\n  void *imagePixels = calloc(1, referenceImageSizeBytes);\n\n  if (!referenceImagePixels || !imagePixels) {\n    free(referenceImagePixels);\n    free(imagePixels);\n    return NO;\n  }\n    \n  CGContextRef referenceImageContext = CGBitmapContextCreate(referenceImagePixels,\n                                                             CGImageGetWidth(self.CGImage),\n                                                             CGImageGetHeight(self.CGImage),\n                                                             CGImageGetBitsPerComponent(self.CGImage),\n                                                             minBytesPerRow,\n                                                             CGImageGetColorSpace(self.CGImage),\n                                                             (CGBitmapInfo)kCGImageAlphaPremultipliedLast\n                                                             );\n  CGContextRef imageContext = CGBitmapContextCreate(imagePixels,\n                                                    CGImageGetWidth(image.CGImage),\n                                                    CGImageGetHeight(image.CGImage),\n                                                    CGImageGetBitsPerComponent(image.CGImage),\n                                                    minBytesPerRow,\n                                                    CGImageGetColorSpace(image.CGImage),\n                                                    (CGBitmapInfo)kCGImageAlphaPremultipliedLast\n                                                    );\n    \n  CGFloat scaleFactor = [[UIScreen mainScreen] scale];\n  CGContextScaleCTM(referenceImageContext, scaleFactor, scaleFactor);\n  CGContextScaleCTM(imageContext, scaleFactor, scaleFactor);\n    \n  if (!referenceImageContext || !imageContext) {\n    CGContextRelease(referenceImageContext);\n    CGContextRelease(imageContext);\n    free(referenceImagePixels);\n    free(imagePixels);\n    return NO;\n  }\n    \n  CGContextDrawImage(referenceImageContext, CGRectMake(0, 0, self.size.width, self.size.height), self.CGImage);\n  CGContextDrawImage(imageContext, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage);\n  CGContextRelease(referenceImageContext);\n  CGContextRelease(imageContext);\n    \n  BOOL imageEqual = (memcmp(referenceImagePixels, imagePixels, referenceImageSizeBytes) == 0);\n  free(referenceImagePixels);\n  free(imagePixels);\n  return imageEqual;\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/UIImage+Diff.h",
    "content": "//\n//  Created by Gabriel Handford on 3/1/09.\n//  Copyright 2009-2013. All rights reserved.\n//  Created by John Boiles on 10/20/11.\n//  Copyright (c) 2011. All rights reserved\n//  Modified by Felix Schulze on 2/11/13.\n//  Copyright 2013. All rights reserved.\n//\n//  Permission is hereby granted, free of charge, to any person\n//  obtaining a copy of this software and associated documentation\n//  files (the \"Software\"), to deal in the Software without\n//  restriction, including without limitation the rights to use,\n//  copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the\n//  Software is furnished to do so, subject to the following\n//  conditions:\n//\n//  The above copyright notice and this permission notice shall be\n//  included in all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n//  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n//  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n//  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n//  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n//  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n//  OTHER DEALINGS IN THE SOFTWARE.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface UIImage (Diff)\n\n- (UIImage *)diffWithImage:(UIImage *)image;\n\n@end\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/UIImage+Diff.m",
    "content": "//\n//  Created by Gabriel Handford on 3/1/09.\n//  Copyright 2009-2013. All rights reserved.\n//  Created by John Boiles on 10/20/11.\n//  Copyright (c) 2011. All rights reserved\n//  Modified by Felix Schulze on 2/11/13.\n//  Copyright 2013. All rights reserved.\n//\n//  Permission is hereby granted, free of charge, to any person\n//  obtaining a copy of this software and associated documentation\n//  files (the \"Software\"), to deal in the Software without\n//  restriction, including without limitation the rights to use,\n//  copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the\n//  Software is furnished to do so, subject to the following\n//  conditions:\n//\n//  The above copyright notice and this permission notice shall be\n//  included in all copies or substantial portions of the Software.\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n//  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n//  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n//  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n//  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n//  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n//  OTHER DEALINGS IN THE SOFTWARE.\n//\n\n#import \"UIImage+Diff.h\"\n\n@implementation UIImage (Diff)\n\n- (UIImage *)diffWithImage:(UIImage *)image\n{\n  if (!image) {\n    return nil;\n  }\n  CGSize imageSize = CGSizeMake(MAX(self.size.width, image.size.width), MAX(self.size.height, image.size.height));\n  UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0);\n  CGContextRef context = UIGraphicsGetCurrentContext();\n  [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];\n  CGContextSetAlpha(context, 0.5);\n  CGContextBeginTransparencyLayer(context, NULL);\n  [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];\n  CGContextSetBlendMode(context, kCGBlendModeDifference);\n  CGContextSetFillColorWithColor(context,[UIColor whiteColor].CGColor);\n  CGContextFillRect(context, CGRectMake(0, 0, self.size.width, self.size.height));\n  CGContextEndTransparencyLayer(context);\n  UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext();\n  UIGraphicsEndImageContext();\n  return returnImage;\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/LICENSE",
    "content": "BSD License\n\nFor the FBSnapshotTestCase software\n\nCopyright (c) 2013, Facebook, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright notice,\n    this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n  * Neither the name Facebook nor the names of its contributors may be used to\n    endorse or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "Example/Pods/FBSnapshotTestCase/README.md",
    "content": "FBSnapshotTestCase\n======================\n\n[![Build Status](https://travis-ci.org/facebook/ios-snapshot-test-case.svg)](https://travis-ci.org/facebook/ios-snapshot-test-case)\n\nWhat it does\n------------\n\nA \"snapshot test case\" takes a configured `UIView` or `CALayer` and uses the\n`renderInContext:` method to get an image snapshot of its contents. It\ncompares this snapshot to a \"reference image\" stored in your source code\nrepository and fails the test if the two images don't match.\n\nWhy?\n----\n\nAt Facebook we write a lot of UI code. As you might imagine, each type of\nfeed story is rendered using a subclass of `UIView`. There are a lot of edge\ncases that we want to handle correctly:\n\n- What if there is more text than can fit in the space available?\n- What if an image doesn't match the size of an image view?\n- What should the highlighted state look like?\n\nIt's straightforward to test logic code, but less obvious how you should test\nviews. You can do a lot of rectangle asserts, but these are hard to understand\nor visualize. Looking at an image diff shows you exactly what changed and how\nit will look to users.\n\nWe developed `FBSnapshotTestCase` to make snapshot tests easy.\n\nInstallation with CocoaPods\n---------------------------\n\n1. Add the following lines to your Podfile:\n\n     ```\n     target \"Tests\" do\n       pod 'FBSnapshotTestCase'\n     end\n     ```\n\n   Replace \"Tests\" with the name of your test project.\n\n2. Define `FB_REFERENCE_IMAGE_DIR` in `GCC_PREPROCESSOR_DEFINITIONS`. This should\n   point to the directory where you want reference images to be stored. At Facebook,\n   we normally use this:\n\n     `GCC_PREPROCESSOR_DEFINITIONS = $(inherited) FB_REFERENCE_IMAGE_DIR=\"\\\"$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages\\\"\"`\n\nCreating a snapshot test\n------------------------\n\n1. Subclass `FBSnapshotTestCase` instead of `XCTestCase`.\n2. From within your test, use `FBSnapshotVerifyView`.\n3. Run the test once with `self.recordMode = YES;` in the test's `-setUp`\n   method. (This creates the reference images on disk.)\n4. Remove the line enabling record mode and run the test.\n\nFeatures\n--------\n\n- Automatically names reference images on disk according to test class and\n  selector.\n- Prints a descriptive error message to the console on failure. (Bonus:\n  failure message includes a one-line command to see an image diff if\n  you have [Kaleidoscope](http://www.kaleidoscopeapp.com) installed.)\n- Supply an optional \"identifier\" if you want to perform multiple snapshots\n  in a single test method.\n- Support for `CALayer` via `FBSnapshotVerifyLayer`.\n\nNotes\n-----\n\nYour unit test must be an \"application test\", not a \"logic test.\" (That is, it\nmust be run within the Simulator so that it has access to UIKit.) In Xcode 5\nand later new projects only offer application tests, but older projects will\nhave separate targets for the two types.\n\nAuthors\n-------\n\n`FBSnapshotTestCase` was written at Facebook by\n[Jonathan Dann](https://facebook.com/j.p.dann) with significant contributions by\n[Todd Krabach](https://facebook.com/toddkrabach).\n\nLicense\n-------\n\n`FBSnapshotTestCase` is BSD-licensed. See `LICENSE`.\n"
  },
  {
    "path": "Example/Pods/Local Podspecs/MWPhotoBrowser.podspec.json",
    "content": "{\n  \"name\": \"MWPhotoBrowser\",\n  \"version\": \"2.1.2\",\n  \"license\": \"MIT\",\n  \"summary\": \"A simple iOS photo and video browser with optional grid view, captions and selections.\",\n  \"description\": \"MWPhotoBrowser can display one or more images or videos by providing either UIImage\\nobjects, PHAsset objects, or URLs to library assets, web images/videos or local files.\\nThe photo browser handles the downloading and caching of photos from the web seamlessly.\\nPhotos can be zoomed and panned, and optional (customisable) captions can be displayed.\",\n  \"screenshots\": [\n    \"https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser1.png\",\n    \"https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser2.png\",\n    \"https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser3.png\",\n    \"https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser4.png\",\n    \"https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser5.png\",\n    \"https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser6.png\"\n  ],\n  \"homepage\": \"https://github.com/mwaterfall/MWPhotoBrowser\",\n  \"authors\": {\n    \"Michael Waterfall\": \"michaelwaterfall@gmail.com\"\n  },\n  \"social_media_url\": \"https://twitter.com/mwaterfall\",\n  \"source\": {\n    \"git\": \"https://github.com/mwaterfall/MWPhotoBrowser.git\",\n    \"tag\": \"2.1.2\"\n  },\n  \"platforms\": {\n    \"ios\": \"7.0\"\n  },\n  \"source_files\": \"Pod/Classes/**/*\",\n  \"resource_bundles\": {\n    \"MWPhotoBrowser\": [\n      \"Pod/Assets/*.png\"\n    ]\n  },\n  \"requires_arc\": true,\n  \"frameworks\": [\n    \"ImageIO\",\n    \"QuartzCore\",\n    \"AssetsLibrary\",\n    \"MediaPlayer\"\n  ],\n  \"weak_frameworks\": \"Photos\",\n  \"dependencies\": {\n    \"MBProgressHUD\": [\n      \"~> 0.9\"\n    ],\n    \"DACircularProgress\": [\n      \"~> 2.3\"\n    ],\n    \"SDWebImage\": [\n      \"~> 3.7\",\n      \"!= 3.7.2\"\n    ]\n  }\n}\n"
  },
  {
    "path": "Example/Pods/MBProgressHUD/LICENSE",
    "content": "Copyright (c) 2009-2015 Matej Bukovinski\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "Example/Pods/MBProgressHUD/MBProgressHUD.h",
    "content": "//\n//  MBProgressHUD.h\n//  Version 0.9.2\n//  Created by Matej Bukovinski on 2.4.09.\n//\n\n// This code is distributed under the terms and conditions of the MIT license. \n\n// Copyright (c) 2009-2015 Matej Bukovinski\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import <CoreGraphics/CoreGraphics.h>\n\n@protocol MBProgressHUDDelegate;\n\n\ntypedef NS_ENUM(NSInteger, MBProgressHUDMode) {\n\t/** Progress is shown using an UIActivityIndicatorView. This is the default. */\n\tMBProgressHUDModeIndeterminate,\n\t/** Progress is shown using a round, pie-chart like, progress view. */\n\tMBProgressHUDModeDeterminate,\n\t/** Progress is shown using a horizontal progress bar */\n\tMBProgressHUDModeDeterminateHorizontalBar,\n\t/** Progress is shown using a ring-shaped progress view. */\n\tMBProgressHUDModeAnnularDeterminate,\n\t/** Shows a custom view */\n\tMBProgressHUDModeCustomView,\n\t/** Shows only labels */\n\tMBProgressHUDModeText\n};\n\ntypedef NS_ENUM(NSInteger, MBProgressHUDAnimation) {\n\t/** Opacity animation */\n\tMBProgressHUDAnimationFade,\n\t/** Opacity + scale animation */\n\tMBProgressHUDAnimationZoom,\n\tMBProgressHUDAnimationZoomOut = MBProgressHUDAnimationZoom,\n\tMBProgressHUDAnimationZoomIn\n};\n\n\n#ifndef MB_INSTANCETYPE\n#if __has_feature(objc_instancetype)\n\t#define MB_INSTANCETYPE instancetype\n#else\n\t#define MB_INSTANCETYPE id\n#endif\n#endif\n\n#ifndef MB_STRONG\n#if __has_feature(objc_arc)\n\t#define MB_STRONG strong\n#else\n\t#define MB_STRONG retain\n#endif\n#endif\n\n#ifndef MB_WEAK\n#if __has_feature(objc_arc_weak)\n\t#define MB_WEAK weak\n#elif __has_feature(objc_arc)\n\t#define MB_WEAK unsafe_unretained\n#else\n\t#define MB_WEAK assign\n#endif\n#endif\n\n#if NS_BLOCKS_AVAILABLE\ntypedef void (^MBProgressHUDCompletionBlock)();\n#endif\n\n\n/** \n * Displays a simple HUD window containing a progress indicator and two optional labels for short messages.\n *\n * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class.\n * The MBProgressHUD window spans over the entire space given to it by the initWithFrame constructor and catches all\n * user input on this region, thereby preventing the user operations on components below the view. The HUD itself is\n * drawn centered as a rounded semi-transparent view which resizes depending on the user specified content.\n *\n * This view supports four modes of operation:\n *  - MBProgressHUDModeIndeterminate - shows a UIActivityIndicatorView\n *  - MBProgressHUDModeDeterminate - shows a custom round progress indicator\n *  - MBProgressHUDModeAnnularDeterminate - shows a custom annular progress indicator\n *  - MBProgressHUDModeCustomView - shows an arbitrary, user specified view (see `customView`)\n *\n * All three modes can have optional labels assigned:\n *  - If the labelText property is set and non-empty then a label containing the provided content is placed below the\n *    indicator view.\n *  - If also the detailsLabelText property is set then another label is placed below the first label.\n */\n@interface MBProgressHUD : UIView\n\n/**\n * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:.\n *\n * @note This method sets `removeFromSuperViewOnHide`. The HUD will automatically be removed from the view hierarchy when hidden.\n *\n * @param view The view that the HUD will be added to\n * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use\n * animations while appearing.\n * @return A reference to the created HUD.\n *\n * @see hideHUDForView:animated:\n * @see animationType\n */\n+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated;\n\n/**\n * Finds the top-most HUD subview and hides it. The counterpart to this method is showHUDAddedTo:animated:.\n *\n * @note This method sets `removeFromSuperViewOnHide`. The HUD will automatically be removed from the view hierarchy when hidden.\n *\n * @param view The view that is going to be searched for a HUD subview.\n * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use\n * animations while disappearing.\n * @return YES if a HUD was found and removed, NO otherwise.\n *\n * @see showHUDAddedTo:animated:\n * @see animationType\n */\n+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated;\n\n/**\n * Finds all the HUD subviews and hides them. \n *\n * @note This method sets `removeFromSuperViewOnHide`. The HUDs will automatically be removed from the view hierarchy when hidden.\n *\n * @param view The view that is going to be searched for HUD subviews.\n * @param animated If set to YES the HUDs will disappear using the current animationType. If set to NO the HUDs will not use\n * animations while disappearing.\n * @return the number of HUDs found and removed.\n *\n * @see hideHUDForView:animated:\n * @see animationType\n */\n+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated;\n\n/**\n * Finds the top-most HUD subview and returns it. \n *\n * @param view The view that is going to be searched.\n * @return A reference to the last HUD subview discovered.\n */\n+ (MB_INSTANCETYPE)HUDForView:(UIView *)view;\n\n/**\n * Finds all HUD subviews and returns them.\n *\n * @param view The view that is going to be searched.\n * @return All found HUD views (array of MBProgressHUD objects).\n */\n+ (NSArray *)allHUDsForView:(UIView *)view;\n\n/**\n * A convenience constructor that initializes the HUD with the window's bounds. Calls the designated constructor with\n * window.bounds as the parameter.\n *\n * @param window The window instance that will provide the bounds for the HUD. Should be the same instance as\n * the HUD's superview (i.e., the window that the HUD will be added to).\n */\n- (id)initWithWindow:(UIWindow *)window;\n\n/**\n * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with\n * view.bounds as the parameter\n *\n * @param view The view instance that will provide the bounds for the HUD. Should be the same instance as\n * the HUD's superview (i.e., the view that the HUD will be added to).\n */\n- (id)initWithView:(UIView *)view;\n\n/** \n * Display the HUD. You need to make sure that the main thread completes its run loop soon after this method call so\n * the user interface can be updated. Call this method when your task is already set-up to be executed in a new thread\n * (e.g., when using something like NSOperation or calling an asynchronous call like NSURLRequest).\n *\n * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use\n * animations while appearing.\n *\n * @see animationType\n */\n- (void)show:(BOOL)animated;\n\n/** \n * Hide the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to\n * hide the HUD when your task completes.\n *\n * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use\n * animations while disappearing.\n *\n * @see animationType\n */\n- (void)hide:(BOOL)animated;\n\n/** \n * Hide the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to\n * hide the HUD when your task completes.\n *\n * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use\n * animations while disappearing.\n * @param delay Delay in seconds until the HUD is hidden.\n *\n * @see animationType\n */\n- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;\n\n/** \n * Shows the HUD while a background task is executing in a new thread, then hides the HUD.\n *\n * This method also takes care of autorelease pools so your method does not have to be concerned with setting up a\n * pool.\n *\n * @param method The method to be executed while the HUD is shown. This method will be executed in a new thread.\n * @param target The object that the target method belongs to.\n * @param object An optional object to be passed to the method.\n * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will not use\n * animations while (dis)appearing.\n */\n- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated;\n\n#if NS_BLOCKS_AVAILABLE\n\n/**\n * Shows the HUD while a block is executing on a background queue, then hides the HUD.\n *\n * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:\n */\n- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block;\n\n/**\n * Shows the HUD while a block is executing on a background queue, then hides the HUD.\n *\n * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:\n */\n- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion;\n\n/**\n * Shows the HUD while a block is executing on the specified dispatch queue, then hides the HUD.\n *\n * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:\n */\n- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue;\n\n/** \n * Shows the HUD while a block is executing on the specified dispatch queue, executes completion block on the main queue, and then hides the HUD.\n *\n * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will\n * not use animations while (dis)appearing.\n * @param block The block to be executed while the HUD is shown.\n * @param queue The dispatch queue on which the block should be executed.\n * @param completion The block to be executed on completion.\n *\n * @see completionBlock\n */\n- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue\n\t\t  completionBlock:(MBProgressHUDCompletionBlock)completion;\n\n/**\n * A block that gets called after the HUD was completely hidden.\n */\n@property (copy) MBProgressHUDCompletionBlock completionBlock;\n\n#endif\n\n/** \n * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate.\n *\n * @see MBProgressHUDMode\n */\n@property (assign) MBProgressHUDMode mode;\n\n/**\n * The animation type that should be used when the HUD is shown and hidden. \n *\n * @see MBProgressHUDAnimation\n */\n@property (assign) MBProgressHUDAnimation animationType;\n\n/**\n * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView.\n * For best results use a 37 by 37 pixel view (so the bounds match the built in indicator bounds). \n */\n@property (MB_STRONG) UIView *customView;\n\n/** \n * The HUD delegate object. \n *\n * @see MBProgressHUDDelegate\n */\n@property (MB_WEAK) id<MBProgressHUDDelegate> delegate;\n\n/** \n * An optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit\n * the entire text. If the text is too long it will get clipped by displaying \"...\" at the end. If left unchanged or\n * set to @\"\", then no message is displayed.\n */\n@property (copy) NSString *labelText;\n\n/** \n * An optional details message displayed below the labelText message. This message is displayed only if the labelText\n * property is also set and is different from an empty string (@\"\"). The details text can span multiple lines. \n */\n@property (copy) NSString *detailsLabelText;\n\n/** \n * The opacity of the HUD window. Defaults to 0.8 (80% opacity). \n */\n@property (assign) float opacity;\n\n/**\n * The color of the HUD window. Defaults to black. If this property is set, color is set using\n * this UIColor and the opacity property is not used.  using retain because performing copy on\n * UIColor base colors (like [UIColor greenColor]) cause problems with the copyZone.\n */\n@property (MB_STRONG) UIColor *color;\n\n/** \n * The x-axis offset of the HUD relative to the centre of the superview. \n */\n@property (assign) float xOffset;\n\n/** \n * The y-axis offset of the HUD relative to the centre of the superview. \n */\n@property (assign) float yOffset;\n\n/**\n * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views). \n * Defaults to 20.0\n */\n@property (assign) float margin;\n\n/**\n * The corner radius for the HUD\n * Defaults to 10.0\n */\n@property (assign) float cornerRadius;\n\n/** \n * Cover the HUD background view with a radial gradient. \n */\n@property (assign) BOOL dimBackground;\n\n/*\n * Grace period is the time (in seconds) that the invoked method may be run without \n * showing the HUD. If the task finishes before the grace time runs out, the HUD will\n * not be shown at all. \n * This may be used to prevent HUD display for very short tasks.\n * Defaults to 0 (no grace time).\n * Grace time functionality is only supported when the task status is known!\n * @see taskInProgress\n */\n@property (assign) float graceTime;\n\n/**\n * The minimum time (in seconds) that the HUD is shown. \n * This avoids the problem of the HUD being shown and than instantly hidden.\n * Defaults to 0 (no minimum show time).\n */\n@property (assign) float minShowTime;\n\n/**\n * Indicates that the executed operation is in progress. Needed for correct graceTime operation.\n * If you don't set a graceTime (different than 0.0) this does nothing.\n * This property is automatically set when using showWhileExecuting:onTarget:withObject:animated:.\n * When threading is done outside of the HUD (i.e., when the show: and hide: methods are used directly),\n * you need to set this property when your task starts and completes in order to have normal graceTime \n * functionality.\n */\n@property (assign) BOOL taskInProgress;\n\n/**\n * Removes the HUD from its parent view when hidden. \n * Defaults to NO. \n */\n@property (assign) BOOL removeFromSuperViewOnHide;\n\n/** \n * Font to be used for the main label. Set this property if the default is not adequate. \n */\n@property (MB_STRONG) UIFont* labelFont;\n\n/**\n * Color to be used for the main label. Set this property if the default is not adequate.\n */\n@property (MB_STRONG) UIColor* labelColor;\n\n/**\n * Font to be used for the details label. Set this property if the default is not adequate.\n */\n@property (MB_STRONG) UIFont* detailsLabelFont;\n\n/** \n * Color to be used for the details label. Set this property if the default is not adequate.\n */\n@property (MB_STRONG) UIColor* detailsLabelColor;\n\n/**\n * The color of the activity indicator. Defaults to [UIColor whiteColor]\n * Does nothing on pre iOS 5.\n */\n@property (MB_STRONG) UIColor *activityIndicatorColor;\n\n/** \n * The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0. \n */\n@property (assign) float progress;\n\n/**\n * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size).\n */\n@property (assign) CGSize minSize;\n\n\n/**\n * The actual size of the HUD bezel.\n * You can use this to limit touch handling on the bezel area only.\n * @see https://github.com/jdg/MBProgressHUD/pull/200\n */\n@property (atomic, assign, readonly) CGSize size;\n\n\n/**\n * Force the HUD dimensions to be equal if possible. \n */\n@property (assign, getter = isSquare) BOOL square;\n\n@end\n\n\n@protocol MBProgressHUDDelegate <NSObject>\n\n@optional\n\n/** \n * Called after the HUD was fully hidden from the screen. \n */\n- (void)hudWasHidden:(MBProgressHUD *)hud;\n\n@end\n\n\n/**\n * A progress view for showing definite progress by filling up a circle (pie chart).\n */\n@interface MBRoundProgressView : UIView \n\n/**\n * Progress (0.0 to 1.0)\n */\n@property (nonatomic, assign) float progress;\n\n/**\n * Indicator progress color.\n * Defaults to white [UIColor whiteColor]\n */\n@property (nonatomic, MB_STRONG) UIColor *progressTintColor;\n\n/**\n * Indicator background (non-progress) color.\n * Defaults to translucent white (alpha 0.1)\n */\n@property (nonatomic, MB_STRONG) UIColor *backgroundTintColor;\n\n/*\n * Display mode - NO = round or YES = annular. Defaults to round.\n */\n@property (nonatomic, assign, getter = isAnnular) BOOL annular;\n\n@end\n\n\n/**\n * A flat bar progress view. \n */\n@interface MBBarProgressView : UIView\n\n/**\n * Progress (0.0 to 1.0)\n */\n@property (nonatomic, assign) float progress;\n\n/**\n * Bar border line color.\n * Defaults to white [UIColor whiteColor].\n */\n@property (nonatomic, MB_STRONG) UIColor *lineColor;\n\n/**\n * Bar background color.\n * Defaults to clear [UIColor clearColor];\n */\n@property (nonatomic, MB_STRONG) UIColor *progressRemainingColor;\n\n/**\n * Bar progress color.\n * Defaults to white [UIColor whiteColor].\n */\n@property (nonatomic, MB_STRONG) UIColor *progressColor;\n\n@end\n"
  },
  {
    "path": "Example/Pods/MBProgressHUD/MBProgressHUD.m",
    "content": "//\n// MBProgressHUD.m\n// Version 0.9.2\n// Created by Matej Bukovinski on 2.4.09.\n//\n\n#import \"MBProgressHUD.h\"\n#import <tgmath.h>\n\n\n#if __has_feature(objc_arc)\n\t#define MB_AUTORELEASE(exp) exp\n\t#define MB_RELEASE(exp) exp\n\t#define MB_RETAIN(exp) exp\n#else\n\t#define MB_AUTORELEASE(exp) [exp autorelease]\n\t#define MB_RELEASE(exp) [exp release]\n\t#define MB_RETAIN(exp) [exp retain]\n#endif\n\n#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000\n    #define MBLabelAlignmentCenter NSTextAlignmentCenter\n#else\n    #define MBLabelAlignmentCenter UITextAlignmentCenter\n#endif\n\n#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000\n\t#define MB_TEXTSIZE(text, font) [text length] > 0 ? [text \\\n\t\tsizeWithAttributes:@{NSFontAttributeName:font}] : CGSizeZero;\n#else\n\t#define MB_TEXTSIZE(text, font) [text length] > 0 ? [text sizeWithFont:font] : CGSizeZero;\n#endif\n\n#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000\n\t#define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \\\n\t\tboundingRectWithSize:maxSize options:(NSStringDrawingUsesLineFragmentOrigin) \\\n\t\tattributes:@{NSFontAttributeName:font} context:nil].size : CGSizeZero;\n#else\n\t#define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \\\n\t\tsizeWithFont:font constrainedToSize:maxSize lineBreakMode:mode] : CGSizeZero;\n#endif\n\n#ifndef kCFCoreFoundationVersionNumber_iOS_7_0\n\t#define kCFCoreFoundationVersionNumber_iOS_7_0 847.20\n#endif\n\n#ifndef kCFCoreFoundationVersionNumber_iOS_8_0\n\t#define kCFCoreFoundationVersionNumber_iOS_8_0 1129.15\n#endif\n\n\nstatic const CGFloat kPadding = 4.f;\nstatic const CGFloat kLabelFontSize = 16.f;\nstatic const CGFloat kDetailsLabelFontSize = 12.f;\n\n\n@interface MBProgressHUD () {\n\tBOOL useAnimation;\n\tSEL methodForExecution;\n\tid targetForExecution;\n\tid objectForExecution;\n\tUILabel *label;\n\tUILabel *detailsLabel;\n\tBOOL isFinished;\n\tCGAffineTransform rotationTransform;\n}\n\n@property (atomic, MB_STRONG) UIView *indicator;\n@property (atomic, MB_STRONG) NSTimer *graceTimer;\n@property (atomic, MB_STRONG) NSTimer *minShowTimer;\n@property (atomic, MB_STRONG) NSDate *showStarted;\n\n@end\n\n\n@implementation MBProgressHUD\n\n#pragma mark - Properties\n\n@synthesize animationType;\n@synthesize delegate;\n@synthesize opacity;\n@synthesize color;\n@synthesize labelFont;\n@synthesize labelColor;\n@synthesize detailsLabelFont;\n@synthesize detailsLabelColor;\n@synthesize indicator;\n@synthesize xOffset;\n@synthesize yOffset;\n@synthesize minSize;\n@synthesize square;\n@synthesize margin;\n@synthesize dimBackground;\n@synthesize graceTime;\n@synthesize minShowTime;\n@synthesize graceTimer;\n@synthesize minShowTimer;\n@synthesize taskInProgress;\n@synthesize removeFromSuperViewOnHide;\n@synthesize customView;\n@synthesize showStarted;\n@synthesize mode;\n@synthesize labelText;\n@synthesize detailsLabelText;\n@synthesize progress;\n@synthesize size;\n@synthesize activityIndicatorColor;\n#if NS_BLOCKS_AVAILABLE\n@synthesize completionBlock;\n#endif\n\n#pragma mark - Class methods\n\n+ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated {\n\tMBProgressHUD *hud = [[self alloc] initWithView:view];\n\thud.removeFromSuperViewOnHide = YES;\n\t[view addSubview:hud];\n\t[hud show:animated];\n\treturn MB_AUTORELEASE(hud);\n}\n\n+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated {\n\tMBProgressHUD *hud = [self HUDForView:view];\n\tif (hud != nil) {\n\t\thud.removeFromSuperViewOnHide = YES;\n\t\t[hud hide:animated];\n\t\treturn YES;\n\t}\n\treturn NO;\n}\n\n+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated {\n\tNSArray *huds = [MBProgressHUD allHUDsForView:view];\n\tfor (MBProgressHUD *hud in huds) {\n\t\thud.removeFromSuperViewOnHide = YES;\n\t\t[hud hide:animated];\n\t}\n\treturn [huds count];\n}\n\n+ (MB_INSTANCETYPE)HUDForView:(UIView *)view {\n\tNSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator];\n\tfor (UIView *subview in subviewsEnum) {\n\t\tif ([subview isKindOfClass:self]) {\n\t\t\treturn (MBProgressHUD *)subview;\n\t\t}\n\t}\n\treturn nil;\n}\n\n+ (NSArray *)allHUDsForView:(UIView *)view {\n\tNSMutableArray *huds = [NSMutableArray array];\n\tNSArray *subviews = view.subviews;\n\tfor (UIView *aView in subviews) {\n\t\tif ([aView isKindOfClass:self]) {\n\t\t\t[huds addObject:aView];\n\t\t}\n\t}\n\treturn [NSArray arrayWithArray:huds];\n}\n\n#pragma mark - Lifecycle\n\n- (id)initWithFrame:(CGRect)frame {\n\tself = [super initWithFrame:frame];\n\tif (self) {\n\t\t// Set default values for properties\n\t\tself.animationType = MBProgressHUDAnimationFade;\n\t\tself.mode = MBProgressHUDModeIndeterminate;\n\t\tself.labelText = nil;\n\t\tself.detailsLabelText = nil;\n\t\tself.opacity = 0.8f;\n\t\tself.color = nil;\n\t\tself.labelFont = [UIFont boldSystemFontOfSize:kLabelFontSize];\n\t\tself.labelColor = [UIColor whiteColor];\n\t\tself.detailsLabelFont = [UIFont boldSystemFontOfSize:kDetailsLabelFontSize];\n\t\tself.detailsLabelColor = [UIColor whiteColor];\n\t\tself.activityIndicatorColor = [UIColor whiteColor];\n\t\tself.xOffset = 0.0f;\n\t\tself.yOffset = 0.0f;\n\t\tself.dimBackground = NO;\n\t\tself.margin = 20.0f;\n\t\tself.cornerRadius = 10.0f;\n\t\tself.graceTime = 0.0f;\n\t\tself.minShowTime = 0.0f;\n\t\tself.removeFromSuperViewOnHide = NO;\n\t\tself.minSize = CGSizeZero;\n\t\tself.square = NO;\n\t\tself.contentMode = UIViewContentModeCenter;\n\t\tself.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin\n\t\t\t\t\t\t\t\t| UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;\n\n\t\t// Transparent background\n\t\tself.opaque = NO;\n\t\tself.backgroundColor = [UIColor clearColor];\n\t\t// Make it invisible for now\n\t\tself.alpha = 0.0f;\n\t\t\n\t\ttaskInProgress = NO;\n\t\trotationTransform = CGAffineTransformIdentity;\n\t\t\n\t\t[self setupLabels];\n\t\t[self updateIndicators];\n\t\t[self registerForKVO];\n\t\t[self registerForNotifications];\n\t}\n\treturn self;\n}\n\n- (id)initWithView:(UIView *)view {\n\tNSAssert(view, @\"View must not be nil.\");\n\treturn [self initWithFrame:view.bounds];\n}\n\n- (id)initWithWindow:(UIWindow *)window {\n\treturn [self initWithView:window];\n}\n\n- (void)dealloc {\n\t[self unregisterFromNotifications];\n\t[self unregisterFromKVO];\n#if !__has_feature(objc_arc)\n\t[color release];\n\t[indicator release];\n\t[label release];\n\t[detailsLabel release];\n\t[labelText release];\n\t[detailsLabelText release];\n\t[graceTimer release];\n\t[minShowTimer release];\n\t[showStarted release];\n\t[customView release];\n\t[labelFont release];\n\t[labelColor release];\n\t[detailsLabelFont release];\n\t[detailsLabelColor release];\n#if NS_BLOCKS_AVAILABLE\n\t[completionBlock release];\n#endif\n\t[super dealloc];\n#endif\n}\n\n#pragma mark - Show & hide\n\n- (void)show:(BOOL)animated {\n    NSAssert([NSThread isMainThread], @\"MBProgressHUD needs to be accessed on the main thread.\");\n\tuseAnimation = animated;\n\t// If the grace time is set postpone the HUD display\n\tif (self.graceTime > 0.0) {\n        NSTimer *newGraceTimer = [NSTimer timerWithTimeInterval:self.graceTime target:self selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO];\n        [[NSRunLoop currentRunLoop] addTimer:newGraceTimer forMode:NSRunLoopCommonModes];\n        self.graceTimer = newGraceTimer;\n\t} \n\t// ... otherwise show the HUD imediately \n\telse {\n\t\t[self showUsingAnimation:useAnimation];\n\t}\n}\n\n- (void)hide:(BOOL)animated {\n    NSAssert([NSThread isMainThread], @\"MBProgressHUD needs to be accessed on the main thread.\");\n\tuseAnimation = animated;\n\t// If the minShow time is set, calculate how long the hud was shown,\n\t// and pospone the hiding operation if necessary\n\tif (self.minShowTime > 0.0 && showStarted) {\n\t\tNSTimeInterval interv = [[NSDate date] timeIntervalSinceDate:showStarted];\n\t\tif (interv < self.minShowTime) {\n\t\t\tself.minShowTimer = [NSTimer scheduledTimerWithTimeInterval:(self.minShowTime - interv) target:self \n\t\t\t\t\t\t\t\tselector:@selector(handleMinShowTimer:) userInfo:nil repeats:NO];\n\t\t\treturn;\n\t\t} \n\t}\n\t// ... otherwise hide the HUD immediately\n\t[self hideUsingAnimation:useAnimation];\n}\n\n- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay {\n\t[self performSelector:@selector(hideDelayed:) withObject:[NSNumber numberWithBool:animated] afterDelay:delay];\n}\n\n- (void)hideDelayed:(NSNumber *)animated {\n\t[self hide:[animated boolValue]];\n}\n\n#pragma mark - Timer callbacks\n\n- (void)handleGraceTimer:(NSTimer *)theTimer {\n\t// Show the HUD only if the task is still running\n\tif (taskInProgress) {\n\t\t[self showUsingAnimation:useAnimation];\n\t}\n}\n\n- (void)handleMinShowTimer:(NSTimer *)theTimer {\n\t[self hideUsingAnimation:useAnimation];\n}\n\n#pragma mark - View Hierrarchy\n\n- (void)didMoveToSuperview {\n    [self updateForCurrentOrientationAnimated:NO];\n}\n\n#pragma mark - Internal show & hide operations\n\n- (void)showUsingAnimation:(BOOL)animated {\n    // Cancel any scheduled hideDelayed: calls\n    [NSObject cancelPreviousPerformRequestsWithTarget:self];\n    [self setNeedsDisplay];\n\n\tif (animated && animationType == MBProgressHUDAnimationZoomIn) {\n\t\tself.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f));\n\t} else if (animated && animationType == MBProgressHUDAnimationZoomOut) {\n\t\tself.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f));\n\t}\n\tself.showStarted = [NSDate date];\n\t// Fade in\n\tif (animated) {\n\t\t[UIView beginAnimations:nil context:NULL];\n\t\t[UIView setAnimationDuration:0.30];\n\t\tself.alpha = 1.0f;\n\t\tif (animationType == MBProgressHUDAnimationZoomIn || animationType == MBProgressHUDAnimationZoomOut) {\n\t\t\tself.transform = rotationTransform;\n\t\t}\n\t\t[UIView commitAnimations];\n\t}\n\telse {\n\t\tself.alpha = 1.0f;\n\t}\n}\n\n- (void)hideUsingAnimation:(BOOL)animated {\n\t// Fade out\n\tif (animated && showStarted) {\n\t\t[UIView beginAnimations:nil context:NULL];\n\t\t[UIView setAnimationDuration:0.30];\n\t\t[UIView setAnimationDelegate:self];\n\t\t[UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];\n\t\t// 0.02 prevents the hud from passing through touches during the animation the hud will get completely hidden\n\t\t// in the done method\n\t\tif (animationType == MBProgressHUDAnimationZoomIn) {\n\t\t\tself.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f));\n\t\t} else if (animationType == MBProgressHUDAnimationZoomOut) {\n\t\t\tself.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f));\n\t\t}\n\n\t\tself.alpha = 0.02f;\n\t\t[UIView commitAnimations];\n\t}\n\telse {\n\t\tself.alpha = 0.0f;\n\t\t[self done];\n\t}\n\tself.showStarted = nil;\n}\n\n- (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void*)context {\n\t[self done];\n}\n\n- (void)done {\n\t[NSObject cancelPreviousPerformRequestsWithTarget:self];\n\tisFinished = YES;\n\tself.alpha = 0.0f;\n\tif (removeFromSuperViewOnHide) {\n\t\t[self removeFromSuperview];\n\t}\n#if NS_BLOCKS_AVAILABLE\n\tif (self.completionBlock) {\n\t\tself.completionBlock();\n\t\tself.completionBlock = NULL;\n\t}\n#endif\n\tif ([delegate respondsToSelector:@selector(hudWasHidden:)]) {\n\t\t[delegate performSelector:@selector(hudWasHidden:) withObject:self];\n\t}\n}\n\n#pragma mark - Threading\n\n- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated {\n\tmethodForExecution = method;\n\ttargetForExecution = MB_RETAIN(target);\n\tobjectForExecution = MB_RETAIN(object);\t\n\t// Launch execution in new thread\n\tself.taskInProgress = YES;\n\t[NSThread detachNewThreadSelector:@selector(launchExecution) toTarget:self withObject:nil];\n\t// Show HUD view\n\t[self show:animated];\n}\n\n#if NS_BLOCKS_AVAILABLE\n\n- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block {\n\tdispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);\n\t[self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL];\n}\n\n- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)())completion {\n\tdispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);\n\t[self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:completion];\n}\n\n- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue {\n\t[self showAnimated:animated whileExecutingBlock:block onQueue:queue\tcompletionBlock:NULL];\n}\n\n- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue\n\t completionBlock:(MBProgressHUDCompletionBlock)completion {\n\tself.taskInProgress = YES;\n\tself.completionBlock = completion;\n\tdispatch_async(queue, ^(void) {\n\t\tblock();\n\t\tdispatch_async(dispatch_get_main_queue(), ^(void) {\n\t\t\t[self cleanUp];\n\t\t});\n\t});\n\t[self show:animated];\n}\n\n#endif\n\n- (void)launchExecution {\n\t@autoreleasepool {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n\t\t// Start executing the requested task\n\t\t[targetForExecution performSelector:methodForExecution withObject:objectForExecution];\n#pragma clang diagnostic pop\n\t\t// Task completed, update view in main thread (note: view operations should\n\t\t// be done only in the main thread)\n\t\t[self performSelectorOnMainThread:@selector(cleanUp) withObject:nil waitUntilDone:NO];\n\t}\n}\n\n- (void)cleanUp {\n\ttaskInProgress = NO;\n#if !__has_feature(objc_arc)\n\t[targetForExecution release];\n\t[objectForExecution release];\n#else\n\ttargetForExecution = nil;\n\tobjectForExecution = nil;\n#endif\n\t[self hide:useAnimation];\n}\n\n#pragma mark - UI\n\n- (void)setupLabels {\n\tlabel = [[UILabel alloc] initWithFrame:self.bounds];\n\tlabel.adjustsFontSizeToFitWidth = NO;\n\tlabel.textAlignment = MBLabelAlignmentCenter;\n\tlabel.opaque = NO;\n\tlabel.backgroundColor = [UIColor clearColor];\n\tlabel.textColor = self.labelColor;\n\tlabel.font = self.labelFont;\n\tlabel.text = self.labelText;\n\t[self addSubview:label];\n\t\n\tdetailsLabel = [[UILabel alloc] initWithFrame:self.bounds];\n\tdetailsLabel.font = self.detailsLabelFont;\n\tdetailsLabel.adjustsFontSizeToFitWidth = NO;\n\tdetailsLabel.textAlignment = MBLabelAlignmentCenter;\n\tdetailsLabel.opaque = NO;\n\tdetailsLabel.backgroundColor = [UIColor clearColor];\n\tdetailsLabel.textColor = self.detailsLabelColor;\n\tdetailsLabel.numberOfLines = 0;\n\tdetailsLabel.font = self.detailsLabelFont;\n\tdetailsLabel.text = self.detailsLabelText;\n\t[self addSubview:detailsLabel];\n}\n\n- (void)updateIndicators {\n\t\n\tBOOL isActivityIndicator = [indicator isKindOfClass:[UIActivityIndicatorView class]];\n\tBOOL isRoundIndicator = [indicator isKindOfClass:[MBRoundProgressView class]];\n\t\n\tif (mode == MBProgressHUDModeIndeterminate) {\n\t\tif (!isActivityIndicator) {\n\t\t\t// Update to indeterminate indicator\n\t\t\t[indicator removeFromSuperview];\n\t\t\tself.indicator = MB_AUTORELEASE([[UIActivityIndicatorView alloc]\n\t\t\t\t\t\t\t\t\t\t\t initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]);\n\t\t\t[(UIActivityIndicatorView *)indicator startAnimating];\n\t\t\t[self addSubview:indicator];\n\t\t}\n#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 50000\n\t\t[(UIActivityIndicatorView *)indicator setColor:self.activityIndicatorColor];\n#endif\n\t}\n\telse if (mode == MBProgressHUDModeDeterminateHorizontalBar) {\n\t\t// Update to bar determinate indicator\n\t\t[indicator removeFromSuperview];\n\t\tself.indicator = MB_AUTORELEASE([[MBBarProgressView alloc] init]);\n\t\t[self addSubview:indicator];\n\t}\n\telse if (mode == MBProgressHUDModeDeterminate || mode == MBProgressHUDModeAnnularDeterminate) {\n\t\tif (!isRoundIndicator) {\n\t\t\t// Update to determinante indicator\n\t\t\t[indicator removeFromSuperview];\n\t\t\tself.indicator = MB_AUTORELEASE([[MBRoundProgressView alloc] init]);\n\t\t\t[self addSubview:indicator];\n\t\t}\n\t\tif (mode == MBProgressHUDModeAnnularDeterminate) {\n\t\t\t[(MBRoundProgressView *)indicator setAnnular:YES];\n\t\t}\n\t\t[(MBRoundProgressView *)indicator setProgressTintColor:self.activityIndicatorColor];\n\t\t[(MBRoundProgressView *)indicator setBackgroundTintColor:[self.activityIndicatorColor colorWithAlphaComponent:0.1f]];\n\t}\n\telse if (mode == MBProgressHUDModeCustomView && customView != indicator) {\n\t\t// Update custom view indicator\n\t\t[indicator removeFromSuperview];\n\t\tself.indicator = customView;\n\t\t[self addSubview:indicator];\n\t} else if (mode == MBProgressHUDModeText) {\n\t\t[indicator removeFromSuperview];\n\t\tself.indicator = nil;\n\t}\n}\n\n#pragma mark - Layout\n\n- (void)layoutSubviews {\n\t[super layoutSubviews];\n\t\n\t// Entirely cover the parent view\n\tUIView *parent = self.superview;\n\tif (parent) {\n\t\tself.frame = parent.bounds;\n\t}\n\tCGRect bounds = self.bounds;\n\t\n\t// Determine the total width and height needed\n\tCGFloat maxWidth = bounds.size.width - 4 * margin;\n\tCGSize totalSize = CGSizeZero;\n\t\n\tCGRect indicatorF = indicator.bounds;\n\tindicatorF.size.width = MIN(indicatorF.size.width, maxWidth);\n\ttotalSize.width = MAX(totalSize.width, indicatorF.size.width);\n\ttotalSize.height += indicatorF.size.height;\n\t\n\tCGSize labelSize = MB_TEXTSIZE(label.text, label.font);\n\tlabelSize.width = MIN(labelSize.width, maxWidth);\n\ttotalSize.width = MAX(totalSize.width, labelSize.width);\n\ttotalSize.height += labelSize.height;\n\tif (labelSize.height > 0.f && indicatorF.size.height > 0.f) {\n\t\ttotalSize.height += kPadding;\n\t}\n\n\tCGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; \n\tCGSize maxSize = CGSizeMake(maxWidth, remainingHeight);\n\tCGSize detailsLabelSize = MB_MULTILINE_TEXTSIZE(detailsLabel.text, detailsLabel.font, maxSize, detailsLabel.lineBreakMode);\n\ttotalSize.width = MAX(totalSize.width, detailsLabelSize.width);\n\ttotalSize.height += detailsLabelSize.height;\n\tif (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) {\n\t\ttotalSize.height += kPadding;\n\t}\n\t\n\ttotalSize.width += 2 * margin;\n\ttotalSize.height += 2 * margin;\n\t\n\t// Position elements\n\tCGFloat yPos = round(((bounds.size.height - totalSize.height) / 2)) + margin + yOffset;\n\tCGFloat xPos = xOffset;\n\tindicatorF.origin.y = yPos;\n\tindicatorF.origin.x = round((bounds.size.width - indicatorF.size.width) / 2) + xPos;\n\tindicator.frame = indicatorF;\n\tyPos += indicatorF.size.height;\n\t\n\tif (labelSize.height > 0.f && indicatorF.size.height > 0.f) {\n\t\tyPos += kPadding;\n\t}\n\tCGRect labelF;\n\tlabelF.origin.y = yPos;\n\tlabelF.origin.x = round((bounds.size.width - labelSize.width) / 2) + xPos;\n\tlabelF.size = labelSize;\n\tlabel.frame = labelF;\n\tyPos += labelF.size.height;\n\t\n\tif (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) {\n\t\tyPos += kPadding;\n\t}\n\tCGRect detailsLabelF;\n\tdetailsLabelF.origin.y = yPos;\n\tdetailsLabelF.origin.x = round((bounds.size.width - detailsLabelSize.width) / 2) + xPos;\n\tdetailsLabelF.size = detailsLabelSize;\n\tdetailsLabel.frame = detailsLabelF;\n\t\n\t// Enforce minsize and quare rules\n\tif (square) {\n\t\tCGFloat max = MAX(totalSize.width, totalSize.height);\n\t\tif (max <= bounds.size.width - 2 * margin) {\n\t\t\ttotalSize.width = max;\n\t\t}\n\t\tif (max <= bounds.size.height - 2 * margin) {\n\t\t\ttotalSize.height = max;\n\t\t}\n\t}\n\tif (totalSize.width < minSize.width) {\n\t\ttotalSize.width = minSize.width;\n\t} \n\tif (totalSize.height < minSize.height) {\n\t\ttotalSize.height = minSize.height;\n\t}\n\t\n\tsize = totalSize;\n}\n\n#pragma mark BG Drawing\n\n- (void)drawRect:(CGRect)rect {\n\t\n\tCGContextRef context = UIGraphicsGetCurrentContext();\n\tUIGraphicsPushContext(context);\n\n\tif (self.dimBackground) {\n\t\t//Gradient colours\n\t\tsize_t gradLocationsNum = 2;\n\t\tCGFloat gradLocations[2] = {0.0f, 1.0f};\n\t\tCGFloat gradColors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f}; \n\t\tCGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();\n\t\tCGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum);\n\t\tCGColorSpaceRelease(colorSpace);\n\t\t//Gradient center\n\t\tCGPoint gradCenter= CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);\n\t\t//Gradient radius\n\t\tfloat gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;\n\t\t//Gradient draw\n\t\tCGContextDrawRadialGradient (context, gradient, gradCenter,\n\t\t\t\t\t\t\t\t\t 0, gradCenter, gradRadius,\n\t\t\t\t\t\t\t\t\t kCGGradientDrawsAfterEndLocation);\n\t\tCGGradientRelease(gradient);\n\t}\n\n\t// Set background rect color\n\tif (self.color) {\n\t\tCGContextSetFillColorWithColor(context, self.color.CGColor);\n\t} else {\n\t\tCGContextSetGrayFillColor(context, 0.0f, self.opacity);\n\t}\n\n\t\n\t// Center HUD\n\tCGRect allRect = self.bounds;\n\t// Draw rounded HUD backgroud rect\n\tCGRect boxRect = CGRectMake(round((allRect.size.width - size.width) / 2) + self.xOffset,\n\t\t\t\t\t\t\t\tround((allRect.size.height - size.height) / 2) + self.yOffset, size.width, size.height);\n\tfloat radius = self.cornerRadius;\n\tCGContextBeginPath(context);\n\tCGContextMoveToPoint(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect));\n\tCGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMinY(boxRect) + radius, radius, 3 * (float)M_PI / 2, 0, 0);\n\tCGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMaxY(boxRect) - radius, radius, 0, (float)M_PI / 2, 0);\n\tCGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMaxY(boxRect) - radius, radius, (float)M_PI / 2, (float)M_PI, 0);\n\tCGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect) + radius, radius, (float)M_PI, 3 * (float)M_PI / 2, 0);\n\tCGContextClosePath(context);\n\tCGContextFillPath(context);\n\n\tUIGraphicsPopContext();\n}\n\n#pragma mark - KVO\n\n- (void)registerForKVO {\n\tfor (NSString *keyPath in [self observableKeypaths]) {\n\t\t[self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];\n\t}\n}\n\n- (void)unregisterFromKVO {\n\tfor (NSString *keyPath in [self observableKeypaths]) {\n\t\t[self removeObserver:self forKeyPath:keyPath];\n\t}\n}\n\n- (NSArray *)observableKeypaths {\n\treturn [NSArray arrayWithObjects:@\"mode\", @\"customView\", @\"labelText\", @\"labelFont\", @\"labelColor\",\n\t\t\t@\"detailsLabelText\", @\"detailsLabelFont\", @\"detailsLabelColor\", @\"progress\", @\"activityIndicatorColor\", nil];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {\n\tif (![NSThread isMainThread]) {\n\t\t[self performSelectorOnMainThread:@selector(updateUIForKeypath:) withObject:keyPath waitUntilDone:NO];\n\t} else {\n\t\t[self updateUIForKeypath:keyPath];\n\t}\n}\n\n- (void)updateUIForKeypath:(NSString *)keyPath {\n\tif ([keyPath isEqualToString:@\"mode\"] || [keyPath isEqualToString:@\"customView\"] ||\n\t\t[keyPath isEqualToString:@\"activityIndicatorColor\"]) {\n\t\t[self updateIndicators];\n\t} else if ([keyPath isEqualToString:@\"labelText\"]) {\n\t\tlabel.text = self.labelText;\n\t} else if ([keyPath isEqualToString:@\"labelFont\"]) {\n\t\tlabel.font = self.labelFont;\n\t} else if ([keyPath isEqualToString:@\"labelColor\"]) {\n\t\tlabel.textColor = self.labelColor;\n\t} else if ([keyPath isEqualToString:@\"detailsLabelText\"]) {\n\t\tdetailsLabel.text = self.detailsLabelText;\n\t} else if ([keyPath isEqualToString:@\"detailsLabelFont\"]) {\n\t\tdetailsLabel.font = self.detailsLabelFont;\n\t} else if ([keyPath isEqualToString:@\"detailsLabelColor\"]) {\n\t\tdetailsLabel.textColor = self.detailsLabelColor;\n\t} else if ([keyPath isEqualToString:@\"progress\"]) {\n\t\tif ([indicator respondsToSelector:@selector(setProgress:)]) {\n\t\t\t[(id)indicator setValue:@(progress) forKey:@\"progress\"];\n\t\t}\n\t\treturn;\n\t}\n\t[self setNeedsLayout];\n\t[self setNeedsDisplay];\n}\n\n#pragma mark - Notifications\n\n- (void)registerForNotifications {\n#if !TARGET_OS_TV\n\tNSNotificationCenter *nc = [NSNotificationCenter defaultCenter];\n\n\t[nc addObserver:self selector:@selector(statusBarOrientationDidChange:)\n               name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];\n#endif\n}\n\n- (void)unregisterFromNotifications {\n#if !TARGET_OS_TV\n\tNSNotificationCenter *nc = [NSNotificationCenter defaultCenter];\n    [nc removeObserver:self name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];\n#endif\n}\n\n#if !TARGET_OS_TV\n- (void)statusBarOrientationDidChange:(NSNotification *)notification {\n\tUIView *superview = self.superview;\n\tif (!superview) {\n\t\treturn;\n\t} else {\n\t\t[self updateForCurrentOrientationAnimated:YES];\n\t}\n}\n#endif\n\n- (void)updateForCurrentOrientationAnimated:(BOOL)animated {\n    // Stay in sync with the superview in any case\n    if (self.superview) {\n        self.bounds = self.superview.bounds;\n        [self setNeedsDisplay];\n    }\n\n    // Not needed on iOS 8+, compile out when the deployment target allows,\n    // to avoid sharedApplication problems on extension targets\n#if __IPHONE_OS_VERSION_MIN_REQUIRED < 80000\n    // Only needed pre iOS 7 when added to a window\n    BOOL iOS8OrLater = kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0;\n    if (iOS8OrLater || ![self.superview isKindOfClass:[UIWindow class]]) return;\n\n\tUIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;\n\tCGFloat radians = 0;\n\tif (UIInterfaceOrientationIsLandscape(orientation)) {\n\t\tif (orientation == UIInterfaceOrientationLandscapeLeft) { radians = -(CGFloat)M_PI_2; } \n\t\telse { radians = (CGFloat)M_PI_2; }\n\t\t// Window coordinates differ!\n\t\tself.bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.width);\n\t} else {\n\t\tif (orientation == UIInterfaceOrientationPortraitUpsideDown) { radians = (CGFloat)M_PI; } \n\t\telse { radians = 0; }\n\t}\n\trotationTransform = CGAffineTransformMakeRotation(radians);\n\t\n\tif (animated) {\n\t\t[UIView beginAnimations:nil context:nil];\n\t\t[UIView setAnimationDuration:0.3];\n\t}\n\t[self setTransform:rotationTransform];\n\tif (animated) {\n\t\t[UIView commitAnimations];\n\t}\n#endif\n}\n\n@end\n\n\n@implementation MBRoundProgressView\n\n#pragma mark - Lifecycle\n\n- (id)init {\n\treturn [self initWithFrame:CGRectMake(0.f, 0.f, 37.f, 37.f)];\n}\n\n- (id)initWithFrame:(CGRect)frame {\n\tself = [super initWithFrame:frame];\n\tif (self) {\n\t\tself.backgroundColor = [UIColor clearColor];\n\t\tself.opaque = NO;\n\t\t_progress = 0.f;\n\t\t_annular = NO;\n\t\t_progressTintColor = [[UIColor alloc] initWithWhite:1.f alpha:1.f];\n\t\t_backgroundTintColor = [[UIColor alloc] initWithWhite:1.f alpha:.1f];\n\t\t[self registerForKVO];\n\t}\n\treturn self;\n}\n\n- (void)dealloc {\n\t[self unregisterFromKVO];\n#if !__has_feature(objc_arc)\n\t[_progressTintColor release];\n\t[_backgroundTintColor release];\n\t[super dealloc];\n#endif\n}\n\n#pragma mark - Drawing\n\n- (void)drawRect:(CGRect)rect {\n\t\n\tCGRect allRect = self.bounds;\n\tCGRect circleRect = CGRectInset(allRect, 2.0f, 2.0f);\n\tCGContextRef context = UIGraphicsGetCurrentContext();\n\t\n\tif (_annular) {\n\t\t// Draw background\n\t\tBOOL isPreiOS7 = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0;\n\t\tCGFloat lineWidth = isPreiOS7 ? 5.f : 2.f;\n\t\tUIBezierPath *processBackgroundPath = [UIBezierPath bezierPath];\n\t\tprocessBackgroundPath.lineWidth = lineWidth;\n\t\tprocessBackgroundPath.lineCapStyle = kCGLineCapButt;\n\t\tCGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);\n\t\tCGFloat radius = (self.bounds.size.width - lineWidth)/2;\n\t\tCGFloat startAngle = - ((float)M_PI / 2); // 90 degrees\n\t\tCGFloat endAngle = (2 * (float)M_PI) + startAngle;\n\t\t[processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];\n\t\t[_backgroundTintColor set];\n\t\t[processBackgroundPath stroke];\n\t\t// Draw progress\n\t\tUIBezierPath *processPath = [UIBezierPath bezierPath];\n\t\tprocessPath.lineCapStyle = isPreiOS7 ? kCGLineCapRound : kCGLineCapSquare;\n\t\tprocessPath.lineWidth = lineWidth;\n\t\tendAngle = (self.progress * 2 * (float)M_PI) + startAngle;\n\t\t[processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];\n\t\t[_progressTintColor set];\n\t\t[processPath stroke];\n\t} else {\n\t\t// Draw background\n\t\t[_progressTintColor setStroke];\n\t\t[_backgroundTintColor setFill];\n\t\tCGContextSetLineWidth(context, 2.0f);\n\t\tCGContextFillEllipseInRect(context, circleRect);\n\t\tCGContextStrokeEllipseInRect(context, circleRect);\n\t\t// Draw progress\n\t\tCGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2);\n\t\tCGFloat radius = (allRect.size.width - 4) / 2;\n\t\tCGFloat startAngle = - ((float)M_PI / 2); // 90 degrees\n\t\tCGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle;\n\t\t[_progressTintColor setFill];\n\t\tCGContextMoveToPoint(context, center.x, center.y);\n\t\tCGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0);\n\t\tCGContextClosePath(context);\n\t\tCGContextFillPath(context);\n\t}\n}\n\n#pragma mark - KVO\n\n- (void)registerForKVO {\n\tfor (NSString *keyPath in [self observableKeypaths]) {\n\t\t[self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];\n\t}\n}\n\n- (void)unregisterFromKVO {\n\tfor (NSString *keyPath in [self observableKeypaths]) {\n\t\t[self removeObserver:self forKeyPath:keyPath];\n\t}\n}\n\n- (NSArray *)observableKeypaths {\n\treturn [NSArray arrayWithObjects:@\"progressTintColor\", @\"backgroundTintColor\", @\"progress\", @\"annular\", nil];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {\n\t[self setNeedsDisplay];\n}\n\n@end\n\n\n@implementation MBBarProgressView\n\n#pragma mark - Lifecycle\n\n- (id)init {\n\treturn [self initWithFrame:CGRectMake(.0f, .0f, 120.0f, 20.0f)];\n}\n\n- (id)initWithFrame:(CGRect)frame {\n\tself = [super initWithFrame:frame];\n\tif (self) {\n\t\t_progress = 0.f;\n\t\t_lineColor = [UIColor whiteColor];\n\t\t_progressColor = [UIColor whiteColor];\n\t\t_progressRemainingColor = [UIColor clearColor];\n\t\tself.backgroundColor = [UIColor clearColor];\n\t\tself.opaque = NO;\n\t\t[self registerForKVO];\n\t}\n\treturn self;\n}\n\n- (void)dealloc {\n\t[self unregisterFromKVO];\n#if !__has_feature(objc_arc)\n\t[_lineColor release];\n\t[_progressColor release];\n\t[_progressRemainingColor release];\n\t[super dealloc];\n#endif\n}\n\n#pragma mark - Drawing\n\n- (void)drawRect:(CGRect)rect {\n\tCGContextRef context = UIGraphicsGetCurrentContext();\n\t\n\tCGContextSetLineWidth(context, 2);\n\tCGContextSetStrokeColorWithColor(context,[_lineColor CGColor]);\n\tCGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]);\n\t\n\t// Draw background\n\tfloat radius = (rect.size.height / 2) - 2;\n\tCGContextMoveToPoint(context, 2, rect.size.height/2);\n\tCGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius);\n\tCGContextAddLineToPoint(context, rect.size.width - radius - 2, 2);\n\tCGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius);\n\tCGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius);\n\tCGContextAddLineToPoint(context, radius + 2, rect.size.height - 2);\n\tCGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius);\n\tCGContextFillPath(context);\n\t\n\t// Draw border\n\tCGContextMoveToPoint(context, 2, rect.size.height/2);\n\tCGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius);\n\tCGContextAddLineToPoint(context, rect.size.width - radius - 2, 2);\n\tCGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius);\n\tCGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius);\n\tCGContextAddLineToPoint(context, radius + 2, rect.size.height - 2);\n\tCGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius);\n\tCGContextStrokePath(context);\n\t\n\tCGContextSetFillColorWithColor(context, [_progressColor CGColor]);\n\tradius = radius - 2;\n\tfloat amount = self.progress * rect.size.width;\n\t\n\t// Progress in the middle area\n\tif (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) {\n\t\tCGContextMoveToPoint(context, 4, rect.size.height/2);\n\t\tCGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);\n\t\tCGContextAddLineToPoint(context, amount, 4);\n\t\tCGContextAddLineToPoint(context, amount, radius + 4);\n\t\t\n\t\tCGContextMoveToPoint(context, 4, rect.size.height/2);\n\t\tCGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);\n\t\tCGContextAddLineToPoint(context, amount, rect.size.height - 4);\n\t\tCGContextAddLineToPoint(context, amount, radius + 4);\n\t\t\n\t\tCGContextFillPath(context);\n\t}\n\t\n\t// Progress in the right arc\n\telse if (amount > radius + 4) {\n\t\tfloat x = amount - (rect.size.width - radius - 4);\n\n\t\tCGContextMoveToPoint(context, 4, rect.size.height/2);\n\t\tCGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);\n\t\tCGContextAddLineToPoint(context, rect.size.width - radius - 4, 4);\n\t\tfloat angle = -acos(x/radius);\n\t\tif (isnan(angle)) angle = 0;\n\t\tCGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, M_PI, angle, 0);\n\t\tCGContextAddLineToPoint(context, amount, rect.size.height/2);\n\n\t\tCGContextMoveToPoint(context, 4, rect.size.height/2);\n\t\tCGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);\n\t\tCGContextAddLineToPoint(context, rect.size.width - radius - 4, rect.size.height - 4);\n\t\tangle = acos(x/radius);\n\t\tif (isnan(angle)) angle = 0;\n\t\tCGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1);\n\t\tCGContextAddLineToPoint(context, amount, rect.size.height/2);\n\t\t\n\t\tCGContextFillPath(context);\n\t}\n\t\n\t// Progress is in the left arc\n\telse if (amount < radius + 4 && amount > 0) {\n\t\tCGContextMoveToPoint(context, 4, rect.size.height/2);\n\t\tCGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);\n\t\tCGContextAddLineToPoint(context, radius + 4, rect.size.height/2);\n\n\t\tCGContextMoveToPoint(context, 4, rect.size.height/2);\n\t\tCGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);\n\t\tCGContextAddLineToPoint(context, radius + 4, rect.size.height/2);\n\t\t\n\t\tCGContextFillPath(context);\n\t}\n}\n\n#pragma mark - KVO\n\n- (void)registerForKVO {\n\tfor (NSString *keyPath in [self observableKeypaths]) {\n\t\t[self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];\n\t}\n}\n\n- (void)unregisterFromKVO {\n\tfor (NSString *keyPath in [self observableKeypaths]) {\n\t\t[self removeObserver:self forKeyPath:keyPath];\n\t}\n}\n\n- (NSArray *)observableKeypaths {\n\treturn [NSArray arrayWithObjects:@\"lineColor\", @\"progressRemainingColor\", @\"progressColor\", @\"progress\", nil];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {\n\t[self setNeedsDisplay];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/MBProgressHUD/README.mdown",
    "content": "# MBProgressHUD [![Build Status](https://travis-ci.org/matej/MBProgressHUD.svg?branch=master)](https://travis-ci.org/matej/MBProgressHUD)\n\nMBProgressHUD is an iOS drop-in class that displays a translucent HUD with an indicator and/or labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private UIKit UIProgressHUD with some additional features. \n\n[![](http://dl.dropbox.com/u/378729/MBProgressHUD/1-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/1.png)\n[![](http://dl.dropbox.com/u/378729/MBProgressHUD/2-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/2.png)\n[![](http://dl.dropbox.com/u/378729/MBProgressHUD/3-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/3.png)\n[![](http://dl.dropbox.com/u/378729/MBProgressHUD/4-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/4.png)\n[![](http://dl.dropbox.com/u/378729/MBProgressHUD/5-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/5.png)\n[![](http://dl.dropbox.com/u/378729/MBProgressHUD/6-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/6.png)\n[![](http://dl.dropbox.com/u/378729/MBProgressHUD/7-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/7.png)\n\n## Requirements\n\nMBProgressHUD works on any iOS version and is compatible with both ARC and non-ARC projects. It depends on the following Apple frameworks, which should already be included with most Xcode templates:\n\n* Foundation.framework\n* UIKit.framework\n* CoreGraphics.framework\n\nYou will need the latest developer tools in order to build MBProgressHUD. Old Xcode versions might work, but compatibility will not be explicitly maintained.\n\n## Adding MBProgressHUD to your project\n\n### Cocoapods\n\n[CocoaPods](http://cocoapods.org) is the recommended way to add MBProgressHUD to your project.\n\n1. Add a pod entry for MBProgressHUD to your Podfile `pod 'MBProgressHUD', '~> 0.9.2'`\n2. Install the pod(s) by running `pod install`.\n3. Include MBProgressHUD wherever you need it with `#import \"MBProgressHUD.h\"`.\n\n### Source files\n\nAlternatively you can directly add the `MBProgressHUD.h` and `MBProgressHUD.m` source files to your project.\n\n1. Download the [latest code version](https://github.com/matej/MBProgressHUD/archive/master.zip) or add the repository as a git submodule to your git-tracked project. \n2. Open your project in Xcode, then drag and drop `MBProgressHUD.h` and `MBProgressHUD.m` onto your project (use the \"Product Navigator view\"). Make sure to select Copy items when asked if you extracted the code archive outside of your project. \n3. Include MBProgressHUD wherever you need it with `#import \"MBProgressHUD.h\"`.\n\n### Static library\n\nYou can also add MBProgressHUD as a static library to your project or workspace. \n\n1. Download the [latest code version](https://github.com/matej/MBProgressHUD/downloads) or add the repository as a git submodule to your git-tracked project. \n2. Open your project in Xcode, then drag and drop `MBProgressHUD.xcodeproj` onto your project or workspace (use the \"Product Navigator view\"). \n3. Select your target and go to the Build phases tab. In the Link Binary With Libraries section select the add button. On the sheet find and add `libMBProgressHUD.a`. You might also need to add `MBProgressHUD` to the Target Dependencies list. \n4. Include MBProgressHUD wherever you need it with `#import <MBProgressHUD/MBProgressHUD.h>`.\n\n## Usage\n\nThe main guideline you need to follow when dealing with MBProgressHUD while running long-running tasks is keeping the main thread work-free, so the UI can be updated promptly. The recommended way of using MBProgressHUD is therefore to set it up on the main thread and then spinning the task, that you want to perform, off onto a new thread. \n\n```objective-c\n[MBProgressHUD showHUDAddedTo:self.view animated:YES];\ndispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{\n\t// Do something...\n\tdispatch_async(dispatch_get_main_queue(), ^{\n\t\t[MBProgressHUD hideHUDForView:self.view animated:YES];\n\t});\n});\n```\n\nIf you need to configure the HUD you can do this by using the MBProgressHUD reference that showHUDAddedTo:animated: returns. \n\n```objective-c\nMBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];\nhud.mode = MBProgressHUDModeAnnularDeterminate;\nhud.labelText = @\"Loading\";\n[self doSomethingInBackgroundWithProgressCallback:^(float progress) {\n\thud.progress = progress;\n} completionCallback:^{\n\t[hud hide:YES];\n}];\n```\n\nUI updates should always be done on the main thread. Some MBProgressHUD setters are however considered \"thread safe\" and can be called from background threads. Those also include `setMode:`, `setCustomView:`, `setLabelText:`, `setLabelFont:`, `setDetailsLabelText:`, `setDetailsLabelFont:` and `setProgress:`.\n\nIf you need to run your long-running task in the main thread, you should perform it with a slight delay, so UIKit will have enough time to update the UI (i.e., draw the HUD) before you block the main thread with your task.\n\n```objective-c\n[MBProgressHUD showHUDAddedTo:self.view animated:YES];\ndispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC);\ndispatch_after(popTime, dispatch_get_main_queue(), ^(void){\n\t// Do something...\n\t[MBProgressHUD hideHUDForView:self.view animated:YES];\n});\n```\n\nYou should be aware that any HUD updates issued inside the above block won't be displayed until the block completes.\n\nFor more examples, including how to use MBProgressHUD with asynchronous operations such as NSURLConnection, take a look at the bundled demo project. Extensive API documentation is provided in the header file (MBProgressHUD.h).\n\n\n## License\n\nThis code is distributed under the terms and conditions of the [MIT license](LICENSE). \n\n## Change-log\n\nA brief summary of each MBProgressHUD release can be found on the [wiki](https://github.com/matej/MBProgressHUD/wiki/Change-log). \n"
  },
  {
    "path": "Example/Pods/Pods.xcodeproj/project.pbxproj",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>archiveVersion</key>\n\t<string>1</string>\n\t<key>classes</key>\n\t<dict/>\n\t<key>objectVersion</key>\n\t<string>46</string>\n\t<key>objects</key>\n\t<dict>\n\t\t<key>0043FDF25F85C0B2C11CEAE6B1C54D87</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestController.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/FBSnapshotTestController.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>00518063767430EDC47FCC49F4409458</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6CD3EC2C1FBF5655137A99638E9CC950</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>00641C72D7132E5890F1F7098337C3B5</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>01F58E863C79FB5A8433D92837FFE619</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>target</key>\n\t\t\t<string>FE2F1D7B9D9FCEA148517E4657B243F4</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>D47B0B4C04222F6784D38356F02BEB32</string>\n\t\t</dict>\n\t\t<key>021C50274FF43A6F07E119D572C3ACB6</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DA7F16221783A03C084D9BAAF7F404DB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>02C7E3EC1E1DFDD7046BD26A67E92686</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>981F3EB0C06E97770D2421E673B013A1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>033AB851ACA0C118D009F781287565DD</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1E360C94C47826C4CAEEDBFC04C36A42</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>0364DCB58A865A2830638D2C0CCED41C</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>043124F225814F80E4ED4FF4BC40156A</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>68F141757E1606330C04FEBE78CBCE4E</string>\n\t\t\t\t<string>9F19BCDE9BF6E330E14588598DFC6337</string>\n\t\t\t\t<string>C6FE69AE06A770FF76C19B8039EC0780</string>\n\t\t\t\t<string>BD56223A67203315C1B15E39E3B40934</string>\n\t\t\t\t<string>9C95EBE1D39EEFE5E6404691C95BE2E2</string>\n\t\t\t\t<string>6F1FCA0BD48258CDEC1B14D704BA3E5D</string>\n\t\t\t\t<string>1580BE8D870658FFFB9EF3D04B9213CC</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Target Support Files/Pods-MWPhotoBrowser_Tests</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>0498B98EB393D71314953683060EFD58</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>EC0223776620A3EA741C855D0211CB0A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>04D4EDE1F05B96EE8BB9DCD368608620</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>805AE44C01D7936BA8A238C6C5C4807D</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/Specta/Specta-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>0515A6974CBAF0F2F6F72BF87921704B</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>F6045A7604731086F9E1A9412E290302</string>\n\t\t\t\t<string>589E7F4856ABE929D7FC9F3A9E506FC9</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>051AA4E51A019933DD1E5CE99CD7352A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0B92B054A2338462A743EB368F25A20B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>05257CC76400D71826E603561A0F73E6</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>0515A6974CBAF0F2F6F72BF87921704B</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>26D004126E0DEF14D67843A444753FFF</string>\n\t\t\t\t<string>065410F935EC72489896726380B72CD0</string>\n\t\t\t\t<string>9AF3FD4A822DCF644AB50D3967C43C14</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array>\n\t\t\t\t<string>F601833D09980E16136321674463BE81</string>\n\t\t\t\t<string>0DB9AA4B919BA54CFBC8FC6FD7AFB3F6</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Expecta+Snapshots</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>Expecta+Snapshots</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>6CD36438CB08D280978CEE50363D8B8B</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>052A17875CB827423D627183396CEB60</key>\n\t\t<dict>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ALWAYS_SEARCH_USER_PATHS</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>CLANG_CXX_LANGUAGE_STANDARD</key>\n\t\t\t\t<string>gnu++0x</string>\n\t\t\t\t<key>CLANG_CXX_LIBRARY</key>\n\t\t\t\t<string>libc++</string>\n\t\t\t\t<key>CLANG_ENABLE_MODULES</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_ENABLE_OBJC_ARC</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_BOOL_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_CONSTANT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_DIRECT_OBJC_ISA_USAGE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_EMPTY_BODY</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_ENUM_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_INT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_OBJC_ROOT_CLASS</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_UNREACHABLE_CODE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN__DUPLICATE_METHOD_MATCH</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>COPY_PHASE_STRIP</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>ENABLE_NS_ASSERTIONS</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>GCC_C_LANGUAGE_STANDARD</key>\n\t\t\t\t<string>gnu99</string>\n\t\t\t\t<key>GCC_PREPROCESSOR_DEFINITIONS</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>RELEASE=1</string>\n\t\t\t\t</array>\n\t\t\t\t<key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_ABOUT_RETURN_TYPE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNDECLARED_SELECTOR</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNINITIALIZED_AUTOS</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNUSED_FUNCTION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNUSED_VARIABLE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>STRIP_INSTALLED_PRODUCT</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>SYMROOT</key>\n\t\t\t\t<string>${SRCROOT}/../build</string>\n\t\t\t\t<key>VALIDATE_PRODUCT</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>0557FD60A45F62CD51B4972ECE5C2584</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MBProgressHUD.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>05DA7841521B75C4D0C303F32E518117</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+respondTo.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+respondTo.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>060435B6E32CF028837E209B20E10639</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C6FE69AE06A770FF76C19B8039EC0780</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>065410F935EC72489896726380B72CD0</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>866569443B7D10AB5D6DC7FC0830235B</string>\n\t\t\t\t<string>9933B0F6DA01EDF804C19260E9515E65</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>0668957FEB1B3CAE2EABBC4AA9ABA7C3</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTCallSite.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTCallSite.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>0683DF2C9B7FC27B576AB4B7B3B146ED</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beGreaterThan.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beGreaterThan.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>07282695806D1DFBF187BFA004D80641</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>700F6F4AFED22AEAA1D8943236F94924</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>072C184628072EDE522629576F1716DE</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>5E350F03F362C03BE32737DDE72D4632</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>0732716566238BF76BBF762F85C8ABAF</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>617F18A93D7ABF1322E3C027265893C2</string>\n\t\t\t\t<string>85A6795A5CD0C6DEA1F648AD0E6D1248</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>079AA0CF857B4A46F161666C58867CE1</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>081F2104425CDCB0915354E2FBD7E24E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1D536F869C3B7D603AC4630F3F6AB919</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>098439AB598DDF1AF51146A2E3E2E562</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>FC214077677D4F02E03C6C85F774E028</string>\n\t\t\t\t<string>82FC12F67E83874B93592218E9FB4CA0</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>0A924BC847BA99EBCBD0588603448B05</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPBlockDefinedMatcher.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPBlockDefinedMatcher.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>0A9B8E3E35177F52A643739AC50B00FA</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemArrowLeft.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>0AB1B49E98BEDDFC8A45BB3C1FB54076</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beSubclassOf.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beSubclassOf.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>0B3C605995BE46623C50E7658A1CBE96</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>CA8230DE5C83368629EF3E62C4F0E7B7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>0B7E61991D03B44046913BF3B345F4DB</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>XCTest.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/XCTest.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>DEVELOPER_DIR</string>\n\t\t</dict>\n\t\t<key>0B8D4914244FCBC9DCAF2B9AD09F3DD5</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>target</key>\n\t\t\t<string>9775596B3CA16905FC8F66DA8E2A3C67</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>96AE2267633A27498E5D45052BDD5BBA</string>\n\t\t</dict>\n\t\t<key>0B92B054A2338462A743EB368F25A20B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>PlayButtonOverlayLargeTap@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>0C1A29BFF65C6F2801B1BE0058718A19</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>37E4F69B3E6AFDEE8D68A3430CEC8BF5</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>0DB9AA4B919BA54CFBC8FC6FD7AFB3F6</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t\t<key>target</key>\n\t\t\t<string>7D9E32DAA93E15CFCF77A5BCD2D4BAA2</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>EE04EE8ADAB8F7DF7FCEFDDD1E801BE6</string>\n\t\t</dict>\n\t\t<key>0DC4183837552F23710F86F9A032C574</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>5D39CEB65ADB521B117CA181C2BB2C9C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>0EAAE557DE1A2949F0793F1230D1D046</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Expecta</string>\n\t\t\t<key>target</key>\n\t\t\t<string>2F501FE84845EAD97B9087DAFCBBEE0E</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>A6FD2A9ACF0632CB41BE9AF1A13BD166</string>\n\t\t</dict>\n\t\t<key>0EF1CB072B5DE5D0A4EE7053EB0E2364</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>574FFB37A8EF309B1A1EB265267DD353</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>0F43FEACB0C18DD4C724B1655AF47728</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>60ECF290B248258F453088B6258302E6</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>104AFE24D01F1C4495926B40B53C5945</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>92F064516748B6AA4C6E303A38C3FE6A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>105B37778FEED1965C8D0AF4C9E4B4F1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>487E0AD53E31FE34EC41B45FC09B9097</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>10E446637EC5FF03088009E61B491E75</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageCompat.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageCompat.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>10E68FD4A81F628778B6A4992DB9D952</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beTruthy.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beTruthy.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1181CB6FC2D63C42F19EAB56C604A71E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>A09DD0AB6A512D74E5628070EBD56026</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>1186EC1A35306EBBA8C3DE66F0973361</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>B0DFED38A647950C79B13061F923258C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>11CF0C44A36897A963C15B74C2AEC415</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3DEC242716623D70F4CC9F4A1D32805C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>123355D7F0D268DB0998FFB1CDD859B9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MBProgressHUD-prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1246A1C00980422020A6884856143651</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>0C1A29BFF65C6F2801B1BE0058718A19</string>\n\t\t\t\t<string>0F43FEACB0C18DD4C724B1655AF47728</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXHeadersBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>1398D1B84667A17FCB66182F776EAC42</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTSharedExampleGroups.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTSharedExampleGroups.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>13EA87F4C750EBB98261F8ED14EFE770</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Specta</string>\n\t\t\t<key>target</key>\n\t\t\t<string>E9AAC3590B391F4CFAF5F8348E6A8FE4</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>659BCA5950BB094273E9E83E7D5271CF</string>\n\t\t</dict>\n\t\t<key>143C0831AA95D723669324010D835391</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>CF95446EA555B49150EA7270096D78B2</string>\n\t\t\t\t<string>487899F028C39C1A518547A1AB2F625A</string>\n\t\t\t\t<string>FDF72740DBC37AFACFED73ED42282383</string>\n\t\t\t\t<string>11CF0C44A36897A963C15B74C2AEC415</string>\n\t\t\t\t<string>4383E0DB1B07B9EB3155EF5D5F27C7BA</string>\n\t\t\t\t<string>104AFE24D01F1C4495926B40B53C5945</string>\n\t\t\t\t<string>779CFE8771E1EF63F1313ABEBCECAA4A</string>\n\t\t\t\t<string>49EFE75BAF060A33327F3CE8C18436F2</string>\n\t\t\t\t<string>5F6D96E64F890BDC4A75B73C3D50A0DD</string>\n\t\t\t\t<string>F1F4E65611F5567A86AF797EAC3E225B</string>\n\t\t\t\t<string>A7141BC83638F4B38D4D312BAE3BDAC4</string>\n\t\t\t\t<string>CB08C9C83ABDBE55762A423ED48491EF</string>\n\t\t\t\t<string>AD6791D14732A3C17164F61CC72FFB0D</string>\n\t\t\t\t<string>A65C491577A425AF82C53F4A40A0A24B</string>\n\t\t\t\t<string>2F9D3747596E4E074C3B776949091047</string>\n\t\t\t\t<string>7436C602BB1CA7C91560C28DE749357B</string>\n\t\t\t\t<string>63D0CD4F0FB5A6103E1DDB46E876CBB6</string>\n\t\t\t\t<string>C6671739E8C5904113586F8BEBBC9780</string>\n\t\t\t\t<string>43A1104CA0C628C2F693902EADA32B8C</string>\n\t\t\t\t<string>E06376455C1D5E45B97ACDC5438FC15B</string>\n\t\t\t\t<string>BD30B724A71CF5D6E93805B7615EC79C</string>\n\t\t\t\t<string>6D37BEAA1FC469C3582CACB4E9766502</string>\n\t\t\t\t<string>5E8F33E777456DA63CA2D902508A9058</string>\n\t\t\t\t<string>C2BFF99EB859FD7056CF72C4850693D1</string>\n\t\t\t\t<string>46F312CBB94BAE62B58D3D7AE28E8DBD</string>\n\t\t\t\t<string>B33234F432A72D5E8B65694AE937B78F</string>\n\t\t\t\t<string>8059E5674B08670B0A002D564FFABF44</string>\n\t\t\t\t<string>562BE99A6F630E709218EB9B3CF36E90</string>\n\t\t\t\t<string>2239B5E63C5D2C1323D66F489F075C42</string>\n\t\t\t\t<string>69EBB956302554EA37775F4D806BC4DD</string>\n\t\t\t\t<string>7FEE0E8D094D7BCCAC7129473EE05ADC</string>\n\t\t\t\t<string>A26F992E8831118311F3DB7CB830595A</string>\n\t\t\t\t<string>E2EBD18BA89D3FF648947DF31FA12D44</string>\n\t\t\t\t<string>40F505E69B8595361C2A7528DDA222B6</string>\n\t\t\t\t<string>872948DAF79618AD725E0BF364E5DDD4</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>148F0DEDC306B5A6D48931EFD279E456</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>EF5AC1222120F3BAB7481DA9615352B0</string>\n\t\t\t\t<string>4594A9E3FFD6ABE129882E959BB04B5E</string>\n\t\t\t\t<string>D5DEC16E7CEEFEABBFEBAC3A10358C5A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Support Files</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../Target Support Files/FBSnapshotTestCase</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>14BD3072FD1820402768B3D7F2E5B4A5</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8952D588C0E5AD12FD9CF3747FD061F2</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>14C609D8F203FD45194E93997EFF744E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>71865C216F48AC822D486C8D9B03B13C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>15082EF0D1C2F7B77B63E0116BDA622C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPFloatTuple.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPFloatTuple.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1580BE8D870658FFFB9EF3D04B9213CC</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests.release.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1629A676793A787618A75ABDA6E20C56</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8C4EC29461A90C294949DAE717A1BEC5</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>164BD2AFD03035E623A90DF1AA095C35</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3B5A7151F8E4FBFE54BF6C2AC80958FA</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>1684C2FDDE674F14B731CC940021D8C6</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>00641C72D7132E5890F1F7098337C3B5</string>\n\t\t\t\t<string>8C4ECAE46CD3BCB39F38F4FF20D074F6</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>16A268BA14BC07320BB7FBE44EB37FB4</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3CD608194F35F47CEC250368B43C48E9</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>18391089432560093C31CCA48ABB46AE</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>NSValue+Expecta.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/NSValue+Expecta.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>189B7D1A1C865073D7F999A759ACD292</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>FD6FA76757975A1FC954269CE5739798</string>\n\t\t\t\t<string>257A97CE59C7E5D5191DC00F15C261BE</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>199EF76AC47B3EE9FA80BE53835AB7B1</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>66081D3480D1FA028C4DE2344BF616D4</string>\n\t\t\t\t<string>69363A59A4E2FF95D6A62AA88641A20A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>1A0D2B172232171C3EB6DC4DFE575EE7</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>079AA0CF857B4A46F161666C58867CE1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>1A1E6F8D4C651A22BB8CCEF1226FB1EE</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>PlayButtonOverlayLarge@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1A1E8E8494B9BFCEBBD8273148D44386</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImage+MultiFormat.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIImage+MultiFormat.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1AB26E75F7BCD415D6AD6B8BA5F03DDB</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beIdenticalTo.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beIdenticalTo.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1AFDF0F0EF2A314336EACA38FCC6F784</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTExample.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTExample.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1B030B50B68FB0D602F2E4B1685FA9BA</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>target</key>\n\t\t\t<string>E2FE87384A67337831E53490EEA8BF11</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>B6CE0371E70FB931CC99A90CEBFD6E83</string>\n\t\t</dict>\n\t\t<key>1B0ADBF8A991262A6DE5BD0CB101EEE0</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>0557FD60A45F62CD51B4972ECE5C2584</string>\n\t\t\t\t<string>FC1172043A5F0542D166D63AE9EBC260</string>\n\t\t\t\t<string>123355D7F0D268DB0998FFB1CDD859B9</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Support Files</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../Target Support Files/MBProgressHUD</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1BB15402D8C2FB01A198273BA1991DED</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beginWith.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beginWith.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1C1837DF96AE65F662773DF1956BFF09</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>805AE44C01D7936BA8A238C6C5C4807D</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/Specta/Specta-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>1CCE02DFD89EF9B58809C379D0496685</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Expecta+Snapshots</string>\n\t\t\t<key>target</key>\n\t\t\t<string>05257CC76400D71826E603561A0F73E6</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>FE4A445C1692178764D9C71EAC64ABAC</string>\n\t\t</dict>\n\t\t<key>1D536F869C3B7D603AC4630F3F6AB919</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>ExpectaObject.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/ExpectaObject.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1D772DC880BCFABF5028DA167DE6B119</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTExcludeGlobalBeforeAfterEach.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTExcludeGlobalBeforeAfterEach.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1DD364708B768EB7C94DD9BB48F217F4</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D54993E311EDD8802711B01895286E4E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>1E08912939425D011D7C47713E6CDAF0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>BD4E094BE48FCAB50C0CEFC92B2C0B04</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>1E360C94C47826C4CAEEDBFC04C36A42</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>XCTestCase+Specta.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/XCTestCase+Specta.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>1EF011C5AA1726984A1B50A46191CE9B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>XCTest+Private.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/XCTest+Private.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>20503FB88D4DCF32DC61DD92AA97A82B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6C8B1153C440825B90681905FC2F85B9</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>2055A9E17F10DAA3DD7884DDF96A0A50</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>216490FDC8376C36DB920710C65B92F3</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWTapDetectingImageView.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>216D98400141172993D43965B937A9C6</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>DE3B07ED7FF04F506B0C5E00F4973589</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>SDWebImage</string>\n\t\t</dict>\n\t\t<key>222A85D6DAB7D3AC98EF6D7E68B13740</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageManager.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageManager.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2239B5E63C5D2C1323D66F489F075C42</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>7250BEF99A7686EAB50B17986FDCED3E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>232510EC13760470E86AABE302EF2B8E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatcherHelpers.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatcherHelpers.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>237FB063FB365119546C7B5006224F3B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>AB8960E6933BD274C11AD9C15CF410AF</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>244F3301C3C77C58A95FA7864D67858D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedSmallOff@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>24FAEADA1249F6042B4B4B135CDD0DF9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+respondTo.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+respondTo.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>25003C5ED979935F9483683DD2350697</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>FDEE1AFEA9C68977819B7D652EE1F6F2</string>\n\t\t\t\t<string>2ECFFDC2A7A648A930A461436E2ECC2D</string>\n\t\t\t\t<string>6C92311B12AB812820A4267248D69CCB</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../..</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>257A97CE59C7E5D5191DC00F15C261BE</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>EF5AC1222120F3BAB7481DA9615352B0</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>2677C6B3B248613A05ABDFB423C9F02C</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>EB4DE2009B511D62CF6BFE67FA73E321</string>\n\t\t\t\t<string>9374BBB3BA16684D1B858CCC9C3E2D8A</string>\n\t\t\t\t<string>523087C6D186A9F5BEE78D39F9A78F3F</string>\n\t\t\t\t<string>71BC183B1FB7AB5F8CF9A3383C6B354C</string>\n\t\t\t\t<string>C9B97F514121309E4531C3439E206EC7</string>\n\t\t\t\t<string>D5EE5F7C5A846B01ACF225DE04E52196</string>\n\t\t\t\t<string>B83D4C05E77991780CA69BF68B431DD2</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Target Support Files/Pods-MWPhotoBrowser_Example</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>26D004126E0DEF14D67843A444753FFF</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>8B97E5CA574F06B315C5F1D27B25DEFB</string>\n\t\t\t\t<string>1629A676793A787618A75ABDA6E20C56</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>27499458B06BE275AED9ACF720F09853</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1D772DC880BCFABF5028DA167DE6B119</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>2779B434631901F1434BC316E3FB5AE9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beNil.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beNil.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>28A20AE3D7A1F50CAD0D9D8B71205EC6</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedOn@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>29062DA699B861B896758C5A677765BD</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>2677C6B3B248613A05ABDFB423C9F02C</string>\n\t\t\t\t<string>043124F225814F80E4ED4FF4BC40156A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Targets Support Files</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2945FAA75C956DD6A541EB51E42E6899</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>FDE2A8151D1FDB6749FB32276220BE7C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>2989492A1A182744E36FD61DF1746D94</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>299B50B04F45E1A2F52075C3B7A1AEB2</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>target</key>\n\t\t\t<string>DE3B07ED7FF04F506B0C5E00F4973589</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>90C5595E0565CBEBB42EFEBB157FF619</string>\n\t\t</dict>\n\t\t<key>29B6CC3E1560257A444A209D97AC271E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>7599165E41821009340AA99FDAC29AE0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>29E4E0528D088AE8B2EE6D38E19D375E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6C982719FDCF6684EB752A0153066FC3</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>29E6F040DB8ACF8886F7FE628840C480</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beKindOf.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beKindOf.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2A17721E4A81DB608CA6D4FB6F0ADAFB</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3E7FFEF7BFB0350CE8FCC2D6D64D1396</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>2ACE82A15131DC569A786CB49EFD1804</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTCallSite.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTCallSite.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2BFB267A4274D5D4B277138F9D4EEDA1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>2EDD6193448F7939784FDF1C8016F000</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>2D5EE41C6DDBA8F159EEA954F335387A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>target</key>\n\t\t\t<string>FE2F1D7B9D9FCEA148517E4657B243F4</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>FF6817E7D2D11A6D747BFAEA934D0FD1</string>\n\t\t</dict>\n\t\t<key>2D6EC33CA8D9BD953AD29E16068F2CBD</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDImageCache.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDImageCache.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2D8E8EC45A3A1A1D94AE762CB5028504</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>B37F0F91F85060E28F1DAAB522DC7EC1</string>\n\t\t\t\t<string>052A17875CB827423D627183396CEB60</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>2DE374580729793C277006A3481402A3</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>VideoOverlay@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2E7CBF297AA8A0E93C23BFAF1BE94DEE</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beIdenticalTo.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beIdenticalTo.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2ECFFDC2A7A648A930A461436E2ECC2D</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>37ACF2CCD5DA793FAF5F71CF8F469294</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Resources</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2EDD6193448F7939784FDF1C8016F000</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageManager.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageManager.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2F29BE2EDEBA2861368726A4772F4E8E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTExample.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTExample.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>2F501FE84845EAD97B9087DAFCBBEE0E</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>57205495CF13B4EE93B13B7B0E3A1BD2</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>143C0831AA95D723669324010D835391</string>\n\t\t\t\t<string>199EF76AC47B3EE9FA80BE53835AB7B1</string>\n\t\t\t\t<string>C6AD7852D34E8A80DFF3B8376BDE812F</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Expecta</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>Expecta</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>ADEAC9FE1270035973745D0EB3B84395</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>2F9D3747596E4E074C3B776949091047</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>44D0D04C0DF98EC05B4909F397D6F7FF</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>2FD7E39AFBAB884FA64CFB5DBDFA1F7B</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>CBE0BF23E2B3F39D22B51BC93022DE7D</string>\n\t\t\t\t<string>B73F44C64FD91479CFE63C882F1E5E70</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>311D5C7B166178CCB79CFD7E8DD4F641</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D91F4635A8EDF54921FC9B759BE009F6</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>3173089CCB6C063D260C58DD7BA3ABF5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beKindOf.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beKindOf.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>319D6926D1261EB1150D83F672CCA35E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>A09DD0AB6A512D74E5628070EBD56026</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>32A9515F32A6ACB0753681241864BABA</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>F1948E226356BF652752F9FA7317BC73</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>33985216BF501EDD56E784D7CAD32FE7</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>B1A8AF86363A5D8093FFE48748DC20A1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>339A0C1BFF72397A705959E03877DDDB</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>5F878B29A406784703BC9F07FBFDD99F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>341D7536159B52F41598F730CC45D548</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8136A5BFC35DA48ABC2C0D94EA79B7F0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>34B2272FAB199A0B69B898BFB9E733E1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DE369A67A17A1EE2351376730BB039A4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>34F30E1314EC4C287E6B89477C2D0FB4</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8E485F27A3C78223FB086075C2974A49</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>3540CB186FE2EE9EE99381DA600738B8</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>EXPMatchers+FBSnapshotTest.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>362D9038C23D156F9F055EDF5565A5F1</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>7D8198AD59277CB0379442369CF5247E</string>\n\t\t\t\t<string>730E6CDCF09A029F8976D82EB7DACCF2</string>\n\t\t\t\t<string>69C3D12EC1F2F8AE628C05AC390D9D61</string>\n\t\t\t\t<string>C402F1446422CAB85FC53BD77E5E9018</string>\n\t\t\t\t<string>FCA01B035C5FC9AF0969977B2C54A7A9</string>\n\t\t\t\t<string>5A531485C6A0D185C72E03CD91B49919</string>\n\t\t\t\t<string>A8B86384F8C46CE8544B59FEB6C657F5</string>\n\t\t\t\t<string>D8619A771228AD0402C4D464E3C6EE53</string>\n\t\t\t\t<string>C0A33FBAF4E7C28807891EC8D0B65204</string>\n\t\t\t\t<string>9D6702575943BF5C71AD0E2299CB53E2</string>\n\t\t\t\t<string>AABA7597E19FD75C9F320BCD6BB2759E</string>\n\t\t\t\t<string>C266061F84E4CFB93AF99D21EEB13401</string>\n\t\t\t\t<string>564C3E7A9D55850E48FAC93F77A7F478</string>\n\t\t\t\t<string>6C8B1153C440825B90681905FC2F85B9</string>\n\t\t\t\t<string>216490FDC8376C36DB920710C65B92F3</string>\n\t\t\t\t<string>8952D588C0E5AD12FD9CF3747FD061F2</string>\n\t\t\t\t<string>94A310E9C2919B9904E9AFBD2837C2B9</string>\n\t\t\t\t<string>AE6C39B87AE391EC710DA8FB520ED3F5</string>\n\t\t\t\t<string>A1195ED094D0C8B66BB073959AA2ACCD</string>\n\t\t\t\t<string>E7E794ADE2D5267DF8949DD0A42B935B</string>\n\t\t\t\t<string>5289709799A254B807701A658BD9D425</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Classes</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Classes</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>37726FF893DE97CB8E4497EED1D4F28E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0668957FEB1B3CAE2EABBC4AA9ABA7C3</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>37ACF2CCD5DA793FAF5F71CF8F469294</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>4F696B27FDAEF5BE2C52EFF1848239D6</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pod</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pod</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>37E4F69B3E6AFDEE8D68A3430CEC8BF5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DACircularProgressView.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>DACircularProgress/DACircularProgressView.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>386634C7797B60DF71C8AD13DAAD315D</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>9775596B3CA16905FC8F66DA8E2A3C67</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t</dict>\n\t\t<key>38777F32EB3F13ED8D2047C1C9ED6D6D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIView+WebCacheOperation.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIView+WebCacheOperation.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3907B3A4464A3069E24142505C76338D</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>AAF71AC633AFEC1D271F81DA183E75F0</string>\n\t\t\t\t<string>5116C7E5987E156AC4BAA9BF327459AD</string>\n\t\t\t\t<string>5728F0AC6D99470A4AF64DA015991D65</string>\n\t\t\t\t<string>16A268BA14BC07320BB7FBE44EB37FB4</string>\n\t\t\t\t<string>87A80C8B1F0C635DA56B74807AE426D9</string>\n\t\t\t\t<string>45F8F3DCD4679DF7E346A6589E02123D</string>\n\t\t\t\t<string>B2DE78D2D5A5CF173FEBFA2FE4B4023D</string>\n\t\t\t\t<string>7D56DF05F0071D94121A050CDB772D56</string>\n\t\t\t\t<string>27499458B06BE275AED9ACF720F09853</string>\n\t\t\t\t<string>C2420EB9004B4667C6328B5C0D098C48</string>\n\t\t\t\t<string>E40400D97F14785D20A7A5594F0E2C56</string>\n\t\t\t\t<string>904DB6CCA2AAC8D7B3245ED9628E865A</string>\n\t\t\t\t<string>4A0F7A4BC9D18113AABC29DECF4E51D1</string>\n\t\t\t\t<string>FEFA85FDDB15B89CF28DF12C1C2071E1</string>\n\t\t\t\t<string>033AB851ACA0C118D009F781287565DD</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXHeadersBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>3939EE53B37025D6F0E05FF8A4C7DCF0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>AE1B7431EAFB4D89A49A9DAD35DBE790</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>3A013F13122CDB8EE962F8CB7C6FCC8E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DFA142DA2A1E6AB454178652BAC9A075</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>3B332CC633C291A7A96AD0922CFD8AB0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>2D6EC33CA8D9BD953AD29E16068F2CBD</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>3B5A7151F8E4FBFE54BF6C2AC80958FA</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImage+Diff.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/UIImage+Diff.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3C5A51B8AE7322A210CF01AFBA648598</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beInstanceOf.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beInstanceOf.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3CAA21F3728659DC1B58A336233AEB79</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>PlayButtonOverlayLarge.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3CD608194F35F47CEC250368B43C48E9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SpectaUtility.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SpectaUtility.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3DA2CF997A09E53F375CF0DEEF25AFCF</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+postNotification.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+postNotification.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3DEC242716623D70F4CC9F4A1D32805C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>ExpectaObject.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/ExpectaObject.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3E463E2B6917D9AA08A03BA8A8E74A18</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>B5969E17FAFFDC548233DC602AAC6211</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>3E7FFEF7BFB0350CE8FCC2D6D64D1396</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPExpect.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPExpect.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3EF2F2E1AF840BA0B6AD13D59AA5F80C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>PlayButtonOverlayLargeTap@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>3F1E0CB31108E6E996D2E7418FE21D2E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>661962DFFB8F4AF681F8EA78582EE534</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>40D39B6435EEF47A85F4E3FB684E72FE</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DACircularProgressView.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>DACircularProgress/DACircularProgressView.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>40DAD22BCDD38D058B1C9A312C42DF49</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beNil.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beNil.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>40F505E69B8595361C2A7528DDA222B6</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>B23D9E49B5B3A5C76EAFFC9C7F40B4B9</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>4209F7E4332FDC16B4C407CA07C3E8E8</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>86A1ADA0F8A843FA09BFF9142BEF76D5</string>\n\t\t\t\t<string>A6A21F67B2A713138BF1A404E3460084</string>\n\t\t\t\t<string>990C6F27E60B10F0E4BA0674D80F546B</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Support Files</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../Target Support Files/Expecta</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4231743B6C143BDB4A5FBB032E6D3799</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>865FAF448207E691D600F40C4ACF7C58</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>427921605A450AEF67D129DACCD87BED</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MBProgressHUD.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>430CE433DB59FE090A8CC6AFCFA43337</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D10BA2216A9B5F41557B4FC448EE865C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>4358F868C1553FF4273B0726E5AD2012</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageError.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4383E0DB1B07B9EB3155EF5D5F27C7BA</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>4BE4F23029A1EDB234CF7F2AEB043EB0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>439E7363C4854DD4D1E46F32C2EA2F3B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8F2B443FA0D511403E4DA2A79DB3302A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>43A1104CA0C628C2F693902EADA32B8C</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>746A80915CF52BE732D200BAA851FBAB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>4463CD014E8C258B7F8BF0FD64901B8F</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>63327617AD4F38D1236E71968B0991E5</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>44D0D04C0DF98EC05B4909F397D6F7FF</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beInstanceOf.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beInstanceOf.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>453678659359A72C87495DDD6D9BD0C6</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>730E6CDCF09A029F8976D82EB7DACCF2</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>45548268D1B9EE9D37731231D940A591</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>4594A9E3FFD6ABE129882E959BB04B5E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>4594A9E3FFD6ABE129882E959BB04B5E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>45F8F3DCD4679DF7E346A6589E02123D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>569060A075537DFE6A4D25D96C98668B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>46A2CE1545DEBE5FE9DF073C8EBFE2F0</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>F5F4D07451FB3E10EE7C16A83010425F</string>\n\t\t\t\t<string>B8FC063009C06CE659C8CF168A9F8765</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>46F312CBB94BAE62B58D3D7AE28E8DBD</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9D5AE460F3B78B02A8AE8E5AD0DCC013</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>46F871A74D831312A633CCFC0A94F75D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedSmallOn.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>47BC96C02F9C3E09817E3FEC2559E33B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageDownloaderOperation.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageDownloaderOperation.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>487899F028C39C1A518547A1AB2F625A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D70BED84191514A998A08D7F3B8BBB17</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>487E0AD53E31FE34EC41B45FC09B9097</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemArrowLeft@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>49D43B7D98ABA386628BDA9FB6BA411B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTGlobalBeforeAfterEach.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTGlobalBeforeAfterEach.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>49EFE75BAF060A33327F3CE8C18436F2</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>232510EC13760470E86AABE302EF2B8E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>4A0F7A4BC9D18113AABC29DECF4E51D1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>EF75C10714B7CFF9071553F07D94A550</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>4B72A26F758BB4CA3663A7FB67696029</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DBE203B988A948E71FDDCAE62BA1F4CC</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>4BE4F23029A1EDB234CF7F2AEB043EB0</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>ExpectaSupport.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/ExpectaSupport.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4C9C7890ED44DBC3090EEDFD92749F0A</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>B733330A3935B54DE57E0503C1867DAE</string>\n\t\t\t\t<string>9C8319C4AFAB3CAE3C7314EAD8D1AB34</string>\n\t\t\t\t<string>4B72A26F758BB4CA3663A7FB67696029</string>\n\t\t\t\t<string>37726FF893DE97CB8E4497EED1D4F28E</string>\n\t\t\t\t<string>EB75F515760C184B2ED65E8649DC5792</string>\n\t\t\t\t<string>67BBF4202A90EC070C5EBE20B57A0255</string>\n\t\t\t\t<string>E127589B46F33617D24F341DBAE1E90D</string>\n\t\t\t\t<string>439E7363C4854DD4D1E46F32C2EA2F3B</string>\n\t\t\t\t<string>32A9515F32A6ACB0753681241864BABA</string>\n\t\t\t\t<string>D9E225250B8DAA16A4D7B6A66EC6574A</string>\n\t\t\t\t<string>0B3C605995BE46623C50E7658A1CBE96</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>4CFA073D420411E3535ABA966BEE98CC</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImage+GIF.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIImage+GIF.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>4CFCAA497A77475D017F781F8241A4C0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>5E350F03F362C03BE32737DDE72D4632</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>4D720BB8AE19E427E58843509B28FEB6</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libPods-MWPhotoBrowser_Example.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libPods-MWPhotoBrowser_Example.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>4DCDDE359E1F3BB419E0F7E9DD12CBB6</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6CA9CE30C9B7FD5557F8DD0E06209E36</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>4F696B27FDAEF5BE2C52EFF1848239D6</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>4358F868C1553FF4273B0726E5AD2012</string>\n\t\t\t\t<string>ABDF044BC66387B0E03E70BAC09D0AC8</string>\n\t\t\t\t<string>BA9181C8B2773795F2EACBDE286994AD</string>\n\t\t\t\t<string>6CA9CE30C9B7FD5557F8DD0E06209E36</string>\n\t\t\t\t<string>E6798A1D89E725C8EB02146EE4B0E31E</string>\n\t\t\t\t<string>D2307EC60BB4D23E49C1420E6F192943</string>\n\t\t\t\t<string>F2334A461A36CF285AC6F7E96F8FE0DB</string>\n\t\t\t\t<string>28A20AE3D7A1F50CAD0D9D8B71205EC6</string>\n\t\t\t\t<string>C9BF70FB69B8740763B185C23C560434</string>\n\t\t\t\t<string>BD4E094BE48FCAB50C0CEFC92B2C0B04</string>\n\t\t\t\t<string>244F3301C3C77C58A95FA7864D67858D</string>\n\t\t\t\t<string>60E1461AAED23D358B1A25A48F9DD77F</string>\n\t\t\t\t<string>46F871A74D831312A633CCFC0A94F75D</string>\n\t\t\t\t<string>E4436D58F27EAC932F3CC2A7619D5FD3</string>\n\t\t\t\t<string>CB3EA5CC56581FD52BDBA0179D956E7B</string>\n\t\t\t\t<string>3CAA21F3728659DC1B58A336233AEB79</string>\n\t\t\t\t<string>1A1E6F8D4C651A22BB8CCEF1226FB1EE</string>\n\t\t\t\t<string>75F83323F205A277BEC18AABDA0FA739</string>\n\t\t\t\t<string>6D7C34F3A270979025E31A50FFFC7F28</string>\n\t\t\t\t<string>0B92B054A2338462A743EB368F25A20B</string>\n\t\t\t\t<string>3EF2F2E1AF840BA0B6AD13D59AA5F80C</string>\n\t\t\t\t<string>0A9B8E3E35177F52A643739AC50B00FA</string>\n\t\t\t\t<string>C36BB9623ECA2B27942B66986A784EC9</string>\n\t\t\t\t<string>487E0AD53E31FE34EC41B45FC09B9097</string>\n\t\t\t\t<string>BDD78DD77E210708F222D40A2FDE75B1</string>\n\t\t\t\t<string>8DC04A9EEA14F0D2300FB6C0CAEB9CAB</string>\n\t\t\t\t<string>7323B64F45BBE15A70D98D5E7FBF31C8</string>\n\t\t\t\t<string>C162177585DC8E186D24CADCC233B0EA</string>\n\t\t\t\t<string>8439940A3793CF65B24F4185E04317D8</string>\n\t\t\t\t<string>D64041D7A1004D2C8771C29362B59366</string>\n\t\t\t\t<string>8F3064A5B520D1E4290AA240A05B7D6F</string>\n\t\t\t\t<string>2DE374580729793C277006A3481402A3</string>\n\t\t\t\t<string>9604D510A96A637DD9AE0D304B68A5A2</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Assets</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Assets</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>5023A97277B66BB3E83DA779FEBAE80C</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>94A310E9C2919B9904E9AFBD2837C2B9</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>505D7B9189B81314EF02A1E9479972D0</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>3540CB186FE2EE9EE99381DA600738B8</string>\n\t\t\t\t<string>8C4EC29461A90C294949DAE717A1BEC5</string>\n\t\t\t\t<string>6772D2471C34E5B39F0D3E7D0E235DA0</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Expecta+Snapshots</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta+Snapshots</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>50F87BFDC26A0B4CC6DE06D3ACBD0714</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libMWPhotoBrowser.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libMWPhotoBrowser.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>5116C7E5987E156AC4BAA9BF327459AD</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9BF2584F8D336EF737485D7396CFBAFF</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>518626B93DA6269F02901D111B4DBF26</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIButton+WebCache.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIButton+WebCache.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>518937C0924DA3A3DD216697CED9205F</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D615D83AA6E624C9EEFAB11B6DAB4612</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>523087C6D186A9F5BEE78D39F9A78F3F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>5289709799A254B807701A658BD9D425</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIImage+MWPhotoBrowser.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>53A65E3DDAAB4288F448625574686617</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>A59CA631962D8BFBF1D8BA4BA8F1F223</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>53FA1A78374A52A66FBFD0691645BCB8</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>B25B4A401CE0322E5FA936642D8E8A36</string>\n\t\t\t\t<string>E145A7E23B46A8C1E1549511735A041D</string>\n\t\t\t\t<string>DD7BDEE57A8E95F9F327AC87B6A78256</string>\n\t\t\t\t<string>BEEAFC79B66B12E6D67D140381BE25F2</string>\n\t\t\t\t<string>618AF4F15226C5AED0802286F3763EF4</string>\n\t\t\t\t<string>B52658FC373BA42C6DBF475CAEA30F09</string>\n\t\t\t\t<string>FFF549D1FBC0937A99BED40CC44BC155</string>\n\t\t\t\t<string>760A4E328E68E43D12295FA08F7475FD</string>\n\t\t\t\t<string>20503FB88D4DCF32DC61DD92AA97A82B</string>\n\t\t\t\t<string>14BD3072FD1820402768B3D7F2E5B4A5</string>\n\t\t\t\t<string>FB42B2F11B39412F3015A082008F1782</string>\n\t\t\t\t<string>E54B859019C3D44B55F4723880F93D4D</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXHeadersBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>53FB0CBA14BE53F79F4EB4E7B46C523B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>56228B3CBF246784930BFE7B29EFDD04</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTCompiledExample.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTCompiledExample.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>562BE99A6F630E709218EB9B3CF36E90</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6CF3D336192327338965DC88856BDFCF</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>564C3E7A9D55850E48FAC93F77A7F478</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoProtocol.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>567A47FABAD9EE8B7DF32295CC53F937</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+endWith.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+endWith.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>569060A075537DFE6A4D25D96C98668B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTCompiledExample.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTCompiledExample.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>56BD615DEEA3BC153C0B73BAC8A60A13</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+endWith.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+endWith.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>571096112AA1AD00C10596D216783599</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTExampleGroup.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTExampleGroup.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>57205495CF13B4EE93B13B7B0E3A1BD2</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>F84C57B89A97BB8108482354FFD8E157</string>\n\t\t\t\t<string>9D77DAC945EC22411297CBC957C966F0</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>5728F0AC6D99470A4AF64DA015991D65</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6347B71E8C22BA00F73AB093F101B7D4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>5748A5F5926815AF7CCC45FA80943763</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>B0329B325C97BC663835390843F985CE</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>574FFB37A8EF309B1A1EB265267DD353</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageDownloader.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageDownloader.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>5813251FEA21E4AEE97385709F1912DE</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>9F1294BB80138FB7DEE240DF61EC1523</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>DE0797009C8330FFDB1FC0EB8D2DA9DD</string>\n\t\t\t\t<string>F2BDF8E898C762EFB3844211CE201024</string>\n\t\t\t\t<string>9987EAA3314FDCBDC6783C325695E1D8</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser-MWPhotoBrowser</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>MWPhotoBrowser-MWPhotoBrowser</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>8261C05543EA69BA5F136A06D5005C50</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.bundle</string>\n\t\t</dict>\n\t\t<key>589CDFB90C98BF58F34B688A2BEF2D04</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>589E7F4856ABE929D7FC9F3A9E506FC9</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>FAF77DDAA41AC524C38F1D92F2EE01AB</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/Expecta+Snapshots/Expecta+Snapshots-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>59DA6D130464A9F97CD181877DD36CB7</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6B1C830074F8BFC3AE3CB3A5278754A8</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>59E65BF5E40AA0C59E0BBC07807714F1</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>D5EE5F7C5A846B01ACF225DE04E52196</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MACH_O_TYPE</key>\n\t\t\t\t<string>staticlib</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PODS_ROOT</key>\n\t\t\t\t<string>$(SRCROOT)</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>5A06D9F124A077FE3345C713135D7E6C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>NSValue+Expecta.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/NSValue+Expecta.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>5A531485C6A0D185C72E03CD91B49919</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWGridViewController.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>5A859FF87C3507C937241DD78BD95EF3</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6D7C34F3A270979025E31A50FFFC7F28</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>5CD9AEB21836919899CDA3A9D9510998</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>59E65BF5E40AA0C59E0BBC07807714F1</string>\n\t\t\t\t<string>5DBFCD132D088BC182C9B82D9A6F90D9</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>5D39CEB65ADB521B117CA181C2BB2C9C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImageView+HighlightedWebCache.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIImageView+HighlightedWebCache.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>5DBFCD132D088BC182C9B82D9A6F90D9</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>B83D4C05E77991780CA69BF68B431DD2</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MACH_O_TYPE</key>\n\t\t\t\t<string>staticlib</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PODS_ROOT</key>\n\t\t\t\t<string>$(SRCROOT)</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>5E350F03F362C03BE32737DDE72D4632</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>QuartzCore.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/QuartzCore.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>DEVELOPER_DIR</string>\n\t\t</dict>\n\t\t<key>5E8F33E777456DA63CA2D902508A9058</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C2CEB9C1175C4FC4D5BE5C6EF285E0A4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>5EB4F27B76513AE918BA5AE0868E87C8</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>EF4D256729962DC82677BF90E861294B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>5EB6A7FF5E92B3E2E96A92367BE4AA32</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>7D9E32DAA93E15CFCF77A5BCD2D4BAA2</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t</dict>\n\t\t<key>5F4AECEF356E35995112F9167B219AD6</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>AF944A6486FDAD944BE766A70129E6D2</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>5F6D96E64F890BDC4A75B73C3D50A0DD</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D68BA9A93FD415E751DFA95CCF7DCB8D</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>5F878B29A406784703BC9F07FBFDD99F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+postNotification.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+postNotification.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>60262C4B68C1B0EF7D3E4FADACB10CD7</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>222A85D6DAB7D3AC98EF6D7E68B13740</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>60D3CCEB5B53542228790ABD8885AF42</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>18391089432560093C31CCA48ABB46AE</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>60E1461AAED23D358B1A25A48F9DD77F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedSmallOff@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>60ECF290B248258F453088B6258302E6</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DALabeledCircularProgressView.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>DACircularProgress/DALabeledCircularProgressView.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>617F18A93D7ABF1322E3C027265893C2</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>2055A9E17F10DAA3DD7884DDF96A0A50</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/MWPhotoBrowser/MWPhotoBrowser-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>618AF4F15226C5AED0802286F3763EF4</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D8619A771228AD0402C4D464E3C6EE53</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>619B0B2F7ACD42F8EF700EAE6D1C95DA</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>CB7148E744A9D03AEDC9D4809248999F</string>\n\t\t\t\t<string>86334F1A4DF0160C4B098EF643AB6E07</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>63010FB3922AB3E2DDD6D8CDD2D10BFA</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+conformTo.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+conformTo.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>63327617AD4F38D1236E71968B0991E5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestCase.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/FBSnapshotTestCase.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6347B71E8C22BA00F73AB093F101B7D4</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SpectaTypes.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SpectaTypes.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>63B3276116DCC036DC3FF64871C5B34A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9BDA7CB400BA41525D0DAC5E267B2670</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>63D0CD4F0FB5A6103E1DDB46E876CBB6</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3173089CCB6C063D260C58DD7BA3ABF5</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>64734F2BA63DAFDA24F819EE71704665</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>7323B64F45BBE15A70D98D5E7FBF31C8</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>659BCA5950BB094273E9E83E7D5271CF</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>E9AAC3590B391F4CFAF5F8348E6A8FE4</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>Specta</string>\n\t\t</dict>\n\t\t<key>65F75ED4B34CEDF568441FBC95BA1459</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>244F3301C3C77C58A95FA7864D67858D</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>66081D3480D1FA028C4DE2344BF616D4</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>661962DFFB8F4AF681F8EA78582EE534</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIButton+WebCache.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIButton+WebCache.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>664FB9826D0F046AB6CE15196CC120B7</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>A1BF1E794449AF3F514B2EE3C85F4B10</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>66D391F04A8D672C0D42510DE811E7B2</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>NSObject+Expecta.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/NSObject+Expecta.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6772D2471C34E5B39F0D3E7D0E235DA0</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>FAF77DDAA41AC524C38F1D92F2EE01AB</string>\n\t\t\t\t<string>785A993DF42B3ABEF658B85E1F47663F</string>\n\t\t\t\t<string>F5551459CFCB6B7914E9EC1783277D94</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Support Files</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../Target Support Files/Expecta+Snapshots</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>67BBF4202A90EC070C5EBE20B57A0255</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1AFDF0F0EF2A314336EACA38FCC6F784</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>688EFB46F8559BD675FD06384ABA49E1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C162177585DC8E186D24CADCC233B0EA</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>68F141757E1606330C04FEBE78CBCE4E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests-acknowledgements.markdown</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>691CE6B20E64762C98682B93B31435E7</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTSpec.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTSpec.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6924E116731D7079958063A3EE0781ED</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>6ED6BE9A61002A3AF6D4C834E2277D8C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>69363A59A4E2FF95D6A62AA88641A20A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0B7E61991D03B44046913BF3B345F4DB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>69C3D12EC1F2F8AE628C05AC390D9D61</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWCommon.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>69DC2FB163EAB23712D9C3C13C72518E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C77F8C54B4042EC0746E5D285E7D400A</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>69EBB956302554EA37775F4D806BC4DD</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3DA2CF997A09E53F375CF0DEEF25AFCF</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>6A4E3ACA285A21392936C110E7EC91F0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>7AAD7709C9FF6828905D6A28E69C4221</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>6B1C830074F8BFC3AE3CB3A5278754A8</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImage+GIF.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIImage+GIF.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6C8B1153C440825B90681905FC2F85B9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWTapDetectingImageView.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6C92311B12AB812820A4267248D69CCB</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>2055A9E17F10DAA3DD7884DDF96A0A50</string>\n\t\t\t\t<string>079AA0CF857B4A46F161666C58867CE1</string>\n\t\t\t\t<string>BA4C6CCE8BCEAFA07BB2679C87A008C5</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Support Files</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Example/Pods/Target Support Files/MWPhotoBrowser</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6C982719FDCF6684EB752A0153066FC3</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageDecoder.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageDecoder.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6CA9CE30C9B7FD5557F8DD0E06209E36</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedOff.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6CD36438CB08D280978CEE50363D8B8B</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libExpecta+Snapshots.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libExpecta+Snapshots.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>6CD3EC2C1FBF5655137A99638E9CC950</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MediaPlayer.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/MediaPlayer.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>DEVELOPER_DIR</string>\n\t\t</dict>\n\t\t<key>6CF3D336192327338965DC88856BDFCF</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+haveCountOf.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+haveCountOf.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6D37BEAA1FC469C3582CACB4E9766502</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>EC9E28E1F941952C6708902F41FD209D</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>6D7C34F3A270979025E31A50FFFC7F28</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>PlayButtonOverlayLargeTap.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6D8154E68B3360EE1C8DA3A4443096F3</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>target</key>\n\t\t\t<string>DE3B07ED7FF04F506B0C5E00F4973589</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>216D98400141172993D43965B937A9C6</string>\n\t\t</dict>\n\t\t<key>6E43863A0284BCD9B517C3AE49207A9D</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>9D6E638E56BDAD3C2196ED9C28FAF857</string>\n\t\t\t\t<string>1DD364708B768EB7C94DD9BB48F217F4</string>\n\t\t\t\t<string>723DCD855EFE5AC009B1D2FFE88373C7</string>\n\t\t\t\t<string>5748A5F5926815AF7CCC45FA80943763</string>\n\t\t\t\t<string>164BD2AFD03035E623A90DF1AA095C35</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXHeadersBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>6EB2498C2AFB1DF8555CB7C1EF89CA5C</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>F5963246D32249D4D198CE8A36B4DD12</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>6ED6BE9A61002A3AF6D4C834E2277D8C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6EEA87D8E87914D02AA319693371EE2C</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>AABA7597E19FD75C9F320BCD6BB2759E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>6F1FCA0BD48258CDEC1B14D704BA3E5D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests.debug.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>6FAC17B355970FC2EBFADA7C72544799</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>D041545E1DB9D43FCBB294B7E9573AFF</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>700F6F4AFED22AEAA1D8943236F94924</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatcher.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPMatcher.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>70545E4EA86C6E593A2A9F6731DA8F6D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>10E68FD4A81F628778B6A4992DB9D952</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>70922EF029715CA28E814F87373F29C4</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+equal.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+equal.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>70D801E0B95C23BCC270E4EC8659D463</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DB7D9B8599935A5FF3862B90E049CABD</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>717B38CC8B651B61F35E12EE4211DAF0</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>2055A9E17F10DAA3DD7884DDF96A0A50</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>WRAPPER_EXTENSION</key>\n\t\t\t\t<string>bundle</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>71865C216F48AC822D486C8D9B03B13C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beSubclassOf.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beSubclassOf.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>719353E5F5BDD19B2D80B273F365F2BF</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>25003C5ED979935F9483683DD2350697</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Development Pods</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>71BC183B1FB7AB5F8CF9A3383C6B354C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.script.sh</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example-frameworks.sh</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>722090AAE01BA442E883E6F02AA8DF40</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>8BEDD694C8600B014302155F48FD5B08</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>A07F4B785B315E5B075218A988F05149</string>\n\t\t\t\t<string>6FAC17B355970FC2EBFADA7C72544799</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array>\n\t\t\t\t<string>0B8D4914244FCBC9DCAF2B9AD09F3DD5</string>\n\t\t\t\t<string>0EAAE557DE1A2949F0793F1230D1D046</string>\n\t\t\t\t<string>1CCE02DFD89EF9B58809C379D0496685</string>\n\t\t\t\t<string>9F0508C4938477BDB11EAF1F3A6960E7</string>\n\t\t\t\t<string>01F58E863C79FB5A8433D92837FFE619</string>\n\t\t\t\t<string>A815E988348FB8A8B609F012516ABD15</string>\n\t\t\t\t<string>D359D2CDD896874DAD7B6D2EF3FEE26D</string>\n\t\t\t\t<string>13EA87F4C750EBB98261F8ED14EFE770</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>E0EBF0357895E0C657A233A9D4D0E2C1</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>723DCD855EFE5AC009B1D2FFE88373C7</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8E108520195BF6568A4A53786EA7B6F0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>7250BEF99A7686EAB50B17986FDCED3E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+match.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+match.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>730E6CDCF09A029F8976D82EB7DACCF2</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWCaptionView.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>7323B64F45BBE15A70D98D5E7FBF31C8</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemArrowRight@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>7357CD98F48585C602A75C901AD5E096</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>63B3276116DCC036DC3FF64871C5B34A</string>\n\t\t\t\t<string>34B2272FAB199A0B69B898BFB9E733E1</string>\n\t\t\t\t<string>33985216BF501EDD56E784D7CAD32FE7</string>\n\t\t\t\t<string>EDDE097EFD40E9A4E32E4B44C97CE44B</string>\n\t\t\t\t<string>29E4E0528D088AE8B2EE6D38E19D375E</string>\n\t\t\t\t<string>53A65E3DDAAB4288F448625574686617</string>\n\t\t\t\t<string>29B6CC3E1560257A444A209D97AC271E</string>\n\t\t\t\t<string>2BFB267A4274D5D4B277138F9D4EEDA1</string>\n\t\t\t\t<string>DC1F1DBD53679CB78C5967BA9DEC08CA</string>\n\t\t\t\t<string>3F1E0CB31108E6E996D2E7418FE21D2E</string>\n\t\t\t\t<string>59DA6D130464A9F97CD181877DD36CB7</string>\n\t\t\t\t<string>B28719F6B1978267C407032A2AE646F8</string>\n\t\t\t\t<string>DFAB389ECAD69BF8BE6357CFADABBF5C</string>\n\t\t\t\t<string>7D3B3786F1D6CED2CE141B2B1BDAE012</string>\n\t\t\t\t<string>F3BB0A963277282C6BF73E81250B6943</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>7389D03E90A74E5A200DD5ADBB209885</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>DACircularProgress.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>7436C602BB1CA7C91560C28DE749357B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>F9B2375A6E20F2774E7B3F08FB92909E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>746A80915CF52BE732D200BAA851FBAB</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beLessThanOrEqualTo.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>74707D5ABEC55B3084F52C40A4227B06</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>2779B434631901F1434BC316E3FB5AE9</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>74A9CCFEBE692130454C41959EBA5254</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8A00437F88A0C89CD672C2085CCCF62B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>7599165E41821009340AA99FDAC29AE0</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageDownloaderOperation.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageDownloaderOperation.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>75F83323F205A277BEC18AABDA0FA739</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>PlayButtonOverlayLarge@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>760A4E328E68E43D12295FA08F7475FD</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>564C3E7A9D55850E48FAC93F77A7F478</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>76331E71086C8CD5118A69B046D8F0FB</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>567A47FABAD9EE8B7DF32295CC53F937</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>76C42C41A4B61435A3315770F58154B2</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8F3064A5B520D1E4290AA240A05B7D6F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>779CFE8771E1EF63F1313ABEBCECAA4A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>15082EF0D1C2F7B77B63E0116BDA622C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>785A993DF42B3ABEF658B85E1F47663F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta+Snapshots-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>78759DF877B83416A90AA2BC606BF7ED</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImagePrefetcher.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImagePrefetcher.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>788D548DE837CA2FA9D2D744D64FA847</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+raise.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+raise.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>79996E262256F57DB50CD16E5EBE5D52</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatcherHelpers.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatcherHelpers.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>79D73FB4B6A3C92513B81243EA72E78C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+match.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+match.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>7AAD7709C9FF6828905D6A28E69C4221</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPDefines.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPDefines.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>7AC91F55DAAA2F0223A97BEFF8BCAF68</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D09A95F4452843967F4C8F3FA5EC1A68</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>7CF892960748F43245AD2B5CD2AC41A5</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libSpecta.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libSpecta.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>7D3B3786F1D6CED2CE141B2B1BDAE012</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>A2B692D3F450E25A5D8B17F524EA0720</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>7D56DF05F0071D94121A050CDB772D56</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>818AFFCC037C608492FAE59C7C3E85C0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>7D8198AD59277CB0379442369CF5247E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWCaptionView.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>7D901800D8324F9F338B54CA286AD771</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D2307EC60BB4D23E49C1420E6F192943</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>7D9E32DAA93E15CFCF77A5BCD2D4BAA2</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>189B7D1A1C865073D7F999A759ACD292</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>9C03752CBF78921009132B656CF36184</string>\n\t\t\t\t<string>46A2CE1545DEBE5FE9DF073C8EBFE2F0</string>\n\t\t\t\t<string>6E43863A0284BCD9B517C3AE49207A9D</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>D52C083C7341E76797DB059849542613</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>7DACEAF8582049D6EB8B4CFFB6CA48CD</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beGreaterThan.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beGreaterThan.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>7DB346D0F39D3F0E887471402A8071AB</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>BA6428E9F66FD5A23C0A2E06ED26CD2F</string>\n\t\t\t\t<string>719353E5F5BDD19B2D80B273F365F2BF</string>\n\t\t\t\t<string>F4CDA5FA9197A41E0081E84F932906EB</string>\n\t\t\t\t<string>9D89C03F805626896F95FA71887D578C</string>\n\t\t\t\t<string>9142D907B715CE18385E00AB1972B1BD</string>\n\t\t\t\t<string>29062DA699B861B896758C5A677765BD</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>7E05296687CBD4F8C77EA450EEAB7B60</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>ABDF044BC66387B0E03E70BAC09D0AC8</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>7FEE0E8D094D7BCCAC7129473EE05ADC</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>788D548DE837CA2FA9D2D744D64FA847</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>8059E5674B08670B0A002D564FFABF44</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>70922EF029715CA28E814F87373F29C4</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>805AE44C01D7936BA8A238C6C5C4807D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>809101940909F56A7B70CE17D447640B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beLessThanOrEqualTo.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8136A5BFC35DA48ABC2C0D94EA79B7F0</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPFloatTuple.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPFloatTuple.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>818AFFCC037C608492FAE59C7C3E85C0</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTExampleGroup.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTExampleGroup.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8261C05543EA69BA5F136A06D5005C50</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>wrapper.cfbundle</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser.bundle</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser.bundle</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>82AC9861A9FE0BEFEC04D31C3B05ABB2</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>40D39B6435EEF47A85F4E3FB684E72FE</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>82FC12F67E83874B93592218E9FB4CA0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>427921605A450AEF67D129DACCD87BED</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>8439940A3793CF65B24F4185E04317D8</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemGrid@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>85A6795A5CD0C6DEA1F648AD0E6D1248</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>2055A9E17F10DAA3DD7884DDF96A0A50</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/MWPhotoBrowser/MWPhotoBrowser-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>862018A7CC10880108A2BDC5146C8F3F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beInTheRangeOf.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beInTheRangeOf.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>86334F1A4DF0160C4B098EF643AB6E07</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>7389D03E90A74E5A200DD5ADBB209885</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/DACircularProgress/DACircularProgress-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>865FAF448207E691D600F40C4ACF7C58</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPUnsupportedObject.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPUnsupportedObject.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>866569443B7D10AB5D6DC7FC0830235B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>86A1ADA0F8A843FA09BFF9142BEF76D5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>872948DAF79618AD725E0BF364E5DDD4</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>5A06D9F124A077FE3345C713135D7E6C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>87A80C8B1F0C635DA56B74807AE426D9</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>2ACE82A15131DC569A786CB49EFD1804</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>886428740DB164747FBA1935F65900DF</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>EFE77B95F063C96D9B07BC2A988AB403</string>\n\t\t\t\t<string>B6CB1D947CABAFFCEFC7F94006CB7AD4</string>\n\t\t\t\t<string>319D6926D1261EB1150D83F672CCA35E</string>\n\t\t\t\t<string>00518063767430EDC47FCC49F4409458</string>\n\t\t\t\t<string>4CFCAA497A77475D017F781F8241A4C0</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>8952D588C0E5AD12FD9CF3747FD061F2</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWTapDetectingView.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8A00437F88A0C89CD672C2085CCCF62B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageCompat.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageCompat.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8B2FFB12DD1404D98DCA25509B11611E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1A1E6F8D4C651A22BB8CCEF1226FB1EE</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>8B97E5CA574F06B315C5F1D27B25DEFB</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>785A993DF42B3ABEF658B85E1F47663F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>8BEDD694C8600B014302155F48FD5B08</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>ECE81C5981477AA7D254ACC70534BE23</string>\n\t\t\t\t<string>BFD984F9AF4C47EDD370C631057D40E8</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>8C4EC29461A90C294949DAE717A1BEC5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>EXPMatchers+FBSnapshotTest.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8C4ECAE46CD3BCB39F38F4FF20D074F6</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0B7E61991D03B44046913BF3B345F4DB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>8D8B7C183B18D82F1958BB3115798433</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>C0593046ABD536BD086B85302FA897DF</string>\n\t\t\t\t<string>CC01A834786EDBE30D7011502AE0F9B3</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>8DC04A9EEA14F0D2300FB6C0CAEB9CAB</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemArrowRight@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8DF90D623F7F9015EEE9F1D7FEE7E053</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0A924BC847BA99EBCBD0588603448B05</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>8E108520195BF6568A4A53786EA7B6F0</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestController.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/FBSnapshotTestController.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8E485F27A3C78223FB086075C2974A49</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>NSData+ImageContentType.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/NSData+ImageContentType.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8EE5D8EDB6C595B190E81B76D3190EB3</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>target</key>\n\t\t\t<string>FE2F1D7B9D9FCEA148517E4657B243F4</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>D7B59E66FA2C765426650ADECEF955EF</string>\n\t\t</dict>\n\t\t<key>8F2B443FA0D511403E4DA2A79DB3302A</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTSharedExampleGroups.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTSharedExampleGroups.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8F3064A5B520D1E4290AA240A05B7D6F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>VideoOverlay.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>8F674582EE71972EE60EFD96C1F173D5</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0683DF2C9B7FC27B576AB4B7B3B146ED</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>9019F9233E2A8B04A82C1B8D0274F09F</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9A9B45D988FA49FD87F8587C42403EC5</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>904DB6CCA2AAC8D7B3245ED9628E865A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>691CE6B20E64762C98682B93B31435E7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>90C5595E0565CBEBB42EFEBB157FF619</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>DE3B07ED7FF04F506B0C5E00F4973589</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>SDWebImage</string>\n\t\t</dict>\n\t\t<key>9142D907B715CE18385E00AB1972B1BD</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>CEFDBDB8900789B0FFB86EBB7065BC62</string>\n\t\t\t\t<string>ADEAC9FE1270035973745D0EB3B84395</string>\n\t\t\t\t<string>6CD36438CB08D280978CEE50363D8B8B</string>\n\t\t\t\t<string>D52C083C7341E76797DB059849542613</string>\n\t\t\t\t<string>D7F1441E30E059AC17B4C1CE1464C07B</string>\n\t\t\t\t<string>50F87BFDC26A0B4CC6DE06D3ACBD0714</string>\n\t\t\t\t<string>4D720BB8AE19E427E58843509B28FEB6</string>\n\t\t\t\t<string>E0EBF0357895E0C657A233A9D4D0E2C1</string>\n\t\t\t\t<string>C5284B0E2549CD42E31F469FB8B92DA8</string>\n\t\t\t\t<string>7CF892960748F43245AD2B5CD2AC41A5</string>\n\t\t\t\t<string>8261C05543EA69BA5F136A06D5005C50</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Products</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>91E14C244388DE830AA1C4AE88415F76</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>BA9181C8B2773795F2EACBDE286994AD</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>92F064516748B6AA4C6E303A38C3FE6A</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPExpect.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPExpect.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9374BBB3BA16684D1B858CCC9C3E2D8A</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.plist.xml</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example-acknowledgements.plist</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>93CF7F496E727D827BED2105B65D2073</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>E4436D58F27EAC932F3CC2A7619D5FD3</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>94A310E9C2919B9904E9AFBD2837C2B9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWTapDetectingView.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>956FB3AB698AF3DA776A9F24AA79C229</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>66D391F04A8D672C0D42510DE811E7B2</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>9604D510A96A637DD9AE0D304B68A5A2</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>VideoOverlay@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>96AE2267633A27498E5D45052BDD5BBA</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>9775596B3CA16905FC8F66DA8E2A3C67</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t</dict>\n\t\t<key>9775596B3CA16905FC8F66DA8E2A3C67</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>619B0B2F7ACD42F8EF700EAE6D1C95DA</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>A6993E0B001E6EB572176DFCF9B87C6A</string>\n\t\t\t\t<string>F2A9AAC03867BB4990470BAC5912E030</string>\n\t\t\t\t<string>1246A1C00980422020A6884856143651</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>CEFDBDB8900789B0FFB86EBB7065BC62</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>97B5429A3CE99BA07086198F10CCE615</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>E2FE87384A67337831E53490EEA8BF11</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t</dict>\n\t\t<key>97E91EC237B8623D895DBF6092034AD7</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>862018A7CC10880108A2BDC5146C8F3F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>981F3EB0C06E97770D2421E673B013A1</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+contain.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+contain.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9839B551DAF141B99431C2238C8EEBC0</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>AssetsLibrary.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/AssetsLibrary.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>DEVELOPER_DIR</string>\n\t\t</dict>\n\t\t<key>990C6F27E60B10F0E4BA0674D80F546B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta-prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9933B0F6DA01EDF804C19260E9515E65</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0B7E61991D03B44046913BF3B345F4DB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>9987EAA3314FDCBDC6783C325695E1D8</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>E287D744F886B15E1060AFEA475FC727</string>\n\t\t\t\t<string>7E05296687CBD4F8C77EA450EEAB7B60</string>\n\t\t\t\t<string>91E14C244388DE830AA1C4AE88415F76</string>\n\t\t\t\t<string>4DCDDE359E1F3BB419E0F7E9DD12CBB6</string>\n\t\t\t\t<string>BE6668D2527C0063CE1C755190A7596F</string>\n\t\t\t\t<string>7D901800D8324F9F338B54CA286AD771</string>\n\t\t\t\t<string>F26631BB63543446C157972F2F6D1475</string>\n\t\t\t\t<string>FBADF2C12D471003AEB710314DA3FF49</string>\n\t\t\t\t<string>FAC85E18FE868D87FFB2E13C182F4DB9</string>\n\t\t\t\t<string>1E08912939425D011D7C47713E6CDAF0</string>\n\t\t\t\t<string>65F75ED4B34CEDF568441FBC95BA1459</string>\n\t\t\t\t<string>B9051EB6C3E749E2F0538ABF5076D0BE</string>\n\t\t\t\t<string>EDC1E77817E2D0252126B98EB0206A62</string>\n\t\t\t\t<string>93CF7F496E727D827BED2105B65D2073</string>\n\t\t\t\t<string>A14C97547283B618AE64053DD92BB395</string>\n\t\t\t\t<string>F2168F9F63056AC8BFB344608C4158BE</string>\n\t\t\t\t<string>8B2FFB12DD1404D98DCA25509B11611E</string>\n\t\t\t\t<string>F314DFE6C76A8EEBC3D8CAF03EB89850</string>\n\t\t\t\t<string>5A859FF87C3507C937241DD78BD95EF3</string>\n\t\t\t\t<string>051AA4E51A019933DD1E5CE99CD7352A</string>\n\t\t\t\t<string>A2406F04BC69905BAB01C77F8073B55D</string>\n\t\t\t\t<string>E99804B4B10C0A5C7C08E5EF962804CE</string>\n\t\t\t\t<string>FC1FB976E1C29A75089D2374BDFCCC44</string>\n\t\t\t\t<string>105B37778FEED1965C8D0AF4C9E4B4F1</string>\n\t\t\t\t<string>AB0885F8524D9BE85FDEA8BF30520D43</string>\n\t\t\t\t<string>F88B870D7D0531FB54EAD23EB162DB70</string>\n\t\t\t\t<string>64734F2BA63DAFDA24F819EE71704665</string>\n\t\t\t\t<string>688EFB46F8559BD675FD06384ABA49E1</string>\n\t\t\t\t<string>C1814AA3C422738CF4B8DC63539CCD3E</string>\n\t\t\t\t<string>BB3A5C6A66C23862172BF9BED9BC8200</string>\n\t\t\t\t<string>76C42C41A4B61435A3315770F58154B2</string>\n\t\t\t\t<string>D3C785493044AF463085D75F2E9D4FEE</string>\n\t\t\t\t<string>E97CDC7A1DFD18DAAD3C505929F32105</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXResourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>999D9522F4AD2757D76E2BC0D6606B4A</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>5813251FEA21E4AEE97385709F1912DE</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>MWPhotoBrowser-MWPhotoBrowser</string>\n\t\t</dict>\n\t\t<key>9A086D9BE521AADC7C972AE3D9CD5B48</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Specta.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/Specta.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9A9B45D988FA49FD87F8587C42403EC5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beSupersetOf.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beSupersetOf.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9AF3FD4A822DCF644AB50D3967C43C14</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>B6B32565B1C26404789EEFCF37B7C225</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXHeadersBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>9B546D0F895D9B5A8316B948CEE95C77</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>29E6F040DB8ACF8886F7FE628840C480</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>9BDA7CB400BA41525D0DAC5E267B2670</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>NSData+ImageContentType.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/NSData+ImageContentType.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9BF2584F8D336EF737485D7396CFBAFF</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SpectaDSL.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SpectaDSL.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9C03752CBF78921009132B656CF36184</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>45548268D1B9EE9D37731231D940A591</string>\n\t\t\t\t<string>4463CD014E8C258B7F8BF0FD64901B8F</string>\n\t\t\t\t<string>664FB9826D0F046AB6CE15196CC120B7</string>\n\t\t\t\t<string>A245A84584833A620D85A9C8285C71A1</string>\n\t\t\t\t<string>1186EC1A35306EBBA8C3DE66F0973361</string>\n\t\t\t\t<string>AB5E9DFDA102BB04CB66FC61E01085B0</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>9C8319C4AFAB3CAE3C7314EAD8D1AB34</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>F3FAB75D28A2755E4F9F79FB9F2AF5DB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>9C95EBE1D39EEFE5E6404691C95BE2E2</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.script.sh</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests-resources.sh</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9D5AE460F3B78B02A8AE8E5AD0DCC013</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+contain.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+contain.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9D6702575943BF5C71AD0E2299CB53E2</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9D6E638E56BDAD3C2196ED9C28FAF857</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>E348B132ABCC246013AE3A5532BC609F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>9D77DAC945EC22411297CBC957C966F0</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>86A1ADA0F8A843FA09BFF9142BEF76D5</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/Expecta/Expecta-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>9D89C03F805626896F95FA71887D578C</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>F629BC640170D45C22A8048A42BAB040</string>\n\t\t\t\t<string>F6E655732BA75BED75FFACA472080CC4</string>\n\t\t\t\t<string>505D7B9189B81314EF02A1E9479972D0</string>\n\t\t\t\t<string>A22495C61077EFF6CD10B8B82AFA964B</string>\n\t\t\t\t<string>C833942945CF274906A18C8D4BAAE480</string>\n\t\t\t\t<string>2FD7E39AFBAB884FA64CFB5DBDFA1F7B</string>\n\t\t\t\t<string>D8BBE4506E8863FF1D2FA4058580F0C8</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9E58B396BFA804075E0FCC2D7E764BA6</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImageView+HighlightedWebCache.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIImageView+HighlightedWebCache.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>9E907D6C90793FF2CC5533F151827418</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>DE3B07ED7FF04F506B0C5E00F4973589</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>SDWebImage</string>\n\t\t</dict>\n\t\t<key>9F0508C4938477BDB11EAF1F3A6960E7</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t\t<key>target</key>\n\t\t\t<string>7D9E32DAA93E15CFCF77A5BCD2D4BAA2</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>5EB6A7FF5E92B3E2E96A92367BE4AA32</string>\n\t\t</dict>\n\t\t<key>9F080C1D1A758D0A874B7345BE67EC81</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>9775596B3CA16905FC8F66DA8E2A3C67</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t</dict>\n\t\t<key>9F1294BB80138FB7DEE240DF61EC1523</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>717B38CC8B651B61F35E12EE4211DAF0</string>\n\t\t\t\t<string>B74838FB9BEB33B6489F58D787E2A6A4</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>9F19BCDE9BF6E330E14588598DFC6337</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.plist.xml</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests-acknowledgements.plist</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>A07F4B785B315E5B075218A988F05149</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>060435B6E32CF028837E209B20E10639</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>A09DD0AB6A512D74E5628070EBD56026</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>ImageIO.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/ImageIO.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>DEVELOPER_DIR</string>\n\t\t</dict>\n\t\t<key>A0BA05DFEF00406DC4E8898D36D7418D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>A8B86384F8C46CE8544B59FEB6C657F5</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>A0C76077A20E75ED950BF4F88A252F83</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>34F30E1314EC4C287E6B89477C2D0FB4</string>\n\t\t\t\t<string>3B332CC633C291A7A96AD0922CFD8AB0</string>\n\t\t\t\t<string>74A9CCFEBE692130454C41959EBA5254</string>\n\t\t\t\t<string>69DC2FB163EAB23712D9C3C13C72518E</string>\n\t\t\t\t<string>0EF1CB072B5DE5D0A4EE7053EB0E2364</string>\n\t\t\t\t<string>C16C9E56CBDDE2AD1FCF3EFFF3127C20</string>\n\t\t\t\t<string>60262C4B68C1B0EF7D3E4FADACB10CD7</string>\n\t\t\t\t<string>518937C0924DA3A3DD216697CED9205F</string>\n\t\t\t\t<string>0498B98EB393D71314953683060EFD58</string>\n\t\t\t\t<string>D791C7B718024D8AED15BE84AA2FAAD0</string>\n\t\t\t\t<string>A14B4E9F94C0A0EC1EE0AE8BFE030787</string>\n\t\t\t\t<string>F9B0A541E338684F945B7539D802CF64</string>\n\t\t\t\t<string>0DC4183837552F23710F86F9A032C574</string>\n\t\t\t\t<string>3939EE53B37025D6F0E05FF8A4C7DCF0</string>\n\t\t\t\t<string>311D5C7B166178CCB79CFD7E8DD4F641</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXHeadersBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>A1195ED094D0C8B66BB073959AA2ACCD</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWZoomingScrollView.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>A14B4E9F94C0A0EC1EE0AE8BFE030787</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>4CFA073D420411E3535ABA966BEE98CC</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>A14C97547283B618AE64053DD92BB395</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>CB3EA5CC56581FD52BDBA0179D956E7B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>A1BF1E794449AF3F514B2EE3C85F4B10</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestCasePlatform.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/FBSnapshotTestCasePlatform.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>A2118778317DA37C36420E58FB3923B3</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>5CD9AEB21836919899CDA3A9D9510998</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>F0A8CE7CF766D19972CF0934C1652293</string>\n\t\t\t\t<string>A4AB49CB62EB99071274FD6937EE5352</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array>\n\t\t\t\t<string>B55362A439917186B971EF580B391A1B</string>\n\t\t\t\t<string>2D5EE41C6DDBA8F159EEA954F335387A</string>\n\t\t\t\t<string>1B030B50B68FB0D602F2E4B1685FA9BA</string>\n\t\t\t\t<string>6D8154E68B3360EE1C8DA3A4443096F3</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>4D720BB8AE19E427E58843509B28FEB6</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>A22495C61077EFF6CD10B8B82AFA964B</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>E348B132ABCC246013AE3A5532BC609F</string>\n\t\t\t\t<string>63327617AD4F38D1236E71968B0991E5</string>\n\t\t\t\t<string>D54993E311EDD8802711B01895286E4E</string>\n\t\t\t\t<string>A1BF1E794449AF3F514B2EE3C85F4B10</string>\n\t\t\t\t<string>8E108520195BF6568A4A53786EA7B6F0</string>\n\t\t\t\t<string>0043FDF25F85C0B2C11CEAE6B1C54D87</string>\n\t\t\t\t<string>B0329B325C97BC663835390843F985CE</string>\n\t\t\t\t<string>B0DFED38A647950C79B13061F923258C</string>\n\t\t\t\t<string>3B5A7151F8E4FBFE54BF6C2AC80958FA</string>\n\t\t\t\t<string>DD5F3D6C4044A157839220B037A055E8</string>\n\t\t\t\t<string>148F0DEDC306B5A6D48931EFD279E456</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>A2406F04BC69905BAB01C77F8073B55D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3EF2F2E1AF840BA0B6AD13D59AA5F80C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>A245A84584833A620D85A9C8285C71A1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0043FDF25F85C0B2C11CEAE6B1C54D87</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>A26F992E8831118311F3DB7CB830595A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>FFC94BC21DE6B02A85C4BA9B703D222D</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>A2B692D3F450E25A5D8B17F524EA0720</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImageView+WebCache.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIImageView+WebCache.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>A4AB49CB62EB99071274FD6937EE5352</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>0364DCB58A865A2830638D2C0CCED41C</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>A59CA631962D8BFBF1D8BA4BA8F1F223</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageDownloader.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageDownloader.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>A65C491577A425AF82C53F4A40A0A24B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1AB26E75F7BCD415D6AD6B8BA5F03DDB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>A6854D311D55E2BBD8BFCE4E82DF3EA9</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>BA9D20AF1E1E4CF225AA2D772049336D</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>A6993E0B001E6EB572176DFCF9B87C6A</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>5F4AECEF356E35995112F9167B219AD6</string>\n\t\t\t\t<string>82AC9861A9FE0BEFEC04D31C3B05ABB2</string>\n\t\t\t\t<string>EF9006327AFFDBED3FD589DA04E2D36A</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>A6A21F67B2A713138BF1A404E3460084</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>A6FD2A9ACF0632CB41BE9AF1A13BD166</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>2F501FE84845EAD97B9087DAFCBBEE0E</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>Expecta</string>\n\t\t</dict>\n\t\t<key>A7141BC83638F4B38D4D312BAE3BDAC4</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1BB15402D8C2FB01A198273BA1991DED</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>A815E988348FB8A8B609F012516ABD15</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>target</key>\n\t\t\t<string>E2FE87384A67337831E53490EEA8BF11</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>97B5429A3CE99BA07086198F10CCE615</string>\n\t\t</dict>\n\t\t<key>A8490A46CB5206BCA5F90FCFBA2D731E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>79996E262256F57DB50CD16E5EBE5D52</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>A8B86384F8C46CE8544B59FEB6C657F5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWGridViewController.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>AA7B402D31D86AE5E3DD083408311FF1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>E4AD00C4B132C99837C22CC9031DE9F8</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>AABA7597E19FD75C9F320BCD6BB2759E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>AAE75938ED3DD46BC00352B82D7CA890</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>B2CBEFFA54424B8FBBE1EB23EC879E69</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>AAF71AC633AFEC1D271F81DA183E75F0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9A086D9BE521AADC7C972AE3D9CD5B48</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>AB0885F8524D9BE85FDEA8BF30520D43</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>BDD78DD77E210708F222D40A2FDE75B1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>AB1D6408D48F6ECF3FCE553BE73961F5</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>2E7CBF297AA8A0E93C23BFAF1BE94DEE</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>AB5E9DFDA102BB04CB66FC61E01085B0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DD5F3D6C4044A157839220B037A055E8</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>AB8960E6933BD274C11AD9C15CF410AF</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+haveCountOf.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+haveCountOf.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>ABDF044BC66387B0E03E70BAC09D0AC8</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageError@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>AD198F3513AFD6128A50C356DC253545</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>AD6791D14732A3C17164F61CC72FFB0D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>AE917511985F6891AF3F8233B9D34001</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>ADEAC9FE1270035973745D0EB3B84395</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libExpecta.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libExpecta.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>AE1B7431EAFB4D89A49A9DAD35DBE790</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImageView+WebCache.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIImageView+WebCache.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>AE6C39B87AE391EC710DA8FB520ED3F5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWZoomingScrollView.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>AE917511985F6891AF3F8233B9D34001</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beGreaterThanOrEqualTo.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>AF944A6486FDAD944BE766A70129E6D2</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>DACircularProgress-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B0329B325C97BC663835390843F985CE</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImage+Compare.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/UIImage+Compare.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B0D25391E290ADE1BF90E18B8281F5F3</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beFalsy.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beFalsy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B0DFED38A647950C79B13061F923258C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImage+Compare.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/UIImage+Compare.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B1A8AF86363A5D8093FFE48748DC20A1</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B23D9E49B5B3A5C76EAFFC9C7F40B4B9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPUnsupportedObject.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPUnsupportedObject.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B25B4A401CE0322E5FA936642D8E8A36</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>7D8198AD59277CB0379442369CF5247E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>B28719F6B1978267C407032A2AE646F8</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>FE9D7A964178EF6E3CE5FC52134DF825</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>B2CBEFFA54424B8FBBE1EB23EC879E69</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+raise.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+raise.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B2DE78D2D5A5CF173FEBFA2FE4B4023D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>2F29BE2EDEBA2861368726A4772F4E8E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>B33234F432A72D5E8B65694AE937B78F</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>56BD615DEEA3BC153C0B73BAC8A60A13</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>B37F0F91F85060E28F1DAAB522DC7EC1</key>\n\t\t<dict>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ALWAYS_SEARCH_USER_PATHS</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>CLANG_CXX_LANGUAGE_STANDARD</key>\n\t\t\t\t<string>gnu++0x</string>\n\t\t\t\t<key>CLANG_CXX_LIBRARY</key>\n\t\t\t\t<string>libc++</string>\n\t\t\t\t<key>CLANG_ENABLE_MODULES</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_ENABLE_OBJC_ARC</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_BOOL_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_CONSTANT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_DIRECT_OBJC_ISA_USAGE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_EMPTY_BODY</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_ENUM_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_INT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_OBJC_ROOT_CLASS</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN_UNREACHABLE_CODE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>CLANG_WARN__DUPLICATE_METHOD_MATCH</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>COPY_PHASE_STRIP</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>GCC_C_LANGUAGE_STANDARD</key>\n\t\t\t\t<string>gnu99</string>\n\t\t\t\t<key>GCC_DYNAMIC_NO_PIC</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>GCC_OPTIMIZATION_LEVEL</key>\n\t\t\t\t<string>0</string>\n\t\t\t\t<key>GCC_PREPROCESSOR_DEFINITIONS</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>DEBUG=1</string>\n\t\t\t\t\t<string>$(inherited)</string>\n\t\t\t\t</array>\n\t\t\t\t<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_ABOUT_RETURN_TYPE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNDECLARED_SELECTOR</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNINITIALIZED_AUTOS</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNUSED_FUNCTION</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_WARN_UNUSED_VARIABLE</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>ONLY_ACTIVE_ARCH</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>STRIP_INSTALLED_PRODUCT</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>SYMROOT</key>\n\t\t\t\t<string>${SRCROOT}/../build</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>B52658FC373BA42C6DBF475CAEA30F09</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9D6702575943BF5C71AD0E2299CB53E2</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>B55362A439917186B971EF580B391A1B</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>target</key>\n\t\t\t<string>9775596B3CA16905FC8F66DA8E2A3C67</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>9F080C1D1A758D0A874B7345BE67EC81</string>\n\t\t</dict>\n\t\t<key>B5969E17FAFFDC548233DC602AAC6211</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beGreaterThanOrEqualTo.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B6B32565B1C26404789EEFCF37B7C225</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3540CB186FE2EE9EE99381DA600738B8</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>B6CB1D947CABAFFCEFC7F94006CB7AD4</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>B6CE0371E70FB931CC99A90CEBFD6E83</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>E2FE87384A67337831E53490EEA8BF11</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t</dict>\n\t\t<key>B733330A3935B54DE57E0503C1867DAE</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>AD198F3513AFD6128A50C356DC253545</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>B73F44C64FD91479CFE63C882F1E5E70</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>CB09954F9727813F76DD0EC906DB781E</string>\n\t\t\t\t<string>B1A8AF86363A5D8093FFE48748DC20A1</string>\n\t\t\t\t<string>DD16771750E90A2599B84EDB4AFF9B9E</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Support Files</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../Target Support Files/SDWebImage</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B74838FB9BEB33B6489F58D787E2A6A4</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>2055A9E17F10DAA3DD7884DDF96A0A50</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>WRAPPER_EXTENSION</key>\n\t\t\t\t<string>bundle</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>B83D4C05E77991780CA69BF68B431DD2</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example.release.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>B8FC063009C06CE659C8CF168A9F8765</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0B7E61991D03B44046913BF3B345F4DB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>B9051EB6C3E749E2F0538ABF5076D0BE</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>60E1461AAED23D358B1A25A48F9DD77F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>B98B98DB394C072483E8066C6B594401</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>589CDFB90C98BF58F34B688A2BEF2D04</string>\n\t\t\t\t<string>1181CB6FC2D63C42F19EAB56C604A71E</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>BA4C6CCE8BCEAFA07BB2679C87A008C5</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowser-prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>BA6428E9F66FD5A23C0A2E06ED26CD2F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Podfile</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../Podfile</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>SOURCE_ROOT</string>\n\t\t\t<key>xcLanguageSpecificationIdentifier</key>\n\t\t\t<string>xcode.lang.ruby</string>\n\t\t</dict>\n\t\t<key>BA9181C8B2773795F2EACBDE286994AD</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageError@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>BA9D20AF1E1E4CF225AA2D772049336D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Expecta.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Expecta.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>BB3A5C6A66C23862172BF9BED9BC8200</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>D64041D7A1004D2C8771C29362B59366</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>BD30B724A71CF5D6E93805B7615EC79C</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0AB1B49E98BEDDFC8A45BB3C1FB54076</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>BD4E094BE48FCAB50C0CEFC92B2C0B04</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedSmallOff.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>BD56223A67203315C1B15E39E3B40934</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.script.sh</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests-frameworks.sh</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>BDD78DD77E210708F222D40A2FDE75B1</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemArrowRight.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>BE6668D2527C0063CE1C755190A7596F</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>E6798A1D89E725C8EB02146EE4B0E31E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>BEEAFC79B66B12E6D67D140381BE25F2</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>5A531485C6A0D185C72E03CD91B49919</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>BFD984F9AF4C47EDD370C631057D40E8</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>1580BE8D870658FFFB9EF3D04B9213CC</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MACH_O_TYPE</key>\n\t\t\t\t<string>staticlib</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PODS_ROOT</key>\n\t\t\t\t<string>$(SRCROOT)</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>C0593046ABD536BD086B85302FA897DF</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>CB09954F9727813F76DD0EC906DB781E</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/SDWebImage/SDWebImage-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>C0A33FBAF4E7C28807891EC8D0B65204</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhoto.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C162177585DC8E186D24CADCC233B0EA</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemGrid.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C16C9E56CBDDE2AD1FCF3EFFF3127C20</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>47BC96C02F9C3E09817E3FEC2559E33B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>C1814AA3C422738CF4B8DC63539CCD3E</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8439940A3793CF65B24F4185E04317D8</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>C2420EB9004B4667C6328B5C0D098C48</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>49D43B7D98ABA386628BDA9FB6BA411B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>C266061F84E4CFB93AF99D21EEB13401</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhotoBrowserPrivate.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C2909BC6E2528AB50ADD2B0E4FE78DA1</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTTestSuite.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTTestSuite.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C2BFF99EB859FD7056CF72C4850693D1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>63010FB3922AB3E2DDD6D8CDD2D10BFA</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>C2CEB9C1175C4FC4D5BE5C6EF285E0A4</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beTruthy.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beTruthy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C36BB9623ECA2B27942B66986A784EC9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemArrowLeft@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C3D6913F5E4E594A29E40A526602BBB7</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser-MWPhotoBrowser</string>\n\t\t\t<key>target</key>\n\t\t\t<string>5813251FEA21E4AEE97385709F1912DE</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>999D9522F4AD2757D76E2BC0D6606B4A</string>\n\t\t</dict>\n\t\t<key>C402F1446422CAB85FC53BD77E5E9018</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWGridCell.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C5284B0E2549CD42E31F469FB8B92DA8</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libSDWebImage.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libSDWebImage.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>C5AFFFCB54FD9036E7BC9BA54ADAAF30</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>0557FD60A45F62CD51B4972ECE5C2584</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>C5BD0A3729BF33E203724A88CFE727BC</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>FCA01B035C5FC9AF0969977B2C54A7A9</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>C655D4974F9982F0810618C9AC07216F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DALabeledCircularProgressView.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>DACircularProgress/DALabeledCircularProgressView.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C6671739E8C5904113586F8BEBBC9780</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>F40AD0DE1188AA331D98100B8766D6C8</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>C6AD7852D34E8A80DFF3B8376BDE812F</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>8DF90D623F7F9015EEE9F1D7FEE7E053</string>\n\t\t\t\t<string>6A4E3ACA285A21392936C110E7EC91F0</string>\n\t\t\t\t<string>3A013F13122CDB8EE962F8CB7C6FCC8E</string>\n\t\t\t\t<string>A6854D311D55E2BBD8BFCE4E82DF3EA9</string>\n\t\t\t\t<string>081F2104425CDCB0915354E2FBD7E24E</string>\n\t\t\t\t<string>7AC91F55DAAA2F0223A97BEFF8BCAF68</string>\n\t\t\t\t<string>2A17721E4A81DB608CA6D4FB6F0ADAFB</string>\n\t\t\t\t<string>341D7536159B52F41598F730CC45D548</string>\n\t\t\t\t<string>07282695806D1DFBF187BFA004D80641</string>\n\t\t\t\t<string>A8490A46CB5206BCA5F90FCFBA2D731E</string>\n\t\t\t\t<string>AA7B402D31D86AE5E3DD083408311FF1</string>\n\t\t\t\t<string>F4CA468B5A9F8FF2A4DB8B236A8E71BF</string>\n\t\t\t\t<string>021C50274FF43A6F07E119D572C3ACB6</string>\n\t\t\t\t<string>8F674582EE71972EE60EFD96C1F173D5</string>\n\t\t\t\t<string>3E463E2B6917D9AA08A03BA8A8E74A18</string>\n\t\t\t\t<string>AB1D6408D48F6ECF3FCE553BE73961F5</string>\n\t\t\t\t<string>D42799488F38F2DB8A580730CEE13CE6</string>\n\t\t\t\t<string>97E91EC237B8623D895DBF6092034AD7</string>\n\t\t\t\t<string>9B546D0F895D9B5A8316B948CEE95C77</string>\n\t\t\t\t<string>DFF580AE359407E841BA8D8DDCE6E299</string>\n\t\t\t\t<string>EE52A320EC3155B114104E06396D1B59</string>\n\t\t\t\t<string>74707D5ABEC55B3084F52C40A4227B06</string>\n\t\t\t\t<string>14C609D8F203FD45194E93997EFF744E</string>\n\t\t\t\t<string>9019F9233E2A8B04A82C1B8D0274F09F</string>\n\t\t\t\t<string>70545E4EA86C6E593A2A9F6731DA8F6D</string>\n\t\t\t\t<string>2945FAA75C956DD6A541EB51E42E6899</string>\n\t\t\t\t<string>02C7E3EC1E1DFDD7046BD26A67E92686</string>\n\t\t\t\t<string>76331E71086C8CD5118A69B046D8F0FB</string>\n\t\t\t\t<string>430CE433DB59FE090A8CC6AFCFA43337</string>\n\t\t\t\t<string>237FB063FB365119546C7B5006224F3B</string>\n\t\t\t\t<string>C98F5401E5C1AB6512BE50C3B7CEA9BF</string>\n\t\t\t\t<string>339A0C1BFF72397A705959E03877DDDB</string>\n\t\t\t\t<string>AAE75938ED3DD46BC00352B82D7CA890</string>\n\t\t\t\t<string>6EB2498C2AFB1DF8555CB7C1EF89CA5C</string>\n\t\t\t\t<string>E867CBF850D20C314BF4BD790432455D</string>\n\t\t\t\t<string>6924E116731D7079958063A3EE0781ED</string>\n\t\t\t\t<string>4231743B6C143BDB4A5FBB032E6D3799</string>\n\t\t\t\t<string>956FB3AB698AF3DA776A9F24AA79C229</string>\n\t\t\t\t<string>60D3CCEB5B53542228790ABD8885AF42</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXHeadersBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>C6D58082433E54F547A343BCED70CA50</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta-prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C6FE69AE06A770FF76C19B8039EC0780</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Tests-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C77F8C54B4042EC0746E5D285E7D400A</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageDecoder.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageDecoder.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C833942945CF274906A18C8D4BAAE480</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>EF4D256729962DC82677BF90E861294B</string>\n\t\t\t\t<string>427921605A450AEF67D129DACCD87BED</string>\n\t\t\t\t<string>1B0ADBF8A991262A6DE5BD0CB101EEE0</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C98F5401E5C1AB6512BE50C3B7CEA9BF</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>79D73FB4B6A3C92513B81243EA72E78C</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>C9B5F86F6244D78D3F80384F609427C6</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>2F501FE84845EAD97B9087DAFCBBEE0E</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>Expecta</string>\n\t\t</dict>\n\t\t<key>C9B97F514121309E4531C3439E206EC7</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.script.sh</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example-resources.sh</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>C9BF70FB69B8740763B185C23C560434</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedOn@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>CA0DFA401B2A45337DFC72F893A060EF</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>523087C6D186A9F5BEE78D39F9A78F3F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>CA8230DE5C83368629EF3E62C4F0E7B7</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>XCTestCase+Specta.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/XCTestCase+Specta.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>CB08C9C83ABDBE55762A423ED48491EF</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>7DACEAF8582049D6EB8B4CFFB6CA48CD</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>CB09954F9727813F76DD0EC906DB781E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>CB3EA5CC56581FD52BDBA0179D956E7B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedSmallOn@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>CB7148E744A9D03AEDC9D4809248999F</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>7389D03E90A74E5A200DD5ADBB209885</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/DACircularProgress/DACircularProgress-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>CBE0BF23E2B3F39D22B51BC93022DE7D</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>8E485F27A3C78223FB086075C2974A49</string>\n\t\t\t\t<string>9BDA7CB400BA41525D0DAC5E267B2670</string>\n\t\t\t\t<string>2D6EC33CA8D9BD953AD29E16068F2CBD</string>\n\t\t\t\t<string>DE369A67A17A1EE2351376730BB039A4</string>\n\t\t\t\t<string>8A00437F88A0C89CD672C2085CCCF62B</string>\n\t\t\t\t<string>10E446637EC5FF03088009E61B491E75</string>\n\t\t\t\t<string>C77F8C54B4042EC0746E5D285E7D400A</string>\n\t\t\t\t<string>6C982719FDCF6684EB752A0153066FC3</string>\n\t\t\t\t<string>574FFB37A8EF309B1A1EB265267DD353</string>\n\t\t\t\t<string>A59CA631962D8BFBF1D8BA4BA8F1F223</string>\n\t\t\t\t<string>47BC96C02F9C3E09817E3FEC2559E33B</string>\n\t\t\t\t<string>7599165E41821009340AA99FDAC29AE0</string>\n\t\t\t\t<string>222A85D6DAB7D3AC98EF6D7E68B13740</string>\n\t\t\t\t<string>2EDD6193448F7939784FDF1C8016F000</string>\n\t\t\t\t<string>D615D83AA6E624C9EEFAB11B6DAB4612</string>\n\t\t\t\t<string>EC0223776620A3EA741C855D0211CB0A</string>\n\t\t\t\t<string>78759DF877B83416A90AA2BC606BF7ED</string>\n\t\t\t\t<string>518626B93DA6269F02901D111B4DBF26</string>\n\t\t\t\t<string>661962DFFB8F4AF681F8EA78582EE534</string>\n\t\t\t\t<string>4CFA073D420411E3535ABA966BEE98CC</string>\n\t\t\t\t<string>6B1C830074F8BFC3AE3CB3A5278754A8</string>\n\t\t\t\t<string>1A1E8E8494B9BFCEBBD8273148D44386</string>\n\t\t\t\t<string>FE9D7A964178EF6E3CE5FC52134DF825</string>\n\t\t\t\t<string>5D39CEB65ADB521B117CA181C2BB2C9C</string>\n\t\t\t\t<string>9E58B396BFA804075E0FCC2D7E764BA6</string>\n\t\t\t\t<string>AE1B7431EAFB4D89A49A9DAD35DBE790</string>\n\t\t\t\t<string>A2B692D3F450E25A5D8B17F524EA0720</string>\n\t\t\t\t<string>D91F4635A8EDF54921FC9B759BE009F6</string>\n\t\t\t\t<string>38777F32EB3F13ED8D2047C1C9ED6D6D</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Core</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>CC01A834786EDBE30D7011502AE0F9B3</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>CB09954F9727813F76DD0EC906DB781E</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/SDWebImage/SDWebImage-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>NO</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Release</string>\n\t\t</dict>\n\t\t<key>CD12BF87A360D901CFA6AC563638FED1</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>805AE44C01D7936BA8A238C6C5C4807D</string>\n\t\t\t\t<string>AD198F3513AFD6128A50C356DC253545</string>\n\t\t\t\t<string>C6D58082433E54F547A343BCED70CA50</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Support Files</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../Target Support Files/Specta</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>CEFDBDB8900789B0FFB86EBB7065BC62</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libDACircularProgress.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libDACircularProgress.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>CF37F67F6269058934EB779D902EE7AB</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C0A33FBAF4E7C28807891EC8D0B65204</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>CF95446EA555B49150EA7270096D78B2</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>E906DDCC926C2EA5161E326AB04AC53F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>D041545E1DB9D43FCBB294B7E9573AFF</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>D09A95F4452843967F4C8F3FA5EC1A68</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>ExpectaSupport.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/ExpectaSupport.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D10BA2216A9B5F41557B4FC448EE865C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+equal.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+equal.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D2307EC60BB4D23E49C1420E6F192943</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedOff@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D351C08D4390F427D8E1BEC3CB8A57BD</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>9839B551DAF141B99431C2238C8EEBC0</string>\n\t\t\t\t<string>DB7D9B8599935A5FF3862B90E049CABD</string>\n\t\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t\t<string>A09DD0AB6A512D74E5628070EBD56026</string>\n\t\t\t\t<string>6CD3EC2C1FBF5655137A99638E9CC950</string>\n\t\t\t\t<string>5E350F03F362C03BE32737DDE72D4632</string>\n\t\t\t\t<string>0B7E61991D03B44046913BF3B345F4DB</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>iOS</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D359D2CDD896874DAD7B6D2EF3FEE26D</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>target</key>\n\t\t\t<string>DE3B07ED7FF04F506B0C5E00F4973589</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>9E907D6C90793FF2CC5533F151827418</string>\n\t\t</dict>\n\t\t<key>D3C785493044AF463085D75F2E9D4FEE</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>2DE374580729793C277006A3481402A3</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>D41D8CD98F00B204E9800998ECF8427E</key>\n\t\t<dict>\n\t\t\t<key>attributes</key>\n\t\t\t<dict>\n\t\t\t\t<key>LastSwiftUpdateCheck</key>\n\t\t\t\t<string>0700</string>\n\t\t\t\t<key>LastUpgradeCheck</key>\n\t\t\t\t<string>0700</string>\n\t\t\t</dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>2D8E8EC45A3A1A1D94AE762CB5028504</string>\n\t\t\t<key>compatibilityVersion</key>\n\t\t\t<string>Xcode 3.2</string>\n\t\t\t<key>developmentRegion</key>\n\t\t\t<string>English</string>\n\t\t\t<key>hasScannedForEncodings</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXProject</string>\n\t\t\t<key>knownRegions</key>\n\t\t\t<array>\n\t\t\t\t<string>en</string>\n\t\t\t</array>\n\t\t\t<key>mainGroup</key>\n\t\t\t<string>7DB346D0F39D3F0E887471402A8071AB</string>\n\t\t\t<key>productRefGroup</key>\n\t\t\t<string>9142D907B715CE18385E00AB1972B1BD</string>\n\t\t\t<key>projectDirPath</key>\n\t\t\t<string></string>\n\t\t\t<key>projectReferences</key>\n\t\t\t<array/>\n\t\t\t<key>projectRoot</key>\n\t\t\t<string></string>\n\t\t\t<key>targets</key>\n\t\t\t<array>\n\t\t\t\t<string>9775596B3CA16905FC8F66DA8E2A3C67</string>\n\t\t\t\t<string>2F501FE84845EAD97B9087DAFCBBEE0E</string>\n\t\t\t\t<string>05257CC76400D71826E603561A0F73E6</string>\n\t\t\t\t<string>7D9E32DAA93E15CFCF77A5BCD2D4BAA2</string>\n\t\t\t\t<string>FE2F1D7B9D9FCEA148517E4657B243F4</string>\n\t\t\t\t<string>E2FE87384A67337831E53490EEA8BF11</string>\n\t\t\t\t<string>5813251FEA21E4AEE97385709F1912DE</string>\n\t\t\t\t<string>A2118778317DA37C36420E58FB3923B3</string>\n\t\t\t\t<string>722090AAE01BA442E883E6F02AA8DF40</string>\n\t\t\t\t<string>DE3B07ED7FF04F506B0C5E00F4973589</string>\n\t\t\t\t<string>E9AAC3590B391F4CFAF5F8348E6A8FE4</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<key>D42799488F38F2DB8A580730CEE13CE6</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3C5A51B8AE7322A210CF01AFBA648598</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>D47B0B4C04222F6784D38356F02BEB32</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>FE2F1D7B9D9FCEA148517E4657B243F4</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t</dict>\n\t\t<key>D52C083C7341E76797DB059849542613</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libFBSnapshotTestCase.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libFBSnapshotTestCase.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>D54993E311EDD8802711B01895286E4E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestCasePlatform.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/FBSnapshotTestCasePlatform.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D583D511354F609B73EB28F4CFA2C32A</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>target</key>\n\t\t\t<string>9775596B3CA16905FC8F66DA8E2A3C67</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>386634C7797B60DF71C8AD13DAAD315D</string>\n\t\t</dict>\n\t\t<key>D5DEC16E7CEEFEABBFEBAC3A10358C5A</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase-prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D5EE5F7C5A846B01ACF225DE04E52196</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example.debug.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D615D83AA6E624C9EEFAB11B6DAB4612</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImageOperation.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImageOperation.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D64041D7A1004D2C8771C29362B59366</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIBarButtonItemGrid@3x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D68BA9A93FD415E751DFA95CCF7DCB8D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beCloseTo.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beCloseTo.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D70BED84191514A998A08D7F3B8BBB17</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPDoubleTuple.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPDoubleTuple.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D791C7B718024D8AED15BE84AA2FAAD0</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>518626B93DA6269F02901D111B4DBF26</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>D7A0524D2A055F825B4DF69A9DBBFF98</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>A1195ED094D0C8B66BB073959AA2ACCD</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>D7B59E66FA2C765426650ADECEF955EF</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>FE2F1D7B9D9FCEA148517E4657B243F4</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t</dict>\n\t\t<key>D7F1441E30E059AC17B4C1CE1464C07B</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libMBProgressHUD.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libMBProgressHUD.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>D8619A771228AD0402C4D464E3C6EE53</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWPhoto.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D8BBE4506E8863FF1D2FA4058580F0C8</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>9A086D9BE521AADC7C972AE3D9CD5B48</string>\n\t\t\t\t<string>9BF2584F8D336EF737485D7396CFBAFF</string>\n\t\t\t\t<string>F3FAB75D28A2755E4F9F79FB9F2AF5DB</string>\n\t\t\t\t<string>6347B71E8C22BA00F73AB093F101B7D4</string>\n\t\t\t\t<string>3CD608194F35F47CEC250368B43C48E9</string>\n\t\t\t\t<string>DBE203B988A948E71FDDCAE62BA1F4CC</string>\n\t\t\t\t<string>2ACE82A15131DC569A786CB49EFD1804</string>\n\t\t\t\t<string>0668957FEB1B3CAE2EABBC4AA9ABA7C3</string>\n\t\t\t\t<string>569060A075537DFE6A4D25D96C98668B</string>\n\t\t\t\t<string>56228B3CBF246784930BFE7B29EFDD04</string>\n\t\t\t\t<string>2F29BE2EDEBA2861368726A4772F4E8E</string>\n\t\t\t\t<string>1AFDF0F0EF2A314336EACA38FCC6F784</string>\n\t\t\t\t<string>818AFFCC037C608492FAE59C7C3E85C0</string>\n\t\t\t\t<string>571096112AA1AD00C10596D216783599</string>\n\t\t\t\t<string>1D772DC880BCFABF5028DA167DE6B119</string>\n\t\t\t\t<string>49D43B7D98ABA386628BDA9FB6BA411B</string>\n\t\t\t\t<string>1398D1B84667A17FCB66182F776EAC42</string>\n\t\t\t\t<string>8F2B443FA0D511403E4DA2A79DB3302A</string>\n\t\t\t\t<string>691CE6B20E64762C98682B93B31435E7</string>\n\t\t\t\t<string>F1948E226356BF652752F9FA7317BC73</string>\n\t\t\t\t<string>EF75C10714B7CFF9071553F07D94A550</string>\n\t\t\t\t<string>C2909BC6E2528AB50ADD2B0E4FE78DA1</string>\n\t\t\t\t<string>1EF011C5AA1726984A1B50A46191CE9B</string>\n\t\t\t\t<string>1E360C94C47826C4CAEEDBFC04C36A42</string>\n\t\t\t\t<string>CA8230DE5C83368629EF3E62C4F0E7B7</string>\n\t\t\t\t<string>CD12BF87A360D901CFA6AC563638FED1</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Specta</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D91F4635A8EDF54921FC9B759BE009F6</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIView+WebCacheOperation.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIView+WebCacheOperation.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>D9E225250B8DAA16A4D7B6A66EC6574A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C2909BC6E2528AB50ADD2B0E4FE78DA1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>DA7F16221783A03C084D9BAAF7F404DB</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beginWith.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beginWith.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>DB7D9B8599935A5FF3862B90E049CABD</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>CoreGraphics.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/CoreGraphics.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>DEVELOPER_DIR</string>\n\t\t</dict>\n\t\t<key>DBE203B988A948E71FDDCAE62BA1F4CC</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SpectaUtility.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SpectaUtility.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>DC1F1DBD53679CB78C5967BA9DEC08CA</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>78759DF877B83416A90AA2BC606BF7ED</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>DD16771750E90A2599B84EDB4AFF9B9E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage-prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>DD5F3D6C4044A157839220B037A055E8</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImage+Diff.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/UIImage+Diff.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>DD7BDEE57A8E95F9F327AC87B6A78256</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C402F1446422CAB85FC53BD77E5E9018</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>DDAA00E6C2E81A6C35534DD632143F09</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>7389D03E90A74E5A200DD5ADBB209885</string>\n\t\t\t\t<string>AF944A6486FDAD944BE766A70129E6D2</string>\n\t\t\t\t<string>E5EA159155EA435901485FBB8111088C</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Support Files</string>\n\t\t\t<key>path</key>\n\t\t\t<string>../Target Support Files/DACircularProgress</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>DE0797009C8330FFDB1FC0EB8D2DA9DD</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>DE369A67A17A1EE2351376730BB039A4</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDImageCache.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDImageCache.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>DE3B07ED7FF04F506B0C5E00F4973589</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>8D8B7C183B18D82F1958BB3115798433</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>7357CD98F48585C602A75C901AD5E096</string>\n\t\t\t\t<string>B98B98DB394C072483E8066C6B594401</string>\n\t\t\t\t<string>A0C76077A20E75ED950BF4F88A252F83</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>C5284B0E2549CD42E31F469FB8B92DA8</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>DF11024BF511A0D2225D4BA84770CED7</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>wrapper.framework</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Foundation.framework</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>DEVELOPER_DIR</string>\n\t\t</dict>\n\t\t<key>DFA142DA2A1E6AB454178652BAC9A075</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPDoubleTuple.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPDoubleTuple.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>DFAB389ECAD69BF8BE6357CFADABBF5C</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9E58B396BFA804075E0FCC2D7E764BA6</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>DFF580AE359407E841BA8D8DDCE6E299</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>ED1EC819236EDC3B337FCB044454FEB6</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>E06376455C1D5E45B97ACDC5438FC15B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>40DAD22BCDD38D058B1C9A312C42DF49</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>E0EBF0357895E0C657A233A9D4D0E2C1</key>\n\t\t<dict>\n\t\t\t<key>explicitFileType</key>\n\t\t\t<string>archive.ar</string>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>name</key>\n\t\t\t<string>libPods-MWPhotoBrowser_Tests.a</string>\n\t\t\t<key>path</key>\n\t\t\t<string>libPods-MWPhotoBrowser_Tests.a</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>BUILT_PRODUCTS_DIR</string>\n\t\t</dict>\n\t\t<key>E127589B46F33617D24F341DBAE1E90D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>571096112AA1AD00C10596D216783599</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>E145A7E23B46A8C1E1549511735A041D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>69C3D12EC1F2F8AE628C05AC390D9D61</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>E287D744F886B15E1060AFEA475FC727</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>4358F868C1553FF4273B0726E5AD2012</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>E2EBD18BA89D3FF648947DF31FA12D44</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>24FAEADA1249F6042B4B4B135CDD0DF9</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>E2FE87384A67337831E53490EEA8BF11</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>0732716566238BF76BBF762F85C8ABAF</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>F90E42BE0540AE823AEBE381B7F2AF8C</string>\n\t\t\t\t<string>886428740DB164747FBA1935F65900DF</string>\n\t\t\t\t<string>53FA1A78374A52A66FBFD0691645BCB8</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array>\n\t\t\t\t<string>D583D511354F609B73EB28F4CFA2C32A</string>\n\t\t\t\t<string>8EE5D8EDB6C595B190E81B76D3190EB3</string>\n\t\t\t\t<string>C3D6913F5E4E594A29E40A526602BBB7</string>\n\t\t\t\t<string>299B50B04F45E1A2F52075C3B7A1AEB2</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>50F87BFDC26A0B4CC6DE06D3ACBD0714</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>E348B132ABCC246013AE3A5532BC609F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>FBSnapshotTestCase.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase/FBSnapshotTestCase.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>E40400D97F14785D20A7A5594F0E2C56</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1398D1B84667A17FCB66182F776EAC42</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>E4436D58F27EAC932F3CC2A7619D5FD3</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedSmallOn@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>E4AD00C4B132C99837C22CC9031DE9F8</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beCloseTo.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beCloseTo.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>E54B859019C3D44B55F4723880F93D4D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>E7E794ADE2D5267DF8949DD0A42B935B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>E5EA159155EA435901485FBB8111088C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>DACircularProgress-prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>E6798A1D89E725C8EB02146EE4B0E31E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedOff@2x.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>E7B8141DB24F5AA0D1F847AFEC0DB018</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>0557FD60A45F62CD51B4972ECE5C2584</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>E7E794ADE2D5267DF8949DD0A42B935B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>UIImage+MWPhotoBrowser.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>E81C08F5CCC0A5FBFF4559E2173164C7</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>70D801E0B95C23BCC270E4EC8659D463</string>\n\t\t\t\t<string>2989492A1A182744E36FD61DF1746D94</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>E867CBF850D20C314BF4BD790432455D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>05DA7841521B75C4D0C303F32E518117</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>E8709320B1728545E4889D6232A39109</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>216490FDC8376C36DB920710C65B92F3</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>E906DDCC926C2EA5161E326AB04AC53F</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPBlockDefinedMatcher.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/EXPBlockDefinedMatcher.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>E97CDC7A1DFD18DAAD3C505929F32105</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9604D510A96A637DD9AE0D304B68A5A2</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>E99804B4B10C0A5C7C08E5EF962804CE</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>0A9B8E3E35177F52A643739AC50B00FA</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>E9AAC3590B391F4CFAF5F8348E6A8FE4</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>F4A25246330C837CF7FB43FCC4E2A63F</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>4C9C7890ED44DBC3090EEDFD92749F0A</string>\n\t\t\t\t<string>1684C2FDDE674F14B731CC940021D8C6</string>\n\t\t\t\t<string>3907B3A4464A3069E24142505C76338D</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Specta</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>Specta</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>7CF892960748F43245AD2B5CD2AC41A5</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>EB4DE2009B511D62CF6BFE67FA73E321</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pods-MWPhotoBrowser_Example-acknowledgements.markdown</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>EB75F515760C184B2ED65E8649DC5792</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>56228B3CBF246784930BFE7B29EFDD04</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>EB88EE844F8ADBE7E78B381D8832162D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beFalsy.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beFalsy.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>EC0223776620A3EA741C855D0211CB0A</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SDWebImagePrefetcher.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/SDWebImagePrefetcher.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>EC9E28E1F941952C6708902F41FD209D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beSupersetOf.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beSupersetOf.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>ECE81C5981477AA7D254ACC70534BE23</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>6F1FCA0BD48258CDEC1B14D704BA3E5D</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MACH_O_TYPE</key>\n\t\t\t\t<string>staticlib</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PODS_ROOT</key>\n\t\t\t\t<string>$(SRCROOT)</string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>ED177B9B7FCFE4E41DCDCCFB49692E1D</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>5289709799A254B807701A658BD9D425</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>ED1EC819236EDC3B337FCB044454FEB6</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beLessThan.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beLessThan.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>EDC1E77817E2D0252126B98EB0206A62</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>46F871A74D831312A633CCFC0A94F75D</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>EDDE097EFD40E9A4E32E4B44C97CE44B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>10E446637EC5FF03088009E61B491E75</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>EE04EE8ADAB8F7DF7FCEFDDD1E801BE6</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>7D9E32DAA93E15CFCF77A5BCD2D4BAA2</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t</dict>\n\t\t<key>EE52A320EC3155B114104E06396D1B59</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>809101940909F56A7B70CE17D447640B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>EF1C003613925663F17E023C73AF519C</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>5EB4F27B76513AE918BA5AE0868E87C8</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXHeadersBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>EF4D256729962DC82677BF90E861294B</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MBProgressHUD.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>EF5AC1222120F3BAB7481DA9615352B0</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>FBSnapshotTestCase.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>EF75C10714B7CFF9071553F07D94A550</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTTestSuite.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTTestSuite.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>EF9006327AFFDBED3FD589DA04E2D36A</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C655D4974F9982F0810618C9AC07216F</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>EFE77B95F063C96D9B07BC2A988AB403</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>9839B551DAF141B99431C2238C8EEBC0</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>F0A8CE7CF766D19972CF0934C1652293</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>CA0DFA401B2A45337DFC72F893A060EF</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>F1948E226356BF652752F9FA7317BC73</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SPTSpec.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SPTSpec.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F1F4E65611F5567A86AF797EAC3E225B</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>B0D25391E290ADE1BF90E18B8281F5F3</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-fno-objc-arc</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>F2168F9F63056AC8BFB344608C4158BE</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>3CAA21F3728659DC1B58A336233AEB79</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>F2334A461A36CF285AC6F7E96F8FE0DB</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>path</key>\n\t\t\t<string>ImageSelectedOn.png</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F26631BB63543446C157972F2F6D1475</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>F2334A461A36CF285AC6F7E96F8FE0DB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>F2A9AAC03867BB4990470BAC5912E030</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>53FB0CBA14BE53F79F4EB4E7B46C523B</string>\n\t\t\t\t<string>072C184628072EDE522629576F1716DE</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>F2BDF8E898C762EFB3844211CE201024</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFrameworksBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>F2F5671C4613023EE94A2E62DA06031D</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>E7B8141DB24F5AA0D1F847AFEC0DB018</string>\n\t\t\t\t<string>C5AFFFCB54FD9036E7BC9BA54ADAAF30</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>F314DFE6C76A8EEBC3D8CAF03EB89850</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>75F83323F205A277BEC18AABDA0FA739</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>F3BB0A963277282C6BF73E81250B6943</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>38777F32EB3F13ED8D2047C1C9ED6D6D</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>COMPILER_FLAGS</key>\n\t\t\t\t<string>-DOS_OBJECT_USE_OBJC=0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>F3FAB75D28A2755E4F9F79FB9F2AF5DB</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>SpectaDSL.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Specta/Specta/SpectaDSL.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F40AD0DE1188AA331D98100B8766D6C8</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beLessThan.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beLessThan.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F4A25246330C837CF7FB43FCC4E2A63F</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurations</key>\n\t\t\t<array>\n\t\t\t\t<string>1C1837DF96AE65F662773DF1956BFF09</string>\n\t\t\t\t<string>04D4EDE1F05B96EE8BB9DCD368608620</string>\n\t\t\t</array>\n\t\t\t<key>defaultConfigurationIsVisible</key>\n\t\t\t<string>0</string>\n\t\t\t<key>defaultConfigurationName</key>\n\t\t\t<string>Release</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCConfigurationList</string>\n\t\t</dict>\n\t\t<key>F4CA468B5A9F8FF2A4DB8B236A8E71BF</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>EB88EE844F8ADBE7E78B381D8832162D</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>F4CDA5FA9197A41E0081E84F932906EB</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>D351C08D4390F427D8E1BEC3CB8A57BD</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Frameworks</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F5551459CFCB6B7914E9EC1783277D94</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta+Snapshots-prefix.pch</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F5963246D32249D4D198CE8A36B4DD12</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+raiseWithReason.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+raiseWithReason.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F5F4D07451FB3E10EE7C16A83010425F</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>DF11024BF511A0D2225D4BA84770CED7</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>F601833D09980E16136321674463BE81</key>\n\t\t<dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXTargetDependency</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Expecta</string>\n\t\t\t<key>target</key>\n\t\t\t<string>2F501FE84845EAD97B9087DAFCBBEE0E</string>\n\t\t\t<key>targetProxy</key>\n\t\t\t<string>C9B5F86F6244D78D3F80384F609427C6</string>\n\t\t</dict>\n\t\t<key>F6045A7604731086F9E1A9412E290302</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>FAF77DDAA41AC524C38F1D92F2EE01AB</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/Expecta+Snapshots/Expecta+Snapshots-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>F629BC640170D45C22A8048A42BAB040</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>37E4F69B3E6AFDEE8D68A3430CEC8BF5</string>\n\t\t\t\t<string>40D39B6435EEF47A85F4E3FB684E72FE</string>\n\t\t\t\t<string>60ECF290B248258F453088B6258302E6</string>\n\t\t\t\t<string>C655D4974F9982F0810618C9AC07216F</string>\n\t\t\t\t<string>DDAA00E6C2E81A6C35534DD632143F09</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>path</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F6E655732BA75BED75FFACA472080CC4</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>0A924BC847BA99EBCBD0588603448B05</string>\n\t\t\t\t<string>E906DDCC926C2EA5161E326AB04AC53F</string>\n\t\t\t\t<string>7AAD7709C9FF6828905D6A28E69C4221</string>\n\t\t\t\t<string>DFA142DA2A1E6AB454178652BAC9A075</string>\n\t\t\t\t<string>D70BED84191514A998A08D7F3B8BBB17</string>\n\t\t\t\t<string>BA9D20AF1E1E4CF225AA2D772049336D</string>\n\t\t\t\t<string>1D536F869C3B7D603AC4630F3F6AB919</string>\n\t\t\t\t<string>3DEC242716623D70F4CC9F4A1D32805C</string>\n\t\t\t\t<string>D09A95F4452843967F4C8F3FA5EC1A68</string>\n\t\t\t\t<string>4BE4F23029A1EDB234CF7F2AEB043EB0</string>\n\t\t\t\t<string>3E7FFEF7BFB0350CE8FCC2D6D64D1396</string>\n\t\t\t\t<string>92F064516748B6AA4C6E303A38C3FE6A</string>\n\t\t\t\t<string>8136A5BFC35DA48ABC2C0D94EA79B7F0</string>\n\t\t\t\t<string>15082EF0D1C2F7B77B63E0116BDA622C</string>\n\t\t\t\t<string>700F6F4AFED22AEAA1D8943236F94924</string>\n\t\t\t\t<string>79996E262256F57DB50CD16E5EBE5D52</string>\n\t\t\t\t<string>232510EC13760470E86AABE302EF2B8E</string>\n\t\t\t\t<string>6ED6BE9A61002A3AF6D4C834E2277D8C</string>\n\t\t\t\t<string>E4AD00C4B132C99837C22CC9031DE9F8</string>\n\t\t\t\t<string>D68BA9A93FD415E751DFA95CCF7DCB8D</string>\n\t\t\t\t<string>EB88EE844F8ADBE7E78B381D8832162D</string>\n\t\t\t\t<string>B0D25391E290ADE1BF90E18B8281F5F3</string>\n\t\t\t\t<string>DA7F16221783A03C084D9BAAF7F404DB</string>\n\t\t\t\t<string>1BB15402D8C2FB01A198273BA1991DED</string>\n\t\t\t\t<string>0683DF2C9B7FC27B576AB4B7B3B146ED</string>\n\t\t\t\t<string>7DACEAF8582049D6EB8B4CFFB6CA48CD</string>\n\t\t\t\t<string>B5969E17FAFFDC548233DC602AAC6211</string>\n\t\t\t\t<string>AE917511985F6891AF3F8233B9D34001</string>\n\t\t\t\t<string>2E7CBF297AA8A0E93C23BFAF1BE94DEE</string>\n\t\t\t\t<string>1AB26E75F7BCD415D6AD6B8BA5F03DDB</string>\n\t\t\t\t<string>3C5A51B8AE7322A210CF01AFBA648598</string>\n\t\t\t\t<string>44D0D04C0DF98EC05B4909F397D6F7FF</string>\n\t\t\t\t<string>862018A7CC10880108A2BDC5146C8F3F</string>\n\t\t\t\t<string>F9B2375A6E20F2774E7B3F08FB92909E</string>\n\t\t\t\t<string>29E6F040DB8ACF8886F7FE628840C480</string>\n\t\t\t\t<string>3173089CCB6C063D260C58DD7BA3ABF5</string>\n\t\t\t\t<string>ED1EC819236EDC3B337FCB044454FEB6</string>\n\t\t\t\t<string>F40AD0DE1188AA331D98100B8766D6C8</string>\n\t\t\t\t<string>809101940909F56A7B70CE17D447640B</string>\n\t\t\t\t<string>746A80915CF52BE732D200BAA851FBAB</string>\n\t\t\t\t<string>2779B434631901F1434BC316E3FB5AE9</string>\n\t\t\t\t<string>40DAD22BCDD38D058B1C9A312C42DF49</string>\n\t\t\t\t<string>71865C216F48AC822D486C8D9B03B13C</string>\n\t\t\t\t<string>0AB1B49E98BEDDFC8A45BB3C1FB54076</string>\n\t\t\t\t<string>9A9B45D988FA49FD87F8587C42403EC5</string>\n\t\t\t\t<string>EC9E28E1F941952C6708902F41FD209D</string>\n\t\t\t\t<string>10E68FD4A81F628778B6A4992DB9D952</string>\n\t\t\t\t<string>C2CEB9C1175C4FC4D5BE5C6EF285E0A4</string>\n\t\t\t\t<string>FDE2A8151D1FDB6749FB32276220BE7C</string>\n\t\t\t\t<string>63010FB3922AB3E2DDD6D8CDD2D10BFA</string>\n\t\t\t\t<string>981F3EB0C06E97770D2421E673B013A1</string>\n\t\t\t\t<string>9D5AE460F3B78B02A8AE8E5AD0DCC013</string>\n\t\t\t\t<string>567A47FABAD9EE8B7DF32295CC53F937</string>\n\t\t\t\t<string>56BD615DEEA3BC153C0B73BAC8A60A13</string>\n\t\t\t\t<string>D10BA2216A9B5F41557B4FC448EE865C</string>\n\t\t\t\t<string>70922EF029715CA28E814F87373F29C4</string>\n\t\t\t\t<string>AB8960E6933BD274C11AD9C15CF410AF</string>\n\t\t\t\t<string>6CF3D336192327338965DC88856BDFCF</string>\n\t\t\t\t<string>79D73FB4B6A3C92513B81243EA72E78C</string>\n\t\t\t\t<string>7250BEF99A7686EAB50B17986FDCED3E</string>\n\t\t\t\t<string>5F878B29A406784703BC9F07FBFDD99F</string>\n\t\t\t\t<string>3DA2CF997A09E53F375CF0DEEF25AFCF</string>\n\t\t\t\t<string>B2CBEFFA54424B8FBBE1EB23EC879E69</string>\n\t\t\t\t<string>788D548DE837CA2FA9D2D744D64FA847</string>\n\t\t\t\t<string>F5963246D32249D4D198CE8A36B4DD12</string>\n\t\t\t\t<string>FFC94BC21DE6B02A85C4BA9B703D222D</string>\n\t\t\t\t<string>05DA7841521B75C4D0C303F32E518117</string>\n\t\t\t\t<string>24FAEADA1249F6042B4B4B135CDD0DF9</string>\n\t\t\t\t<string>865FAF448207E691D600F40C4ACF7C58</string>\n\t\t\t\t<string>B23D9E49B5B3A5C76EAFFC9C7F40B4B9</string>\n\t\t\t\t<string>66D391F04A8D672C0D42510DE811E7B2</string>\n\t\t\t\t<string>18391089432560093C31CCA48ABB46AE</string>\n\t\t\t\t<string>5A06D9F124A077FE3345C713135D7E6C</string>\n\t\t\t\t<string>4209F7E4332FDC16B4C407CA07C3E8E8</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Expecta</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>F84C57B89A97BB8108482354FFD8E157</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>86A1ADA0F8A843FA09BFF9142BEF76D5</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/Expecta/Expecta-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>F88B870D7D0531FB54EAD23EB162DB70</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>8DC04A9EEA14F0D2300FB6C0CAEB9CAB</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>F90E42BE0540AE823AEBE381B7F2AF8C</key>\n\t\t<dict>\n\t\t\t<key>buildActionMask</key>\n\t\t\t<string>2147483647</string>\n\t\t\t<key>files</key>\n\t\t\t<array>\n\t\t\t\t<string>453678659359A72C87495DDD6D9BD0C6</string>\n\t\t\t\t<string>C5BD0A3729BF33E203724A88CFE727BC</string>\n\t\t\t\t<string>A0BA05DFEF00406DC4E8898D36D7418D</string>\n\t\t\t\t<string>CF37F67F6269058934EB779D902EE7AB</string>\n\t\t\t\t<string>1A0D2B172232171C3EB6DC4DFE575EE7</string>\n\t\t\t\t<string>6EEA87D8E87914D02AA319693371EE2C</string>\n\t\t\t\t<string>E8709320B1728545E4889D6232A39109</string>\n\t\t\t\t<string>5023A97277B66BB3E83DA779FEBAE80C</string>\n\t\t\t\t<string>D7A0524D2A055F825B4DF69A9DBBFF98</string>\n\t\t\t\t<string>ED177B9B7FCFE4E41DCDCCFB49692E1D</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXSourcesBuildPhase</string>\n\t\t\t<key>runOnlyForDeploymentPostprocessing</key>\n\t\t\t<string>0</string>\n\t\t</dict>\n\t\t<key>F9B0A541E338684F945B7539D802CF64</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1A1E8E8494B9BFCEBBD8273148D44386</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>F9B2375A6E20F2774E7B3F08FB92909E</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+beInTheRangeOf.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+beInTheRangeOf.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>FAC85E18FE868D87FFB2E13C182F4DB9</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C9BF70FB69B8740763B185C23C560434</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>FAF77DDAA41AC524C38F1D92F2EE01AB</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>text.xcconfig</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta+Snapshots.xcconfig</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>FB42B2F11B39412F3015A082008F1782</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>AE6C39B87AE391EC710DA8FB520ED3F5</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>FBADF2C12D471003AEB710314DA3FF49</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>28A20AE3D7A1F50CAD0D9D8B71205EC6</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>FC1172043A5F0542D166D63AE9EBC260</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MBProgressHUD-dummy.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>FC1FB976E1C29A75089D2374BDFCCC44</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C36BB9623ECA2B27942B66986A784EC9</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>FC214077677D4F02E03C6C85F774E028</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>FC1172043A5F0542D166D63AE9EBC260</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>FCA01B035C5FC9AF0969977B2C54A7A9</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>path</key>\n\t\t\t<string>MWGridCell.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>FD6FA76757975A1FC954269CE5739798</key>\n\t\t<dict>\n\t\t\t<key>baseConfigurationReference</key>\n\t\t\t<string>EF5AC1222120F3BAB7481DA9615352B0</string>\n\t\t\t<key>buildSettings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ENABLE_STRICT_OBJC_MSGSEND</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>GCC_PREFIX_HEADER</key>\n\t\t\t\t<string>Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase-prefix.pch</string>\n\t\t\t\t<key>IPHONEOS_DEPLOYMENT_TARGET</key>\n\t\t\t\t<string>7.0</string>\n\t\t\t\t<key>MTL_ENABLE_DEBUG_INFO</key>\n\t\t\t\t<string>YES</string>\n\t\t\t\t<key>OTHER_LDFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>OTHER_LIBTOOLFLAGS</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRIVATE_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>PRODUCT_NAME</key>\n\t\t\t\t<string>$(TARGET_NAME)</string>\n\t\t\t\t<key>PUBLIC_HEADERS_FOLDER_PATH</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>SDKROOT</key>\n\t\t\t\t<string>iphoneos</string>\n\t\t\t\t<key>SKIP_INSTALL</key>\n\t\t\t\t<string>YES</string>\n\t\t\t</dict>\n\t\t\t<key>isa</key>\n\t\t\t<string>XCBuildConfiguration</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Debug</string>\n\t\t</dict>\n\t\t<key>FDE2A8151D1FDB6749FB32276220BE7C</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.h</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+conformTo.h</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+conformTo.h</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>FDEE1AFEA9C68977819B7D652EE1F6F2</key>\n\t\t<dict>\n\t\t\t<key>children</key>\n\t\t\t<array>\n\t\t\t\t<string>362D9038C23D156F9F055EDF5565A5F1</string>\n\t\t\t</array>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXGroup</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Pod</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Pod</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>FDF72740DBC37AFACFED73ED42282383</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>A6A21F67B2A713138BF1A404E3460084</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t</dict>\n\t\t<key>FE2F1D7B9D9FCEA148517E4657B243F4</key>\n\t\t<dict>\n\t\t\t<key>buildConfigurationList</key>\n\t\t\t<string>F2F5671C4613023EE94A2E62DA06031D</string>\n\t\t\t<key>buildPhases</key>\n\t\t\t<array>\n\t\t\t\t<string>098439AB598DDF1AF51146A2E3E2E562</string>\n\t\t\t\t<string>E81C08F5CCC0A5FBFF4559E2173164C7</string>\n\t\t\t\t<string>EF1C003613925663F17E023C73AF519C</string>\n\t\t\t</array>\n\t\t\t<key>buildRules</key>\n\t\t\t<array/>\n\t\t\t<key>dependencies</key>\n\t\t\t<array/>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXNativeTarget</string>\n\t\t\t<key>name</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>productName</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>productReference</key>\n\t\t\t<string>D7F1441E30E059AC17B4C1CE1464C07B</string>\n\t\t\t<key>productType</key>\n\t\t\t<string>com.apple.product-type.library.static</string>\n\t\t</dict>\n\t\t<key>FE4A445C1692178764D9C71EAC64ABAC</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>05257CC76400D71826E603561A0F73E6</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>Expecta+Snapshots</string>\n\t\t</dict>\n\t\t<key>FE9D7A964178EF6E3CE5FC52134DF825</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>UIImage+MultiFormat.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>SDWebImage/UIImage+MultiFormat.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>FEFA85FDDB15B89CF28DF12C1C2071E1</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>1EF011C5AA1726984A1B50A46191CE9B</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>FF6817E7D2D11A6D747BFAEA934D0FD1</key>\n\t\t<dict>\n\t\t\t<key>containerPortal</key>\n\t\t\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXContainerItemProxy</string>\n\t\t\t<key>proxyType</key>\n\t\t\t<string>1</string>\n\t\t\t<key>remoteGlobalIDString</key>\n\t\t\t<string>FE2F1D7B9D9FCEA148517E4657B243F4</string>\n\t\t\t<key>remoteInfo</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t</dict>\n\t\t<key>FFC94BC21DE6B02A85C4BA9B703D222D</key>\n\t\t<dict>\n\t\t\t<key>includeInIndex</key>\n\t\t\t<string>1</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXFileReference</string>\n\t\t\t<key>lastKnownFileType</key>\n\t\t\t<string>sourcecode.c.objc</string>\n\t\t\t<key>name</key>\n\t\t\t<string>EXPMatchers+raiseWithReason.m</string>\n\t\t\t<key>path</key>\n\t\t\t<string>Expecta/Matchers/EXPMatchers+raiseWithReason.m</string>\n\t\t\t<key>sourceTree</key>\n\t\t\t<string>&lt;group&gt;</string>\n\t\t</dict>\n\t\t<key>FFF549D1FBC0937A99BED40CC44BC155</key>\n\t\t<dict>\n\t\t\t<key>fileRef</key>\n\t\t\t<string>C266061F84E4CFB93AF99D21EEB13401</string>\n\t\t\t<key>isa</key>\n\t\t\t<string>PBXBuildFile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>ATTRIBUTES</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Public</string>\n\t\t\t\t</array>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n\t<key>rootObject</key>\n\t<string>D41D8CD98F00B204E9800998ECF8427E</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/MWPhotoBrowser.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForAnalyzing = \"YES\"\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = 'primary'\n               BlueprintIdentifier = '804369CB3A3E743AD4A774B7'\n               BlueprintName = 'MWPhotoBrowser'\n               ReferencedContainer = 'container:Pods.xcodeproj'\n               BuildableName = 'libMWPhotoBrowser.a'>\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      buildConfiguration = \"Debug\"\n      allowLocationSimulation = \"YES\">\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-MWPhotoBrowser_Example-MWPhotoBrowser-MWPhotoBrowser.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"8CAE38105286C143529F8BE9\"\n               BuildableName = \"MWPhotoBrowser.bundle\"\n               BlueprintName = \"Pods-MWPhotoBrowser_Example-MWPhotoBrowser-MWPhotoBrowser\"\n               ReferencedContainer = \"container:Pods.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"8CAE38105286C143529F8BE9\"\n            BuildableName = \"MWPhotoBrowser.bundle\"\n            BlueprintName = \"Pods-MWPhotoBrowser_Example-MWPhotoBrowser-MWPhotoBrowser\"\n            ReferencedContainer = \"container:Pods.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-MWPhotoBrowser_Example-MWPhotoBrowser.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"5818C6CC5E105D35378CA832\"\n               BuildableName = \"libPods-MWPhotoBrowser_Example-MWPhotoBrowser.a\"\n               BlueprintName = \"Pods-MWPhotoBrowser_Example-MWPhotoBrowser\"\n               ReferencedContainer = \"container:Pods.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"5818C6CC5E105D35378CA832\"\n            BuildableName = \"libPods-MWPhotoBrowser_Example-MWPhotoBrowser.a\"\n            BlueprintName = \"Pods-MWPhotoBrowser_Example-MWPhotoBrowser\"\n            ReferencedContainer = \"container:Pods.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-MWPhotoBrowser_Tests-MWPhotoBrowser-MWPhotoBrowser.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DB623D8A3D41AA98AFC75DD2\"\n               BuildableName = \"MWPhotoBrowser.bundle\"\n               BlueprintName = \"Pods-MWPhotoBrowser_Tests-MWPhotoBrowser-MWPhotoBrowser\"\n               ReferencedContainer = \"container:Pods.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"DB623D8A3D41AA98AFC75DD2\"\n            BuildableName = \"MWPhotoBrowser.bundle\"\n            BlueprintName = \"Pods-MWPhotoBrowser_Tests-MWPhotoBrowser-MWPhotoBrowser\"\n            ReferencedContainer = \"container:Pods.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-MWPhotoBrowser_Tests-MWPhotoBrowser.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"7140D81A0506FBFE60406ADB\"\n               BuildableName = \"libPods-MWPhotoBrowser_Tests-MWPhotoBrowser.a\"\n               BlueprintName = \"Pods-MWPhotoBrowser_Tests-MWPhotoBrowser\"\n               ReferencedContainer = \"container:Pods.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"7140D81A0506FBFE60406ADB\"\n            BuildableName = \"libPods-MWPhotoBrowser_Tests-MWPhotoBrowser.a\"\n            BlueprintName = \"Pods-MWPhotoBrowser_Tests-MWPhotoBrowser\"\n            ReferencedContainer = \"container:Pods.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Example/Pods/SDWebImage/LICENSE",
    "content": "Copyright (c) 2009 Olivier Poitrey <rs@dailymotion.com>\n \nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n \nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n \nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n"
  },
  {
    "path": "Example/Pods/SDWebImage/README.md",
    "content": "Web Image\n=========\n[![Build Status](http://img.shields.io/travis/rs/SDWebImage/master.svg?style=flat)](https://travis-ci.org/rs/SDWebImage)\n[![Pod Version](http://img.shields.io/cocoapods/v/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/)\n[![Pod Platform](http://img.shields.io/cocoapods/p/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/)\n[![Pod License](http://img.shields.io/cocoapods/l/SDWebImage.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html)\n[![Dependency Status](https://www.versioneye.com/objective-c/sdwebimage/3.3/badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/3.3)\n[![Reference Status](https://www.versioneye.com/objective-c/sdwebimage/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/references)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/rs/SDWebImage)\n\nThis library provides a category for UIImageView with support for remote images coming from the web.\n\nIt provides:\n\n- An `UIImageView` category adding web image and cache management to the Cocoa Touch framework\n- An asynchronous image downloader\n- An asynchronous memory + disk image caching with automatic cache expiration handling\n- Animated GIF support\n- WebP format support\n- A background image decompression\n- A guarantee that the same URL won't be downloaded several times\n- A guarantee that bogus URLs won't be retried again and again\n- A guarantee that main thread will never be blocked\n- Performances!\n- Use GCD and ARC\n- Arm64 support\n\nNOTE: The version 3.0 of SDWebImage isn't fully backward compatible with 2.0 and requires iOS 5.1.1\nminimum deployment version. If you need iOS < 5.0 support, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat).\n\n[How is SDWebImage better than X?](https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F)\n\nWho Use It\n----------\n\nFind out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list.\n\nHow To Use\n----------\n\nAPI documentation is available at [CocoaDocs - SDWebImage](http://cocoadocs.org/docsets/SDWebImage/)\n\n### Using UIImageView+WebCache category with UITableView\n\nJust #import the UIImageView+WebCache.h header, and call the sd_setImageWithURL:placeholderImage:\nmethod from the tableView:cellForRowAtIndexPath: UITableViewDataSource method. Everything will be\nhandled for you, from async downloads to caching management.\n\n```objective-c\n#import <SDWebImage/UIImageView+WebCache.h>\n\n...\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n    static NSString *MyIdentifier = @\"MyIdentifier\";\n\n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];\n    if (cell == nil) {\n        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault\n                                       reuseIdentifier:MyIdentifier] autorelease];\n    }\n\n    // Here we use the new provided sd_setImageWithURL: method to load the web image\n    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@\"http://www.domain.com/path/to/image.jpg\"]\n                      placeholderImage:[UIImage imageNamed:@\"placeholder.png\"]];\n\n    cell.textLabel.text = @\"My Text\";\n    return cell;\n}\n```\n\n### Using blocks\n\nWith blocks, you can be notified about the image download progress and whenever the image retrieval\nhas completed with success or not:\n\n```objective-c\n// Here we use the new provided sd_setImageWithURL: method to load the web image\n[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@\"http://www.domain.com/path/to/image.jpg\"]\n                      placeholderImage:[UIImage imageNamed:@\"placeholder.png\"]\n                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n                                ... completion code here ...\n                             }];\n```\n\nNote: neither your success nor failure block will be call if your image request is canceled before completion.\n\n### Using SDWebImageManager\n\nThe SDWebImageManager is the class behind the UIImageView+WebCache category. It ties the\nasynchronous downloader with the image cache store. You can use this class directly to benefit\nfrom web image downloading with caching in another context than a UIView (ie: with Cocoa).\n\nHere is a simple example of how to use SDWebImageManager:\n\n```objective-c\nSDWebImageManager *manager = [SDWebImageManager sharedManager];\n[manager downloadImageWithURL:imageURL\n                      options:0\n                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {\n                         // progression tracking code\n                     }\n                     completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n                         if (image) {\n                             // do something with image\n                         }\n                     }];\n```\n\n### Using Asynchronous Image Downloader Independently\n\nIt's also possible to use the async image downloader independently:\n\n```objective-c\nSDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];\n[downloader downloadImageWithURL:imageURL\n                         options:0\n                        progress:^(NSInteger receivedSize, NSInteger expectedSize) {\n                            // progression tracking code\n                        }\n                       completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {\n                            if (image && finished) {\n                                // do something with image\n                            }\n                        }];\n```\n\n### Using Asynchronous Image Caching Independently\n\nIt is also possible to use the async based image cache store independently. SDImageCache\nmaintains a memory cache and an optional disk cache. Disk cache write operations are performed\nasynchronous so it doesn't add unnecessary latency to the UI.\n\nThe SDImageCache class provides a singleton instance for convenience but you can create your own\ninstance if you want to create separated cache namespace.\n\nTo lookup the cache, you use the `queryDiskCacheForKey:done:` method. If the method returns nil, it means the cache\ndoesn't currently own the image. You are thus responsible for generating and caching it. The cache\nkey is an application unique identifier for the image to cache. It is generally the absolute URL of\nthe image.\n\n```objective-c\nSDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@\"myNamespace\"];\n[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) {\n    // image is not nil if image was found\n}];\n```\n\nBy default SDImageCache will lookup the disk cache if an image can't be found in the memory cache.\nYou can prevent this from happening by calling the alternative method `imageFromMemoryCacheForKey:`.\n\nTo store an image into the cache, you use the storeImage:forKey: method:\n\n```objective-c\n[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];\n```\n\nBy default, the image will be stored in memory cache as well as on disk cache (asynchronously). If\nyou want only the memory cache, use the alternative method storeImage:forKey:toDisk: with a negative\nthird argument.\n\n### Using cache key filter\n\nSometime, you may not want to use the image URL as cache key because part of the URL is dynamic\n(i.e.: for access control purpose). SDWebImageManager provides a way to set a cache key filter that\ntakes the NSURL as input, and output a cache key NSString.\n\nThe following example sets a filter in the application delegate that will remove any query-string from\nthe URL before to use it as a cache key:\n\n```objective-c\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {\n        url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];\n        return [url absoluteString];\n    };\n\n    // Your app init code...\n    return YES;\n}\n```\n\n\nCommon Problems\n---------------\n\n### Using dynamic image size with UITableViewCell\n\nUITableView determines the size of the image by the first image set for a cell. If your remote images\ndon't have the same size as your placeholder image, you may experience strange anamorphic scaling issue.\nThe following article gives a way to workaround this issue:\n\n[http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/](http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/)\n\n\n### Handle image refresh\n\nSDWebImage does very aggressive caching by default. It ignores all kind of caching control header returned by the HTTP server and cache the returned images with no time restriction. It implies your images URLs are static URLs pointing to images that never change. If the pointed image happen to change, some parts of the URL should change accordingly.\n\nIf you don't control the image server you're using, you may not be able to change the URL when its content is updated. This is the case for Facebook avatar URLs for instance. In such case, you may use the `SDWebImageRefreshCached` flag. This will slightly degrade the performance but will respect the HTTP caching control headers:\n\n``` objective-c\n[imageView sd_setImageWithURL:[NSURL URLWithString:@\"https://graph.facebook.com/olivier.poitrey/picture\"]\n                 placeholderImage:[UIImage imageNamed:@\"avatar-placeholder.png\"]\n                          options:SDWebImageRefreshCached];\n```\n\n### Add a progress indicator\n\nSee this category: https://github.com/JJSaccolo/UIActivityIndicator-for-SDWebImage\n\nInstallation\n------------\n\nThere are three ways to use SDWebImage in your project:\n- using Cocoapods\n- copying all the files into your project\n- importing the project as a static library\n\n### Installation with CocoaPods\n\n[CocoaPods](http://cocoapods.org/) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the [Get Started](http://cocoapods.org/#get_started) section for more details.\n\n#### Podfile\n```\nplatform :ios, '6.1'\npod 'SDWebImage', '~>3.7'\n```\n\nIf you are using Swift, be sure to add `use_frameworks!` and set your target to iOS 8+:\n```\nplatform :ios, '8.0'\nuse_frameworks!\n```\n\n#### Subspecs\n\nThere are 3 subspecs available now: `Core`, `MapKit` and `WebP` (this means you can install only some of the SDWebImage modules. By default, you get just `Core`, so if you need `WebP`, you need to specify it). \n\nPodfile example:\n```\npod 'SDWebImage/WebP'\n```\n\n### Installation with Carthage (iOS 8+)\n\n[Carthage](https://github.com/Carthage/Carthage) is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods.\n\nTo install with carthage, follow the instruction on [Carthage](https://github.com/Carthage/Carthage)\n\n#### Cartfile\n```\ngithub \"rs/SDWebImage\"\n```\n\n#### Usage\nSwift\n\nIf you installed using CocoaPods:\n```\nimport SDWebImage\n```\n\nIf you installed manually:\n```\nimport WebImage\n```\n\nObjective-C\n\n```\n@import WebImage;\n```\n\n### Installation by cloning the repository\n\nIn order to gain access to all the files from the repository, you should clone it.\n```\ngit clone --recursive https://github.com/rs/SDWebImage.git\n```\n\n### Add the SDWebImage project to your project\n\n- Download and unzip the last version of the framework from the [download page](https://github.com/rs/SDWebImage/releases)\n- Right-click on the project navigator and select \"Add Files to \"Your Project\":\n- In the dialog, select SDWebImage.framework:\n- Check the \"Copy items into destination group's folder (if needed)\" checkbox\n\n### Add dependencies\n\n- In you application project app’s target settings, find the \"Build Phases\" section and open the \"Link Binary With Libraries\" block:\n- Click the \"+\" button again and select the \"ImageIO.framework\", this is needed by the progressive download feature:\n\n### Add Linker Flag\n\nOpen the \"Build Settings\" tab, in the \"Linking\" section, locate the \"Other Linker Flags\" setting and add the \"-ObjC\" flag:\n\n![Other Linker Flags](http://dl.dropbox.com/u/123346/SDWebImage/10_other_linker_flags.jpg)\n\nAlternatively, if this causes compilation problems with frameworks that extend optional libraries, such as Parse,  RestKit or opencv2, instead of the -ObjC flag use:\n```\n-force_load SDWebImage.framework/Versions/Current/SDWebImage\n```\n\nIf you're using Cocoa Pods and have any frameworks that extend optional libraries, such as Parsen RestKit or opencv2, instead of the -ObjC flag use:\n```\n-force_load $(TARGET_BUILD_DIR)/libPods.a\n```\nand this:\n```\n$(inherited)\n```\n\n### Import headers in your source files\n\nIn the source files where you need to use the library, import the header file:\n\n```objective-c\n#import <SDWebImage/UIImageView+WebCache.h>\n```\n\n### Build Project\n\nAt this point your workspace should build without error. If you are having problem, post to the Issue and the\ncommunity can help you solve it.\n\nFuture Enhancements\n-------------------\n\n- LRU memory cache cleanup instead of reset on memory warning\n\n## Licenses\n\nAll source code is licensed under the [MIT License](https://raw.github.com/rs/SDWebImage/master/LICENSE).\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h",
    "content": "//\n// Created by Fabrice Aneche on 06/01/14.\n// Copyright (c) 2014 Dailymotion. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSData (ImageContentType)\n\n/**\n *  Compute the content type for an image data\n *\n *  @param data the input data\n *\n *  @return the content type as string (i.e. image/jpeg, image/gif)\n */\n+ (NSString *)sd_contentTypeForImageData:(NSData *)data;\n\n@end\n\n\n@interface NSData (ImageContentTypeDeprecated)\n\n+ (NSString *)contentTypeForImageData:(NSData *)data __deprecated_msg(\"Use `sd_contentTypeForImageData:`\");\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m",
    "content": "//\n// Created by Fabrice Aneche on 06/01/14.\n// Copyright (c) 2014 Dailymotion. All rights reserved.\n//\n\n#import \"NSData+ImageContentType.h\"\n\n\n@implementation NSData (ImageContentType)\n\n+ (NSString *)sd_contentTypeForImageData:(NSData *)data {\n    uint8_t c;\n    [data getBytes:&c length:1];\n    switch (c) {\n        case 0xFF:\n            return @\"image/jpeg\";\n        case 0x89:\n            return @\"image/png\";\n        case 0x47:\n            return @\"image/gif\";\n        case 0x49:\n        case 0x4D:\n            return @\"image/tiff\";\n        case 0x52:\n            // R as RIFF for WEBP\n            if ([data length] < 12) {\n                return nil;\n            }\n\n            NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];\n            if ([testString hasPrefix:@\"RIFF\"] && [testString hasSuffix:@\"WEBP\"]) {\n                return @\"image/webp\";\n            }\n\n            return nil;\n    }\n    return nil;\n}\n\n@end\n\n\n@implementation NSData (ImageContentTypeDeprecated)\n\n+ (NSString *)contentTypeForImageData:(NSData *)data {\n    return [self sd_contentTypeForImageData:data];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDImageCache.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <Foundation/Foundation.h>\n#import \"SDWebImageCompat.h\"\n\ntypedef NS_ENUM(NSInteger, SDImageCacheType) {\n    /**\n     * The image wasn't available the SDWebImage caches, but was downloaded from the web.\n     */\n    SDImageCacheTypeNone,\n    /**\n     * The image was obtained from the disk cache.\n     */\n    SDImageCacheTypeDisk,\n    /**\n     * The image was obtained from the memory cache.\n     */\n    SDImageCacheTypeMemory\n};\n\ntypedef void(^SDWebImageQueryCompletedBlock)(UIImage *image, SDImageCacheType cacheType);\n\ntypedef void(^SDWebImageCheckCacheCompletionBlock)(BOOL isInCache);\n\ntypedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize);\n\n/**\n * SDImageCache maintains a memory cache and an optional disk cache. Disk cache write operations are performed\n * asynchronous so it doesn’t add unnecessary latency to the UI.\n */\n@interface SDImageCache : NSObject\n\n/**\n * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory.\n * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.\n */\n@property (assign, nonatomic) BOOL shouldDecompressImages;\n\n/**\n *  disable iCloud backup [defaults to YES]\n */\n@property (assign, nonatomic) BOOL shouldDisableiCloud;\n\n/**\n * use memory cache [defaults to YES]\n */\n@property (assign, nonatomic) BOOL shouldCacheImagesInMemory;\n\n/**\n * The maximum \"total cost\" of the in-memory image cache. The cost function is the number of pixels held in memory.\n */\n@property (assign, nonatomic) NSUInteger maxMemoryCost;\n\n/**\n * The maximum number of objects the cache should hold.\n */\n@property (assign, nonatomic) NSUInteger maxMemoryCountLimit;\n\n/**\n * The maximum length of time to keep an image in the cache, in seconds\n */\n@property (assign, nonatomic) NSInteger maxCacheAge;\n\n/**\n * The maximum size of the cache, in bytes.\n */\n@property (assign, nonatomic) NSUInteger maxCacheSize;\n\n/**\n * Returns global shared cache instance\n *\n * @return SDImageCache global instance\n */\n+ (SDImageCache *)sharedImageCache;\n\n/**\n * Init a new cache store with a specific namespace\n *\n * @param ns The namespace to use for this cache store\n */\n- (id)initWithNamespace:(NSString *)ns;\n\n/**\n * Init a new cache store with a specific namespace and directory\n *\n * @param ns        The namespace to use for this cache store\n * @param directory Directory to cache disk images in\n */\n- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory;\n\n-(NSString *)makeDiskCachePath:(NSString*)fullNamespace;\n\n/**\n * Add a read-only cache path to search for images pre-cached by SDImageCache\n * Useful if you want to bundle pre-loaded images with your app\n *\n * @param path The path to use for this read-only cache path\n */\n- (void)addReadOnlyCachePath:(NSString *)path;\n\n/**\n * Store an image into memory and disk cache at the given key.\n *\n * @param image The image to store\n * @param key   The unique image cache key, usually it's image absolute URL\n */\n- (void)storeImage:(UIImage *)image forKey:(NSString *)key;\n\n/**\n * Store an image into memory and optionally disk cache at the given key.\n *\n * @param image  The image to store\n * @param key    The unique image cache key, usually it's image absolute URL\n * @param toDisk Store the image to disk cache if YES\n */\n- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk;\n\n/**\n * Store an image into memory and optionally disk cache at the given key.\n *\n * @param image       The image to store\n * @param recalculate BOOL indicates if imageData can be used or a new data should be constructed from the UIImage\n * @param imageData   The image data as returned by the server, this representation will be used for disk storage\n *                    instead of converting the given image object into a storable/compressed image format in order\n *                    to save quality and CPU\n * @param key         The unique image cache key, usually it's image absolute URL\n * @param toDisk      Store the image to disk cache if YES\n */\n- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk;\n\n/**\n * Query the disk cache asynchronously.\n *\n * @param key The unique key used to store the wanted image\n */\n- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;\n\n/**\n * Query the memory cache synchronously.\n *\n * @param key The unique key used to store the wanted image\n */\n- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key;\n\n/**\n * Query the disk cache synchronously after checking the memory cache.\n *\n * @param key The unique key used to store the wanted image\n */\n- (UIImage *)imageFromDiskCacheForKey:(NSString *)key;\n\n/**\n * Remove the image from memory and disk cache synchronously\n *\n * @param key The unique image cache key\n */\n- (void)removeImageForKey:(NSString *)key;\n\n\n/**\n * Remove the image from memory and disk cache asynchronously\n *\n * @param key             The unique image cache key\n * @param completion      An block that should be executed after the image has been removed (optional)\n */\n- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion;\n\n/**\n * Remove the image from memory and optionally disk cache asynchronously\n *\n * @param key      The unique image cache key\n * @param fromDisk Also remove cache entry from disk if YES\n */\n- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk;\n\n/**\n * Remove the image from memory and optionally disk cache asynchronously\n *\n * @param key             The unique image cache key\n * @param fromDisk        Also remove cache entry from disk if YES\n * @param completion      An block that should be executed after the image has been removed (optional)\n */\n- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;\n\n/**\n * Clear all memory cached images\n */\n- (void)clearMemory;\n\n/**\n * Clear all disk cached images. Non-blocking method - returns immediately.\n * @param completion    An block that should be executed after cache expiration completes (optional)\n */\n- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion;\n\n/**\n * Clear all disk cached images\n * @see clearDiskOnCompletion:\n */\n- (void)clearDisk;\n\n/**\n * Remove all expired cached image from disk. Non-blocking method - returns immediately.\n * @param completionBlock An block that should be executed after cache expiration completes (optional)\n */\n- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock;\n\n/**\n * Remove all expired cached image from disk\n * @see cleanDiskWithCompletionBlock:\n */\n- (void)cleanDisk;\n\n/**\n * Get the size used by the disk cache\n */\n- (NSUInteger)getSize;\n\n/**\n * Get the number of images in the disk cache\n */\n- (NSUInteger)getDiskCount;\n\n/**\n * Asynchronously calculate the disk cache's size.\n */\n- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock;\n\n/**\n *  Async check if image exists in disk cache already (does not load the image)\n *\n *  @param key             the key describing the url\n *  @param completionBlock the block to be executed when the check is done.\n *  @note the completion block will be always executed on the main queue\n */\n- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;\n\n/**\n *  Check if image exists in disk cache already (does not load the image)\n *\n *  @param key the key describing the url\n *\n *  @return YES if an image exists for the given key\n */\n- (BOOL)diskImageExistsWithKey:(NSString *)key;\n\n/**\n *  Get the cache path for a certain key (needs the cache path root folder)\n *\n *  @param key  the key (can be obtained from url using cacheKeyForURL)\n *  @param path the cache path root folder\n *\n *  @return the cache path\n */\n- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path;\n\n/**\n *  Get the default cache path for a certain key\n *\n *  @param key the key (can be obtained from url using cacheKeyForURL)\n *\n *  @return the default cache path\n */\n- (NSString *)defaultCachePathForKey:(NSString *)key;\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDImageCache.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDImageCache.h\"\n#import \"SDWebImageDecoder.h\"\n#import \"UIImage+MultiFormat.h\"\n#import <CommonCrypto/CommonDigest.h>\n\n// See https://github.com/rs/SDWebImage/pull/1141 for discussion\n@interface AutoPurgeCache : NSCache\n@end\n\n@implementation AutoPurgeCache\n\n- (id)init\n{\n    self = [super init];\n    if (self) {\n        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];\n    }\n    return self;\n}\n\n- (void)dealloc\n{\n    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];\n\n}\n\n@end\n\nstatic const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week\n// PNG signature bytes and data (below)\nstatic unsigned char kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};\nstatic NSData *kPNGSignatureData = nil;\n\nBOOL ImageDataHasPNGPreffix(NSData *data);\n\nBOOL ImageDataHasPNGPreffix(NSData *data) {\n    NSUInteger pngSignatureLength = [kPNGSignatureData length];\n    if ([data length] >= pngSignatureLength) {\n        if ([[data subdataWithRange:NSMakeRange(0, pngSignatureLength)] isEqualToData:kPNGSignatureData]) {\n            return YES;\n        }\n    }\n\n    return NO;\n}\n\nFOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {\n    return image.size.height * image.size.width * image.scale * image.scale;\n}\n\n@interface SDImageCache ()\n\n@property (strong, nonatomic) NSCache *memCache;\n@property (strong, nonatomic) NSString *diskCachePath;\n@property (strong, nonatomic) NSMutableArray *customPaths;\n@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue;\n\n@end\n\n\n@implementation SDImageCache {\n    NSFileManager *_fileManager;\n}\n\n+ (SDImageCache *)sharedImageCache {\n    static dispatch_once_t once;\n    static id instance;\n    dispatch_once(&once, ^{\n        instance = [self new];\n    });\n    return instance;\n}\n\n- (id)init {\n    return [self initWithNamespace:@\"default\"];\n}\n\n- (id)initWithNamespace:(NSString *)ns {\n    NSString *path = [self makeDiskCachePath:ns];\n    return [self initWithNamespace:ns diskCacheDirectory:path];\n}\n\n- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory {\n    if ((self = [super init])) {\n        NSString *fullNamespace = [@\"com.hackemist.SDWebImageCache.\" stringByAppendingString:ns];\n\n        // initialise PNG signature data\n        kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8];\n\n        // Create IO serial queue\n        _ioQueue = dispatch_queue_create(\"com.hackemist.SDWebImageCache\", DISPATCH_QUEUE_SERIAL);\n\n        // Init default values\n        _maxCacheAge = kDefaultCacheMaxCacheAge;\n\n        // Init the memory cache\n        _memCache = [[AutoPurgeCache alloc] init];\n        _memCache.name = fullNamespace;\n\n        // Init the disk cache\n        if (directory != nil) {\n            _diskCachePath = [directory stringByAppendingPathComponent:fullNamespace];\n        } else {\n            NSString *path = [self makeDiskCachePath:ns];\n            _diskCachePath = path;\n        }\n\n        // Set decompression to YES\n        _shouldDecompressImages = YES;\n\n        // memory cache enabled\n        _shouldCacheImagesInMemory = YES;\n\n        // Disable iCloud\n        _shouldDisableiCloud = YES;\n\n        dispatch_sync(_ioQueue, ^{\n            _fileManager = [NSFileManager new];\n        });\n\n#if TARGET_OS_IPHONE\n        // Subscribe to app events\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(clearMemory)\n                                                     name:UIApplicationDidReceiveMemoryWarningNotification\n                                                   object:nil];\n\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(cleanDisk)\n                                                     name:UIApplicationWillTerminateNotification\n                                                   object:nil];\n\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(backgroundCleanDisk)\n                                                     name:UIApplicationDidEnterBackgroundNotification\n                                                   object:nil];\n#endif\n    }\n\n    return self;\n}\n\n- (void)dealloc {\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n    SDDispatchQueueRelease(_ioQueue);\n}\n\n- (void)addReadOnlyCachePath:(NSString *)path {\n    if (!self.customPaths) {\n        self.customPaths = [NSMutableArray new];\n    }\n\n    if (![self.customPaths containsObject:path]) {\n        [self.customPaths addObject:path];\n    }\n}\n\n- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path {\n    NSString *filename = [self cachedFileNameForKey:key];\n    return [path stringByAppendingPathComponent:filename];\n}\n\n- (NSString *)defaultCachePathForKey:(NSString *)key {\n    return [self cachePathForKey:key inPath:self.diskCachePath];\n}\n\n#pragma mark SDImageCache (private)\n\n- (NSString *)cachedFileNameForKey:(NSString *)key {\n    const char *str = [key UTF8String];\n    if (str == NULL) {\n        str = \"\";\n    }\n    unsigned char r[CC_MD5_DIGEST_LENGTH];\n    CC_MD5(str, (CC_LONG)strlen(str), r);\n    NSString *filename = [NSString stringWithFormat:@\"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@\",\n                          r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10],\n                          r[11], r[12], r[13], r[14], r[15], [[key pathExtension] isEqualToString:@\"\"] ? @\"\" : [NSString stringWithFormat:@\".%@\", [key pathExtension]]];\n\n    return filename;\n}\n\n#pragma mark ImageCache\n\n// Init the disk cache\n-(NSString *)makeDiskCachePath:(NSString*)fullNamespace{\n    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);\n    return [paths[0] stringByAppendingPathComponent:fullNamespace];\n}\n\n- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk {\n    if (!image || !key) {\n        return;\n    }\n    // if memory cache is enabled\n    if (self.shouldCacheImagesInMemory) {\n        NSUInteger cost = SDCacheCostForImage(image);\n        [self.memCache setObject:image forKey:key cost:cost];\n    }\n\n    if (toDisk) {\n        dispatch_async(self.ioQueue, ^{\n            NSData *data = imageData;\n\n            if (image && (recalculate || !data)) {\n#if TARGET_OS_IPHONE\n                // We need to determine if the image is a PNG or a JPEG\n                // PNGs are easier to detect because they have a unique signature (http://www.w3.org/TR/PNG-Structure.html)\n                // The first eight bytes of a PNG file always contain the following (decimal) values:\n                // 137 80 78 71 13 10 26 10\n\n                // If the imageData is nil (i.e. if trying to save a UIImage directly or the image was transformed on download)\n                // and the image has an alpha channel, we will consider it PNG to avoid losing the transparency\n                int alphaInfo = CGImageGetAlphaInfo(image.CGImage);\n                BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone ||\n                                  alphaInfo == kCGImageAlphaNoneSkipFirst ||\n                                  alphaInfo == kCGImageAlphaNoneSkipLast);\n                BOOL imageIsPng = hasAlpha;\n\n                // But if we have an image data, we will look at the preffix\n                if ([imageData length] >= [kPNGSignatureData length]) {\n                    imageIsPng = ImageDataHasPNGPreffix(imageData);\n                }\n\n                if (imageIsPng) {\n                    data = UIImagePNGRepresentation(image);\n                }\n                else {\n                    data = UIImageJPEGRepresentation(image, (CGFloat)1.0);\n                }\n#else\n                data = [NSBitmapImageRep representationOfImageRepsInArray:image.representations usingType: NSJPEGFileType properties:nil];\n#endif\n            }\n\n            if (data) {\n                if (![_fileManager fileExistsAtPath:_diskCachePath]) {\n                    [_fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL];\n                }\n\n                // get cache Path for image key\n                NSString *cachePathForKey = [self defaultCachePathForKey:key];\n                // transform to NSUrl\n                NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey];\n\n                [_fileManager createFileAtPath:cachePathForKey contents:data attributes:nil];\n\n                // disable iCloud backup\n                if (self.shouldDisableiCloud) {\n                    [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];\n                }\n            }\n        });\n    }\n}\n\n- (void)storeImage:(UIImage *)image forKey:(NSString *)key {\n    [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:YES];\n}\n\n- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk {\n    [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:toDisk];\n}\n\n- (BOOL)diskImageExistsWithKey:(NSString *)key {\n    BOOL exists = NO;\n    \n    // this is an exception to access the filemanager on another queue than ioQueue, but we are using the shared instance\n    // from apple docs on NSFileManager: The methods of the shared NSFileManager object can be called from multiple threads safely.\n    exists = [[NSFileManager defaultManager] fileExistsAtPath:[self defaultCachePathForKey:key]];\n\n    // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name\n    // checking the key with and without the extension\n    if (!exists) {\n        exists = [[NSFileManager defaultManager] fileExistsAtPath:[[self defaultCachePathForKey:key] stringByDeletingPathExtension]];\n    }\n    \n    return exists;\n}\n\n- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {\n    dispatch_async(_ioQueue, ^{\n        BOOL exists = [_fileManager fileExistsAtPath:[self defaultCachePathForKey:key]];\n\n        // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name\n        // checking the key with and without the extension\n        if (!exists) {\n            exists = [_fileManager fileExistsAtPath:[[self defaultCachePathForKey:key] stringByDeletingPathExtension]];\n        }\n\n        if (completionBlock) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                completionBlock(exists);\n            });\n        }\n    });\n}\n\n- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key {\n    return [self.memCache objectForKey:key];\n}\n\n- (UIImage *)imageFromDiskCacheForKey:(NSString *)key {\n\n    // First check the in-memory cache...\n    UIImage *image = [self imageFromMemoryCacheForKey:key];\n    if (image) {\n        return image;\n    }\n\n    // Second check the disk cache...\n    UIImage *diskImage = [self diskImageForKey:key];\n    if (diskImage && self.shouldCacheImagesInMemory) {\n        NSUInteger cost = SDCacheCostForImage(diskImage);\n        [self.memCache setObject:diskImage forKey:key cost:cost];\n    }\n\n    return diskImage;\n}\n\n- (NSData *)diskImageDataBySearchingAllPathsForKey:(NSString *)key {\n    NSString *defaultPath = [self defaultCachePathForKey:key];\n    NSData *data = [NSData dataWithContentsOfFile:defaultPath];\n    if (data) {\n        return data;\n    }\n\n    // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name\n    // checking the key with and without the extension\n    data = [NSData dataWithContentsOfFile:[defaultPath stringByDeletingPathExtension]];\n    if (data) {\n        return data;\n    }\n\n    NSArray *customPaths = [self.customPaths copy];\n    for (NSString *path in customPaths) {\n        NSString *filePath = [self cachePathForKey:key inPath:path];\n        NSData *imageData = [NSData dataWithContentsOfFile:filePath];\n        if (imageData) {\n            return imageData;\n        }\n\n        // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name\n        // checking the key with and without the extension\n        imageData = [NSData dataWithContentsOfFile:[filePath stringByDeletingPathExtension]];\n        if (imageData) {\n            return imageData;\n        }\n    }\n\n    return nil;\n}\n\n- (UIImage *)diskImageForKey:(NSString *)key {\n    NSData *data = [self diskImageDataBySearchingAllPathsForKey:key];\n    if (data) {\n        UIImage *image = [UIImage sd_imageWithData:data];\n        image = [self scaledImageForKey:key image:image];\n        if (self.shouldDecompressImages) {\n            image = [UIImage decodedImageWithImage:image];\n        }\n        return image;\n    }\n    else {\n        return nil;\n    }\n}\n\n- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image {\n    return SDScaledImageForKey(key, image);\n}\n\n- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock {\n    if (!doneBlock) {\n        return nil;\n    }\n\n    if (!key) {\n        doneBlock(nil, SDImageCacheTypeNone);\n        return nil;\n    }\n\n    // First check the in-memory cache...\n    UIImage *image = [self imageFromMemoryCacheForKey:key];\n    if (image) {\n        doneBlock(image, SDImageCacheTypeMemory);\n        return nil;\n    }\n\n    NSOperation *operation = [NSOperation new];\n    dispatch_async(self.ioQueue, ^{\n        if (operation.isCancelled) {\n            return;\n        }\n\n        @autoreleasepool {\n            UIImage *diskImage = [self diskImageForKey:key];\n            if (diskImage && self.shouldCacheImagesInMemory) {\n                NSUInteger cost = SDCacheCostForImage(diskImage);\n                [self.memCache setObject:diskImage forKey:key cost:cost];\n            }\n\n            dispatch_async(dispatch_get_main_queue(), ^{\n                doneBlock(diskImage, SDImageCacheTypeDisk);\n            });\n        }\n    });\n\n    return operation;\n}\n\n- (void)removeImageForKey:(NSString *)key {\n    [self removeImageForKey:key withCompletion:nil];\n}\n\n- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion {\n    [self removeImageForKey:key fromDisk:YES withCompletion:completion];\n}\n\n- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk {\n    [self removeImageForKey:key fromDisk:fromDisk withCompletion:nil];\n}\n\n- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion {\n    \n    if (key == nil) {\n        return;\n    }\n\n    if (self.shouldCacheImagesInMemory) {\n        [self.memCache removeObjectForKey:key];\n    }\n\n    if (fromDisk) {\n        dispatch_async(self.ioQueue, ^{\n            [_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil];\n            \n            if (completion) {\n                dispatch_async(dispatch_get_main_queue(), ^{\n                    completion();\n                });\n            }\n        });\n    } else if (completion){\n        completion();\n    }\n    \n}\n\n- (void)setMaxMemoryCost:(NSUInteger)maxMemoryCost {\n    self.memCache.totalCostLimit = maxMemoryCost;\n}\n\n- (NSUInteger)maxMemoryCost {\n    return self.memCache.totalCostLimit;\n}\n\n- (NSUInteger)maxMemoryCountLimit {\n    return self.memCache.countLimit;\n}\n\n- (void)setMaxMemoryCountLimit:(NSUInteger)maxCountLimit {\n    self.memCache.countLimit = maxCountLimit;\n}\n\n- (void)clearMemory {\n    [self.memCache removeAllObjects];\n}\n\n- (void)clearDisk {\n    [self clearDiskOnCompletion:nil];\n}\n\n- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion\n{\n    dispatch_async(self.ioQueue, ^{\n        [_fileManager removeItemAtPath:self.diskCachePath error:nil];\n        [_fileManager createDirectoryAtPath:self.diskCachePath\n                withIntermediateDirectories:YES\n                                 attributes:nil\n                                      error:NULL];\n\n        if (completion) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                completion();\n            });\n        }\n    });\n}\n\n- (void)cleanDisk {\n    [self cleanDiskWithCompletionBlock:nil];\n}\n\n- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock {\n    dispatch_async(self.ioQueue, ^{\n        NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];\n        NSArray *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentModificationDateKey, NSURLTotalFileAllocatedSizeKey];\n\n        // This enumerator prefetches useful properties for our cache files.\n        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL\n                                                   includingPropertiesForKeys:resourceKeys\n                                                                      options:NSDirectoryEnumerationSkipsHiddenFiles\n                                                                 errorHandler:NULL];\n\n        NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.maxCacheAge];\n        NSMutableDictionary *cacheFiles = [NSMutableDictionary dictionary];\n        NSUInteger currentCacheSize = 0;\n\n        // Enumerate all of the files in the cache directory.  This loop has two purposes:\n        //\n        //  1. Removing files that are older than the expiration date.\n        //  2. Storing file attributes for the size-based cleanup pass.\n        NSMutableArray *urlsToDelete = [[NSMutableArray alloc] init];\n        for (NSURL *fileURL in fileEnumerator) {\n            NSDictionary *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:NULL];\n\n            // Skip directories.\n            if ([resourceValues[NSURLIsDirectoryKey] boolValue]) {\n                continue;\n            }\n\n            // Remove files that are older than the expiration date;\n            NSDate *modificationDate = resourceValues[NSURLContentModificationDateKey];\n            if ([[modificationDate laterDate:expirationDate] isEqualToDate:expirationDate]) {\n                [urlsToDelete addObject:fileURL];\n                continue;\n            }\n\n            // Store a reference to this file and account for its total size.\n            NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey];\n            currentCacheSize += [totalAllocatedSize unsignedIntegerValue];\n            [cacheFiles setObject:resourceValues forKey:fileURL];\n        }\n        \n        for (NSURL *fileURL in urlsToDelete) {\n            [_fileManager removeItemAtURL:fileURL error:nil];\n        }\n\n        // If our remaining disk cache exceeds a configured maximum size, perform a second\n        // size-based cleanup pass.  We delete the oldest files first.\n        if (self.maxCacheSize > 0 && currentCacheSize > self.maxCacheSize) {\n            // Target half of our maximum cache size for this cleanup pass.\n            const NSUInteger desiredCacheSize = self.maxCacheSize / 2;\n\n            // Sort the remaining cache files by their last modification time (oldest first).\n            NSArray *sortedFiles = [cacheFiles keysSortedByValueWithOptions:NSSortConcurrent\n                                                            usingComparator:^NSComparisonResult(id obj1, id obj2) {\n                                                                return [obj1[NSURLContentModificationDateKey] compare:obj2[NSURLContentModificationDateKey]];\n                                                            }];\n\n            // Delete files until we fall below our desired cache size.\n            for (NSURL *fileURL in sortedFiles) {\n                if ([_fileManager removeItemAtURL:fileURL error:nil]) {\n                    NSDictionary *resourceValues = cacheFiles[fileURL];\n                    NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey];\n                    currentCacheSize -= [totalAllocatedSize unsignedIntegerValue];\n\n                    if (currentCacheSize < desiredCacheSize) {\n                        break;\n                    }\n                }\n            }\n        }\n        if (completionBlock) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                completionBlock();\n            });\n        }\n    });\n}\n\n- (void)backgroundCleanDisk {\n    Class UIApplicationClass = NSClassFromString(@\"UIApplication\");\n    if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) {\n        return;\n    }\n    UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)];\n    __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{\n        // Clean up any unfinished task business by marking where you\n        // stopped or ending the task outright.\n        [application endBackgroundTask:bgTask];\n        bgTask = UIBackgroundTaskInvalid;\n    }];\n\n    // Start the long-running task and return immediately.\n    [self cleanDiskWithCompletionBlock:^{\n        [application endBackgroundTask:bgTask];\n        bgTask = UIBackgroundTaskInvalid;\n    }];\n}\n\n- (NSUInteger)getSize {\n    __block NSUInteger size = 0;\n    dispatch_sync(self.ioQueue, ^{\n        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];\n        for (NSString *fileName in fileEnumerator) {\n            NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];\n            NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];\n            size += [attrs fileSize];\n        }\n    });\n    return size;\n}\n\n- (NSUInteger)getDiskCount {\n    __block NSUInteger count = 0;\n    dispatch_sync(self.ioQueue, ^{\n        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];\n        count = [[fileEnumerator allObjects] count];\n    });\n    return count;\n}\n\n- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock {\n    NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];\n\n    dispatch_async(self.ioQueue, ^{\n        NSUInteger fileCount = 0;\n        NSUInteger totalSize = 0;\n\n        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL\n                                                   includingPropertiesForKeys:@[NSFileSize]\n                                                                      options:NSDirectoryEnumerationSkipsHiddenFiles\n                                                                 errorHandler:NULL];\n\n        for (NSURL *fileURL in fileEnumerator) {\n            NSNumber *fileSize;\n            [fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL];\n            totalSize += [fileSize unsignedIntegerValue];\n            fileCount += 1;\n        }\n\n        if (completionBlock) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                completionBlock(fileCount, totalSize);\n            });\n        }\n    });\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n * (c) Jamie Pinkham\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <TargetConditionals.h>\n\n#ifdef __OBJC_GC__\n#error SDWebImage does not support Objective-C Garbage Collection\n#endif\n\n#if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0\n#error SDWebImage doesn't support Deployment Target version < 5.0\n#endif\n\n#if !TARGET_OS_IPHONE\n#import <AppKit/AppKit.h>\n#ifndef UIImage\n#define UIImage NSImage\n#endif\n#ifndef UIImageView\n#define UIImageView NSImageView\n#endif\n#else\n\n#import <UIKit/UIKit.h>\n\n#endif\n\n#ifndef NS_ENUM\n#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type\n#endif\n\n#ifndef NS_OPTIONS\n#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type\n#endif\n\n#if OS_OBJECT_USE_OBJC\n    #undef SDDispatchQueueRelease\n    #undef SDDispatchQueueSetterSementics\n    #define SDDispatchQueueRelease(q)\n    #define SDDispatchQueueSetterSementics strong\n#else\n#undef SDDispatchQueueRelease\n#undef SDDispatchQueueSetterSementics\n#define SDDispatchQueueRelease(q) (dispatch_release(q))\n#define SDDispatchQueueSetterSementics assign\n#endif\n\nextern UIImage *SDScaledImageForKey(NSString *key, UIImage *image);\n\ntypedef void(^SDWebImageNoParamsBlock)();\n\nextern NSString *const SDWebImageErrorDomain;\n\n#define dispatch_main_sync_safe(block)\\\n    if ([NSThread isMainThread]) {\\\n        block();\\\n    } else {\\\n        dispatch_sync(dispatch_get_main_queue(), block);\\\n    }\n\n#define dispatch_main_async_safe(block)\\\n    if ([NSThread isMainThread]) {\\\n        block();\\\n    } else {\\\n        dispatch_async(dispatch_get_main_queue(), block);\\\n    }\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m",
    "content": "//\n//  SDWebImageCompat.m\n//  SDWebImage\n//\n//  Created by Olivier Poitrey on 11/12/12.\n//  Copyright (c) 2012 Dailymotion. All rights reserved.\n//\n\n#import \"SDWebImageCompat.h\"\n\n#if !__has_feature(objc_arc)\n#error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag\n#endif\n\ninline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) {\n    if (!image) {\n        return nil;\n    }\n    \n    if ([image.images count] > 0) {\n        NSMutableArray *scaledImages = [NSMutableArray array];\n\n        for (UIImage *tempImage in image.images) {\n            [scaledImages addObject:SDScaledImageForKey(key, tempImage)];\n        }\n\n        return [UIImage animatedImageWithImages:scaledImages duration:image.duration];\n    }\n    else {\n        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {\n            CGFloat scale = [UIScreen mainScreen].scale;\n            if (key.length >= 8) {\n                NSRange range = [key rangeOfString:@\"@2x.\"];\n                if (range.location != NSNotFound) {\n                    scale = 2.0;\n                }\n                \n                range = [key rangeOfString:@\"@3x.\"];\n                if (range.location != NSNotFound) {\n                    scale = 3.0;\n                }\n            }\n\n            UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];\n            image = scaledImage;\n        }\n        return image;\n    }\n}\n\nNSString *const SDWebImageErrorDomain = @\"SDWebImageErrorDomain\";\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * Created by james <https://github.com/mystcolor> on 9/28/11.\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <Foundation/Foundation.h>\n#import \"SDWebImageCompat.h\"\n\n@interface UIImage (ForceDecode)\n\n+ (UIImage *)decodedImageWithImage:(UIImage *)image;\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * Created by james <https://github.com/mystcolor> on 9/28/11.\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDWebImageDecoder.h\"\n\n@implementation UIImage (ForceDecode)\n\n+ (UIImage *)decodedImageWithImage:(UIImage *)image {\n    // while downloading huge amount of images\n    // autorelease the bitmap context\n    // and all vars to help system to free memory\n    // when there are memory warning.\n    // on iOS7, do not forget to call\n    // [[SDImageCache sharedImageCache] clearMemory];\n    @autoreleasepool{\n        // do not decode animated images\n        if (image.images) { return image; }\n    \n        CGImageRef imageRef = image.CGImage;\n    \n        CGImageAlphaInfo alpha = CGImageGetAlphaInfo(imageRef);\n        BOOL anyAlpha = (alpha == kCGImageAlphaFirst ||\n                         alpha == kCGImageAlphaLast ||\n                         alpha == kCGImageAlphaPremultipliedFirst ||\n                         alpha == kCGImageAlphaPremultipliedLast);\n    \n        if (anyAlpha) { return image; }\n    \n        size_t width = CGImageGetWidth(imageRef);\n        size_t height = CGImageGetHeight(imageRef);\n    \n        // current\n        CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(CGImageGetColorSpace(imageRef));\n        CGColorSpaceRef colorspaceRef = CGImageGetColorSpace(imageRef);\n        \n        bool unsupportedColorSpace = (imageColorSpaceModel == 0 || imageColorSpaceModel == -1 || imageColorSpaceModel == kCGColorSpaceModelCMYK || imageColorSpaceModel == kCGColorSpaceModelIndexed);\n        if (unsupportedColorSpace)\n            colorspaceRef = CGColorSpaceCreateDeviceRGB();\n    \n        CGContextRef context = CGBitmapContextCreate(NULL, width,\n                                                     height,\n                                                     CGImageGetBitsPerComponent(imageRef),\n                                                     0,\n                                                     colorspaceRef,\n                                                     kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);\n    \n        // Draw the image into the context and retrieve the new image, which will now have an alpha layer\n        CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);\n        CGImageRef imageRefWithAlpha = CGBitmapContextCreateImage(context);\n        UIImage *imageWithAlpha = [UIImage imageWithCGImage:imageRefWithAlpha scale:image.scale orientation:image.imageOrientation];\n    \n        if (unsupportedColorSpace)\n            CGColorSpaceRelease(colorspaceRef);\n        \n        CGContextRelease(context);\n        CGImageRelease(imageRefWithAlpha);\n        \n        return imageWithAlpha;\n    }\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <Foundation/Foundation.h>\n#import \"SDWebImageCompat.h\"\n#import \"SDWebImageOperation.h\"\n\ntypedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) {\n    SDWebImageDownloaderLowPriority = 1 << 0,\n    SDWebImageDownloaderProgressiveDownload = 1 << 1,\n\n    /**\n     * By default, request prevent the of NSURLCache. With this flag, NSURLCache\n     * is used with default policies.\n     */\n    SDWebImageDownloaderUseNSURLCache = 1 << 2,\n\n    /**\n     * Call completion block with nil image/imageData if the image was read from NSURLCache\n     * (to be combined with `SDWebImageDownloaderUseNSURLCache`).\n     */\n\n    SDWebImageDownloaderIgnoreCachedResponse = 1 << 3,\n    /**\n     * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for\n     * extra time in background to let the request finish. If the background task expires the operation will be cancelled.\n     */\n\n    SDWebImageDownloaderContinueInBackground = 1 << 4,\n\n    /**\n     * Handles cookies stored in NSHTTPCookieStore by setting \n     * NSMutableURLRequest.HTTPShouldHandleCookies = YES;\n     */\n    SDWebImageDownloaderHandleCookies = 1 << 5,\n\n    /**\n     * Enable to allow untrusted SSL certificates.\n     * Useful for testing purposes. Use with caution in production.\n     */\n    SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6,\n\n    /**\n     * Put the image in the high priority queue.\n     */\n    SDWebImageDownloaderHighPriority = 1 << 7,\n};\n\ntypedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) {\n    /**\n     * Default value. All download operations will execute in queue style (first-in-first-out).\n     */\n    SDWebImageDownloaderFIFOExecutionOrder,\n\n    /**\n     * All download operations will execute in stack style (last-in-first-out).\n     */\n    SDWebImageDownloaderLIFOExecutionOrder\n};\n\nextern NSString *const SDWebImageDownloadStartNotification;\nextern NSString *const SDWebImageDownloadStopNotification;\n\ntypedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize);\n\ntypedef void(^SDWebImageDownloaderCompletedBlock)(UIImage *image, NSData *data, NSError *error, BOOL finished);\n\ntypedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDictionary *headers);\n\n/**\n * Asynchronous downloader dedicated and optimized for image loading.\n */\n@interface SDWebImageDownloader : NSObject\n\n/**\n * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory.\n * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.\n */\n@property (assign, nonatomic) BOOL shouldDecompressImages;\n\n@property (assign, nonatomic) NSInteger maxConcurrentDownloads;\n\n/**\n * Shows the current amount of downloads that still need to be downloaded\n */\n@property (readonly, nonatomic) NSUInteger currentDownloadCount;\n\n\n/**\n *  The timeout value (in seconds) for the download operation. Default: 15.0.\n */\n@property (assign, nonatomic) NSTimeInterval downloadTimeout;\n\n\n/**\n * Changes download operations execution order. Default value is `SDWebImageDownloaderFIFOExecutionOrder`.\n */\n@property (assign, nonatomic) SDWebImageDownloaderExecutionOrder executionOrder;\n\n/**\n *  Singleton method, returns the shared instance\n *\n *  @return global shared instance of downloader class\n */\n+ (SDWebImageDownloader *)sharedDownloader;\n\n/**\n *  Set the default URL credential to be set for request operations.\n */\n@property (strong, nonatomic) NSURLCredential *urlCredential;\n\n/**\n * Set username\n */\n@property (strong, nonatomic) NSString *username;\n\n/**\n * Set password\n */\n@property (strong, nonatomic) NSString *password;\n\n/**\n * Set filter to pick headers for downloading image HTTP request.\n *\n * This block will be invoked for each downloading image request, returned\n * NSDictionary will be used as headers in corresponding HTTP request.\n */\n@property (nonatomic, copy) SDWebImageDownloaderHeadersFilterBlock headersFilter;\n\n/**\n * Set a value for a HTTP header to be appended to each download HTTP request.\n *\n * @param value The value for the header field. Use `nil` value to remove the header.\n * @param field The name of the header field to set.\n */\n- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;\n\n/**\n * Returns the value of the specified HTTP header field.\n *\n * @return The value associated with the header field field, or `nil` if there is no corresponding header field.\n */\n- (NSString *)valueForHTTPHeaderField:(NSString *)field;\n\n/**\n * Sets a subclass of `SDWebImageDownloaderOperation` as the default\n * `NSOperation` to be used each time SDWebImage constructs a request\n * operation to download an image.\n *\n * @param operationClass The subclass of `SDWebImageDownloaderOperation` to set \n *        as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`.\n */\n- (void)setOperationClass:(Class)operationClass;\n\n/**\n * Creates a SDWebImageDownloader async downloader instance with a given URL\n *\n * The delegate will be informed when the image is finish downloaded or an error has happen.\n *\n * @see SDWebImageDownloaderDelegate\n *\n * @param url            The URL to the image to download\n * @param options        The options to be used for this download\n * @param progressBlock  A block called repeatedly while the image is downloading\n * @param completedBlock A block called once the download is completed.\n *                       If the download succeeded, the image parameter is set, in case of error,\n *                       error parameter is set with the error. The last parameter is always YES\n *                       if SDWebImageDownloaderProgressiveDownload isn't use. With the\n *                       SDWebImageDownloaderProgressiveDownload option, this block is called\n *                       repeatedly with the partial image object and the finished argument set to NO\n *                       before to be called a last time with the full image and finished argument\n *                       set to YES. In case of error, the finished argument is always YES.\n *\n * @return A cancellable SDWebImageOperation\n */\n- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url\n                                         options:(SDWebImageDownloaderOptions)options\n                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock\n                                       completed:(SDWebImageDownloaderCompletedBlock)completedBlock;\n\n/**\n * Sets the download queue suspension state\n */\n- (void)setSuspended:(BOOL)suspended;\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDWebImageDownloader.h\"\n#import \"SDWebImageDownloaderOperation.h\"\n#import <ImageIO/ImageIO.h>\n\nstatic NSString *const kProgressCallbackKey = @\"progress\";\nstatic NSString *const kCompletedCallbackKey = @\"completed\";\n\n@interface SDWebImageDownloader ()\n\n@property (strong, nonatomic) NSOperationQueue *downloadQueue;\n@property (weak, nonatomic) NSOperation *lastAddedOperation;\n@property (assign, nonatomic) Class operationClass;\n@property (strong, nonatomic) NSMutableDictionary *URLCallbacks;\n@property (strong, nonatomic) NSMutableDictionary *HTTPHeaders;\n// This queue is used to serialize the handling of the network responses of all the download operation in a single queue\n@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t barrierQueue;\n\n@end\n\n@implementation SDWebImageDownloader\n\n+ (void)initialize {\n    // Bind SDNetworkActivityIndicator if available (download it here: http://github.com/rs/SDNetworkActivityIndicator )\n    // To use it, just add #import \"SDNetworkActivityIndicator.h\" in addition to the SDWebImage import\n    if (NSClassFromString(@\"SDNetworkActivityIndicator\")) {\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n        id activityIndicator = [NSClassFromString(@\"SDNetworkActivityIndicator\") performSelector:NSSelectorFromString(@\"sharedActivityIndicator\")];\n#pragma clang diagnostic pop\n\n        // Remove observer in case it was previously added.\n        [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStartNotification object:nil];\n        [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStopNotification object:nil];\n\n        [[NSNotificationCenter defaultCenter] addObserver:activityIndicator\n                                                 selector:NSSelectorFromString(@\"startActivity\")\n                                                     name:SDWebImageDownloadStartNotification object:nil];\n        [[NSNotificationCenter defaultCenter] addObserver:activityIndicator\n                                                 selector:NSSelectorFromString(@\"stopActivity\")\n                                                     name:SDWebImageDownloadStopNotification object:nil];\n    }\n}\n\n+ (SDWebImageDownloader *)sharedDownloader {\n    static dispatch_once_t once;\n    static id instance;\n    dispatch_once(&once, ^{\n        instance = [self new];\n    });\n    return instance;\n}\n\n- (id)init {\n    if ((self = [super init])) {\n        _operationClass = [SDWebImageDownloaderOperation class];\n        _shouldDecompressImages = YES;\n        _executionOrder = SDWebImageDownloaderFIFOExecutionOrder;\n        _downloadQueue = [NSOperationQueue new];\n        _downloadQueue.maxConcurrentOperationCount = 6;\n        _URLCallbacks = [NSMutableDictionary new];\n#ifdef SD_WEBP\n        _HTTPHeaders = [@{@\"Accept\": @\"image/webp,image/*;q=0.8\"} mutableCopy];\n#else\n        _HTTPHeaders = [@{@\"Accept\": @\"image/*;q=0.8\"} mutableCopy];\n#endif\n        _barrierQueue = dispatch_queue_create(\"com.hackemist.SDWebImageDownloaderBarrierQueue\", DISPATCH_QUEUE_CONCURRENT);\n        _downloadTimeout = 15.0;\n    }\n    return self;\n}\n\n- (void)dealloc {\n    [self.downloadQueue cancelAllOperations];\n    SDDispatchQueueRelease(_barrierQueue);\n}\n\n- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field {\n    if (value) {\n        self.HTTPHeaders[field] = value;\n    }\n    else {\n        [self.HTTPHeaders removeObjectForKey:field];\n    }\n}\n\n- (NSString *)valueForHTTPHeaderField:(NSString *)field {\n    return self.HTTPHeaders[field];\n}\n\n- (void)setMaxConcurrentDownloads:(NSInteger)maxConcurrentDownloads {\n    _downloadQueue.maxConcurrentOperationCount = maxConcurrentDownloads;\n}\n\n- (NSUInteger)currentDownloadCount {\n    return _downloadQueue.operationCount;\n}\n\n- (NSInteger)maxConcurrentDownloads {\n    return _downloadQueue.maxConcurrentOperationCount;\n}\n\n- (void)setOperationClass:(Class)operationClass {\n    _operationClass = operationClass ?: [SDWebImageDownloaderOperation class];\n}\n\n- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock {\n    __block SDWebImageDownloaderOperation *operation;\n    __weak __typeof(self)wself = self;\n\n    [self addProgressCallback:progressBlock completedBlock:completedBlock forURL:url createCallback:^{\n        NSTimeInterval timeoutInterval = wself.downloadTimeout;\n        if (timeoutInterval == 0.0) {\n            timeoutInterval = 15.0;\n        }\n\n        // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise\n        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:(options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:timeoutInterval];\n        request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies);\n        request.HTTPShouldUsePipelining = YES;\n        if (wself.headersFilter) {\n            request.allHTTPHeaderFields = wself.headersFilter(url, [wself.HTTPHeaders copy]);\n        }\n        else {\n            request.allHTTPHeaderFields = wself.HTTPHeaders;\n        }\n        operation = [[wself.operationClass alloc] initWithRequest:request\n                                                          options:options\n                                                         progress:^(NSInteger receivedSize, NSInteger expectedSize) {\n                                                             SDWebImageDownloader *sself = wself;\n                                                             if (!sself) return;\n                                                             __block NSArray *callbacksForURL;\n                                                             dispatch_sync(sself.barrierQueue, ^{\n                                                                 callbacksForURL = [sself.URLCallbacks[url] copy];\n                                                             });\n                                                             for (NSDictionary *callbacks in callbacksForURL) {\n                                                                 dispatch_async(dispatch_get_main_queue(), ^{\n                                                                     SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey];\n                                                                     if (callback) callback(receivedSize, expectedSize);\n                                                                 });\n                                                             }\n                                                         }\n                                                        completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {\n                                                            SDWebImageDownloader *sself = wself;\n                                                            if (!sself) return;\n                                                            __block NSArray *callbacksForURL;\n                                                            dispatch_barrier_sync(sself.barrierQueue, ^{\n                                                                callbacksForURL = [sself.URLCallbacks[url] copy];\n                                                                if (finished) {\n                                                                    [sself.URLCallbacks removeObjectForKey:url];\n                                                                }\n                                                            });\n                                                            for (NSDictionary *callbacks in callbacksForURL) {\n                                                                SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey];\n                                                                if (callback) callback(image, data, error, finished);\n                                                            }\n                                                        }\n                                                        cancelled:^{\n                                                            SDWebImageDownloader *sself = wself;\n                                                            if (!sself) return;\n                                                            dispatch_barrier_async(sself.barrierQueue, ^{\n                                                                [sself.URLCallbacks removeObjectForKey:url];\n                                                            });\n                                                        }];\n        operation.shouldDecompressImages = wself.shouldDecompressImages;\n        \n        if (wself.urlCredential) {\n            operation.credential = wself.urlCredential;\n        } else if (wself.username && wself.password) {\n            operation.credential = [NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession];\n        }\n        \n        if (options & SDWebImageDownloaderHighPriority) {\n            operation.queuePriority = NSOperationQueuePriorityHigh;\n        } else if (options & SDWebImageDownloaderLowPriority) {\n            operation.queuePriority = NSOperationQueuePriorityLow;\n        }\n\n        [wself.downloadQueue addOperation:operation];\n        if (wself.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) {\n            // Emulate LIFO execution order by systematically adding new operations as last operation's dependency\n            [wself.lastAddedOperation addDependency:operation];\n            wself.lastAddedOperation = operation;\n        }\n    }];\n\n    return operation;\n}\n\n- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock completedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback {\n    // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data.\n    if (url == nil) {\n        if (completedBlock != nil) {\n            completedBlock(nil, nil, nil, NO);\n        }\n        return;\n    }\n\n    dispatch_barrier_sync(self.barrierQueue, ^{\n        BOOL first = NO;\n        if (!self.URLCallbacks[url]) {\n            self.URLCallbacks[url] = [NSMutableArray new];\n            first = YES;\n        }\n\n        // Handle single download of simultaneous download request for the same URL\n        NSMutableArray *callbacksForURL = self.URLCallbacks[url];\n        NSMutableDictionary *callbacks = [NSMutableDictionary new];\n        if (progressBlock) callbacks[kProgressCallbackKey] = [progressBlock copy];\n        if (completedBlock) callbacks[kCompletedCallbackKey] = [completedBlock copy];\n        [callbacksForURL addObject:callbacks];\n        self.URLCallbacks[url] = callbacksForURL;\n\n        if (first) {\n            createCallback();\n        }\n    });\n}\n\n- (void)setSuspended:(BOOL)suspended {\n    [self.downloadQueue setSuspended:suspended];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <Foundation/Foundation.h>\n#import \"SDWebImageDownloader.h\"\n#import \"SDWebImageOperation.h\"\n\nextern NSString *const SDWebImageDownloadStartNotification;\nextern NSString *const SDWebImageDownloadReceiveResponseNotification;\nextern NSString *const SDWebImageDownloadStopNotification;\nextern NSString *const SDWebImageDownloadFinishNotification;\n\n@interface SDWebImageDownloaderOperation : NSOperation <SDWebImageOperation>\n\n/**\n * The request used by the operation's connection.\n */\n@property (strong, nonatomic, readonly) NSURLRequest *request;\n\n\n@property (assign, nonatomic) BOOL shouldDecompressImages;\n\n/**\n * Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default.\n *\n * This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`.\n */\n@property (nonatomic, assign) BOOL shouldUseCredentialStorage;\n\n/**\n * The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`.\n *\n * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present.\n */\n@property (nonatomic, strong) NSURLCredential *credential;\n\n/**\n * The SDWebImageDownloaderOptions for the receiver.\n */\n@property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options;\n\n/**\n * The expected size of data.\n */\n@property (assign, nonatomic) NSInteger expectedSize;\n\n/**\n * The response returned by the operation's connection.\n */\n@property (strong, nonatomic) NSURLResponse *response;\n\n/**\n *  Initializes a `SDWebImageDownloaderOperation` object\n *\n *  @see SDWebImageDownloaderOperation\n *\n *  @param request        the URL request\n *  @param options        downloader options\n *  @param progressBlock  the block executed when a new chunk of data arrives. \n *                        @note the progress block is executed on a background queue\n *  @param completedBlock the block executed when the download is done. \n *                        @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue\n *  @param cancelBlock    the block executed if the download (operation) is cancelled\n *\n *  @return the initialized instance\n */\n- (id)initWithRequest:(NSURLRequest *)request\n              options:(SDWebImageDownloaderOptions)options\n             progress:(SDWebImageDownloaderProgressBlock)progressBlock\n            completed:(SDWebImageDownloaderCompletedBlock)completedBlock\n            cancelled:(SDWebImageNoParamsBlock)cancelBlock;\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDWebImageDownloaderOperation.h\"\n#import \"SDWebImageDecoder.h\"\n#import \"UIImage+MultiFormat.h\"\n#import <ImageIO/ImageIO.h>\n#import \"SDWebImageManager.h\"\n\nNSString *const SDWebImageDownloadStartNotification = @\"SDWebImageDownloadStartNotification\";\nNSString *const SDWebImageDownloadReceiveResponseNotification = @\"SDWebImageDownloadReceiveResponseNotification\";\nNSString *const SDWebImageDownloadStopNotification = @\"SDWebImageDownloadStopNotification\";\nNSString *const SDWebImageDownloadFinishNotification = @\"SDWebImageDownloadFinishNotification\";\n\n@interface SDWebImageDownloaderOperation () <NSURLConnectionDataDelegate>\n\n@property (copy, nonatomic) SDWebImageDownloaderProgressBlock progressBlock;\n@property (copy, nonatomic) SDWebImageDownloaderCompletedBlock completedBlock;\n@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock;\n\n@property (assign, nonatomic, getter = isExecuting) BOOL executing;\n@property (assign, nonatomic, getter = isFinished) BOOL finished;\n@property (strong, nonatomic) NSMutableData *imageData;\n@property (strong, nonatomic) NSURLConnection *connection;\n@property (strong, atomic) NSThread *thread;\n\n#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0\n@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId;\n#endif\n\n@end\n\n@implementation SDWebImageDownloaderOperation {\n    size_t width, height;\n    UIImageOrientation orientation;\n    BOOL responseFromCached;\n}\n\n@synthesize executing = _executing;\n@synthesize finished = _finished;\n\n- (id)initWithRequest:(NSURLRequest *)request\n              options:(SDWebImageDownloaderOptions)options\n             progress:(SDWebImageDownloaderProgressBlock)progressBlock\n            completed:(SDWebImageDownloaderCompletedBlock)completedBlock\n            cancelled:(SDWebImageNoParamsBlock)cancelBlock {\n    if ((self = [super init])) {\n        _request = request;\n        _shouldDecompressImages = YES;\n        _shouldUseCredentialStorage = YES;\n        _options = options;\n        _progressBlock = [progressBlock copy];\n        _completedBlock = [completedBlock copy];\n        _cancelBlock = [cancelBlock copy];\n        _executing = NO;\n        _finished = NO;\n        _expectedSize = 0;\n        responseFromCached = YES; // Initially wrong until `connection:willCacheResponse:` is called or not called\n    }\n    return self;\n}\n\n- (void)start {\n    @synchronized (self) {\n        if (self.isCancelled) {\n            self.finished = YES;\n            [self reset];\n            return;\n        }\n\n#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0\n        Class UIApplicationClass = NSClassFromString(@\"UIApplication\");\n        BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)];\n        if (hasApplication && [self shouldContinueWhenAppEntersBackground]) {\n            __weak __typeof__ (self) wself = self;\n            UIApplication * app = [UIApplicationClass performSelector:@selector(sharedApplication)];\n            self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{\n                __strong __typeof (wself) sself = wself;\n\n                if (sself) {\n                    [sself cancel];\n\n                    [app endBackgroundTask:sself.backgroundTaskId];\n                    sself.backgroundTaskId = UIBackgroundTaskInvalid;\n                }\n            }];\n        }\n#endif\n\n        self.executing = YES;\n        self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO];\n        self.thread = [NSThread currentThread];\n    }\n\n    [self.connection start];\n\n    if (self.connection) {\n        if (self.progressBlock) {\n            self.progressBlock(0, NSURLResponseUnknownLength);\n        }\n        dispatch_async(dispatch_get_main_queue(), ^{\n            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self];\n        });\n\n        if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_5_1) {\n            // Make sure to run the runloop in our background thread so it can process downloaded data\n            // Note: we use a timeout to work around an issue with NSURLConnection cancel under iOS 5\n            //       not waking up the runloop, leading to dead threads (see https://github.com/rs/SDWebImage/issues/466)\n            CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, false);\n        }\n        else {\n            CFRunLoopRun();\n        }\n\n        if (!self.isFinished) {\n            [self.connection cancel];\n            [self connection:self.connection didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:@{NSURLErrorFailingURLErrorKey : self.request.URL}]];\n        }\n    }\n    else {\n        if (self.completedBlock) {\n            self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @\"Connection can't be initialized\"}], YES);\n        }\n    }\n\n#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0\n    Class UIApplicationClass = NSClassFromString(@\"UIApplication\");\n    if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) {\n        return;\n    }\n    if (self.backgroundTaskId != UIBackgroundTaskInvalid) {\n        UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)];\n        [app endBackgroundTask:self.backgroundTaskId];\n        self.backgroundTaskId = UIBackgroundTaskInvalid;\n    }\n#endif\n}\n\n- (void)cancel {\n    @synchronized (self) {\n        if (self.thread) {\n            [self performSelector:@selector(cancelInternalAndStop) onThread:self.thread withObject:nil waitUntilDone:NO];\n        }\n        else {\n            [self cancelInternal];\n        }\n    }\n}\n\n- (void)cancelInternalAndStop {\n    if (self.isFinished) return;\n    [self cancelInternal];\n    CFRunLoopStop(CFRunLoopGetCurrent());\n}\n\n- (void)cancelInternal {\n    if (self.isFinished) return;\n    [super cancel];\n    if (self.cancelBlock) self.cancelBlock();\n\n    if (self.connection) {\n        [self.connection cancel];\n        dispatch_async(dispatch_get_main_queue(), ^{\n            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];\n        });\n\n        // As we cancelled the connection, its callback won't be called and thus won't\n        // maintain the isFinished and isExecuting flags.\n        if (self.isExecuting) self.executing = NO;\n        if (!self.isFinished) self.finished = YES;\n    }\n\n    [self reset];\n}\n\n- (void)done {\n    self.finished = YES;\n    self.executing = NO;\n    [self reset];\n}\n\n- (void)reset {\n    self.cancelBlock = nil;\n    self.completedBlock = nil;\n    self.progressBlock = nil;\n    self.connection = nil;\n    self.imageData = nil;\n    self.thread = nil;\n}\n\n- (void)setFinished:(BOOL)finished {\n    [self willChangeValueForKey:@\"isFinished\"];\n    _finished = finished;\n    [self didChangeValueForKey:@\"isFinished\"];\n}\n\n- (void)setExecuting:(BOOL)executing {\n    [self willChangeValueForKey:@\"isExecuting\"];\n    _executing = executing;\n    [self didChangeValueForKey:@\"isExecuting\"];\n}\n\n- (BOOL)isConcurrent {\n    return YES;\n}\n\n#pragma mark NSURLConnection (delegate)\n\n- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {\n    \n    //'304 Not Modified' is an exceptional one\n    if (![response respondsToSelector:@selector(statusCode)] || ([((NSHTTPURLResponse *)response) statusCode] < 400 && [((NSHTTPURLResponse *)response) statusCode] != 304)) {\n        NSInteger expected = response.expectedContentLength > 0 ? (NSInteger)response.expectedContentLength : 0;\n        self.expectedSize = expected;\n        if (self.progressBlock) {\n            self.progressBlock(0, expected);\n        }\n\n        self.imageData = [[NSMutableData alloc] initWithCapacity:expected];\n        self.response = response;\n        dispatch_async(dispatch_get_main_queue(), ^{\n            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:self];\n        });\n    }\n    else {\n        NSUInteger code = [((NSHTTPURLResponse *)response) statusCode];\n        \n        //This is the case when server returns '304 Not Modified'. It means that remote image is not changed.\n        //In case of 304 we need just cancel the operation and return cached image from the cache.\n        if (code == 304) {\n            [self cancelInternal];\n        } else {\n            [self.connection cancel];\n        }\n        dispatch_async(dispatch_get_main_queue(), ^{\n            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];\n        });\n\n        if (self.completedBlock) {\n            self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES);\n        }\n        CFRunLoopStop(CFRunLoopGetCurrent());\n        [self done];\n    }\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {\n    [self.imageData appendData:data];\n\n    if ((self.options & SDWebImageDownloaderProgressiveDownload) && self.expectedSize > 0 && self.completedBlock) {\n        // The following code is from http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/\n        // Thanks to the author @Nyx0uf\n\n        // Get the total bytes downloaded\n        const NSInteger totalSize = self.imageData.length;\n\n        // Update the data source, we must pass ALL the data, not just the new bytes\n        CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)self.imageData, NULL);\n\n        if (width + height == 0) {\n            CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);\n            if (properties) {\n                NSInteger orientationValue = -1;\n                CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight);\n                if (val) CFNumberGetValue(val, kCFNumberLongType, &height);\n                val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth);\n                if (val) CFNumberGetValue(val, kCFNumberLongType, &width);\n                val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation);\n                if (val) CFNumberGetValue(val, kCFNumberNSIntegerType, &orientationValue);\n                CFRelease(properties);\n\n                // When we draw to Core Graphics, we lose orientation information,\n                // which means the image below born of initWithCGIImage will be\n                // oriented incorrectly sometimes. (Unlike the image born of initWithData\n                // in connectionDidFinishLoading.) So save it here and pass it on later.\n                orientation = [[self class] orientationFromPropertyValue:(orientationValue == -1 ? 1 : orientationValue)];\n            }\n\n        }\n\n        if (width + height > 0 && totalSize < self.expectedSize) {\n            // Create the image\n            CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);\n\n#ifdef TARGET_OS_IPHONE\n            // Workaround for iOS anamorphic image\n            if (partialImageRef) {\n                const size_t partialHeight = CGImageGetHeight(partialImageRef);\n                CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();\n                CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, width * 4, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);\n                CGColorSpaceRelease(colorSpace);\n                if (bmContext) {\n                    CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = width, .size.height = partialHeight}, partialImageRef);\n                    CGImageRelease(partialImageRef);\n                    partialImageRef = CGBitmapContextCreateImage(bmContext);\n                    CGContextRelease(bmContext);\n                }\n                else {\n                    CGImageRelease(partialImageRef);\n                    partialImageRef = nil;\n                }\n            }\n#endif\n\n            if (partialImageRef) {\n                UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation];\n                NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];\n                UIImage *scaledImage = [self scaledImageForKey:key image:image];\n                if (self.shouldDecompressImages) {\n                    image = [UIImage decodedImageWithImage:scaledImage];\n                }\n                else {\n                    image = scaledImage;\n                }\n                CGImageRelease(partialImageRef);\n                dispatch_main_sync_safe(^{\n                    if (self.completedBlock) {\n                        self.completedBlock(image, nil, nil, NO);\n                    }\n                });\n            }\n        }\n\n        CFRelease(imageSource);\n    }\n\n    if (self.progressBlock) {\n        self.progressBlock(self.imageData.length, self.expectedSize);\n    }\n}\n\n+ (UIImageOrientation)orientationFromPropertyValue:(NSInteger)value {\n    switch (value) {\n        case 1:\n            return UIImageOrientationUp;\n        case 3:\n            return UIImageOrientationDown;\n        case 8:\n            return UIImageOrientationLeft;\n        case 6:\n            return UIImageOrientationRight;\n        case 2:\n            return UIImageOrientationUpMirrored;\n        case 4:\n            return UIImageOrientationDownMirrored;\n        case 5:\n            return UIImageOrientationLeftMirrored;\n        case 7:\n            return UIImageOrientationRightMirrored;\n        default:\n            return UIImageOrientationUp;\n    }\n}\n\n- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image {\n    return SDScaledImageForKey(key, image);\n}\n\n- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection {\n    SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock;\n    @synchronized(self) {\n        CFRunLoopStop(CFRunLoopGetCurrent());\n        self.thread = nil;\n        self.connection = nil;\n        dispatch_async(dispatch_get_main_queue(), ^{\n            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];\n            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:self];\n        });\n    }\n    \n    if (![[NSURLCache sharedURLCache] cachedResponseForRequest:_request]) {\n        responseFromCached = NO;\n    }\n    \n    if (completionBlock) {\n        if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached) {\n            completionBlock(nil, nil, nil, YES);\n        } else if (self.imageData) {\n            UIImage *image = [UIImage sd_imageWithData:self.imageData];\n            NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];\n            image = [self scaledImageForKey:key image:image];\n            \n            // Do not force decoding animated GIFs\n            if (!image.images) {\n                if (self.shouldDecompressImages) {\n                    image = [UIImage decodedImageWithImage:image];\n                }\n            }\n            if (CGSizeEqualToSize(image.size, CGSizeZero)) {\n                completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @\"Downloaded image has 0 pixels\"}], YES);\n            }\n            else {\n                completionBlock(image, self.imageData, nil, YES);\n            }\n        } else {\n            completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @\"Image data is nil\"}], YES);\n        }\n    }\n    self.completionBlock = nil;\n    [self done];\n}\n\n- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {\n    @synchronized(self) {\n        CFRunLoopStop(CFRunLoopGetCurrent());\n        self.thread = nil;\n        self.connection = nil;\n        dispatch_async(dispatch_get_main_queue(), ^{\n            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];\n        });\n    }\n\n    if (self.completedBlock) {\n        self.completedBlock(nil, nil, error, YES);\n    }\n    self.completionBlock = nil;\n    [self done];\n}\n\n- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {\n    responseFromCached = NO; // If this method is called, it means the response wasn't read from cache\n    if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) {\n        // Prevents caching of responses\n        return nil;\n    }\n    else {\n        return cachedResponse;\n    }\n}\n\n- (BOOL)shouldContinueWhenAppEntersBackground {\n    return self.options & SDWebImageDownloaderContinueInBackground;\n}\n\n- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection {\n    return self.shouldUseCredentialStorage;\n}\n\n- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{\n    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {\n        if (!(self.options & SDWebImageDownloaderAllowInvalidSSLCertificates) &&\n            [challenge.sender respondsToSelector:@selector(performDefaultHandlingForAuthenticationChallenge:)]) {\n            [challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge];\n        } else {\n            NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];\n            [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];\n        }\n    } else {\n        if ([challenge previousFailureCount] == 0) {\n            if (self.credential) {\n                [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge];\n            } else {\n                [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];\n            }\n        } else {\n            [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];\n        }\n    }\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageManager.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDWebImageCompat.h\"\n#import \"SDWebImageOperation.h\"\n#import \"SDWebImageDownloader.h\"\n#import \"SDImageCache.h\"\n\ntypedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {\n    /**\n     * By default, when a URL fail to be downloaded, the URL is blacklisted so the library won't keep trying.\n     * This flag disable this blacklisting.\n     */\n    SDWebImageRetryFailed = 1 << 0,\n\n    /**\n     * By default, image downloads are started during UI interactions, this flags disable this feature,\n     * leading to delayed download on UIScrollView deceleration for instance.\n     */\n    SDWebImageLowPriority = 1 << 1,\n\n    /**\n     * This flag disables on-disk caching\n     */\n    SDWebImageCacheMemoryOnly = 1 << 2,\n\n    /**\n     * This flag enables progressive download, the image is displayed progressively during download as a browser would do.\n     * By default, the image is only displayed once completely downloaded.\n     */\n    SDWebImageProgressiveDownload = 1 << 3,\n\n    /**\n     * Even if the image is cached, respect the HTTP response cache control, and refresh the image from remote location if needed.\n     * The disk caching will be handled by NSURLCache instead of SDWebImage leading to slight performance degradation.\n     * This option helps deal with images changing behind the same request URL, e.g. Facebook graph api profile pics.\n     * If a cached image is refreshed, the completion block is called once with the cached image and again with the final image.\n     *\n     * Use this flag only if you can't make your URLs static with embedded cache busting parameter.\n     */\n    SDWebImageRefreshCached = 1 << 4,\n\n    /**\n     * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for\n     * extra time in background to let the request finish. If the background task expires the operation will be cancelled.\n     */\n    SDWebImageContinueInBackground = 1 << 5,\n\n    /**\n     * Handles cookies stored in NSHTTPCookieStore by setting\n     * NSMutableURLRequest.HTTPShouldHandleCookies = YES;\n     */\n    SDWebImageHandleCookies = 1 << 6,\n\n    /**\n     * Enable to allow untrusted SSL certificates.\n     * Useful for testing purposes. Use with caution in production.\n     */\n    SDWebImageAllowInvalidSSLCertificates = 1 << 7,\n\n    /**\n     * By default, image are loaded in the order they were queued. This flag move them to\n     * the front of the queue and is loaded immediately instead of waiting for the current queue to be loaded (which \n     * could take a while).\n     */\n    SDWebImageHighPriority = 1 << 8,\n    \n    /**\n     * By default, placeholder images are loaded while the image is loading. This flag will delay the loading\n     * of the placeholder image until after the image has finished loading.\n     */\n    SDWebImageDelayPlaceholder = 1 << 9,\n\n    /**\n     * We usually don't call transformDownloadedImage delegate method on animated images,\n     * as most transformation code would mangle it.\n     * Use this flag to transform them anyway.\n     */\n    SDWebImageTransformAnimatedImage = 1 << 10,\n    \n    /**\n     * By default, image is added to the imageView after download. But in some cases, we want to\n     * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance)\n     * Use this flag if you want to manually set the image in the completion when success\n     */\n    SDWebImageAvoidAutoSetImage = 1 << 11\n};\n\ntypedef void(^SDWebImageCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL);\n\ntypedef void(^SDWebImageCompletionWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL);\n\ntypedef NSString *(^SDWebImageCacheKeyFilterBlock)(NSURL *url);\n\n\n@class SDWebImageManager;\n\n@protocol SDWebImageManagerDelegate <NSObject>\n\n@optional\n\n/**\n * Controls which image should be downloaded when the image is not found in the cache.\n *\n * @param imageManager The current `SDWebImageManager`\n * @param imageURL     The url of the image to be downloaded\n *\n * @return Return NO to prevent the downloading of the image on cache misses. If not implemented, YES is implied.\n */\n- (BOOL)imageManager:(SDWebImageManager *)imageManager shouldDownloadImageForURL:(NSURL *)imageURL;\n\n/**\n * Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory.\n * NOTE: This method is called from a global queue in order to not to block the main thread.\n *\n * @param imageManager The current `SDWebImageManager`\n * @param image        The image to transform\n * @param imageURL     The url of the image to transform\n *\n * @return The transformed image object.\n */\n- (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL;\n\n@end\n\n/**\n * The SDWebImageManager is the class behind the UIImageView+WebCache category and likes.\n * It ties the asynchronous downloader (SDWebImageDownloader) with the image cache store (SDImageCache).\n * You can use this class directly to benefit from web image downloading with caching in another context than\n * a UIView.\n *\n * Here is a simple example of how to use SDWebImageManager:\n *\n * @code\n\nSDWebImageManager *manager = [SDWebImageManager sharedManager];\n[manager downloadImageWithURL:imageURL\n                      options:0\n                     progress:nil\n                    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n                        if (image) {\n                            // do something with image\n                        }\n                    }];\n\n * @endcode\n */\n@interface SDWebImageManager : NSObject\n\n@property (weak, nonatomic) id <SDWebImageManagerDelegate> delegate;\n\n@property (strong, nonatomic, readonly) SDImageCache *imageCache;\n@property (strong, nonatomic, readonly) SDWebImageDownloader *imageDownloader;\n\n/**\n * The cache filter is a block used each time SDWebImageManager need to convert an URL into a cache key. This can\n * be used to remove dynamic part of an image URL.\n *\n * The following example sets a filter in the application delegate that will remove any query-string from the\n * URL before to use it as a cache key:\n *\n * @code\n\n[[SDWebImageManager sharedManager] setCacheKeyFilter:^(NSURL *url) {\n    url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];\n    return [url absoluteString];\n}];\n\n * @endcode\n */\n@property (nonatomic, copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter;\n\n/**\n * Returns global SDWebImageManager instance.\n *\n * @return SDWebImageManager shared instance\n */\n+ (SDWebImageManager *)sharedManager;\n\n/**\n * Downloads the image at the given URL if not present in cache or return the cached version otherwise.\n *\n * @param url            The URL to the image\n * @param options        A mask to specify options to use for this request\n * @param progressBlock  A block called while image is downloading\n * @param completedBlock A block called when operation has been completed.\n *\n *   This parameter is required.\n * \n *   This block has no return value and takes the requested UIImage as first parameter.\n *   In case of error the image parameter is nil and the second parameter may contain an NSError.\n *\n *   The third parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache\n *   or from the memory cache or from the network.\n *\n *   The last parameter is set to NO when the SDWebImageProgressiveDownload option is used and the image is \n *   downloading. This block is thus called repeatedly with a partial image. When image is fully downloaded, the\n *   block is called a last time with the full image and the last parameter set to YES.\n *\n * @return Returns an NSObject conforming to SDWebImageOperation. Should be an instance of SDWebImageDownloaderOperation\n */\n- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url\n                                         options:(SDWebImageOptions)options\n                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock\n                                       completed:(SDWebImageCompletionWithFinishedBlock)completedBlock;\n\n/**\n * Saves image to cache for given URL\n *\n * @param image The image to cache\n * @param url   The URL to the image\n *\n */\n\n- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url;\n\n/**\n * Cancel all current operations\n */\n- (void)cancelAll;\n\n/**\n * Check one or more operations running\n */\n- (BOOL)isRunning;\n\n/**\n *  Check if image has already been cached\n *\n *  @param url image url\n *\n *  @return if the image was already cached\n */\n- (BOOL)cachedImageExistsForURL:(NSURL *)url;\n\n/**\n *  Check if image has already been cached on disk only\n *\n *  @param url image url\n *\n *  @return if the image was already cached (disk only)\n */\n- (BOOL)diskImageExistsForURL:(NSURL *)url;\n\n/**\n *  Async check if image has already been cached\n *\n *  @param url              image url\n *  @param completionBlock  the block to be executed when the check is finished\n *  \n *  @note the completion block is always executed on the main queue\n */\n- (void)cachedImageExistsForURL:(NSURL *)url\n                     completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;\n\n/**\n *  Async check if image has already been cached on disk only\n *\n *  @param url              image url\n *  @param completionBlock  the block to be executed when the check is finished\n *\n *  @note the completion block is always executed on the main queue\n */\n- (void)diskImageExistsForURL:(NSURL *)url\n                   completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;\n\n\n/**\n *Return the cache key for a given URL\n */\n- (NSString *)cacheKeyForURL:(NSURL *)url;\n\n@end\n\n\n#pragma mark - Deprecated\n\ntypedef void(^SDWebImageCompletedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType) __deprecated_msg(\"Block type deprecated. Use `SDWebImageCompletionBlock`\");\ntypedef void(^SDWebImageCompletedWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) __deprecated_msg(\"Block type deprecated. Use `SDWebImageCompletionWithFinishedBlock`\");\n\n\n@interface SDWebImageManager (Deprecated)\n\n/**\n *  Downloads the image at the given URL if not present in cache or return the cached version otherwise.\n *\n *  @deprecated This method has been deprecated. Use `downloadImageWithURL:options:progress:completed:`\n */\n- (id <SDWebImageOperation>)downloadWithURL:(NSURL *)url\n                                    options:(SDWebImageOptions)options\n                                   progress:(SDWebImageDownloaderProgressBlock)progressBlock\n                                  completed:(SDWebImageCompletedWithFinishedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `downloadImageWithURL:options:progress:completed:`\");\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageManager.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDWebImageManager.h\"\n#import <objc/message.h>\n\n@interface SDWebImageCombinedOperation : NSObject <SDWebImageOperation>\n\n@property (assign, nonatomic, getter = isCancelled) BOOL cancelled;\n@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock;\n@property (strong, nonatomic) NSOperation *cacheOperation;\n\n@end\n\n@interface SDWebImageManager ()\n\n@property (strong, nonatomic, readwrite) SDImageCache *imageCache;\n@property (strong, nonatomic, readwrite) SDWebImageDownloader *imageDownloader;\n@property (strong, nonatomic) NSMutableSet *failedURLs;\n@property (strong, nonatomic) NSMutableArray *runningOperations;\n\n@end\n\n@implementation SDWebImageManager\n\n+ (id)sharedManager {\n    static dispatch_once_t once;\n    static id instance;\n    dispatch_once(&once, ^{\n        instance = [self new];\n    });\n    return instance;\n}\n\n- (id)init {\n    if ((self = [super init])) {\n        _imageCache = [self createCache];\n        _imageDownloader = [SDWebImageDownloader sharedDownloader];\n        _failedURLs = [NSMutableSet new];\n        _runningOperations = [NSMutableArray new];\n    }\n    return self;\n}\n\n- (SDImageCache *)createCache {\n    return [SDImageCache sharedImageCache];\n}\n\n- (NSString *)cacheKeyForURL:(NSURL *)url {\n    if (self.cacheKeyFilter) {\n        return self.cacheKeyFilter(url);\n    }\n    else {\n        return [url absoluteString];\n    }\n}\n\n- (BOOL)cachedImageExistsForURL:(NSURL *)url {\n    NSString *key = [self cacheKeyForURL:url];\n    if ([self.imageCache imageFromMemoryCacheForKey:key] != nil) return YES;\n    return [self.imageCache diskImageExistsWithKey:key];\n}\n\n- (BOOL)diskImageExistsForURL:(NSURL *)url {\n    NSString *key = [self cacheKeyForURL:url];\n    return [self.imageCache diskImageExistsWithKey:key];\n}\n\n- (void)cachedImageExistsForURL:(NSURL *)url\n                     completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {\n    NSString *key = [self cacheKeyForURL:url];\n    \n    BOOL isInMemoryCache = ([self.imageCache imageFromMemoryCacheForKey:key] != nil);\n    \n    if (isInMemoryCache) {\n        // making sure we call the completion block on the main queue\n        dispatch_async(dispatch_get_main_queue(), ^{\n            if (completionBlock) {\n                completionBlock(YES);\n            }\n        });\n        return;\n    }\n    \n    [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) {\n        // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch\n        if (completionBlock) {\n            completionBlock(isInDiskCache);\n        }\n    }];\n}\n\n- (void)diskImageExistsForURL:(NSURL *)url\n                   completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {\n    NSString *key = [self cacheKeyForURL:url];\n    \n    [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) {\n        // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch\n        if (completionBlock) {\n            completionBlock(isInDiskCache);\n        }\n    }];\n}\n\n- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url\n                                         options:(SDWebImageOptions)options\n                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock\n                                       completed:(SDWebImageCompletionWithFinishedBlock)completedBlock {\n    // Invoking this method without a completedBlock is pointless\n    NSAssert(completedBlock != nil, @\"If you mean to prefetch the image, use -[SDWebImagePrefetcher prefetchURLs] instead\");\n\n    // Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, XCode won't\n    // throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString.\n    if ([url isKindOfClass:NSString.class]) {\n        url = [NSURL URLWithString:(NSString *)url];\n    }\n\n    // Prevents app crashing on argument type error like sending NSNull instead of NSURL\n    if (![url isKindOfClass:NSURL.class]) {\n        url = nil;\n    }\n\n    __block SDWebImageCombinedOperation *operation = [SDWebImageCombinedOperation new];\n    __weak SDWebImageCombinedOperation *weakOperation = operation;\n\n    BOOL isFailedUrl = NO;\n    @synchronized (self.failedURLs) {\n        isFailedUrl = [self.failedURLs containsObject:url];\n    }\n\n    if (url.absoluteString.length == 0 || (!(options & SDWebImageRetryFailed) && isFailedUrl)) {\n        dispatch_main_sync_safe(^{\n            NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil];\n            completedBlock(nil, error, SDImageCacheTypeNone, YES, url);\n        });\n        return operation;\n    }\n\n    @synchronized (self.runningOperations) {\n        [self.runningOperations addObject:operation];\n    }\n    NSString *key = [self cacheKeyForURL:url];\n\n    operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) {\n        if (operation.isCancelled) {\n            @synchronized (self.runningOperations) {\n                [self.runningOperations removeObject:operation];\n            }\n\n            return;\n        }\n\n        if ((!image || options & SDWebImageRefreshCached) && (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url])) {\n            if (image && options & SDWebImageRefreshCached) {\n                dispatch_main_sync_safe(^{\n                    // If image was found in the cache but SDWebImageRefreshCached is provided, notify about the cached image\n                    // AND try to re-download it in order to let a chance to NSURLCache to refresh it from server.\n                    completedBlock(image, nil, cacheType, YES, url);\n                });\n            }\n\n            // download if no image or requested to refresh anyway, and download allowed by delegate\n            SDWebImageDownloaderOptions downloaderOptions = 0;\n            if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority;\n            if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload;\n            if (options & SDWebImageRefreshCached) downloaderOptions |= SDWebImageDownloaderUseNSURLCache;\n            if (options & SDWebImageContinueInBackground) downloaderOptions |= SDWebImageDownloaderContinueInBackground;\n            if (options & SDWebImageHandleCookies) downloaderOptions |= SDWebImageDownloaderHandleCookies;\n            if (options & SDWebImageAllowInvalidSSLCertificates) downloaderOptions |= SDWebImageDownloaderAllowInvalidSSLCertificates;\n            if (options & SDWebImageHighPriority) downloaderOptions |= SDWebImageDownloaderHighPriority;\n            if (image && options & SDWebImageRefreshCached) {\n                // force progressive off if image already cached but forced refreshing\n                downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload;\n                // ignore image read from NSURLCache if image if cached but force refreshing\n                downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse;\n            }\n            id <SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) {\n                __strong __typeof(weakOperation) strongOperation = weakOperation;\n                if (!strongOperation || strongOperation.isCancelled) {\n                    // Do nothing if the operation was cancelled\n                    // See #699 for more details\n                    // if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data\n                }\n                else if (error) {\n                    dispatch_main_sync_safe(^{\n                        if (strongOperation && !strongOperation.isCancelled) {\n                            completedBlock(nil, error, SDImageCacheTypeNone, finished, url);\n                        }\n                    });\n\n                    if (   error.code != NSURLErrorNotConnectedToInternet\n                        && error.code != NSURLErrorCancelled\n                        && error.code != NSURLErrorTimedOut\n                        && error.code != NSURLErrorInternationalRoamingOff\n                        && error.code != NSURLErrorDataNotAllowed\n                        && error.code != NSURLErrorCannotFindHost\n                        && error.code != NSURLErrorCannotConnectToHost) {\n                        @synchronized (self.failedURLs) {\n                            [self.failedURLs addObject:url];\n                        }\n                    }\n                }\n                else {\n                    if ((options & SDWebImageRetryFailed)) {\n                        @synchronized (self.failedURLs) {\n                            [self.failedURLs removeObject:url];\n                        }\n                    }\n                    \n                    BOOL cacheOnDisk = !(options & SDWebImageCacheMemoryOnly);\n\n                    if (options & SDWebImageRefreshCached && image && !downloadedImage) {\n                        // Image refresh hit the NSURLCache cache, do not call the completion block\n                    }\n                    else if (downloadedImage && (!downloadedImage.images || (options & SDWebImageTransformAnimatedImage)) && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) {\n                        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{\n                            UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url];\n\n                            if (transformedImage && finished) {\n                                BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage];\n                                [self.imageCache storeImage:transformedImage recalculateFromImage:imageWasTransformed imageData:(imageWasTransformed ? nil : data) forKey:key toDisk:cacheOnDisk];\n                            }\n\n                            dispatch_main_sync_safe(^{\n                                if (strongOperation && !strongOperation.isCancelled) {\n                                    completedBlock(transformedImage, nil, SDImageCacheTypeNone, finished, url);\n                                }\n                            });\n                        });\n                    }\n                    else {\n                        if (downloadedImage && finished) {\n                            [self.imageCache storeImage:downloadedImage recalculateFromImage:NO imageData:data forKey:key toDisk:cacheOnDisk];\n                        }\n\n                        dispatch_main_sync_safe(^{\n                            if (strongOperation && !strongOperation.isCancelled) {\n                                completedBlock(downloadedImage, nil, SDImageCacheTypeNone, finished, url);\n                            }\n                        });\n                    }\n                }\n\n                if (finished) {\n                    @synchronized (self.runningOperations) {\n                        if (strongOperation) {\n                            [self.runningOperations removeObject:strongOperation];\n                        }\n                    }\n                }\n            }];\n            operation.cancelBlock = ^{\n                [subOperation cancel];\n                \n                @synchronized (self.runningOperations) {\n                    __strong __typeof(weakOperation) strongOperation = weakOperation;\n                    if (strongOperation) {\n                        [self.runningOperations removeObject:strongOperation];\n                    }\n                }\n            };\n        }\n        else if (image) {\n            dispatch_main_sync_safe(^{\n                __strong __typeof(weakOperation) strongOperation = weakOperation;\n                if (strongOperation && !strongOperation.isCancelled) {\n                    completedBlock(image, nil, cacheType, YES, url);\n                }\n            });\n            @synchronized (self.runningOperations) {\n                [self.runningOperations removeObject:operation];\n            }\n        }\n        else {\n            // Image not in cache and download disallowed by delegate\n            dispatch_main_sync_safe(^{\n                __strong __typeof(weakOperation) strongOperation = weakOperation;\n                if (strongOperation && !weakOperation.isCancelled) {\n                    completedBlock(nil, nil, SDImageCacheTypeNone, YES, url);\n                }\n            });\n            @synchronized (self.runningOperations) {\n                [self.runningOperations removeObject:operation];\n            }\n        }\n    }];\n\n    return operation;\n}\n\n- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url {\n    if (image && url) {\n        NSString *key = [self cacheKeyForURL:url];\n        [self.imageCache storeImage:image forKey:key toDisk:YES];\n    }\n}\n\n- (void)cancelAll {\n    @synchronized (self.runningOperations) {\n        NSArray *copiedOperations = [self.runningOperations copy];\n        [copiedOperations makeObjectsPerformSelector:@selector(cancel)];\n        [self.runningOperations removeObjectsInArray:copiedOperations];\n    }\n}\n\n- (BOOL)isRunning {\n    BOOL isRunning = NO;\n    @synchronized(self.runningOperations) {\n        isRunning = (self.runningOperations.count > 0);\n    }\n    return isRunning;\n}\n\n@end\n\n\n@implementation SDWebImageCombinedOperation\n\n- (void)setCancelBlock:(SDWebImageNoParamsBlock)cancelBlock {\n    // check if the operation is already cancelled, then we just call the cancelBlock\n    if (self.isCancelled) {\n        if (cancelBlock) {\n            cancelBlock();\n        }\n        _cancelBlock = nil; // don't forget to nil the cancelBlock, otherwise we will get crashes\n    } else {\n        _cancelBlock = [cancelBlock copy];\n    }\n}\n\n- (void)cancel {\n    self.cancelled = YES;\n    if (self.cacheOperation) {\n        [self.cacheOperation cancel];\n        self.cacheOperation = nil;\n    }\n    if (self.cancelBlock) {\n        self.cancelBlock();\n        \n        // TODO: this is a temporary fix to #809.\n        // Until we can figure the exact cause of the crash, going with the ivar instead of the setter\n//        self.cancelBlock = nil;\n        _cancelBlock = nil;\n    }\n}\n\n@end\n\n\n@implementation SDWebImageManager (Deprecated)\n\n// deprecated method, uses the non deprecated method\n// adapter for the completion block\n- (id <SDWebImageOperation>)downloadWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedWithFinishedBlock)completedBlock {\n    return [self downloadImageWithURL:url\n                              options:options\n                             progress:progressBlock\n                            completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n                                if (completedBlock) {\n                                    completedBlock(image, error, cacheType, finished);\n                                }\n                            }];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <Foundation/Foundation.h>\n\n@protocol SDWebImageOperation <NSObject>\n\n- (void)cancel;\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <Foundation/Foundation.h>\n#import \"SDWebImageManager.h\"\n\n@class SDWebImagePrefetcher;\n\n@protocol SDWebImagePrefetcherDelegate <NSObject>\n\n@optional\n\n/**\n * Called when an image was prefetched.\n *\n * @param imagePrefetcher The current image prefetcher\n * @param imageURL        The image url that was prefetched\n * @param finishedCount   The total number of images that were prefetched (successful or not)\n * @param totalCount      The total number of images that were to be prefetched\n */\n- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount;\n\n/**\n * Called when all images are prefetched.\n * @param imagePrefetcher The current image prefetcher\n * @param totalCount      The total number of images that were prefetched (whether successful or not)\n * @param skippedCount    The total number of images that were skipped\n */\n- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount;\n\n@end\n\ntypedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls);\ntypedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls);\n\n/**\n * Prefetch some URLs in the cache for future use. Images are downloaded in low priority.\n */\n@interface SDWebImagePrefetcher : NSObject\n\n/**\n *  The web image manager\n */\n@property (strong, nonatomic, readonly) SDWebImageManager *manager;\n\n/**\n * Maximum number of URLs to prefetch at the same time. Defaults to 3.\n */\n@property (nonatomic, assign) NSUInteger maxConcurrentDownloads;\n\n/**\n * SDWebImageOptions for prefetcher. Defaults to SDWebImageLowPriority.\n */\n@property (nonatomic, assign) SDWebImageOptions options;\n\n/**\n * Queue options for Prefetcher. Defaults to Main Queue.\n */\n@property (nonatomic, assign) dispatch_queue_t prefetcherQueue;\n\n@property (weak, nonatomic) id <SDWebImagePrefetcherDelegate> delegate;\n\n/**\n * Return the global image prefetcher instance.\n */\n+ (SDWebImagePrefetcher *)sharedImagePrefetcher;\n\n/**\n * Allows you to instantiate a prefetcher with any arbitrary image manager.\n */\n- (id)initWithImageManager:(SDWebImageManager *)manager;\n\n/**\n * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,\n * currently one image is downloaded at a time,\n * and skips images for failed downloads and proceed to the next image in the list\n *\n * @param urls list of URLs to prefetch\n */\n- (void)prefetchURLs:(NSArray *)urls;\n\n/**\n * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,\n * currently one image is downloaded at a time,\n * and skips images for failed downloads and proceed to the next image in the list\n *\n * @param urls            list of URLs to prefetch\n * @param progressBlock   block to be called when progress updates; \n *                        first parameter is the number of completed (successful or not) requests, \n *                        second parameter is the total number of images originally requested to be prefetched\n * @param completionBlock block to be called when prefetching is completed\n *                        first param is the number of completed (successful or not) requests,\n *                        second parameter is the number of skipped requests\n */\n- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock;\n\n/**\n * Remove and cancel queued list\n */\n- (void)cancelPrefetching;\n\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDWebImagePrefetcher.h\"\n\n@interface SDWebImagePrefetcher ()\n\n@property (strong, nonatomic) SDWebImageManager *manager;\n@property (strong, nonatomic) NSArray *prefetchURLs;\n@property (assign, nonatomic) NSUInteger requestedCount;\n@property (assign, nonatomic) NSUInteger skippedCount;\n@property (assign, nonatomic) NSUInteger finishedCount;\n@property (assign, nonatomic) NSTimeInterval startedTime;\n@property (copy, nonatomic) SDWebImagePrefetcherCompletionBlock completionBlock;\n@property (copy, nonatomic) SDWebImagePrefetcherProgressBlock progressBlock;\n\n@end\n\n@implementation SDWebImagePrefetcher\n\n+ (SDWebImagePrefetcher *)sharedImagePrefetcher {\n    static dispatch_once_t once;\n    static id instance;\n    dispatch_once(&once, ^{\n        instance = [self new];\n    });\n    return instance;\n}\n\n- (id)init {\n    return [self initWithImageManager:[SDWebImageManager new]];\n}\n\n- (id)initWithImageManager:(SDWebImageManager *)manager {\n    if ((self = [super init])) {\n        _manager = manager;\n        _options = SDWebImageLowPriority;\n        _prefetcherQueue = dispatch_get_main_queue();\n        self.maxConcurrentDownloads = 3;\n    }\n    return self;\n}\n\n- (void)setMaxConcurrentDownloads:(NSUInteger)maxConcurrentDownloads {\n    self.manager.imageDownloader.maxConcurrentDownloads = maxConcurrentDownloads;\n}\n\n- (NSUInteger)maxConcurrentDownloads {\n    return self.manager.imageDownloader.maxConcurrentDownloads;\n}\n\n- (void)startPrefetchingAtIndex:(NSUInteger)index {\n    if (index >= self.prefetchURLs.count) return;\n    self.requestedCount++;\n    [self.manager downloadImageWithURL:self.prefetchURLs[index] options:self.options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n        if (!finished) return;\n        self.finishedCount++;\n\n        if (image) {\n            if (self.progressBlock) {\n                self.progressBlock(self.finishedCount,[self.prefetchURLs count]);\n            }\n        }\n        else {\n            if (self.progressBlock) {\n                self.progressBlock(self.finishedCount,[self.prefetchURLs count]);\n            }\n            // Add last failed\n            self.skippedCount++;\n        }\n        if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didPrefetchURL:finishedCount:totalCount:)]) {\n            [self.delegate imagePrefetcher:self\n                            didPrefetchURL:self.prefetchURLs[index]\n                             finishedCount:self.finishedCount\n                                totalCount:self.prefetchURLs.count\n             ];\n        }\n        if (self.prefetchURLs.count > self.requestedCount) {\n            dispatch_async(self.prefetcherQueue, ^{\n                [self startPrefetchingAtIndex:self.requestedCount];\n            });\n        } else if (self.finishedCount == self.requestedCount) {\n            [self reportStatus];\n            if (self.completionBlock) {\n                self.completionBlock(self.finishedCount, self.skippedCount);\n                self.completionBlock = nil;\n            }\n            self.progressBlock = nil;\n        }\n    }];\n}\n\n- (void)reportStatus {\n    NSUInteger total = [self.prefetchURLs count];\n    if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didFinishWithTotalCount:skippedCount:)]) {\n        [self.delegate imagePrefetcher:self\n               didFinishWithTotalCount:(total - self.skippedCount)\n                          skippedCount:self.skippedCount\n         ];\n    }\n}\n\n- (void)prefetchURLs:(NSArray *)urls {\n    [self prefetchURLs:urls progress:nil completed:nil];\n}\n\n- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock {\n    [self cancelPrefetching]; // Prevent duplicate prefetch request\n    self.startedTime = CFAbsoluteTimeGetCurrent();\n    self.prefetchURLs = urls;\n    self.completionBlock = completionBlock;\n    self.progressBlock = progressBlock;\n\n    if (urls.count == 0) {\n        if (completionBlock) {\n            completionBlock(0,0);\n        }\n    } else {\n        // Starts prefetching from the very first image on the list with the max allowed concurrency\n        NSUInteger listCount = self.prefetchURLs.count;\n        for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) {\n            [self startPrefetchingAtIndex:i];\n        }\n    }\n}\n\n- (void)cancelPrefetching {\n    self.prefetchURLs = nil;\n    self.skippedCount = 0;\n    self.requestedCount = 0;\n    self.finishedCount = 0;\n    [self.manager cancelAll];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDWebImageCompat.h\"\n#import \"SDWebImageManager.h\"\n\n/**\n * Integrates SDWebImage async downloading and caching of remote images with UIButtonView.\n */\n@interface UIButton (WebCache)\n\n/**\n * Get the current image URL.\n */\n- (NSURL *)sd_currentImageURL;\n\n/**\n * Get the image URL for a control state.\n * \n * @param state Which state you want to know the URL for. The values are described in UIControlState.\n */\n- (NSURL *)sd_imageURLForState:(UIControlState)state;\n\n/**\n * Set the imageView `image` with an `url`.\n *\n * The download is asynchronous and cached.\n *\n * @param url   The url for the image.\n * @param state The state that uses the specified title. The values are described in UIControlState.\n */\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state;\n\n/**\n * Set the imageView `image` with an `url` and a placeholder.\n *\n * The download is asynchronous and cached.\n *\n * @param url         The url for the image.\n * @param state       The state that uses the specified title. The values are described in UIControlState.\n * @param placeholder The image to be set initially, until the image request finishes.\n * @see sd_setImageWithURL:placeholderImage:options:\n */\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder;\n\n/**\n * Set the imageView `image` with an `url`, placeholder and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url         The url for the image.\n * @param state       The state that uses the specified title. The values are described in UIControlState.\n * @param placeholder The image to be set initially, until the image request finishes.\n * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n */\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;\n\n/**\n * Set the imageView `image` with an `url`.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param state          The state that uses the specified title. The values are described in UIControlState.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the imageView `image` with an `url`, placeholder.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param state          The state that uses the specified title. The values are described in UIControlState.\n * @param placeholder    The image to be set initially, until the image request finishes.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the imageView `image` with an `url`, placeholder and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param state          The state that uses the specified title. The values are described in UIControlState.\n * @param placeholder    The image to be set initially, until the image request finishes.\n * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the backgroundImageView `image` with an `url`.\n *\n * The download is asynchronous and cached.\n *\n * @param url   The url for the image.\n * @param state The state that uses the specified title. The values are described in UIControlState.\n */\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state;\n\n/**\n * Set the backgroundImageView `image` with an `url` and a placeholder.\n *\n * The download is asynchronous and cached.\n *\n * @param url         The url for the image.\n * @param state       The state that uses the specified title. The values are described in UIControlState.\n * @param placeholder The image to be set initially, until the image request finishes.\n * @see sd_setImageWithURL:placeholderImage:options:\n */\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder;\n\n/**\n * Set the backgroundImageView `image` with an `url`, placeholder and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url         The url for the image.\n * @param state       The state that uses the specified title. The values are described in UIControlState.\n * @param placeholder The image to be set initially, until the image request finishes.\n * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n */\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;\n\n/**\n * Set the backgroundImageView `image` with an `url`.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param state          The state that uses the specified title. The values are described in UIControlState.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the backgroundImageView `image` with an `url`, placeholder.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param state          The state that uses the specified title. The values are described in UIControlState.\n * @param placeholder    The image to be set initially, until the image request finishes.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the backgroundImageView `image` with an `url`, placeholder and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param placeholder    The image to be set initially, until the image request finishes.\n * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Cancel the current image download\n */\n- (void)sd_cancelImageLoadForState:(UIControlState)state;\n\n/**\n * Cancel the current backgroundImage download\n */\n- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state;\n\n@end\n\n\n@interface UIButton (WebCacheDeprecated)\n\n- (NSURL *)currentImageURL __deprecated_msg(\"Use `sd_currentImageURL`\");\n- (NSURL *)imageURLForState:(UIControlState)state __deprecated_msg(\"Use `sd_imageURLForState:`\");\n\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:forState:`\");\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:`\");\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:`\");\n\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:forState:completed:`\");\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:completed:`\");\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:completed:`\");\n\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg(\"Method deprecated. Use `sd_setBackgroundImageWithURL:forState:`\");\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg(\"Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:`\");\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg(\"Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:`\");\n\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setBackgroundImageWithURL:forState:completed:`\");\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:completed:`\");\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:completed:`\");\n\n- (void)cancelCurrentImageLoad __deprecated_msg(\"Use `sd_cancelImageLoadForState:`\");\n- (void)cancelBackgroundImageLoadForState:(UIControlState)state __deprecated_msg(\"Use `sd_cancelBackgroundImageLoadForState:`\");\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"UIButton+WebCache.h\"\n#import \"objc/runtime.h\"\n#import \"UIView+WebCacheOperation.h\"\n\nstatic char imageURLStorageKey;\n\n@implementation UIButton (WebCache)\n\n- (NSURL *)sd_currentImageURL {\n    NSURL *url = self.imageURLStorage[@(self.state)];\n\n    if (!url) {\n        url = self.imageURLStorage[@(UIControlStateNormal)];\n    }\n\n    return url;\n}\n\n- (NSURL *)sd_imageURLForState:(UIControlState)state {\n    return self.imageURLStorage[@(state)];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state {\n    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {\n    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {\n    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {\n\n    [self setImage:placeholder forState:state];\n    [self sd_cancelImageLoadForState:state];\n    \n    if (!url) {\n        [self.imageURLStorage removeObjectForKey:@(state)];\n        \n        dispatch_main_async_safe(^{\n            if (completedBlock) {\n                NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @\"Trying to load a nil url\"}];\n                completedBlock(nil, error, SDImageCacheTypeNone, url);\n            }\n        });\n        \n        return;\n    }\n    \n    self.imageURLStorage[@(state)] = url;\n\n    __weak __typeof(self)wself = self;\n    id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n        if (!wself) return;\n        dispatch_main_sync_safe(^{\n            __strong UIButton *sself = wself;\n            if (!sself) return;\n            if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)\n            {\n                completedBlock(image, error, cacheType, url);\n                return;\n            }\n            else if (image) {\n                [sself setImage:image forState:state];\n            }\n            if (completedBlock && finished) {\n                completedBlock(image, error, cacheType, url);\n            }\n        });\n    }];\n    [self sd_setImageLoadOperation:operation forState:state];\n}\n\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];\n}\n\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];\n}\n\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];\n}\n\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock];\n}\n\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock];\n}\n\n- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_cancelBackgroundImageLoadForState:state];\n\n    [self setBackgroundImage:placeholder forState:state];\n\n    if (url) {\n        __weak __typeof(self)wself = self;\n        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n            if (!wself) return;\n            dispatch_main_sync_safe(^{\n                __strong UIButton *sself = wself;\n                if (!sself) return;\n                if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)\n                {\n                    completedBlock(image, error, cacheType, url);\n                    return;\n                }\n                else if (image) {\n                    [sself setBackgroundImage:image forState:state];\n                }\n                if (completedBlock && finished) {\n                    completedBlock(image, error, cacheType, url);\n                }\n            });\n        }];\n        [self sd_setBackgroundImageLoadOperation:operation forState:state];\n    } else {\n        dispatch_main_async_safe(^{\n            NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @\"Trying to load a nil url\"}];\n            if (completedBlock) {\n                completedBlock(nil, error, SDImageCacheTypeNone, url);\n            }\n        });\n    }\n}\n\n- (void)sd_setImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state {\n    [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@\"UIButtonImageOperation%@\", @(state)]];\n}\n\n- (void)sd_cancelImageLoadForState:(UIControlState)state {\n    [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@\"UIButtonImageOperation%@\", @(state)]];\n}\n\n- (void)sd_setBackgroundImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state {\n    [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@\"UIButtonBackgroundImageOperation%@\", @(state)]];\n}\n\n- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state {\n    [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@\"UIButtonBackgroundImageOperation%@\", @(state)]];\n}\n\n- (NSMutableDictionary *)imageURLStorage {\n    NSMutableDictionary *storage = objc_getAssociatedObject(self, &imageURLStorageKey);\n    if (!storage)\n    {\n        storage = [NSMutableDictionary dictionary];\n        objc_setAssociatedObject(self, &imageURLStorageKey, storage, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n    }\n\n    return storage;\n}\n\n@end\n\n\n@implementation UIButton (WebCacheDeprecated)\n\n- (NSURL *)currentImageURL {\n    return [self sd_currentImageURL];\n}\n\n- (NSURL *)imageURLForState:(UIControlState)state {\n    return [self sd_imageURLForState:state];\n}\n\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state {\n    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];\n}\n\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {\n    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];\n}\n\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {\n    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];\n}\n\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];\n}\n\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];\n}\n\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];\n}\n\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)cancelCurrentImageLoad {\n    // in a backwards compatible manner, cancel for current state\n    [self sd_cancelImageLoadForState:self.state];\n}\n\n- (void)cancelBackgroundImageLoadForState:(UIControlState)state {\n    [self sd_cancelBackgroundImageLoadForState:state];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIImage+GIF.h",
    "content": "//\n//  UIImage+GIF.h\n//  LBGIFImage\n//\n//  Created by Laurin Brandner on 06.01.12.\n//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface UIImage (GIF)\n\n+ (UIImage *)sd_animatedGIFNamed:(NSString *)name;\n\n+ (UIImage *)sd_animatedGIFWithData:(NSData *)data;\n\n- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIImage+GIF.m",
    "content": "//\n//  UIImage+GIF.m\n//  LBGIFImage\n//\n//  Created by Laurin Brandner on 06.01.12.\n//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.\n//\n\n#import \"UIImage+GIF.h\"\n#import <ImageIO/ImageIO.h>\n\n@implementation UIImage (GIF)\n\n+ (UIImage *)sd_animatedGIFWithData:(NSData *)data {\n    if (!data) {\n        return nil;\n    }\n\n    CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);\n\n    size_t count = CGImageSourceGetCount(source);\n\n    UIImage *animatedImage;\n\n    if (count <= 1) {\n        animatedImage = [[UIImage alloc] initWithData:data];\n    }\n    else {\n        NSMutableArray *images = [NSMutableArray array];\n\n        NSTimeInterval duration = 0.0f;\n\n        for (size_t i = 0; i < count; i++) {\n            CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);\n\n            duration += [self sd_frameDurationAtIndex:i source:source];\n\n            [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];\n\n            CGImageRelease(image);\n        }\n\n        if (!duration) {\n            duration = (1.0f / 10.0f) * count;\n        }\n\n        animatedImage = [UIImage animatedImageWithImages:images duration:duration];\n    }\n\n    CFRelease(source);\n\n    return animatedImage;\n}\n\n+ (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source {\n    float frameDuration = 0.1f;\n    CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil);\n    NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties;\n    NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary];\n\n    NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime];\n    if (delayTimeUnclampedProp) {\n        frameDuration = [delayTimeUnclampedProp floatValue];\n    }\n    else {\n\n        NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime];\n        if (delayTimeProp) {\n            frameDuration = [delayTimeProp floatValue];\n        }\n    }\n\n    // Many annoying ads specify a 0 duration to make an image flash as quickly as possible.\n    // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify\n    // a duration of <= 10 ms. See <rdar://problem/7689300> and <http://webkit.org/b/36082>\n    // for more information.\n\n    if (frameDuration < 0.011f) {\n        frameDuration = 0.100f;\n    }\n\n    CFRelease(cfFrameProperties);\n    return frameDuration;\n}\n\n+ (UIImage *)sd_animatedGIFNamed:(NSString *)name {\n    CGFloat scale = [UIScreen mainScreen].scale;\n\n    if (scale > 1.0f) {\n        NSString *retinaPath = [[NSBundle mainBundle] pathForResource:[name stringByAppendingString:@\"@2x\"] ofType:@\"gif\"];\n\n        NSData *data = [NSData dataWithContentsOfFile:retinaPath];\n\n        if (data) {\n            return [UIImage sd_animatedGIFWithData:data];\n        }\n\n        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@\"gif\"];\n\n        data = [NSData dataWithContentsOfFile:path];\n\n        if (data) {\n            return [UIImage sd_animatedGIFWithData:data];\n        }\n\n        return [UIImage imageNamed:name];\n    }\n    else {\n        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@\"gif\"];\n\n        NSData *data = [NSData dataWithContentsOfFile:path];\n\n        if (data) {\n            return [UIImage sd_animatedGIFWithData:data];\n        }\n\n        return [UIImage imageNamed:name];\n    }\n}\n\n- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size {\n    if (CGSizeEqualToSize(self.size, size) || CGSizeEqualToSize(size, CGSizeZero)) {\n        return self;\n    }\n\n    CGSize scaledSize = size;\n    CGPoint thumbnailPoint = CGPointZero;\n\n    CGFloat widthFactor = size.width / self.size.width;\n    CGFloat heightFactor = size.height / self.size.height;\n    CGFloat scaleFactor = (widthFactor > heightFactor) ? widthFactor : heightFactor;\n    scaledSize.width = self.size.width * scaleFactor;\n    scaledSize.height = self.size.height * scaleFactor;\n\n    if (widthFactor > heightFactor) {\n        thumbnailPoint.y = (size.height - scaledSize.height) * 0.5;\n    }\n    else if (widthFactor < heightFactor) {\n        thumbnailPoint.x = (size.width - scaledSize.width) * 0.5;\n    }\n\n    NSMutableArray *scaledImages = [NSMutableArray array];\n\n    for (UIImage *image in self.images) {\n        UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);\n        \n        [image drawInRect:CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledSize.width, scaledSize.height)];\n        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();\n\n        [scaledImages addObject:newImage];\n\n        UIGraphicsEndImageContext();\n    }\n \n    return [UIImage animatedImageWithImages:scaledImages duration:self.duration];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h",
    "content": "//\n//  UIImage+MultiFormat.h\n//  SDWebImage\n//\n//  Created by Olivier Poitrey on 07/06/13.\n//  Copyright (c) 2013 Dailymotion. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface UIImage (MultiFormat)\n\n+ (UIImage *)sd_imageWithData:(NSData *)data;\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m",
    "content": "//\n//  UIImage+MultiFormat.m\n//  SDWebImage\n//\n//  Created by Olivier Poitrey on 07/06/13.\n//  Copyright (c) 2013 Dailymotion. All rights reserved.\n//\n\n#import \"UIImage+MultiFormat.h\"\n#import \"UIImage+GIF.h\"\n#import \"NSData+ImageContentType.h\"\n#import <ImageIO/ImageIO.h>\n\n#ifdef SD_WEBP\n#import \"UIImage+WebP.h\"\n#endif\n\n@implementation UIImage (MultiFormat)\n\n+ (UIImage *)sd_imageWithData:(NSData *)data {\n    if (!data) {\n        return nil;\n    }\n    \n    UIImage *image;\n    NSString *imageContentType = [NSData sd_contentTypeForImageData:data];\n    if ([imageContentType isEqualToString:@\"image/gif\"]) {\n        image = [UIImage sd_animatedGIFWithData:data];\n    }\n#ifdef SD_WEBP\n    else if ([imageContentType isEqualToString:@\"image/webp\"])\n    {\n        image = [UIImage sd_imageWithWebPData:data];\n    }\n#endif\n    else {\n        image = [[UIImage alloc] initWithData:data];\n        UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data];\n        if (orientation != UIImageOrientationUp) {\n            image = [UIImage imageWithCGImage:image.CGImage\n                                        scale:image.scale\n                                  orientation:orientation];\n        }\n    }\n\n\n    return image;\n}\n\n\n+(UIImageOrientation)sd_imageOrientationFromImageData:(NSData *)imageData {\n    UIImageOrientation result = UIImageOrientationUp;\n    CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);\n    if (imageSource) {\n        CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);\n        if (properties) {\n            CFTypeRef val;\n            int exifOrientation;\n            val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation);\n            if (val) {\n                CFNumberGetValue(val, kCFNumberIntType, &exifOrientation);\n                result = [self sd_exifOrientationToiOSOrientation:exifOrientation];\n            } // else - if it's not set it remains at up\n            CFRelease((CFTypeRef) properties);\n        } else {\n            //NSLog(@\"NO PROPERTIES, FAIL\");\n        }\n        CFRelease(imageSource);\n    }\n    return result;\n}\n\n#pragma mark EXIF orientation tag converter\n// Convert an EXIF image orientation to an iOS one.\n// reference see here: http://sylvana.net/jpegcrop/exif_orientation.html\n+ (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation {\n    UIImageOrientation orientation = UIImageOrientationUp;\n    switch (exifOrientation) {\n        case 1:\n            orientation = UIImageOrientationUp;\n            break;\n\n        case 3:\n            orientation = UIImageOrientationDown;\n            break;\n\n        case 8:\n            orientation = UIImageOrientationLeft;\n            break;\n\n        case 6:\n            orientation = UIImageOrientationRight;\n            break;\n\n        case 2:\n            orientation = UIImageOrientationUpMirrored;\n            break;\n\n        case 4:\n            orientation = UIImageOrientationDownMirrored;\n            break;\n\n        case 5:\n            orientation = UIImageOrientationLeftMirrored;\n            break;\n\n        case 7:\n            orientation = UIImageOrientationRightMirrored;\n            break;\n        default:\n            break;\n    }\n    return orientation;\n}\n\n\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <UIKit/UIKit.h>\n#import \"SDWebImageCompat.h\"\n#import \"SDWebImageManager.h\"\n\n/**\n * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state.\n */\n@interface UIImageView (HighlightedWebCache)\n\n/**\n * Set the imageView `highlightedImage` with an `url`.\n *\n * The download is asynchronous and cached.\n *\n * @param url The url for the image.\n */\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url;\n\n/**\n * Set the imageView `highlightedImage` with an `url` and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url     The url for the image.\n * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n */\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options;\n\n/**\n * Set the imageView `highlightedImage` with an `url`.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the imageView `highlightedImage` with an `url` and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the imageView `highlightedImage` with an `url` and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n * @param progressBlock  A block called while image is downloading\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Cancel the current download\n */\n- (void)sd_cancelCurrentHighlightedImageLoad;\n\n@end\n\n\n@interface UIImageView (HighlightedWebCacheDeprecated)\n\n- (void)setHighlightedImageWithURL:(NSURL *)url __deprecated_msg(\"Method deprecated. Use `sd_setHighlightedImageWithURL:`\");\n- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options __deprecated_msg(\"Method deprecated. Use `sd_setHighlightedImageWithURL:options:`\");\n- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setHighlightedImageWithURL:completed:`\");\n- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setHighlightedImageWithURL:options:completed:`\");\n- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setHighlightedImageWithURL:options:progress:completed:`\");\n\n- (void)cancelCurrentHighlightedImageLoad __deprecated_msg(\"Use `sd_cancelCurrentHighlightedImageLoad`\");\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"UIImageView+HighlightedWebCache.h\"\n#import \"UIView+WebCacheOperation.h\"\n\n#define UIImageViewHighlightedWebCacheOperationKey @\"highlightedImage\"\n\n@implementation UIImageView (HighlightedWebCache)\n\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url {\n    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil];\n}\n\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options {\n    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil];\n}\n\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock];\n}\n\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock];\n}\n\n- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_cancelCurrentHighlightedImageLoad];\n\n    if (url) {\n        __weak __typeof(self)wself = self;\n        id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n            if (!wself) return;\n            dispatch_main_sync_safe (^\n                                     {\n                                         if (!wself) return;\n                                         if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)\n                                         {\n                                             completedBlock(image, error, cacheType, url);\n                                             return;\n                                         }\n                                         else if (image) {\n                                             wself.highlightedImage = image;\n                                             [wself setNeedsLayout];\n                                         }\n                                         if (completedBlock && finished) {\n                                             completedBlock(image, error, cacheType, url);\n                                         }\n                                     });\n        }];\n        [self sd_setImageLoadOperation:operation forKey:UIImageViewHighlightedWebCacheOperationKey];\n    } else {\n        dispatch_main_async_safe(^{\n            NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @\"Trying to load a nil url\"}];\n            if (completedBlock) {\n                completedBlock(nil, error, SDImageCacheTypeNone, url);\n            }\n        });\n    }\n}\n\n- (void)sd_cancelCurrentHighlightedImageLoad {\n    [self sd_cancelImageLoadOperationWithKey:UIImageViewHighlightedWebCacheOperationKey];\n}\n\n@end\n\n\n@implementation UIImageView (HighlightedWebCacheDeprecated)\n\n- (void)setHighlightedImageWithURL:(NSURL *)url {\n    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil];\n}\n\n- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options {\n    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil];\n}\n\n- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setHighlightedImageWithURL:url options:0 progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)cancelCurrentHighlightedImageLoad {\n    [self sd_cancelCurrentHighlightedImageLoad];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"SDWebImageCompat.h\"\n#import \"SDWebImageManager.h\"\n\n/**\n * Integrates SDWebImage async downloading and caching of remote images with UIImageView.\n *\n * Usage with a UITableViewCell sub-class:\n *\n * @code\n\n#import <SDWebImage/UIImageView+WebCache.h>\n\n...\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    static NSString *MyIdentifier = @\"MyIdentifier\";\n \n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];\n \n    if (cell == nil) {\n        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]\n                 autorelease];\n    }\n \n    // Here we use the provided sd_setImageWithURL: method to load the web image\n    // Ensure you use a placeholder image otherwise cells will be initialized with no image\n    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@\"http://example.com/image.jpg\"]\n                      placeholderImage:[UIImage imageNamed:@\"placeholder\"]];\n \n    cell.textLabel.text = @\"My Text\";\n    return cell;\n}\n\n * @endcode\n */\n@interface UIImageView (WebCache)\n\n/**\n * Get the current image URL.\n *\n * Note that because of the limitations of categories this property can get out of sync\n * if you use sd_setImage: directly.\n */\n- (NSURL *)sd_imageURL;\n\n/**\n * Set the imageView `image` with an `url`.\n *\n * The download is asynchronous and cached.\n *\n * @param url The url for the image.\n */\n- (void)sd_setImageWithURL:(NSURL *)url;\n\n/**\n * Set the imageView `image` with an `url` and a placeholder.\n *\n * The download is asynchronous and cached.\n *\n * @param url         The url for the image.\n * @param placeholder The image to be set initially, until the image request finishes.\n * @see sd_setImageWithURL:placeholderImage:options:\n */\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;\n\n/**\n * Set the imageView `image` with an `url`, placeholder and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url         The url for the image.\n * @param placeholder The image to be set initially, until the image request finishes.\n * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n */\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;\n\n/**\n * Set the imageView `image` with an `url`.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the imageView `image` with an `url`, placeholder.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param placeholder    The image to be set initially, until the image request finishes.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the imageView `image` with an `url`, placeholder and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param placeholder    The image to be set initially, until the image request finishes.\n * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the imageView `image` with an `url`, placeholder and custom options.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param placeholder    The image to be set initially, until the image request finishes.\n * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n * @param progressBlock  A block called while image is downloading\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Set the imageView `image` with an `url` and optionally a placeholder image.\n *\n * The download is asynchronous and cached.\n *\n * @param url            The url for the image.\n * @param placeholder    The image to be set initially, until the image request finishes.\n * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.\n * @param progressBlock  A block called while image is downloading\n * @param completedBlock A block called when operation has been completed. This block has no return value\n *                       and takes the requested UIImage as first parameter. In case of error the image parameter\n *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean\n *                       indicating if the image was retrieved from the local cache or from the network.\n *                       The fourth parameter is the original image url.\n */\n- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;\n\n/**\n * Download an array of images and starts them in an animation loop\n *\n * @param arrayOfURLs An array of NSURL\n */\n- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs;\n\n/**\n * Cancel the current download\n */\n- (void)sd_cancelCurrentImageLoad;\n\n- (void)sd_cancelCurrentAnimationImagesLoad;\n\n/**\n *  Show activity UIActivityIndicatorView\n */\n- (void)setShowActivityIndicatorView:(BOOL)show;\n\n/**\n *  set desired UIActivityIndicatorViewStyle\n *\n *  @param style The style of the UIActivityIndicatorView\n */\n- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style;\n\n@end\n\n\n@interface UIImageView (WebCacheDeprecated)\n\n- (NSURL *)imageURL __deprecated_msg(\"Use `sd_imageURL`\");\n\n- (void)setImageWithURL:(NSURL *)url __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:`\");\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:placeholderImage:`\");\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:placeholderImage:options`\");\n\n- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:completed:`\");\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:placeholderImage:completed:`\");\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:completed:`\");\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg(\"Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:progress:completed:`\");\n\n- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs __deprecated_msg(\"Use `sd_setAnimationImagesWithURLs:`\");\n\n- (void)cancelCurrentArrayLoad __deprecated_msg(\"Use `sd_cancelCurrentAnimationImagesLoad`\");\n\n- (void)cancelCurrentImageLoad __deprecated_msg(\"Use `sd_cancelCurrentImageLoad`\");\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"UIImageView+WebCache.h\"\n#import \"objc/runtime.h\"\n#import \"UIView+WebCacheOperation.h\"\n\nstatic char imageURLKey;\nstatic char TAG_ACTIVITY_INDICATOR;\nstatic char TAG_ACTIVITY_STYLE;\nstatic char TAG_ACTIVITY_SHOW;\n\n@implementation UIImageView (WebCache)\n\n- (void)sd_setImageWithURL:(NSURL *)url {\n    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];\n}\n\n- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {\n    [self sd_cancelCurrentImageLoad];\n    objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\n    if (!(options & SDWebImageDelayPlaceholder)) {\n        dispatch_main_async_safe(^{\n            self.image = placeholder;\n        });\n    }\n    \n    if (url) {\n\n        // check if activityView is enabled or not\n        if ([self showActivityIndicatorView]) {\n            [self addActivityIndicator];\n        }\n\n        __weak __typeof(self)wself = self;\n        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n            [wself removeActivityIndicator];\n            if (!wself) return;\n            dispatch_main_sync_safe(^{\n                if (!wself) return;\n                if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)\n                {\n                    completedBlock(image, error, cacheType, url);\n                    return;\n                }\n                else if (image) {\n                    wself.image = image;\n                    [wself setNeedsLayout];\n                } else {\n                    if ((options & SDWebImageDelayPlaceholder)) {\n                        wself.image = placeholder;\n                        [wself setNeedsLayout];\n                    }\n                }\n                if (completedBlock && finished) {\n                    completedBlock(image, error, cacheType, url);\n                }\n            });\n        }];\n        [self sd_setImageLoadOperation:operation forKey:@\"UIImageViewImageLoad\"];\n    } else {\n        dispatch_main_async_safe(^{\n            [self removeActivityIndicator];\n            if (completedBlock) {\n                NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @\"Trying to load a nil url\"}];\n                completedBlock(nil, error, SDImageCacheTypeNone, url);\n            }\n        });\n    }\n}\n\n- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {\n    NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:url];\n    UIImage *lastPreviousCachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key];\n    \n    [self sd_setImageWithURL:url placeholderImage:lastPreviousCachedImage ?: placeholder options:options progress:progressBlock completed:completedBlock];    \n}\n\n- (NSURL *)sd_imageURL {\n    return objc_getAssociatedObject(self, &imageURLKey);\n}\n\n- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs {\n    [self sd_cancelCurrentAnimationImagesLoad];\n    __weak __typeof(self)wself = self;\n\n    NSMutableArray *operationsArray = [[NSMutableArray alloc] init];\n\n    for (NSURL *logoImageURL in arrayOfURLs) {\n        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:logoImageURL options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n            if (!wself) return;\n            dispatch_main_sync_safe(^{\n                __strong UIImageView *sself = wself;\n                [sself stopAnimating];\n                if (sself && image) {\n                    NSMutableArray *currentImages = [[sself animationImages] mutableCopy];\n                    if (!currentImages) {\n                        currentImages = [[NSMutableArray alloc] init];\n                    }\n                    [currentImages addObject:image];\n\n                    sself.animationImages = currentImages;\n                    [sself setNeedsLayout];\n                }\n                [sself startAnimating];\n            });\n        }];\n        [operationsArray addObject:operation];\n    }\n\n    [self sd_setImageLoadOperation:[NSArray arrayWithArray:operationsArray] forKey:@\"UIImageViewAnimationImages\"];\n}\n\n- (void)sd_cancelCurrentImageLoad {\n    [self sd_cancelImageLoadOperationWithKey:@\"UIImageViewImageLoad\"];\n}\n\n- (void)sd_cancelCurrentAnimationImagesLoad {\n    [self sd_cancelImageLoadOperationWithKey:@\"UIImageViewAnimationImages\"];\n}\n\n\n#pragma mark -\n- (UIActivityIndicatorView *)activityIndicator {\n    return (UIActivityIndicatorView *)objc_getAssociatedObject(self, &TAG_ACTIVITY_INDICATOR);\n}\n\n- (void)setActivityIndicator:(UIActivityIndicatorView *)activityIndicator {\n    objc_setAssociatedObject(self, &TAG_ACTIVITY_INDICATOR, activityIndicator, OBJC_ASSOCIATION_RETAIN);\n}\n\n- (void)setShowActivityIndicatorView:(BOOL)show{\n    objc_setAssociatedObject(self, &TAG_ACTIVITY_SHOW, [NSNumber numberWithBool:show], OBJC_ASSOCIATION_RETAIN);\n}\n\n- (BOOL)showActivityIndicatorView{\n    return [objc_getAssociatedObject(self, &TAG_ACTIVITY_SHOW) boolValue];\n}\n\n- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style{\n    objc_setAssociatedObject(self, &TAG_ACTIVITY_STYLE, [NSNumber numberWithInt:style], OBJC_ASSOCIATION_RETAIN);\n}\n\n- (int)getIndicatorStyle{\n    return [objc_getAssociatedObject(self, &TAG_ACTIVITY_STYLE) intValue];\n}\n\n- (void)addActivityIndicator {\n    if (!self.activityIndicator) {\n        self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:[self getIndicatorStyle]];\n        self.activityIndicator.translatesAutoresizingMaskIntoConstraints = NO;\n\n        dispatch_main_async_safe(^{\n            [self addSubview:self.activityIndicator];\n\n            [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator\n                                                             attribute:NSLayoutAttributeCenterX\n                                                             relatedBy:NSLayoutRelationEqual\n                                                                toItem:self\n                                                             attribute:NSLayoutAttributeCenterX\n                                                            multiplier:1.0\n                                                              constant:0.0]];\n            [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator\n                                                             attribute:NSLayoutAttributeCenterY\n                                                             relatedBy:NSLayoutRelationEqual\n                                                                toItem:self\n                                                             attribute:NSLayoutAttributeCenterY\n                                                            multiplier:1.0\n                                                              constant:0.0]];\n        });\n    }\n\n    dispatch_main_async_safe(^{\n        [self.activityIndicator startAnimating];\n    });\n\n}\n\n- (void)removeActivityIndicator {\n    if (self.activityIndicator) {\n        [self.activityIndicator removeFromSuperview];\n        self.activityIndicator = nil;\n    }\n}\n\n@end\n\n\n@implementation UIImageView (WebCacheDeprecated)\n\n- (NSURL *)imageURL {\n    return [self sd_imageURL];\n}\n\n- (void)setImageWithURL:(NSURL *)url {\n    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];\n}\n\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];\n}\n\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];\n}\n\n- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock {\n    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {\n        if (completedBlock) {\n            completedBlock(image, error, cacheType);\n        }\n    }];\n}\n\n- (void)cancelCurrentArrayLoad {\n    [self sd_cancelCurrentAnimationImagesLoad];\n}\n\n- (void)cancelCurrentImageLoad {\n    [self sd_cancelCurrentImageLoad];\n}\n\n- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs {\n    [self sd_setAnimationImagesWithURLs:arrayOfURLs];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import <UIKit/UIKit.h>\n#import \"SDWebImageManager.h\"\n\n@interface UIView (WebCacheOperation)\n\n/**\n *  Set the image load operation (storage in a UIView based dictionary)\n *\n *  @param operation the operation\n *  @param key       key for storing the operation\n */\n- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key;\n\n/**\n *  Cancel all operations for the current UIView and key\n *\n *  @param key key for identifying the operations\n */\n- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key;\n\n/**\n *  Just remove the operations corresponding to the current UIView and key without cancelling them\n *\n *  @param key key for identifying the operations\n */\n- (void)sd_removeImageLoadOperationWithKey:(NSString *)key;\n\n@end\n"
  },
  {
    "path": "Example/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m",
    "content": "/*\n * This file is part of the SDWebImage package.\n * (c) Olivier Poitrey <rs@dailymotion.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#import \"UIView+WebCacheOperation.h\"\n#import \"objc/runtime.h\"\n\nstatic char loadOperationKey;\n\n@implementation UIView (WebCacheOperation)\n\n- (NSMutableDictionary *)operationDictionary {\n    NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey);\n    if (operations) {\n        return operations;\n    }\n    operations = [NSMutableDictionary dictionary];\n    objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n    return operations;\n}\n\n- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key {\n    [self sd_cancelImageLoadOperationWithKey:key];\n    NSMutableDictionary *operationDictionary = [self operationDictionary];\n    [operationDictionary setObject:operation forKey:key];\n}\n\n- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key {\n    // Cancel in progress downloader from queue\n    NSMutableDictionary *operationDictionary = [self operationDictionary];\n    id operations = [operationDictionary objectForKey:key];\n    if (operations) {\n        if ([operations isKindOfClass:[NSArray class]]) {\n            for (id <SDWebImageOperation> operation in operations) {\n                if (operation) {\n                    [operation cancel];\n                }\n            }\n        } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){\n            [(id<SDWebImageOperation>) operations cancel];\n        }\n        [operationDictionary removeObjectForKey:key];\n    }\n}\n\n- (void)sd_removeImageLoadOperationWithKey:(NSString *)key {\n    NSMutableDictionary *operationDictionary = [self operationDictionary];\n    [operationDictionary removeObjectForKey:key];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/LICENSE",
    "content": "Copyright (c) 2012-2014 Specta Team.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n"
  },
  {
    "path": "Example/Pods/Specta/README.md",
    "content": "# Specta\n\nA light-weight TDD / BDD framework for Objective-C.\n\n### Status\n[![Build Status](https://travis-ci.org/specta/specta.png)](https://travis-ci.org/specta/specta)\n[![Coverage Status](https://coveralls.io/repos/specta/specta/badge.svg)](https://coveralls.io/r/specta/specta)\n\n## FEATURES\n\n* An Objective-C RSpec-like BDD DSL\n* Quick and easy set up\n* Built on top of XCTest\n* Excellent Xcode integration\n\n## SCREENSHOT\n\n![Specta Screenshot](https://raw.githubusercontent.com/specta/specta/master/misc/specta_screenshot.jpg)\n\n## SETUP\n\nUse [CocoaPods](http://github.com/CocoaPods/CocoaPods), [Carthage](https://github.com/carthage/carthage) or [Set up manually](#setting-up-manually)\n\n### CocoaPods\n\n1. Add Specta to your project's `Podfile`:\n\n\t```ruby\n\ttarget :MyApp do\n\t  # your app dependencies\n\tend\n\n\ttarget :MyAppTests do\n\t  pod 'Specta', '~> 0.5'\n\t  # pod 'Expecta',     '~> 0.3'   # expecta matchers\n\t  # pod 'OCMock',      '~> 2.2'   # OCMock\n\t  # pod 'OCHamcrest',  '~> 3.0'   # hamcrest matchers\n\t  # pod 'OCMockito',   '~> 1.0'   # OCMock\n\t  # pod 'LRMocky',     '~> 0.9'   # LRMocky\n\tend\n\t```\n\n2. Run `pod update` or `pod install` in your project directory.\n\n### Carthage\n\n1. Add Specta to your project's `Cartfile.private`\n\n    ```\n    github \"specta/specta\" ~> 0.5\n    ```\n\n2. Run `carthage update` in your project directory\n3. Drag the appropriate `Specta.framework` for your platform (located in Carthage/Build/) into your application’s Xcode project, and add it to your test target(s).\n4. If you are building for iOS, a new `Run Script Phase` must be added to copy the framework. The instructions can be found on [Carthage's getting started instructions](https://github.com/carthage/carthage#getting-started)\n\n### SETTING UP MANUALLY\n\n1. Clone from Github.\n2. Run `rake` in project root to build.\n3. Add a \"Cocoa/Cocoa Touch Unit Testing Bundle\" target if you don't already have one.\n4. Copy and add all header files in `Products` folder to the Test target in your Xcode project.\n5. For **OS X projects**, copy and add `Specta.framework` in `Products/osx` folder to the test target in your Xcode project.\n   For **iOS projects**, copy and add `Specta.framework` in `Products/ios` folder to the test target in your Xcode project.\n   You can alternatively use `libSpecta.a`, if you prefer to add it as a static library for your project. (iOS 7 and below require this)\n6. Add `-ObjC` and `-all_load` to the \"Other Linker Flags\" build setting for the test target in your Xcode project.\n7. If you encounter linking issues with `_llvm_*` symbols, ensure your target's \"Generate Test Coverage Files\" and \"Instrument Program Flow\" build settings are set to `Yes`.\n\n## EXAMPLE\n\n```objective-c\n#import <Specta/Specta.h> // #import \"Specta.h\" if you're using libSpecta.a\n\nSharedExamplesBegin(MySharedExamples)\n// Global shared examples are shared across all spec files.\n\nsharedExamplesFor(@\"foo\", ^(NSDictionary *data) {\n    __block id bar = nil;\n    beforeEach(^{\n        bar = data[@\"bar\"];\n    });\n    it(@\"should not be nil\", ^{\n        XCTAssertNotNil(bar);\n    });\n});\n\nSharedExamplesEnd\n\nSpecBegin(Thing)\n\ndescribe(@\"Thing\", ^{\n  sharedExamplesFor(@\"another shared behavior\", ^(NSDictionary *data) {\n    // Locally defined shared examples can override global shared examples within its scope.\n  });\n\n  beforeAll(^{\n    // This is run once and only once before all of the examples\n    // in this group and before any beforeEach blocks.\n  });\n\n  beforeEach(^{\n    // This is run before each example.\n  });\n\n  it(@\"should do stuff\", ^{\n    // This is an example block. Place your assertions here.\n  });\n\n  it(@\"should do some stuff asynchronously\", ^{\n    waitUntil(^(DoneCallback done) {\n      // Async example blocks need to invoke done() callback.\n      done();\n    });\n  });\n\n  itShouldBehaveLike(@\"a shared behavior\", @{@\"key\" : @\"obj\"});\n\n  itShouldBehaveLike(@\"another shared behavior\", ^{\n    // Use a block that returns a dictionary if you need the context to be evaluated lazily,\n    // e.g. to use an object prepared in a beforeEach block.\n    return @{@\"key\" : @\"obj\"};\n  });\n\n  describe(@\"Nested examples\", ^{\n    it(@\"should do even more stuff\", ^{\n      // ...\n    });\n  });\n\n  pending(@\"pending example\");\n\n  pending(@\"another pending example\", ^{\n    // ...\n  });\n\n  afterEach(^{\n    // This is run after each example.\n  });\n\n  afterAll(^{\n    // This is run once and only once after all of the examples\n    // in this group and after any afterEach blocks.\n  });\n});\n\nSpecEnd\n```\n\n* `beforeEach` and `afterEach` are also aliased as `before` and `after` respectively.\n* `describe` is also aliased as `context`.\n* `it` is also aliased as `example` and `specify`.\n* `itShouldBehaveLike` is also aliased as `itBehavesLike`.\n* Use `pending` or prepend `x` to `describe`, `context`, `example`, `it`, and `specify` to mark examples or groups as pending.\n* Use `^(DoneCallback done)` as shown in the example above to make examples wait for completion. `done()` callback needs to be invoked to let Specta know that your test is complete. The default timeout is 10.0 seconds but this can be changed by calling the function `setAsyncSpecTimeout(NSTimeInterval timeout)`.\n* `(before|after)(Each/All)` also accept `^(DoneCallback done)`s.\n* Do `#define SPT_CEDAR_SYNTAX` before importing Specta if you prefer to write `SPEC_BEGIN` and `SPEC_END` instead of `SpecBegin` and `SpecEnd`.\n* Prepend `f` to your `describe`, `context`, `example`, `it`, and `specify` to set focus on examples or groups. When specs are focused, all unfocused specs are skipped.\n* To use original XCTest reporter, set an environment variable named `SPECTA_REPORTER_CLASS` to `SPTXCTestReporter` in your test scheme.\n* Set an environment variable `SPECTA_NO_SHUFFLE` with value `1` to disable test shuffling.\n* Set an environment variable `SPECTA_SEED` to specify the random seed for test shuffling.\n\nStandard XCTest matchers such as `XCTAssertEqualObjects` and `XCTAssertNil` work, but you probably want to add a nicer matcher framework - [Expecta](http://github.com/specta/expecta/) to your setup. Or if you really prefer, [OCHamcrest](https://github.com/jonreid/OCHamcrest) works fine too. Also, add a mocking framework: [OCMock](http://ocmock.org/).\n\n## RUNNING TESTS IN COMMAND LINE\n\n* Run `rake test` in the cloned folder.\n\n## CONTRIBUTION GUIDELINES\n\n* Please use only spaces and indent 2 spaces at a time.\n* Please prefix instance variable names with a single underscore (`_`).\n* Please prefix custom classes and functions defined in the global scope with `SPT`.\n\n## LICENSE\n\nCopyright (c) 2012-2015 [Specta Team](https://github.com/specta?tab=members). This software is licensed under the [MIT License](http://github.com/specta/specta/raw/master/LICENSE).\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTCallSite.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface SPTCallSite : NSObject\n\n@property (nonatomic, copy, readonly) NSString *file;\n@property (nonatomic, readonly) NSUInteger line;\n\n+ (instancetype)callSiteWithFile:(NSString *)file line:(NSUInteger)line;\n\n- (instancetype)initWithFile:(NSString *)file line:(NSUInteger)line;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTCallSite.m",
    "content": "#import \"SPTCallSite.h\"\n\n@implementation SPTCallSite\n\n+ (instancetype)callSiteWithFile:(NSString *)file line:(NSUInteger)line {\n  return [[self alloc] initWithFile:file line:line];\n}\n\n- (instancetype)initWithFile:(NSString *)file line:(NSUInteger)line {\n  self = [super init];\n  if (self) {\n    _file = file;\n    _line = line;\n  }\n  return self;\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTCompiledExample.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"SpectaTypes.h\"\n\n@interface SPTCompiledExample : NSObject\n\n@property (nonatomic, copy) NSString *name;\n@property (nonatomic, copy) NSString *testCaseName;\n@property (nonatomic, copy) SPTSpecBlock block;\n\n@property (nonatomic) BOOL pending;\n@property (nonatomic, getter=isFocused) BOOL focused;\n\n@property (nonatomic) SEL testMethodSelector;\n\n- (id)initWithName:(NSString *)name testCaseName:(NSString *)testCaseName block:(SPTSpecBlock)block pending:(BOOL)pending focused:(BOOL)focused;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTCompiledExample.m",
    "content": "#import \"SPTCompiledExample.h\"\n\n@implementation SPTCompiledExample\n\n- (id)initWithName:(NSString *)name testCaseName:(NSString *)testCaseName block:(SPTSpecBlock)block pending:(BOOL)pending focused:(BOOL)focused {\n  self = [super init];\n  if (self) {\n    self.name = name;\n    self.testCaseName = testCaseName;\n    self.block = block;\n    self.pending = pending;\n    self.focused = focused;\n  }\n  return self;\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTExample.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"SpectaTypes.h\"\n\n@class SPTCallSite;\n\n@interface SPTExample : NSObject\n\n@property (nonatomic, copy) NSString *name;\n@property (nonatomic, retain) SPTCallSite *callSite;\n@property (nonatomic, copy) SPTVoidBlock block;\n\n@property (nonatomic) BOOL pending;\n@property (nonatomic, getter=isFocused) BOOL focused;\n\n- (id)initWithName:(NSString *)name callSite:(SPTCallSite *)callSite focused:(BOOL)focused block:(SPTVoidBlock)block;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTExample.m",
    "content": "#import \"SPTExample.h\"\n\n@implementation SPTExample\n\n- (id)initWithName:(NSString *)name callSite:(SPTCallSite *)callSite focused:(BOOL)focused block:(SPTVoidBlock)block {\n  self = [super init];\n  if (self) {\n    self.name = name;\n    self.callSite = callSite;\n    self.block = block;\n    self.focused = focused;\n    self.pending = block == nil;\n  }\n  return self;\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTExampleGroup.h",
    "content": "#import <Foundation/Foundation.h>\n#import <XCTest/XCTest.h>\n#import \"SpectaTypes.h\"\n\n@class SPTExample;\n@class SPTCallSite;\n\n@interface SPTExampleGroup : NSObject\n\n@property (nonatomic, copy) NSString *name;\n@property (nonatomic, strong) SPTExampleGroup *root;\n@property (nonatomic, strong) SPTExampleGroup *parent;\n@property (nonatomic, strong) NSMutableArray *children;\n@property (nonatomic, strong) NSMutableArray *beforeAllArray;\n@property (nonatomic, strong) NSMutableArray *afterAllArray;\n@property (nonatomic, strong) NSMutableArray *beforeEachArray;\n@property (nonatomic, strong) NSMutableArray *afterEachArray;\n@property (nonatomic, strong) NSMutableDictionary *sharedExamples;\n@property (nonatomic) unsigned int exampleCount;\n@property (nonatomic) unsigned int ranExampleCount;\n@property (nonatomic) unsigned int pendingExampleCount;\n@property (nonatomic, getter=isFocused) BOOL focused;\n\n- (id)initWithName:(NSString *)name parent:(SPTExampleGroup *)parent root:(SPTExampleGroup *)root;\n\n- (SPTExampleGroup *)addExampleGroupWithName:(NSString *)name focused:(BOOL)focused;\n- (SPTExample *)addExampleWithName:(NSString *)name callSite:(SPTCallSite *)callSite focused:(BOOL)focused block:(SPTVoidBlock)block;\n\n- (void)addBeforeAllBlock:(SPTVoidBlock)block;\n- (void)addAfterAllBlock:(SPTVoidBlock)block;\n- (void)addBeforeEachBlock:(SPTVoidBlock)block;\n- (void)addAfterEachBlock:(SPTVoidBlock)block;\n\n- (NSArray *)compileExamplesWithStack:(NSArray *)stack;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTExampleGroup.m",
    "content": "#import \"SPTExampleGroup.h\"\n#import \"SPTExample.h\"\n#import \"SPTCompiledExample.h\"\n#import \"SPTSpec.h\"\n#import \"SpectaUtility.h\"\n#import \"XCTest+Private.h\"\n#import \"SPTGlobalBeforeAfterEach.h\"\n#import <libkern/OSAtomic.h>\n#import <objc/runtime.h>\n\nstatic NSArray *ClassesWithClassMethod(SEL classMethodSelector) {\n  NSMutableArray *classesWithClassMethod = [[NSMutableArray alloc] init];\n\n  int numberOfClasses = objc_getClassList(NULL, 0);\n  if (numberOfClasses > 0) {\n    Class *classes = (Class *)malloc(sizeof(Class) *numberOfClasses);\n    numberOfClasses = objc_getClassList(classes, numberOfClasses);\n\n    for(int classIndex = 0; classIndex < numberOfClasses; classIndex++) {\n      Class aClass = classes[classIndex];\n\n      if (class_conformsToProtocol(aClass, @protocol(SPTGlobalBeforeAfterEach))) {\n        Method globalMethod = class_getClassMethod(aClass, classMethodSelector);\n        if (globalMethod) {\n          [classesWithClassMethod addObject:aClass];\n        }\n      }\n    }\n\n    free(classes);\n  }\n\n  return classesWithClassMethod;\n}\n\nstatic void runExampleBlock(void (^block)(), NSString *name) {\n  if (!SPTIsBlock(block)) {\n    return;\n  }\n\n  ((SPTVoidBlock)block)();\n}\n\ntypedef NS_ENUM(NSInteger, SPTExampleGroupOrder) {\n  SPTExampleGroupOrderOutermostFirst = 1,\n  SPTExampleGroupOrderInnermostFirst\n};\n\n@interface SPTExampleGroup () <SPTGlobalBeforeAfterEach>\n\n- (void)incrementExampleCount;\n- (void)incrementPendingExampleCount;\n- (void)resetRanExampleCountIfNeeded;\n- (void)incrementRanExampleCount;\n- (void)runBeforeHooks:(NSString *)compiledName;\n- (void)runBeforeAllHooks:(NSString *)compiledName;\n- (void)runBeforeEachHooks:(NSString *)compiledName;\n- (void)runAfterHooks:(NSString *)compiledName;\n- (void)runAfterEachHooks:(NSString *)compiledName;\n- (void)runAfterAllHooks:(NSString *)compiledName;\n\n@end\n\n@implementation SPTExampleGroup\n\n- (id)init {\n  self = [super init];\n  if (self) {\n    self.name = nil;\n    self.root = nil;\n    self.parent = nil;\n    self.children = [NSMutableArray array];\n    self.beforeAllArray = [NSMutableArray array];\n    self.afterAllArray = [NSMutableArray array];\n    self.beforeEachArray = [NSMutableArray array];\n    self.afterEachArray = [NSMutableArray array];\n    self.sharedExamples = [NSMutableDictionary dictionary];\n    self.exampleCount = 0;\n    self.pendingExampleCount = 0;\n    self.ranExampleCount = 0;\n  }\n  return self;\n}\n\n- (id)initWithName:(NSString *)name parent:(SPTExampleGroup *)parent root:(SPTExampleGroup *)root {\n  self = [self init];\n  if (self) {\n    self.name = name;\n    self.parent = parent;\n    self.root = root;\n  }\n  return self;\n}\n\n- (SPTExampleGroup *)addExampleGroupWithName:(NSString *)name focused:(BOOL)focused {\n  SPTExampleGroup *group = [[SPTExampleGroup alloc] initWithName:name parent:self root:self.root];\n  group.focused = focused;\n  [self.children addObject:group];\n  return group;\n}\n\n- (SPTExample *)addExampleWithName:(NSString *)name callSite:(SPTCallSite *)callSite focused:(BOOL)focused block:(SPTVoidBlock)block {\n  SPTExample *example;\n  @synchronized(self) {\n    example = [[SPTExample alloc] initWithName:name callSite:callSite focused:focused block:block];\n    [self.children addObject:example];\n\n    [self incrementExampleCount];\n    if (example.pending) {\n      [self incrementPendingExampleCount];\n    }\n  }\n  return example;\n}\n\n- (void)incrementExampleCount {\n  SPTExampleGroup *group = self;\n  while (group != nil) {\n    group.exampleCount ++;\n    group = group.parent;\n  }\n}\n\n- (void)incrementPendingExampleCount {\n  SPTExampleGroup *group = self;\n  while (group != nil) {\n    group.pendingExampleCount ++;\n    group = group.parent;\n  }\n}\n\n- (void)resetRanExampleCountIfNeeded {\n  SPTExampleGroup *group = self;\n  while (group != nil) {\n    if (group.ranExampleCount >= group.exampleCount) {\n      group.ranExampleCount = 0;\n    }\n    group = group.parent;\n  }\n}\n\n- (void)incrementRanExampleCount {\n  SPTExampleGroup *group = self;\n  while (group != nil) {\n    group.ranExampleCount ++;\n    group = group.parent;\n  }\n}\n\n- (void)addBeforeAllBlock:(SPTVoidBlock)block {\n  if (!block) return;\n  [self.beforeAllArray addObject:[block copy]];\n}\n\n- (void)addAfterAllBlock:(SPTVoidBlock)block {\n  if (!block) return;\n  [self.afterAllArray addObject:[block copy]];\n}\n\n- (void)addBeforeEachBlock:(SPTVoidBlock)block {\n  if (!block) return;\n  [self.beforeEachArray addObject:[block copy]];\n}\n\n- (void)addAfterEachBlock:(SPTVoidBlock)block {\n  if (!block) return;\n  [self.afterEachArray addObject:[block copy]];\n}\n\n- (void)runGlobalBeforeEachHooks:(NSString *)compiledName {\n  static NSArray *globalBeforeEachClasses;\n  static dispatch_once_t onceToken;\n  dispatch_once(&onceToken, ^{\n    globalBeforeEachClasses = ClassesWithClassMethod(@selector(beforeEach));\n  });\n\n  for (Class class in globalBeforeEachClasses) {\n    [class beforeEach];\n  }\n}\n\n- (void)runGlobalAfterEachHooks:(NSString *)compiledName {\n  static NSArray *globalAfterEachClasses;\n  static dispatch_once_t onceToken;\n  dispatch_once(&onceToken, ^{\n    globalAfterEachClasses = ClassesWithClassMethod(@selector(afterEach));\n  });\n\n  for (Class class in globalAfterEachClasses) {\n    [class afterEach];\n  }\n}\n\n// Builds an array of example groups that enclose the current group.\n// When in innermost-first order, the most deeply nested example groups,\n// beginning with self, are placed at the beginning of the array.\n// When in outermost-first order, the opposite is true, and the last\n// group in the array (self) is the most deeply nested.\n- (NSArray *)exampleGroupStackInOrder:(SPTExampleGroupOrder)order {\n  NSMutableArray *groups = [NSMutableArray array];\n  SPTExampleGroup *group = self;\n  while (group != nil) {\n    switch (order) {\n      case SPTExampleGroupOrderOutermostFirst:\n        [groups insertObject:group atIndex:0];\n        break;\n      case SPTExampleGroupOrderInnermostFirst:\n        [groups addObject:group];\n        break;\n    }\n    group = group.parent;\n  }\n\n  return [groups copy];\n}\n\n- (void)runBeforeHooks:(NSString *)compiledName {\n  [self runBeforeAllHooks:compiledName];\n  [self runBeforeEachHooks:compiledName];\n}\n\n- (void)runBeforeAllHooks:(NSString *)compiledName {\n  for(SPTExampleGroup *group in [self exampleGroupStackInOrder:SPTExampleGroupOrderOutermostFirst]) {\n    if (group.ranExampleCount == 0) {\n      for (id beforeAllBlock in group.beforeAllArray) {\n        runExampleBlock(beforeAllBlock, [NSString stringWithFormat:@\"%@ - before all block\", compiledName]);\n      }\n    }\n  }\n}\n\n- (void)runBeforeEachHooks:(NSString *)compiledName {\n  [self runGlobalBeforeEachHooks:compiledName];\n  for (SPTExampleGroup *group in [self exampleGroupStackInOrder:SPTExampleGroupOrderOutermostFirst]) {\n    for (id beforeEachBlock in group.beforeEachArray) {\n      runExampleBlock(beforeEachBlock, [NSString stringWithFormat:@\"%@ - before each block\", compiledName]);\n    }\n  }\n}\n\n- (void)runAfterHooks:(NSString *)compiledName {\n  [self runAfterEachHooks:compiledName];\n  [self runAfterAllHooks:compiledName];\n}\n\n- (void)runAfterEachHooks:(NSString *)compiledName {\n  for (SPTExampleGroup *group in [self exampleGroupStackInOrder:SPTExampleGroupOrderInnermostFirst]) {\n    for (id afterEachBlock in group.afterEachArray) {\n      runExampleBlock(afterEachBlock, [NSString stringWithFormat:@\"%@ - after each block\", compiledName]);\n    }\n  }\n  [self runGlobalAfterEachHooks:compiledName];\n}\n\n- (void)runAfterAllHooks:(NSString *)compiledName {\n  for (SPTExampleGroup *group in [self exampleGroupStackInOrder:SPTExampleGroupOrderInnermostFirst]) {\n    if (group.ranExampleCount == group.exampleCount) {\n      for (id afterAllBlock in group.afterAllArray) {\n        runExampleBlock(afterAllBlock, [NSString stringWithFormat:@\"%@ - after all block\", compiledName]);\n      }\n    }\n  }\n}\n\n- (BOOL)isFocusedOrHasFocusedAncestor {\n  SPTExampleGroup *ancestor = self;\n  while (ancestor != nil) {\n    if (ancestor.focused) {\n      return YES;\n    } else {\n      ancestor = ancestor.parent;\n    }\n  }\n\n  return NO;\n}\n\n- (NSArray *)compileExamplesWithStack:(NSArray *)stack {\n  BOOL groupIsFocusedOrHasFocusedAncestor = [self isFocusedOrHasFocusedAncestor];\n\n  NSArray *compiled = @[];\n\n  for(id child in self.children) {\n    if ([child isKindOfClass:[SPTExampleGroup class]]) {\n      SPTExampleGroup *group = child;\n      NSArray *newStack = [stack arrayByAddingObject:group];\n      compiled = [compiled arrayByAddingObjectsFromArray:[group compileExamplesWithStack:newStack]];\n\n    } else if ([child isKindOfClass:[SPTExample class]]) {\n      SPTExample *example = child;\n      NSArray *newStack = [stack arrayByAddingObject:example];\n\n      NSString *compiledName = [spt_map(newStack, ^id(id obj, NSUInteger idx) {\n        return [obj name];\n      }) componentsJoinedByString:@\" \"];\n\n      NSString *testCaseName = [spt_map(newStack, ^id(id obj, NSUInteger idx) {\n        return spt_underscorize([obj name]);\n      }) componentsJoinedByString:@\"__\"];\n\n      // If example is pending, run only before- and after-all hooks.\n      // Otherwise, run the example and all before and after hooks.\n      SPTSpecBlock compiledBlock = example.pending ? ^(SPTSpec *spec){\n        @synchronized(self.root) {\n          [self resetRanExampleCountIfNeeded];\n          [self runBeforeAllHooks:compiledName];\n          [self incrementRanExampleCount];\n          [self runAfterAllHooks:compiledName];\n        }\n      } : ^(SPTSpec *spec) {\n        @synchronized(self.root) {\n          [self resetRanExampleCountIfNeeded];\n          [self runBeforeHooks:compiledName];\n        }\n        @try {\n          runExampleBlock(example.block, compiledName);\n        }\n        @catch(NSException *e) {\n          [spec spt_handleException:e];\n        }\n        @finally {\n          @synchronized(self.root) {\n            [self incrementRanExampleCount];\n            [self runAfterHooks:compiledName];\n          }\n        }\n      };\n      SPTCompiledExample *compiledExample = [[SPTCompiledExample alloc] initWithName:compiledName testCaseName:testCaseName block:compiledBlock pending:example.pending focused:(groupIsFocusedOrHasFocusedAncestor || example.focused)];\n      compiled = [compiled arrayByAddingObject:compiledExample];\n    }\n  }\n  return compiled;\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTExcludeGlobalBeforeAfterEach.h",
    "content": "/*\n * Copyright (c) 2015 Specta Team. All rights reserved.\n */\n#import <Foundation/Foundation.h>\n\n// This protocol was used for blacklisting classes for global beforeEach and afterEach blocks.\n// Now, instead, classes are whitelisted by implementing the SPTGlobalBeforeAfterEach protocol.\n__deprecated_msg(\"Please whitelist classes instead with the SPTGlobalBeforeAfterEach protocol\")\n@protocol SPTExcludeGlobalBeforeAfterEach <NSObject>\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTGlobalBeforeAfterEach.h",
    "content": "/*\n * Copyright (c) 2015 Specta Team. All rights reserved.\n */\n#import <Foundation/Foundation.h>\n\n// This protocol is used for whitelisting classes for global beforeEach and afterEach blocks.\n// If you want a class to participate in those just add this protocol to a category and it will be\n// included.\n@protocol SPTGlobalBeforeAfterEach <NSObject>\n\n@optional\n+ (void)beforeEach;\n+ (void)afterEach;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTSharedExampleGroups.h",
    "content": "#import <XCTest/XCTest.h>\n#import <Specta/XCTestCase+Specta.h>\n#import <Specta/SpectaTypes.h>\n\n@class _XCTestCaseImplementation;\n\n@class SPTExampleGroup;\n\n@interface SPTSharedExampleGroups : XCTestCase\n\n+ (void)addSharedExampleGroupWithName:(NSString *)name block:(SPTDictionaryBlock)block exampleGroup:(SPTExampleGroup *)exampleGroup;\n+ (SPTDictionaryBlock)sharedExampleGroupWithName:(NSString *)name exampleGroup:(SPTExampleGroup *)exampleGroup;\n\n- (void)sharedExampleGroups;\n\n@end\n\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTSharedExampleGroups.m",
    "content": "#import \"SPTSharedExampleGroups.h\"\n#import \"SPTExampleGroup.h\"\n#import \"SPTSpec.h\"\n#import \"SpectaUtility.h\"\n#import <objc/runtime.h>\n\nNSMutableDictionary *globalSharedExampleGroups = nil;\nBOOL initialized = NO;\n\n@implementation SPTSharedExampleGroups\n\n+ (void)initialize {\n  Class SPTSharedExampleGroupsClass = [SPTSharedExampleGroups class];\n  if ([self class] == SPTSharedExampleGroupsClass) {\n    if (!initialized) {\n      initialized = YES;\n      globalSharedExampleGroups = [[NSMutableDictionary alloc] init];\n\n      Class *classes = NULL;\n      int numClasses = objc_getClassList(NULL, 0);\n\n      if (numClasses > 0) {\n        classes = (Class *)malloc(sizeof(Class) * numClasses);\n        numClasses = objc_getClassList(classes, numClasses);\n\n        Class klass, superClass;\n        for(uint i = 0; i < numClasses; i++) {\n          klass = classes[i];\n          superClass = class_getSuperclass(klass);\n          if (superClass == SPTSharedExampleGroupsClass) {\n            [[[klass alloc] init] sharedExampleGroups];\n          }\n        }\n\n        free(classes);\n      }\n    }\n  }\n}\n\n+ (void)addSharedExampleGroupWithName:(NSString *)name block:(SPTDictionaryBlock)block exampleGroup:(SPTExampleGroup *)exampleGroup {\n  (exampleGroup == nil ? globalSharedExampleGroups : exampleGroup.sharedExamples)[name] = [block copy];\n}\n\n+ (SPTDictionaryBlock)sharedExampleGroupWithName:(NSString *)name exampleGroup:(SPTExampleGroup *)exampleGroup {\n  SPTDictionaryBlock sharedExampleGroup = nil;\n  while (exampleGroup != nil) {\n    if ((sharedExampleGroup = exampleGroup.sharedExamples[name])) {\n      return sharedExampleGroup;\n    }\n    exampleGroup = exampleGroup.parent;\n  }\n  return globalSharedExampleGroups[name];\n}\n\n- (void)sharedExampleGroups {}\n\n- (void)spt_handleException:(NSException *)exception {\n  [SPTCurrentSpec spt_handleException:exception];\n}\n\n- (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected {\n  [SPTCurrentSpec recordFailureWithDescription:description inFile:filename atLine:lineNumber expected:expected];\n}\n\n- (void)_recordUnexpectedFailureWithDescription:(NSString *)description exception:(NSException *)exception {\n  [SPTCurrentSpec _recordUnexpectedFailureWithDescription:description exception:exception];\n}\n\n- (_XCTestCaseImplementation *)internalImplementation {\n  return [SPTCurrentSpec internalImplementation];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTSpec.h",
    "content": "#import <XCTest/XCTest.h>\n#import <Specta/XCTestCase+Specta.h>\n\n@class\n  SPTTestSuite\n, SPTCompiledExample\n;\n\n@interface SPTSpec : XCTestCase\n\n@property (strong) XCTestCaseRun *spt_run;\n@property (nonatomic) BOOL spt_pending;\n@property (nonatomic) BOOL spt_skipped;\n\n+ (BOOL)spt_isDisabled;\n+ (void)spt_setDisabled:(BOOL)disabled;\n+ (BOOL)spt_focusedExamplesExist;\n+ (SEL)spt_convertToTestMethod:(SPTCompiledExample *)example;\n+ (SPTTestSuite *)spt_testSuite;\n+ (void)spt_setCurrentTestSuite;\n+ (void)spt_unsetCurrentTestSuite;\n+ (void)spt_setCurrentTestSuiteFileName:(NSString *)fileName lineNumber:(NSUInteger)lineNumber;\n\n- (void)spec;\n- (BOOL)spt_shouldRunExample:(SPTCompiledExample *)example;\n- (void)spt_runExample:(SPTCompiledExample *)example;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTSpec.m",
    "content": "#import \"SPTSpec.h\"\n#import \"SPTTestSuite.h\"\n#import \"SPTCompiledExample.h\"\n#import \"SPTSharedExampleGroups.h\"\n#import \"SpectaUtility.h\"\n#import <objc/runtime.h>\n#import \"XCTest+Private.h\"\n\n@implementation SPTSpec\n\n+ (void)initialize {\n  [SPTSharedExampleGroups initialize];\n  SPTTestSuite *testSuite = [[SPTTestSuite alloc] init];\n  SPTSpec *spec = [[[self class] alloc] init];\n  NSString *specName = NSStringFromClass([self class]);\n  objc_setAssociatedObject(self, \"spt_testSuite\", testSuite, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n  [self spt_setCurrentTestSuite];\n  @try {\n    [spec spec];\n  }\n  @catch (NSException *exception) {\n    fprintf(stderr, \"%s: An exception has occured outside of tests, aborting.\\n\\n%s (%s) \\n\", [specName UTF8String], [[exception name] UTF8String], [[exception reason] UTF8String]);\n    if ([exception respondsToSelector:@selector(callStackSymbols)]) {\n      NSArray *callStackSymbols = [exception callStackSymbols];\n      if (callStackSymbols) {\n        NSString *callStack = [NSString stringWithFormat:@\"\\n  Call Stack:\\n    %@\\n\", [callStackSymbols componentsJoinedByString:@\"\\n    \"]];\n        fprintf(stderr, \"%s\", [callStack UTF8String]);\n      }\n    }\n    exit(1);\n  }\n  @finally {\n    [self spt_unsetCurrentTestSuite];\n  }\n  [testSuite compile];\n  [super initialize];\n}\n\n+ (SPTTestSuite *)spt_testSuite {\n  return objc_getAssociatedObject(self, \"spt_testSuite\");\n}\n\n+ (BOOL)spt_isDisabled {\n  return [self spt_testSuite].disabled;\n}\n\n+ (void)spt_setDisabled:(BOOL)disabled {\n  [self spt_testSuite].disabled = disabled;\n}\n\n+ (NSArray *)spt_allSpecClasses {\n  static NSArray *allSpecClasses = nil;\n  static dispatch_once_t onceToken;\n  dispatch_once(&onceToken, ^{\n\n    NSMutableArray *specClasses = [[NSMutableArray alloc] init];\n\n    int numberOfClasses = objc_getClassList(NULL, 0);\n    if (numberOfClasses > 0) {\n      Class *classes = (Class *)malloc(sizeof(Class) * numberOfClasses);\n      numberOfClasses = objc_getClassList(classes, numberOfClasses);\n\n      for (int classIndex = 0; classIndex < numberOfClasses; classIndex++) {\n        Class aClass = classes[classIndex];\n        if (spt_isSpecClass(aClass)) {\n          [specClasses addObject:aClass];\n        }\n      }\n\n      free(classes);\n    }\n\n    allSpecClasses = [specClasses copy];\n  });\n\n  return allSpecClasses;\n}\n\n+ (BOOL)spt_focusedExamplesExist {\n  for (Class specClass in [self spt_allSpecClasses]) {\n    SPTTestSuite *testSuite = [specClass spt_testSuite];\n    if (testSuite.disabled == NO && [testSuite hasFocusedExamples]) {\n      return YES;\n    }\n  }\n\n  return NO;\n}\n\n+ (SEL)spt_convertToTestMethod:(SPTCompiledExample *)example {\n  @synchronized(example) {\n    if (!example.testMethodSelector) {\n      IMP imp = imp_implementationWithBlock(^(SPTSpec *self) {\n        [self spt_runExample:example];\n      });\n\n      SEL sel;\n      unsigned int i = 0;\n\n      do {\n        i++;\n        if (i == 1) {\n          sel = NSSelectorFromString([NSString stringWithFormat:@\"test_%@\", example.testCaseName]);\n        } else {\n          sel = NSSelectorFromString([NSString stringWithFormat:@\"test_%@_%u\", example.testCaseName, i]);\n        }\n      } while([self instancesRespondToSelector:sel]);\n\n      class_addMethod(self, sel, imp, \"@@:\");\n      example.testMethodSelector = sel;\n    }\n  }\n\n  return example.testMethodSelector;\n}\n\n+ (void)spt_setCurrentTestSuite {\n  SPTTestSuite *testSuite = [self spt_testSuite];\n  [[NSThread currentThread] threadDictionary][spt_kCurrentTestSuiteKey] = testSuite;\n}\n\n+ (void)spt_unsetCurrentTestSuite {\n  [[[NSThread currentThread] threadDictionary] removeObjectForKey:spt_kCurrentTestSuiteKey];\n}\n\n+ (void)spt_setCurrentTestSuiteFileName:(NSString *)fileName lineNumber:(NSUInteger)lineNumber {\n  SPTTestSuite *testSuite = [self spt_testSuite];\n  testSuite.fileName = fileName;\n  testSuite.lineNumber = lineNumber;\n}\n\n- (void)spec {}\n\n- (BOOL)spt_shouldRunExample:(SPTCompiledExample *)example {\n  return [[self class] spt_isDisabled] == NO &&\n         (example.focused || [[self class] spt_focusedExamplesExist] == NO);\n}\n\n- (void)spt_runExample:(SPTCompiledExample *)example {\n  [[NSThread currentThread] threadDictionary][spt_kCurrentSpecKey] = self;\n\n  if ([self spt_shouldRunExample:example]) {\n    self.spt_pending = example.pending;\n    example.block(self);\n  } else if (!example.pending) {\n    self.spt_skipped = YES;\n  }\n\n  [[[NSThread currentThread] threadDictionary] removeObjectForKey:spt_kCurrentSpecKey];\n}\n\n#pragma mark - XCTestCase overrides\n\n+ (NSArray *)testInvocations {\n  NSArray *compiledExamples = [self spt_testSuite].compiledExamples;\n  [NSMutableArray arrayWithCapacity:[compiledExamples count]];\n\n  NSMutableSet *addedSelectors = [NSMutableSet setWithCapacity:[compiledExamples count]];\n  NSMutableArray *selectors = [NSMutableArray arrayWithCapacity:[compiledExamples count]];\n\n  // dynamically generate test methods with compiled examples\n  for (SPTCompiledExample *example in compiledExamples) {\n    SEL sel = [self spt_convertToTestMethod:example];\n    NSString *selName = NSStringFromSelector(sel);\n    [selectors addObject: selName];\n    [addedSelectors addObject: selName];\n  }\n\n  // look for any other test methods that may be present in class.\n  unsigned int n;\n  Method *imethods = class_copyMethodList(self, &n);\n\n  for (NSUInteger i = 0; i < n; i++) {\n    struct objc_method_description *desc = method_getDescription(imethods[i]);\n\n    char *types = desc->types;\n    SEL sel = desc->name;\n    NSString *selName = NSStringFromSelector(sel);\n\n    if (strcmp(types, \"@@:\") == 0 && [selName hasPrefix:@\"test\"] && ![addedSelectors containsObject:selName]) {\n      [selectors addObject:NSStringFromSelector(sel)];\n    }\n  }\n\n  free(imethods);\n\n  // create invocations from test method selectors\n  NSMutableArray *invocations = [NSMutableArray arrayWithCapacity:[selectors count]];\n  for (NSString *selName in selectors) {\n    SEL sel = NSSelectorFromString(selName);\n    NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self instanceMethodSignatureForSelector:sel]];\n    [inv setSelector:sel];\n    [invocations addObject:inv];\n  }\n\n  return spt_shuffle(invocations);\n}\n\n- (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected {\n  SPTSpec *currentSpec = SPTCurrentSpec;\n  [currentSpec.spt_run recordFailureWithDescription:description inFile:filename atLine:lineNumber expected:expected];\n}\n\n- (void)performTest:(XCTestRun *)run {\n  self.spt_run = (XCTestCaseRun *)run;\n  [super performTest:run];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTTestSuite.h",
    "content": "#import <Foundation/Foundation.h>\n\n@class\n  SPTExample\n, SPTExampleGroup\n;\n\n@interface SPTTestSuite : NSObject\n\n@property (nonatomic, strong) SPTExampleGroup *rootGroup;\n@property (nonatomic, strong) NSMutableArray *groupStack;\n@property (nonatomic, strong) NSArray *compiledExamples;\n@property (nonatomic, copy) NSString *fileName;\n@property (nonatomic) NSUInteger lineNumber;\n@property (nonatomic, getter = isDisabled) BOOL disabled;\n@property (nonatomic) BOOL hasFocusedExamples;\n\n- (SPTExampleGroup *)currentGroup;\n- (void)compile;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SPTTestSuite.m",
    "content": "#import \"SPTTestSuite.h\"\n#import \"SPTExampleGroup.h\"\n#import \"SPTCompiledExample.h\"\n\n@implementation SPTTestSuite\n\n- (id)init {\n  self = [super init];\n  if (self) {\n    self.rootGroup = [[SPTExampleGroup alloc] init];\n    self.rootGroup.root = self.rootGroup;\n    self.groupStack = [NSMutableArray arrayWithObject:self.rootGroup];\n  }\n  return self;\n}\n\n- (SPTExampleGroup *)currentGroup {\n  return [self.groupStack lastObject];\n}\n\n- (void)compile {\n  self.compiledExamples = [self.rootGroup compileExamplesWithStack:@[]];\n  for (SPTCompiledExample *example in self.compiledExamples) {\n    if (example.focused) {\n      self.hasFocusedExamples = YES;\n      break;\n    }\n  }\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/Specta.h",
    "content": "#import <Foundation/Foundation.h>\n#import <XCTest/XCTest.h>\n\n//! Project version number for Specta.\nFOUNDATION_EXPORT double SpectaVersionNumber;\n\n//! Project version string for Specta.\nFOUNDATION_EXPORT const unsigned char SpectaVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <Specta/PublicHeader.h>\n\n#import <Specta/SpectaDSL.h>\n#import <Specta/SPTSpec.h>\n#import <Specta/SPTSharedExampleGroups.h>\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SpectaDSL.h",
    "content": "#import <XCTest/XCTest.h>\n\n#define SpecBegin(name) _SPTSpecBegin(name, __FILE__, __LINE__)\n#define SpecEnd         _SPTSpecEnd\n\n#define SharedExamplesBegin(name)      _SPTSharedExampleGroupsBegin(name)\n#define SharedExamplesEnd              _SPTSharedExampleGroupsEnd\n#define SharedExampleGroupsBegin(name) _SPTSharedExampleGroupsBegin(name)\n#define SharedExampleGroupsEnd         _SPTSharedExampleGroupsEnd\n\ntypedef void (^DoneCallback)(void);\n\nOBJC_EXTERN void describe(NSString *name, void (^block)());\nOBJC_EXTERN void fdescribe(NSString *name, void (^block)());\n\nOBJC_EXTERN void context(NSString *name, void (^block)());\nOBJC_EXTERN void fcontext(NSString *name, void (^block)());\n\nOBJC_EXTERN void it(NSString *name, void (^block)());\nOBJC_EXTERN void fit(NSString *name, void (^block)());\n\nOBJC_EXTERN void example(NSString *name, void (^block)());\nOBJC_EXTERN void fexample(NSString *name, void (^block)());\n\nOBJC_EXTERN void specify(NSString *name, void (^block)());\nOBJC_EXTERN void fspecify(NSString *name, void (^block)());\n\n#define   pending(...) spt_pending_(__VA_ARGS__, nil)\n#define xdescribe(...) spt_pending_(__VA_ARGS__, nil)\n#define  xcontext(...) spt_pending_(__VA_ARGS__, nil)\n#define  xexample(...) spt_pending_(__VA_ARGS__, nil)\n#define       xit(...) spt_pending_(__VA_ARGS__, nil)\n#define  xspecify(...) spt_pending_(__VA_ARGS__, nil)\n\nOBJC_EXTERN void beforeAll(void (^block)());\nOBJC_EXTERN void afterAll(void (^block)());\n\nOBJC_EXTERN void beforeEach(void (^block)());\nOBJC_EXTERN void afterEach(void (^block)());\n\nOBJC_EXTERN void before(void (^block)());\nOBJC_EXTERN void after(void (^block)());\n\nOBJC_EXTERN void sharedExamplesFor(NSString *name, void (^block)(NSDictionary *data));\nOBJC_EXTERN void sharedExamples(NSString *name, void (^block)(NSDictionary *data));\n\n#define itShouldBehaveLike(...) spt_itShouldBehaveLike_(@(__FILE__), __LINE__, __VA_ARGS__)\n#define      itBehavesLike(...) spt_itShouldBehaveLike_(@(__FILE__), __LINE__, __VA_ARGS__)\n\nOBJC_EXTERN void waitUntil(void (^block)(DoneCallback done));\n/**\n * Runs the @c block and waits until the @c done block is called or the\n * @c timeout has passed.\n *\n * @param timeout timeout for this @c block only; does not affect the global\n *      timeout, as @c setAsyncSpecTimeout() does.\n * @param ^block  runs test code\n */\nOBJC_EXTERN void waitUntilTimeout(NSTimeInterval timeout, void (^block)(DoneCallback done));\n\nOBJC_EXTERN void setAsyncSpecTimeout(NSTimeInterval timeout);\n\n// ----------------------------------------------------------------------------\n\n#define _SPTSpecBegin(name, file, line) \\\n@interface name##Spec : SPTSpec \\\n@end \\\n@implementation name##Spec \\\n- (void)spec { \\\n  [[self class] spt_setCurrentTestSuiteFileName:(@(file)) lineNumber:(line)];\n\n#define _SPTSpecEnd \\\n} \\\n@end\n\n#define _SPTSharedExampleGroupsBegin(name) \\\n@interface name##SharedExampleGroups : SPTSharedExampleGroups \\\n@end \\\n@implementation name##SharedExampleGroups \\\n- (void)sharedExampleGroups {\n\n#define _SPTSharedExampleGroupsEnd \\\n} \\\n@end\n\nOBJC_EXTERN void spt_it_(NSString *name, NSString *fileName, NSUInteger lineNumber, void (^block)());\nOBJC_EXTERN void spt_fit_(NSString *name, NSString *fileName, NSUInteger lineNumber, void (^block)());\nOBJC_EXTERN void spt_pending_(NSString *name, ...);\nOBJC_EXTERN void spt_itShouldBehaveLike_(NSString *fileName, NSUInteger lineNumber, NSString *name, id dictionaryOrBlock);\nOBJC_EXTERN void spt_itShouldBehaveLike_block(NSString *fileName, NSUInteger lineNumber, NSString *name, NSDictionary *(^block)());\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SpectaDSL.m",
    "content": "#import \"SpectaDSL.h\"\n#import \"SpectaTypes.h\"\n#import \"SpectaUtility.h\"\n#import \"SPTTestSuite.h\"\n#import \"SPTExampleGroup.h\"\n#import \"SPTSharedExampleGroups.h\"\n#import \"SPTSpec.h\"\n#import \"SPTCallSite.h\"\n#import <libkern/OSAtomic.h>\n\nstatic NSTimeInterval asyncSpecTimeout = 10.0;\n\nstatic void spt_defineItBlock(NSString *name, NSString *fileName, NSUInteger lineNumber, BOOL focused, void (^block)()) {\n  SPTReturnUnlessBlockOrNil(block);\n  SPTCallSite *site = nil;\n  if (lineNumber && fileName) {\n    site = [SPTCallSite callSiteWithFile:fileName line:lineNumber];\n  }\n  [SPTCurrentGroup addExampleWithName:name callSite:site focused:focused block:block];\n}\n\nstatic void spt_defineDescribeBlock(NSString *name, BOOL focused, void (^block)()) {\n  if (block) {\n    [SPTGroupStack addObject:[SPTCurrentGroup addExampleGroupWithName:name focused:focused]];\n    block();\n    [SPTGroupStack removeLastObject];\n  } else {\n    spt_defineItBlock(name, nil, 0, focused, nil);\n  }\n}\n\nvoid spt_it_(NSString *name, NSString *fileName, NSUInteger lineNumber, void (^block)()) {\n  spt_defineItBlock(name, fileName, lineNumber, NO, block);\n}\n\nvoid spt_fit_(NSString *name, NSString *fileName, NSUInteger lineNumber, void (^block)()) {\n  spt_defineItBlock(name, fileName, lineNumber, YES, block);\n}\n\nvoid spt_pending_(NSString *name, ...) {\n  spt_defineItBlock(name, nil, 0, NO, nil);\n}\n\nvoid spt_itShouldBehaveLike_(NSString *fileName, NSUInteger lineNumber, NSString *name, id dictionaryOrBlock) {\n  SPTDictionaryBlock block = [SPTSharedExampleGroups sharedExampleGroupWithName:name exampleGroup:SPTCurrentGroup];\n  if (block) {\n    if (SPTIsBlock(dictionaryOrBlock)) {\n      id (^dataBlock)(void) = [dictionaryOrBlock copy];\n\n      describe(name, ^{\n        __block NSMutableDictionary *dataDict = [[NSMutableDictionary alloc] init];\n\n        beforeEach(^{\n          NSDictionary *blockData = dataBlock();\n          [dataDict removeAllObjects];\n          [dataDict addEntriesFromDictionary:blockData];\n        });\n\n        block(dataDict);\n\n        afterAll(^{\n          dataDict = nil;\n        });\n      });\n    } else {\n      NSDictionary *data = dictionaryOrBlock;\n\n      describe(name, ^{\n        block(data);\n      });\n    }\n  } else {\n    SPTSpec *currentSpec = SPTCurrentSpec;\n    if (currentSpec) {\n      [currentSpec recordFailureWithDescription:@\"itShouldBehaveLike should not be invoked inside an example block!\" inFile:fileName atLine:lineNumber expected:NO];\n    } else {\n      it(name, ^{\n        [SPTCurrentSpec recordFailureWithDescription:[NSString stringWithFormat:@\"Shared example group \\\"%@\\\" does not exist.\", name] inFile:fileName atLine:lineNumber expected:NO];\n      });\n    }\n  }\n}\n\nvoid spt_itShouldBehaveLike_block(NSString *fileName, NSUInteger lineNumber, NSString *name, NSDictionary *(^block)()) {\n  spt_itShouldBehaveLike_(fileName, lineNumber, name, (id)block);\n}\n\nvoid describe(NSString *name, void (^block)()) {\n  spt_defineDescribeBlock(name, NO, block);\n}\n\nvoid fdescribe(NSString *name, void (^block)()) {\n  spt_defineDescribeBlock(name, YES, block);\n}\n\nvoid context(NSString *name, void (^block)()) {\n  describe(name, block);\n}\n\nvoid fcontext(NSString *name, void (^block)()) {\n  fdescribe(name, block);\n}\n\nvoid it(NSString *name, void (^block)()) {\n  spt_defineItBlock(name, nil, 0, NO, block);\n}\n\nvoid fit(NSString *name, void (^block)()) {\n  spt_defineItBlock(name, nil, 0, YES, block);\n}\n\nvoid example(NSString *name, void (^block)()) {\n  it(name, block);\n}\n\nvoid fexample(NSString *name, void (^block)()) {\n  fit(name, block);\n}\n\nvoid specify(NSString *name, void (^block)()) {\n  it(name, block);\n}\n\nvoid fspecify(NSString *name, void (^block)()) {\n  fit(name, block);\n}\n\nvoid beforeAll(void (^block)()) {\n  SPTReturnUnlessBlockOrNil(block);\n  [SPTCurrentGroup addBeforeAllBlock:block];\n}\n\nvoid afterAll(void (^block)()) {\n  SPTReturnUnlessBlockOrNil(block);\n  [SPTCurrentGroup addAfterAllBlock:block];\n}\n\nvoid beforeEach(void (^block)()) {\n  SPTReturnUnlessBlockOrNil(block);\n  [SPTCurrentGroup addBeforeEachBlock:block];\n}\n\nvoid afterEach(void (^block)()) {\n  SPTReturnUnlessBlockOrNil(block);\n  [SPTCurrentGroup addAfterEachBlock:block];\n}\n\nvoid before(void (^block)()) {\n  beforeEach(block);\n}\n\nvoid after(void (^block)()) {\n  afterEach(block);\n}\n\nvoid sharedExamplesFor(NSString *name, void (^block)(NSDictionary *data)) {\n  [SPTSharedExampleGroups addSharedExampleGroupWithName:name block:block exampleGroup:SPTCurrentGroup];\n}\n\nvoid sharedExamples(NSString *name, void (^block)(NSDictionary *data)) {\n  sharedExamplesFor(name, block);\n}\n\nvoid waitUntil(void (^block)(DoneCallback done)) {\n  waitUntilTimeout(asyncSpecTimeout, block);\n}\n\nvoid waitUntilTimeout(NSTimeInterval timeout, void (^block)(DoneCallback done)) {\n  __block uint32_t complete = 0;\n  dispatch_async(dispatch_get_main_queue(), ^{\n    block(^{\n      OSAtomicOr32Barrier(1, &complete);\n    });\n  });\n  NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeout];\n  while (!complete && [timeoutDate timeIntervalSinceNow] > 0) {\n    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];\n  }\n  if (!complete) {\n    NSString *message = [NSString stringWithFormat:@\"failed to invoke done() callback before timeout (%f seconds)\", timeout];\n    SPTSpec *currentSpec = SPTCurrentSpec;\n    SPTTestSuite *testSuite = [[currentSpec class] spt_testSuite];\n    [currentSpec recordFailureWithDescription:message inFile:testSuite.fileName atLine:testSuite.lineNumber expected:YES];\n  }\n}\n\nvoid setAsyncSpecTimeout(NSTimeInterval timeout) {\n  asyncSpecTimeout = timeout;\n}\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SpectaTypes.h",
    "content": "@class SPTSpec;\n\ntypedef void (^SPTVoidBlock)();\ntypedef void (^SPTSpecBlock)(SPTSpec *spec);\ntypedef void (^SPTDictionaryBlock)(NSDictionary *dictionary);\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SpectaUtility.h",
    "content": "#import <Foundation/Foundation.h>\n\nextern NSString * const spt_kCurrentTestSuiteKey;\nextern NSString * const spt_kCurrentSpecKey;\n\n#define SPTCurrentTestSuite [[NSThread mainThread] threadDictionary][spt_kCurrentTestSuiteKey]\n#define SPTCurrentSpec  [[NSThread mainThread] threadDictionary][spt_kCurrentSpecKey]\n#define SPTCurrentGroup     [SPTCurrentTestSuite currentGroup]\n#define SPTGroupStack       [SPTCurrentTestSuite groupStack]\n\n#define SPTReturnUnlessBlockOrNil(block) if ((block) && !SPTIsBlock((block))) return;\n#define SPTIsBlock(obj) [(obj) isKindOfClass:NSClassFromString(@\"NSBlock\")]\n\nBOOL spt_isSpecClass(Class aClass);\nNSString *spt_underscorize(NSString *string);\nNSArray *spt_map(NSArray *array, id (^block)(id obj, NSUInteger idx));\nNSArray *spt_shuffle(NSArray *array);\nunsigned int spt_seed();\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/SpectaUtility.m",
    "content": "#import \"SpectaUtility.h\"\n#import \"SPTSpec.h\"\n#import <objc/runtime.h>\n\nNSString * const spt_kCurrentTestSuiteKey = @\"SPTCurrentTestSuite\";\nNSString * const spt_kCurrentSpecKey = @\"SPTCurrentSpec\";\n\nstatic unsigned int seed = 0;\n\nBOOL spt_isSpecClass(Class aClass) {\n  Class superclass = class_getSuperclass(aClass);\n  while (superclass != Nil) {\n    if (superclass == [SPTSpec class]) {\n      return YES;\n    } else {\n      superclass = class_getSuperclass(superclass);\n    }\n  }\n  return NO;\n}\n\nNSString *spt_underscorize(NSString *string) {\n  static NSMutableCharacterSet *invalidCharSet;\n  static dispatch_once_t onceToken;\n  dispatch_once(&onceToken, ^{\n    invalidCharSet = [[NSMutableCharacterSet alloc] init];\n    [invalidCharSet formUnionWithCharacterSet:[NSCharacterSet controlCharacterSet]];\n    [invalidCharSet formUnionWithCharacterSet:[NSCharacterSet illegalCharacterSet]];\n    [invalidCharSet formUnionWithCharacterSet:[NSCharacterSet newlineCharacterSet]];\n    [invalidCharSet formUnionWithCharacterSet:[NSCharacterSet nonBaseCharacterSet]];\n    [invalidCharSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];\n    [invalidCharSet formUnionWithCharacterSet:[NSCharacterSet symbolCharacterSet]];\n  });\n  NSString *stripped = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n  stripped = [[stripped componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@\"\"];\n\n  NSArray *components = [stripped componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];\n  stripped = [[components objectsAtIndexes:[components indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n    return ![obj isEqualToString:@\"\"];\n  }]] componentsJoinedByString:@\"_\"];\n  return stripped;\n}\n\nNSArray *spt_map(NSArray *array, id (^block)(id obj, NSUInteger idx)) {\n  NSMutableArray *mapped = [NSMutableArray arrayWithCapacity:[array count]];\n  [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n    [mapped addObject:block(obj, idx)];\n  }];\n  return mapped;\n}\n\nNSArray *spt_shuffle(NSArray *array) {\n  if (![[[[NSProcessInfo processInfo] environment] objectForKey:@\"SPECTA_SHUFFLE\"] isEqualToString:@\"1\"]) {\n    return array;\n  }\n  spt_seed();\n  NSMutableArray *shuffled = [array mutableCopy];\n  NSUInteger count = [shuffled count];\n  for (NSUInteger i = 0; i < count; i++) {\n    NSUInteger r = random() % count;\n    [shuffled exchangeObjectAtIndex:i withObjectAtIndex:r];\n  }\n  return shuffled;\n}\n\nunsigned int spt_seed() {\n  static dispatch_once_t onceToken;\n  dispatch_once(&onceToken, ^{\n    NSString *envSeed = [[[NSProcessInfo processInfo] environment] objectForKey:@\"SPECTA_SEED\"];\n    if (envSeed) {\n      sscanf([envSeed UTF8String], \"%u\", &seed);\n    } else {\n      seed = arc4random();\n    }\n    srandom(seed);\n    printf(\"Test Seed: %u\\n\", seed);\n  });\n  return seed;\n}\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/XCTest+Private.h",
    "content": "#import <XCTest/XCTest.h>\n\n#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 || __MAC_OS_X_VERSION_MAX_ALLOWED >= 101100\n\n@interface XCTestObservationCenter (SPTTestSuspention)\n\n- (void)_suspendObservationForBlock:(void (^)(void))block;\n\n@end\n\n#else\n\n@interface XCTestObservationCenter : NSObject\n\n+ (id)sharedObservationCenter;\n- (void)_suspendObservationForBlock:(void (^)(void))block;\n\n@end\n\n#endif\n\n@protocol XCTestObservation <NSObject>\n@end\n\n@interface _XCTestDriverTestObserver : NSObject <XCTestObservation>\n\n- (void)stopObserving;\n- (void)startObserving;\n\n@end\n\n@interface _XCTestCaseImplementation : NSObject\n@end\n\n@interface XCTestCase ()\n\n- (_XCTestCaseImplementation *)internalImplementation;\n- (void)_recordUnexpectedFailureWithDescription:(NSString *)description exception:(NSException *)exception;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/XCTestCase+Specta.h",
    "content": "#import <XCTest/XCTest.h>\n\n@interface XCTestCase (Specta)\n\n- (void)spt_handleException:(NSException *)exception;\n\n@end\n"
  },
  {
    "path": "Example/Pods/Specta/Specta/Specta/XCTestCase+Specta.m",
    "content": "#import <objc/runtime.h>\n#import \"XCTestCase+Specta.h\"\n#import \"SPTSpec.h\"\n#import \"SPTExample.h\"\n#import \"SPTSharedExampleGroups.h\"\n#import \"SpectaUtility.h\"\n#import \"XCTest+Private.h\"\n\n@interface XCTestCase (xct_allSubclasses)\n\n- (NSArray *)allSubclasses;\n- (void)_dequeueFailures;\n\n@end\n\n@implementation XCTestCase (Specta)\n\n+ (void)load {\n  Method allSubclasses = class_getClassMethod(self, @selector(allSubclasses));\n  Method allSubclasses_swizzle = class_getClassMethod(self , @selector(spt_allSubclasses_swizzle));\n  method_exchangeImplementations(allSubclasses, allSubclasses_swizzle);\n\n  Method dequeueFailures = class_getInstanceMethod(self, @selector(_dequeueFailures));\n  Method dequeueFailures_swizzle = class_getInstanceMethod(self, @selector(spt_dequeueFailures));\n  method_exchangeImplementations(dequeueFailures, dequeueFailures_swizzle);\n}\n\n+ (NSArray *)spt_allSubclasses_swizzle {\n  NSArray *subclasses = [self spt_allSubclasses_swizzle]; // call original\n  NSMutableArray *filtered = [NSMutableArray arrayWithCapacity:[subclasses count]];\n  // exclude SPTSpec base class and all subclasses of SPTSharedExampleGroups\n  for (id subclass in subclasses) {\n    if (subclass != [SPTSpec class] && ![subclass isKindOfClass:[SPTSharedExampleGroups class]]) {\n      [filtered addObject:subclass];\n    }\n  }\n  return spt_shuffle(filtered);\n}\n\n- (void)spt_dequeueFailures {\n  void(^dequeueFailures)() = ^() {\n    [self spt_dequeueFailures];\n  };\n\n  if ([NSThread isMainThread]) {\n    dequeueFailures();\n  } else {\n    dispatch_sync(dispatch_get_main_queue(), dequeueFailures);\n  }\n}\n\n- (void)spt_handleException:(NSException *)exception {\n  NSString *description = [exception reason];\n  if ([exception userInfo]) {\n    id line = [exception userInfo][@\"line\"];\n    id file = [exception userInfo][@\"file\"];\n    if ([line isKindOfClass:[NSNumber class]] && [file isKindOfClass:[NSString class]]) {\n      [self recordFailureWithDescription:description inFile:file atLine:[line unsignedIntegerValue] expected:YES];\n      return;\n    }\n  }\n  [self _recordUnexpectedFailureWithDescription:description exception:exception];\n}\n\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/DACircularProgress/DACircularProgress-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_DACircularProgress : NSObject\n@end\n@implementation PodsDummy_DACircularProgress\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/DACircularProgress/DACircularProgress-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/DACircularProgress/DACircularProgress.xcconfig",
    "content": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/DACircularProgress\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = -framework \"QuartzCore\"\nPODS_ROOT = ${SRCROOT}\nSKIP_INSTALL = YES"
  },
  {
    "path": "Example/Pods/Target Support Files/Expecta/Expecta-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Expecta : NSObject\n@end\n@implementation PodsDummy_Expecta\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Expecta/Expecta-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Expecta/Expecta.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited)  \"$(PLATFORM_DIR)/Developer/Library/Frameworks\" $(inherited) $(DEVELOPER_FRAMEWORKS_DIR) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\" \"$(DEVELOPER_DIR)/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/Expecta\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = -framework \"Foundation\" -framework \"XCTest\"\nPODS_ROOT = ${SRCROOT}\nSKIP_INSTALL = YES"
  },
  {
    "path": "Example/Pods/Target Support Files/Expecta+Snapshots/Expecta+Snapshots-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Expecta_Snapshots : NSObject\n@end\n@implementation PodsDummy_Expecta_Snapshots\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Expecta+Snapshots/Expecta+Snapshots-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Expecta+Snapshots/Expecta+Snapshots.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited)  \"$(PLATFORM_DIR)/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = -framework \"Foundation\" -framework \"XCTest\"\nPODS_ROOT = ${SRCROOT}\nSKIP_INSTALL = YES"
  },
  {
    "path": "Example/Pods/Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_FBSnapshotTestCase : NSObject\n@end\n@implementation PodsDummy_FBSnapshotTestCase\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited)  \"$(PLATFORM_DIR)/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = -framework \"XCTest\"\nPODS_ROOT = ${SRCROOT}\nSKIP_INSTALL = YES"
  },
  {
    "path": "Example/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_MBProgressHUD : NSObject\n@end\n@implementation PodsDummy_MBProgressHUD\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig",
    "content": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = -framework \"CoreGraphics\"\nPODS_ROOT = ${SRCROOT}\nSKIP_INSTALL = YES"
  },
  {
    "path": "Example/Pods/Target Support Files/MWPhotoBrowser/MWPhotoBrowser-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_MWPhotoBrowser : NSObject\n@end\n@implementation PodsDummy_MWPhotoBrowser\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/MWPhotoBrowser/MWPhotoBrowser-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/MWPhotoBrowser/MWPhotoBrowser.xcconfig",
    "content": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = -framework \"AssetsLibrary\" -framework \"ImageIO\" -framework \"MediaPlayer\" -framework \"QuartzCore\" -weak_framework \"Photos\"\nPODS_ROOT = ${SRCROOT}\nSKIP_INSTALL = YES"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## DACircularProgress\n\n# License\n\n## MIT License\n\nCopyright (c) 2013 Daniel Amitay (http://danielamitay.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n## MBProgressHUD\n\nCopyright (c) 2009-2015 Matej Bukovinski\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n## MWPhotoBrowser\n\nCopyright (c) 2010 Michael Waterfall <michaelwaterfall@gmail.com>\r\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n## SDWebImage\n\nCopyright (c) 2009 Olivier Poitrey <rs@dailymotion.com>\n \nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n \nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n \nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\nGenerated by CocoaPods - http://cocoapods.org\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example-acknowledgements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string># License\n\n## MIT License\n\nCopyright (c) 2013 Daniel Amitay (http://danielamitay.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2009-2015 Matej Bukovinski\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2010 Michael Waterfall &lt;michaelwaterfall@gmail.com&gt;\r\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2009 Olivier Poitrey &lt;rs@dailymotion.com&gt;\n \nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n \nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n \nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - http://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_MWPhotoBrowser_Example : NSObject\n@end\n@implementation PodsDummy_Pods_MWPhotoBrowser_Example\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example-frameworks.sh",
    "content": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nSWIFT_STDLIB_PATH=\"${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\n\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n      echo \"Symlinked...\"\n      source=\"$(readlink \"${source}\")\"\n  fi\n\n  # use filter instead of exclude so missing patterns dont' throw errors\n  echo \"rsync -av --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u  && exit ${PIPESTATUS[0]})\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY}\" -a \"${CODE_SIGNING_REQUIRED}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identitiy\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    echo \"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \\\"$1\\\"\"\n    /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"\n  fi\n}\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  # Get architectures for current file\n  archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | rev)\"\n  stripped=\"\"\n  for arch in $archs; do\n    if ! [[ \"${VALID_ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\" || exit 1\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n}\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\nrealpath() {\n  DIRECTORY=\"$(cd \"${1%/*}\" && pwd)\"\n  FILENAME=\"${1##*/}\"\n  echo \"$DIRECTORY/$FILENAME\"\n}\n\ninstall_resource()\n{\n  case $1 in\n    *.storyboard)\n      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}\"\n      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}\"\n      ;;\n    *.xib)\n      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}\"\n      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}\"\n      ;;\n    *.framework)\n      echo \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      mkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      rsync -av \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"${PODS_ROOT}/$1\\\" \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\"`.mom\\\"\"\n      xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"${PODS_ROOT}/$1\\\" \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcdatamodeld`.momd\\\"\"\n      xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"${PODS_ROOT}/$1\\\" \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcmappingmodel`.cdm\\\"\"\n      xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=$(realpath \"${PODS_ROOT}/$1\")\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    /*)\n      echo \"$1\"\n      echo \"$1\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n    *)\n      echo \"${PODS_ROOT}/$1\"\n      echo \"${PODS_ROOT}/$1\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_resource \"${BUILT_PRODUCTS_DIR}/MWPhotoBrowser.bundle\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_resource \"${BUILT_PRODUCTS_DIR}/MWPhotoBrowser.bundle\"\nfi\n\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  case \"${TARGETED_DEVICE_FAMILY}\" in\n    1,2)\n      TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n      ;;\n    1)\n      TARGET_DEVICE_ARGS=\"--target-device iphone\"\n      ;;\n    2)\n      TARGET_DEVICE_ARGS=\"--target-device ipad\"\n      ;;\n    *)\n      TARGET_DEVICE_ARGS=\"--target-device mac\"\n      ;;\n  esac\n\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"`realpath $PODS_ROOT`*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  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}\"\nfi\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example.debug.xcconfig",
    "content": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_CFLAGS = $(inherited) -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/DACircularProgress\" -isystem \"${PODS_ROOT}/Headers/Public/Expecta\" -isystem \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" -isystem \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" -isystem \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" -isystem \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" -isystem \"${PODS_ROOT}/Headers/Public/SDWebImage\" -isystem \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"DACircularProgress\" -l\"MBProgressHUD\" -l\"MWPhotoBrowser\" -l\"SDWebImage\" -framework \"AssetsLibrary\" -framework \"CoreGraphics\" -framework \"ImageIO\" -framework \"MediaPlayer\" -framework \"QuartzCore\" -weak_framework \"Photos\"\nPODS_ROOT = ${SRCROOT}/Pods"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Example/Pods-MWPhotoBrowser_Example.release.xcconfig",
    "content": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_CFLAGS = $(inherited) -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/DACircularProgress\" -isystem \"${PODS_ROOT}/Headers/Public/Expecta\" -isystem \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" -isystem \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" -isystem \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" -isystem \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" -isystem \"${PODS_ROOT}/Headers/Public/SDWebImage\" -isystem \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"DACircularProgress\" -l\"MBProgressHUD\" -l\"MWPhotoBrowser\" -l\"SDWebImage\" -framework \"AssetsLibrary\" -framework \"CoreGraphics\" -framework \"ImageIO\" -framework \"MediaPlayer\" -framework \"QuartzCore\" -weak_framework \"Photos\"\nPODS_ROOT = ${SRCROOT}/Pods"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## DACircularProgress\n\n# License\n\n## MIT License\n\nCopyright (c) 2013 Daniel Amitay (http://danielamitay.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n## MBProgressHUD\n\nCopyright (c) 2009-2015 Matej Bukovinski\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n## MWPhotoBrowser\n\nCopyright (c) 2010 Michael Waterfall <michaelwaterfall@gmail.com>\r\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n## SDWebImage\n\nCopyright (c) 2009 Olivier Poitrey <rs@dailymotion.com>\n \nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n \nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n \nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n\n## Expecta\n\nCopyright (c) 2011-2015 Specta Team - https://github.com/specta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\n## Expecta+Snapshots\n\nMIT License\n\nCopyright (c) 2014 Daniel Doubrovkine, Artsy Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n## FBSnapshotTestCase\n\nBSD License\n\nFor the FBSnapshotTestCase software\n\nCopyright (c) 2013, Facebook, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright notice,\n    this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n  * Neither the name Facebook nor the names of its contributors may be used to\n    endorse or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n## Specta\n\nCopyright (c) 2012-2014 Specta Team.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n\nGenerated by CocoaPods - http://cocoapods.org\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests-acknowledgements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string># License\n\n## MIT License\n\nCopyright (c) 2013 Daniel Amitay (http://danielamitay.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>DACircularProgress</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2009-2015 Matej Bukovinski\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>MBProgressHUD</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2010 Michael Waterfall &lt;michaelwaterfall@gmail.com&gt;\r\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>MWPhotoBrowser</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2009 Olivier Poitrey &lt;rs@dailymotion.com&gt;\n \nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n \nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n \nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SDWebImage</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2011-2015 Specta Team - https://github.com/specta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Expecta</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) 2014 Daniel Doubrovkine, Artsy Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Expecta+Snapshots</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>BSD License\n\nFor the FBSnapshotTestCase software\n\nCopyright (c) 2013, Facebook, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright notice,\n    this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n  * Neither the name Facebook nor the names of its contributors may be used to\n    endorse or promote products derived from this software without specific\n    prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>FBSnapshotTestCase</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2012-2014 Specta Team.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Specta</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - http://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_MWPhotoBrowser_Tests : NSObject\n@end\n@implementation PodsDummy_Pods_MWPhotoBrowser_Tests\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests-frameworks.sh",
    "content": "#!/bin/sh\nset -e\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nSWIFT_STDLIB_PATH=\"${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\n\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n      echo \"Symlinked...\"\n      source=\"$(readlink \"${source}\")\"\n  fi\n\n  # use filter instead of exclude so missing patterns dont' throw errors\n  echo \"rsync -av --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u  && exit ${PIPESTATUS[0]})\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY}\" -a \"${CODE_SIGNING_REQUIRED}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identitiy\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    echo \"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \\\"$1\\\"\"\n    /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"\n  fi\n}\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  # Get architectures for current file\n  archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | rev)\"\n  stripped=\"\"\n  for arch in $archs; do\n    if ! [[ \"${VALID_ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\" || exit 1\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n}\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\nrealpath() {\n  DIRECTORY=\"$(cd \"${1%/*}\" && pwd)\"\n  FILENAME=\"${1##*/}\"\n  echo \"$DIRECTORY/$FILENAME\"\n}\n\ninstall_resource()\n{\n  case $1 in\n    *.storyboard)\n      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}\"\n      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}\"\n      ;;\n    *.xib)\n      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}\"\n      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}\"\n      ;;\n    *.framework)\n      echo \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      mkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      rsync -av \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"${PODS_ROOT}/$1\\\" \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\"`.mom\\\"\"\n      xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"${PODS_ROOT}/$1\\\" \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcdatamodeld`.momd\\\"\"\n      xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"${PODS_ROOT}/$1\\\" \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcmappingmodel`.cdm\\\"\"\n      xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=$(realpath \"${PODS_ROOT}/$1\")\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    /*)\n      echo \"$1\"\n      echo \"$1\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n    *)\n      echo \"${PODS_ROOT}/$1\"\n      echo \"${PODS_ROOT}/$1\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_resource \"${BUILT_PRODUCTS_DIR}/MWPhotoBrowser.bundle\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_resource \"${BUILT_PRODUCTS_DIR}/MWPhotoBrowser.bundle\"\nfi\n\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"$XCASSET_FILES\" ]\nthen\n  case \"${TARGETED_DEVICE_FAMILY}\" in\n    1,2)\n      TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n      ;;\n    1)\n      TARGET_DEVICE_ARGS=\"--target-device iphone\"\n      ;;\n    2)\n      TARGET_DEVICE_ARGS=\"--target-device ipad\"\n      ;;\n    *)\n      TARGET_DEVICE_ARGS=\"--target-device mac\"\n      ;;\n  esac\n\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"`realpath $PODS_ROOT`*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  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}\"\nfi\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests.debug.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited) $(inherited) $(DEVELOPER_FRAMEWORKS_DIR) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\" \"$(DEVELOPER_DIR)/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_CFLAGS = $(inherited) -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/DACircularProgress\" -isystem \"${PODS_ROOT}/Headers/Public/Expecta\" -isystem \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" -isystem \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" -isystem \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" -isystem \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" -isystem \"${PODS_ROOT}/Headers/Public/SDWebImage\" -isystem \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"DACircularProgress\" -l\"Expecta\" -l\"Expecta+Snapshots\" -l\"FBSnapshotTestCase\" -l\"MBProgressHUD\" -l\"MWPhotoBrowser\" -l\"SDWebImage\" -l\"Specta\" -framework \"AssetsLibrary\" -framework \"CoreGraphics\" -framework \"Foundation\" -framework \"ImageIO\" -framework \"MediaPlayer\" -framework \"QuartzCore\" -framework \"XCTest\" -weak_framework \"Photos\"\nPODS_ROOT = ${SRCROOT}/Pods"
  },
  {
    "path": "Example/Pods/Target Support Files/Pods-MWPhotoBrowser_Tests/Pods-MWPhotoBrowser_Tests.release.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited) $(inherited) $(DEVELOPER_FRAMEWORKS_DIR) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\" \"$(DEVELOPER_DIR)/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_CFLAGS = $(inherited) -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/DACircularProgress\" -isystem \"${PODS_ROOT}/Headers/Public/Expecta\" -isystem \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" -isystem \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" -isystem \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" -isystem \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" -isystem \"${PODS_ROOT}/Headers/Public/SDWebImage\" -isystem \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"DACircularProgress\" -l\"Expecta\" -l\"Expecta+Snapshots\" -l\"FBSnapshotTestCase\" -l\"MBProgressHUD\" -l\"MWPhotoBrowser\" -l\"SDWebImage\" -l\"Specta\" -framework \"AssetsLibrary\" -framework \"CoreGraphics\" -framework \"Foundation\" -framework \"ImageIO\" -framework \"MediaPlayer\" -framework \"QuartzCore\" -framework \"XCTest\" -weak_framework \"Photos\"\nPODS_ROOT = ${SRCROOT}/Pods"
  },
  {
    "path": "Example/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_SDWebImage : NSObject\n@end\n@implementation PodsDummy_SDWebImage\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig",
    "content": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/SDWebImage\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = -framework \"ImageIO\"\nPODS_ROOT = ${SRCROOT}\nSKIP_INSTALL = YES"
  },
  {
    "path": "Example/Pods/Target Support Files/Specta/Specta-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Specta : NSObject\n@end\n@implementation PodsDummy_Specta\n@end\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Specta/Specta-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Example/Pods/Target Support Files/Specta/Specta.xcconfig",
    "content": "FRAMEWORK_SEARCH_PATHS = $(inherited)  \"$(PLATFORM_DIR)/Developer/Library/Frameworks\" $(inherited) $(DEVELOPER_FRAMEWORKS_DIR) \"$(PLATFORM_DIR)/Developer/Library/Frameworks\" \"$(DEVELOPER_DIR)/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/Specta\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DACircularProgress\" \"${PODS_ROOT}/Headers/Public/Expecta\" \"${PODS_ROOT}/Headers/Public/Expecta+Snapshots\" \"${PODS_ROOT}/Headers/Public/FBSnapshotTestCase\" \"${PODS_ROOT}/Headers/Public/MBProgressHUD\" \"${PODS_ROOT}/Headers/Public/MWPhotoBrowser\" \"${PODS_ROOT}/Headers/Public/SDWebImage\" \"${PODS_ROOT}/Headers/Public/Specta\"\nOTHER_LDFLAGS = -framework \"Foundation\" -framework \"XCTest\"\nPODS_ROOT = ${SRCROOT}\nSKIP_INSTALL = YES"
  },
  {
    "path": "Example/Tests/Tests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Tests/Tests-Prefix.pch",
    "content": "//  The contents of this file are implicitly included at the beginning of every test case source file.\n\n#ifdef __OBJC__\n\n  @import Specta;\n  @import Expecta;\n  @import FBSnapshotTestCase;\n  @import Expecta_Snapshots;\n\n#endif\n"
  },
  {
    "path": "Example/Tests/Tests.m",
    "content": "//\n//  MWPhotoBrowserTests.m\n//  MWPhotoBrowserTests\n//\n//  Created by Michael Waterfall on 07/04/2015.\n//  Copyright (c) 2015 Michael Waterfall. All rights reserved.\n//\n\n// https://github.com/Specta/Specta\n\nSpecBegin(InitialSpecs)\n\ndescribe(@\"these will fail\", ^{\n\n    it(@\"can do maths\", ^{\n        expect(1).to.equal(2);\n    });\n\n    it(@\"can read\", ^{\n        expect(@\"number\").to.equal(@\"string\");\n    });\n    \n    it(@\"will wait for 10 seconds and fail\", ^{\n        waitUntil(^(DoneCallback done) {\n        \n        });\n    });\n});\n\ndescribe(@\"these will pass\", ^{\n    \n    it(@\"can do maths\", ^{\n        expect(1).beLessThan(23);\n    });\n    \n    it(@\"can read\", ^{\n        expect(@\"team\").toNot.contain(@\"I\");\n    });\n    \n    it(@\"will wait and succeed\", ^{\n        waitUntil(^(DoneCallback done) {\n            done();\n        });\n    });\n});\n\nSpecEnd\n\n"
  },
  {
    "path": "Example/Tests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2010 Michael Waterfall <michaelwaterfall@gmail.com>\r\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "MWPhotoBrowser.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name = 'MWPhotoBrowser'\n  s.version = '2.1.2'\n  s.license = 'MIT'\n  s.summary = 'A simple iOS photo and video browser with optional grid view, captions and selections.'\n  s.description = <<-DESCRIPTION\n                  MWPhotoBrowser can display one or more images or videos by providing either UIImage\n                  objects, PHAsset objects, or URLs to library assets, web images/videos or local files.\n                  The photo browser handles the downloading and caching of photos from the web seamlessly.\n                  Photos can be zoomed and panned, and optional (customisable) captions can be displayed.\n                  DESCRIPTION\n  s.screenshots = [\n    'https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser1.png',\n    'https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser2.png',\n    'https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser3.png',\n    'https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser4.png',\n    'https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser5.png',\n    'https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser6.png'\n  ]\n\n  s.homepage = 'https://github.com/mwaterfall/MWPhotoBrowser'\n  s.author = { 'Michael Waterfall' => 'michaelwaterfall@gmail.com' }\n  s.social_media_url = 'https://twitter.com/mwaterfall'\n\n  s.source = {\n    :git => 'https://github.com/mwaterfall/MWPhotoBrowser.git',\n    :tag => '2.1.2'\n  }\n  s.platform = :ios, '7.0'\n  s.source_files = 'Pod/Classes/**/*'\n  s.resource_bundles = {\n    'MWPhotoBrowser' => ['Pod/Assets/*.png']\n  }\n  s.requires_arc = true\n\n  s.frameworks = 'ImageIO', 'QuartzCore', 'AssetsLibrary', 'MediaPlayer'\n  s.weak_frameworks = 'Photos'\n\n  s.dependency 'MBProgressHUD', '~> 0.9'\n  s.dependency 'DACircularProgress', '~> 2.3'\n\n  # SDWebImage\n  # 3.7.2 contains bugs downloading local files\n  # https://github.com/rs/SDWebImage/issues/1109\n  s.dependency 'SDWebImage', '~> 3.7', '!= 3.7.2'\n\nend\n"
  },
  {
    "path": "Pod/Assets/.gitkeep",
    "content": ""
  },
  {
    "path": "Pod/Classes/.gitkeep",
    "content": ""
  },
  {
    "path": "Pod/Classes/MWCaptionView.h",
    "content": "//\n//  MWCaptionView.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 30/12/2011.\n//  Copyright (c) 2011 __MyCompanyName__. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"MWPhotoProtocol.h\"\n\n@interface MWCaptionView : UIToolbar\n\n// Init\n- (id)initWithPhoto:(id<MWPhoto>)photo;\n\n// To create your own custom caption view, subclass this view\n// and override the following two methods (as well as any other\n// UIView methods that you see fit):\n\n// Override -setupCaption so setup your subviews and customise the appearance\n// of your custom caption\n// You can access the photo's data by accessing the _photo ivar\n// If you need more data per photo then simply subclass MWPhoto and return your\n// subclass to the photo browsers -photoBrowser:photoAtIndex: delegate method\n- (void)setupCaption;\n\n// Override -sizeThatFits: and return a CGSize specifying the height of your\n// custom caption view. With width property is ignored and the caption is displayed\n// the full width of the screen\n- (CGSize)sizeThatFits:(CGSize)size;\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWCaptionView.m",
    "content": "//\n//  MWCaptionView.m\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 30/12/2011.\n//  Copyright (c) 2011 __MyCompanyName__. All rights reserved.\n//\n\n#import \"MWCommon.h\"\n#import \"MWCaptionView.h\"\n#import \"MWPhoto.h\"\n\nstatic const CGFloat labelPadding = 10;\n\n// Private\n@interface MWCaptionView () {\n    id <MWPhoto> _photo;\n    UILabel *_label;    \n}\n@end\n\n@implementation MWCaptionView\n\n- (id)initWithPhoto:(id<MWPhoto>)photo {\n    self = [super initWithFrame:CGRectMake(0, 0, 320, 44)]; // Random initial frame\n    if (self) {\n        self.userInteractionEnabled = NO;\n        _photo = photo;\n        self.barStyle = UIBarStyleBlackTranslucent;\n        self.tintColor = nil;\n        self.barTintColor = nil;\n        self.barStyle = UIBarStyleBlackTranslucent;\n        [self setBackgroundImage:nil forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];\n        self.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;\n        [self setupCaption];\n    }\n    return self;\n}\n\n- (CGSize)sizeThatFits:(CGSize)size {\n    CGFloat maxHeight = 9999;\n    if (_label.numberOfLines > 0) maxHeight = _label.font.leading*_label.numberOfLines;\n    CGSize textSize = [_label.text boundingRectWithSize:CGSizeMake(size.width - labelPadding*2, maxHeight)\n                                                options:NSStringDrawingUsesLineFragmentOrigin\n                                             attributes:@{NSFontAttributeName:_label.font}\n                                                context:nil].size;\n    return CGSizeMake(size.width, textSize.height + labelPadding * 2);\n}\n\n- (void)setupCaption {\n    _label = [[UILabel alloc] initWithFrame:CGRectIntegral(CGRectMake(labelPadding, 0,\n                                                       self.bounds.size.width-labelPadding*2,\n                                                       self.bounds.size.height))];\n    _label.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;\n    _label.opaque = NO;\n    _label.backgroundColor = [UIColor clearColor];\n    _label.textAlignment = NSTextAlignmentCenter;\n    _label.lineBreakMode = NSLineBreakByWordWrapping;\n\n    _label.numberOfLines = 0;\n    _label.textColor = [UIColor whiteColor];\n    _label.font = [UIFont systemFontOfSize:17];\n    if ([_photo respondsToSelector:@selector(caption)]) {\n        _label.text = [_photo caption] ? [_photo caption] : @\" \";\n    }\n    [self addSubview:_label];\n}\n\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWCommon.h",
    "content": "//\n//  MWPreprocessor.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 01/10/2013.\n//\n\n#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)\n#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)\n#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)\n#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)\n#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)\n"
  },
  {
    "path": "Pod/Classes/MWGridCell.h",
    "content": "//\n//  MWGridCell.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 08/10/2013.\n//\n//\n\n#import <UIKit/UIKit.h>\n#import \"MWPhoto.h\"\n#import \"MWGridViewController.h\"\n\n@interface MWGridCell : UICollectionViewCell {}\n\n@property (nonatomic, weak) MWGridViewController *gridController;\n@property (nonatomic) NSUInteger index;\n@property (nonatomic) id <MWPhoto> photo;\n@property (nonatomic) BOOL selectionMode;\n@property (nonatomic) BOOL isSelected;\n\n- (void)displayImage;\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWGridCell.m",
    "content": "//\n//  MWGridCell.m\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 08/10/2013.\n//\n//\n\n#import <DACircularProgress/DACircularProgressView.h>\n#import \"MWGridCell.h\"\n#import \"MWCommon.h\"\n#import \"MWPhotoBrowserPrivate.h\"\n#import \"UIImage+MWPhotoBrowser.h\"\n\n#define VIDEO_INDICATOR_PADDING 10\n\n@interface MWGridCell () {\n    \n    UIImageView *_imageView;\n    UIImageView *_videoIndicator;\n    UIImageView *_loadingError;\n\tDACircularProgressView *_loadingIndicator;\n    UIButton *_selectedButton;\n    \n}\n\n@end\n\n@implementation MWGridCell\n\n- (id)initWithFrame:(CGRect)frame {\n    if ((self = [super initWithFrame:frame])) {\n\n        // Grey background\n        self.backgroundColor = [UIColor colorWithWhite:0.12 alpha:1];\n        \n        // Image\n        _imageView = [UIImageView new];\n        _imageView.frame = self.bounds;\n        _imageView.contentMode = UIViewContentModeScaleAspectFill;\n        _imageView.clipsToBounds = YES;\n        _imageView.autoresizesSubviews = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;\n        [self addSubview:_imageView];\n        \n        // Video Image\n        _videoIndicator = [UIImageView new];\n        _videoIndicator.hidden = NO;\n        UIImage *videoIndicatorImage = [UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/VideoOverlay\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]];\n        _videoIndicator.frame = CGRectMake(self.bounds.size.width - videoIndicatorImage.size.width - VIDEO_INDICATOR_PADDING, self.bounds.size.height - videoIndicatorImage.size.height - VIDEO_INDICATOR_PADDING, videoIndicatorImage.size.width, videoIndicatorImage.size.height);\n        _videoIndicator.image = videoIndicatorImage;\n        _videoIndicator.autoresizesSubviews = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;\n        [self addSubview:_videoIndicator];\n        \n        // Selection button\n        _selectedButton = [UIButton buttonWithType:UIButtonTypeCustom];\n        _selectedButton.contentMode = UIViewContentModeTopRight;\n        _selectedButton.adjustsImageWhenHighlighted = NO;\n        [_selectedButton setImage:[UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/ImageSelectedSmallOff\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]] forState:UIControlStateNormal];\n        [_selectedButton setImage:[UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/ImageSelectedSmallOn\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]] forState:UIControlStateSelected];\n        [_selectedButton addTarget:self action:@selector(selectionButtonPressed) forControlEvents:UIControlEventTouchDown];\n        _selectedButton.hidden = YES;\n        _selectedButton.frame = CGRectMake(0, 0, 44, 44);\n        [self addSubview:_selectedButton];\n    \n\t\t// Loading indicator\n\t\t_loadingIndicator = [[DACircularProgressView alloc] initWithFrame:CGRectMake(0, 0, 40.0f, 40.0f)];\n        _loadingIndicator.userInteractionEnabled = NO;\n        _loadingIndicator.thicknessRatio = 0.1;\n        _loadingIndicator.roundedCorners = NO;\n\t\t[self addSubview:_loadingIndicator];\n        \n        // Listen for photo loading notifications\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(setProgressFromNotification:)\n                                                     name:MWPHOTO_PROGRESS_NOTIFICATION\n                                                   object:nil];\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(handleMWPhotoLoadingDidEndNotification:)\n                                                     name:MWPHOTO_LOADING_DID_END_NOTIFICATION\n                                                   object:nil];\n        \n    }\n    return self;\n}\n\n- (void)dealloc {\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n- (void)setGridController:(MWGridViewController *)gridController {\n    _gridController = gridController;\n    // Set custom selection image if required\n    if (_gridController.browser.customImageSelectedSmallIconName) {\n        [_selectedButton setImage:[UIImage imageNamed:_gridController.browser.customImageSelectedSmallIconName] forState:UIControlStateSelected];\n    }\n}\n\n#pragma mark - View\n\n- (void)layoutSubviews {\n    [super layoutSubviews];\n    _imageView.frame = self.bounds;\n    _loadingIndicator.frame = CGRectMake(floorf((self.bounds.size.width - _loadingIndicator.frame.size.width) / 2.),\n                                         floorf((self.bounds.size.height - _loadingIndicator.frame.size.height) / 2),\n                                         _loadingIndicator.frame.size.width,\n                                         _loadingIndicator.frame.size.height);\n    _selectedButton.frame = CGRectMake(self.bounds.size.width - _selectedButton.frame.size.width - 0,\n                                       0, _selectedButton.frame.size.width, _selectedButton.frame.size.height);\n}\n\n#pragma mark - Cell\n\n- (void)prepareForReuse {\n    _photo = nil;\n    _gridController = nil;\n    _imageView.image = nil;\n    _loadingIndicator.progress = 0;\n    _selectedButton.hidden = YES;\n    [self hideImageFailure];\n    [super prepareForReuse];\n}\n\n#pragma mark - Image Handling\n\n- (void)setPhoto:(id <MWPhoto>)photo {\n    _photo = photo;\n    if ([photo respondsToSelector:@selector(isVideo)]) {\n        _videoIndicator.hidden = !photo.isVideo;\n    } else {\n        _videoIndicator.hidden = YES;\n    }\n    if (_photo) {\n        if (![_photo underlyingImage]) {\n            [self showLoadingIndicator];\n        } else {\n            [self hideLoadingIndicator];\n        }\n    } else {\n        [self showImageFailure];\n    }\n}\n\n- (void)displayImage {\n    _imageView.image = [_photo underlyingImage];\n    _selectedButton.hidden = !_selectionMode;\n    [self hideImageFailure];\n}\n\n#pragma mark - Selection\n\n- (void)setSelectionMode:(BOOL)selectionMode {\n    _selectionMode = selectionMode;\n}\n\n- (void)setIsSelected:(BOOL)isSelected {\n    _isSelected = isSelected;\n    _selectedButton.selected = isSelected;\n}\n\n- (void)selectionButtonPressed {\n    _selectedButton.selected = !_selectedButton.selected;\n    [_gridController.browser setPhotoSelected:_selectedButton.selected atIndex:_index];\n}\n\n#pragma mark - Touches\n\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {\n    _imageView.alpha = 0.6;\n    [super touchesBegan:touches withEvent:event];\n}\n\n- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {\n    _imageView.alpha = 1;\n    [super touchesEnded:touches withEvent:event];\n}\n\n- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {\n    _imageView.alpha = 1;\n    [super touchesCancelled:touches withEvent:event];\n}\n\n#pragma mark Indicators\n\n- (void)hideLoadingIndicator {\n    _loadingIndicator.hidden = YES;\n}\n\n- (void)showLoadingIndicator {\n    _loadingIndicator.progress = 0;\n    _loadingIndicator.hidden = NO;\n    [self hideImageFailure];\n}\n\n- (void)showImageFailure {\n    // Only show if image is not empty\n    if (![_photo respondsToSelector:@selector(emptyImage)] || !_photo.emptyImage) {\n        if (!_loadingError) {\n            _loadingError = [UIImageView new];\n            _loadingError.image = [UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/ImageError\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]];\n            _loadingError.userInteractionEnabled = NO;\n            [_loadingError sizeToFit];\n            [self addSubview:_loadingError];\n        }\n        _loadingError.frame = CGRectMake(floorf((self.bounds.size.width - _loadingError.frame.size.width) / 2.),\n                                         floorf((self.bounds.size.height - _loadingError.frame.size.height) / 2),\n                                         _loadingError.frame.size.width,\n                                         _loadingError.frame.size.height);\n    }\n    [self hideLoadingIndicator];\n    _imageView.image = nil;\n}\n\n- (void)hideImageFailure {\n    if (_loadingError) {\n        [_loadingError removeFromSuperview];\n        _loadingError = nil;\n    }\n}\n\n#pragma mark - Notifications\n\n- (void)setProgressFromNotification:(NSNotification *)notification {\n    dispatch_async(dispatch_get_main_queue(), ^{\n        NSDictionary *dict = [notification object];\n        id <MWPhoto> photoWithProgress = [dict objectForKey:@\"photo\"];\n        if (photoWithProgress == _photo) {\n//            NSLog(@\"%f\", [[dict valueForKey:@\"progress\"] floatValue]);\n            float progress = [[dict valueForKey:@\"progress\"] floatValue];\n            _loadingIndicator.progress = MAX(MIN(1, progress), 0);\n        }\n    });\n}\n\n- (void)handleMWPhotoLoadingDidEndNotification:(NSNotification *)notification {\n    id <MWPhoto> photo = [notification object];\n    if (photo == _photo) {\n        if ([photo underlyingImage]) {\n            // Successful load\n            [self displayImage];\n        } else {\n            // Failed to load\n            [self showImageFailure];\n        }\n        [self hideLoadingIndicator];\n    }\n}\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWGridViewController.h",
    "content": "//\n//  MWGridViewController.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 08/10/2013.\n//\n//\n\n#import <UIKit/UIKit.h>\n#import \"MWPhotoBrowser.h\"\n\n@interface MWGridViewController : UICollectionViewController {}\n\n@property (nonatomic, assign) MWPhotoBrowser *browser;\n@property (nonatomic) BOOL selectionMode;\n@property (nonatomic) CGPoint initialContentOffset;\n\n- (void)adjustOffsetsAsRequired;\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWGridViewController.m",
    "content": "//\n//  MWGridViewController.m\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 08/10/2013.\n//\n//\n\n#import \"MWGridViewController.h\"\n#import \"MWGridCell.h\"\n#import \"MWPhotoBrowserPrivate.h\"\n#import \"MWCommon.h\"\n\n@interface MWGridViewController () {\n    \n    // Store margins for current setup\n    CGFloat _margin, _gutter, _marginL, _gutterL, _columns, _columnsL;\n    \n}\n\n@end\n\n@implementation MWGridViewController\n\n- (id)init {\n    if ((self = [super initWithCollectionViewLayout:[UICollectionViewFlowLayout new]])) {\n        \n        // Defaults\n        _columns = 3, _columnsL = 4;\n        _margin = 0, _gutter = 1;\n        _marginL = 0, _gutterL = 1;\n        \n        // For pixel perfection...\n        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {\n            // iPad\n            _columns = 6, _columnsL = 8;\n            _margin = 1, _gutter = 2;\n            _marginL = 1, _gutterL = 2;\n        } else if ([UIScreen mainScreen].bounds.size.height == 480) {\n            // iPhone 3.5 inch\n            _columns = 3, _columnsL = 4;\n            _margin = 0, _gutter = 1;\n            _marginL = 1, _gutterL = 2;\n        } else {\n            // iPhone 4 inch\n            _columns = 3, _columnsL = 5;\n            _margin = 0, _gutter = 1;\n            _marginL = 0, _gutterL = 2;\n        }\n\n        _initialContentOffset = CGPointMake(0, CGFLOAT_MAX);\n \n    }\n    return self;\n}\n\n#pragma mark - View\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    [self.collectionView registerClass:[MWGridCell class] forCellWithReuseIdentifier:@\"GridCell\"];\n    self.collectionView.alwaysBounceVertical = YES;\n    self.collectionView.backgroundColor = [UIColor blackColor];\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n    // Cancel outstanding loading\n    NSArray *visibleCells = [self.collectionView visibleCells];\n    if (visibleCells) {\n        for (MWGridCell *cell in visibleCells) {\n            [cell.photo cancelAnyLoading];\n        }\n    }\n    [super viewWillDisappear:animated];\n}\n\n- (void)viewWillLayoutSubviews {\n    [super viewWillLayoutSubviews];\n    [self performLayout];\n}\n\n- (void)viewDidLayoutSubviews {\n    [super viewDidLayoutSubviews];\n}\n\n- (void)adjustOffsetsAsRequired {\n    \n    // Move to previous content offset\n    if (_initialContentOffset.y != CGFLOAT_MAX) {\n        self.collectionView.contentOffset = _initialContentOffset;\n        [self.collectionView layoutIfNeeded]; // Layout after content offset change\n    }\n    \n    // Check if current item is visible and if not, make it so!\n    if (_browser.numberOfPhotos > 0) {\n        NSIndexPath *currentPhotoIndexPath = [NSIndexPath indexPathForItem:_browser.currentIndex inSection:0];\n        NSArray *visibleIndexPaths = [self.collectionView indexPathsForVisibleItems];\n        BOOL currentVisible = NO;\n        for (NSIndexPath *indexPath in visibleIndexPaths) {\n            if ([indexPath isEqual:currentPhotoIndexPath]) {\n                currentVisible = YES;\n                break;\n            }\n        }\n        if (!currentVisible) {\n            [self.collectionView scrollToItemAtIndexPath:currentPhotoIndexPath atScrollPosition:UICollectionViewScrollPositionNone animated:NO];\n        }\n    }\n    \n}\n\n- (void)performLayout {\n    UINavigationBar *navBar = self.navigationController.navigationBar;\n    self.collectionView.contentInset = UIEdgeInsetsMake(navBar.frame.origin.y + navBar.frame.size.height + [self getGutter], 0, 0, 0);\n}\n\n- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {\n    [self.collectionView reloadData];\n    [self performLayout]; // needed for iOS 5 & 6\n}\n\n#pragma mark - Layout\n\n- (CGFloat)getColumns {\n    if ((UIInterfaceOrientationIsPortrait(self.interfaceOrientation))) {\n        return _columns;\n    } else {\n        return _columnsL;\n    }\n}\n\n- (CGFloat)getMargin {\n    if ((UIInterfaceOrientationIsPortrait(self.interfaceOrientation))) {\n        return _margin;\n    } else {\n        return _marginL;\n    }\n}\n\n- (CGFloat)getGutter {\n    if ((UIInterfaceOrientationIsPortrait(self.interfaceOrientation))) {\n        return _gutter;\n    } else {\n        return _gutterL;\n    }\n}\n\n#pragma mark - Collection View\n\n- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section {\n    return [_browser numberOfPhotos];\n}\n\n- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {\n    MWGridCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@\"GridCell\" forIndexPath:indexPath];\n    if (!cell) {\n        cell = [[MWGridCell alloc] init];\n    }\n    id <MWPhoto> photo = [_browser thumbPhotoAtIndex:indexPath.row];\n    cell.photo = photo;\n    cell.gridController = self;\n    cell.selectionMode = _selectionMode;\n    cell.isSelected = [_browser photoIsSelectedAtIndex:indexPath.row];\n    cell.index = indexPath.row;\n    UIImage *img = [_browser imageForPhoto:photo];\n    if (img) {\n        [cell displayImage];\n    } else {\n        [photo loadUnderlyingImageAndNotify];\n    }\n    return cell;\n}\n\n- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {\n    [_browser setCurrentPhotoIndex:indexPath.row];\n    [_browser hideGrid];\n}\n\n- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {\n    [((MWGridCell *)cell).photo cancelAnyLoading];\n}\n\n- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {\n    CGFloat margin = [self getMargin];\n    CGFloat gutter = [self getGutter];\n    CGFloat columns = [self getColumns];\n    CGFloat value = floorf(((self.view.bounds.size.width - (columns - 1) * gutter - 2 * margin) / columns));\n    return CGSizeMake(value, value);\n}\n\n- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {\n    return [self getGutter];\n}\n\n- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {\n    return [self getGutter];\n}\n\n- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {\n    CGFloat margin = [self getMargin];\n    return UIEdgeInsetsMake(margin, margin, margin, margin);\n}\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWPhoto.h",
    "content": "//\n//  MWPhoto.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 17/10/2010.\n//  Copyright 2010 d3i. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <Photos/Photos.h>\n#import \"MWPhotoProtocol.h\"\n\n// This class models a photo/image and it's caption\n// If you want to handle photos, caching, decompression\n// yourself then you can simply ensure your custom data model\n// conforms to MWPhotoProtocol\n@interface MWPhoto : NSObject <MWPhoto>\n\n@property (nonatomic, strong) NSString *caption;\n@property (nonatomic, strong) NSURL *videoURL;\n@property (nonatomic) BOOL emptyImage;\n@property (nonatomic) BOOL isVideo;\n\n+ (MWPhoto *)photoWithImage:(UIImage *)image;\n+ (MWPhoto *)photoWithURL:(NSURL *)url;\n+ (MWPhoto *)photoWithAsset:(PHAsset *)asset targetSize:(CGSize)targetSize;\n+ (MWPhoto *)videoWithURL:(NSURL *)url; // Initialise video with no poster image\n\n- (id)init;\n- (id)initWithImage:(UIImage *)image;\n- (id)initWithURL:(NSURL *)url;\n- (id)initWithAsset:(PHAsset *)asset targetSize:(CGSize)targetSize;\n- (id)initWithVideoURL:(NSURL *)url;\n\n@end\n\n"
  },
  {
    "path": "Pod/Classes/MWPhoto.m",
    "content": "//\n//  MWPhoto.m\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 17/10/2010.\n//  Copyright 2010 d3i. All rights reserved.\n//\n\n#import <SDWebImage/SDWebImageDecoder.h>\n#import <SDWebImage/SDWebImageManager.h>\n#import <SDWebImage/SDWebImageOperation.h>\n#import <AssetsLibrary/AssetsLibrary.h>\n#import \"MWPhoto.h\"\n#import \"MWPhotoBrowser.h\"\n\n@interface MWPhoto () {\n\n    BOOL _loadingInProgress;\n    id <SDWebImageOperation> _webImageOperation;\n    PHImageRequestID _assetRequestID;\n    PHImageRequestID _assetVideoRequestID;\n        \n}\n\n@property (nonatomic, strong) UIImage *image;\n@property (nonatomic, strong) NSURL *photoURL;\n@property (nonatomic, strong) PHAsset *asset;\n@property (nonatomic) CGSize assetTargetSize;\n\n- (void)imageLoadingComplete;\n\n@end\n\n@implementation MWPhoto\n\n@synthesize underlyingImage = _underlyingImage; // synth property from protocol\n\n#pragma mark - Class Methods\n\n+ (MWPhoto *)photoWithImage:(UIImage *)image {\n\treturn [[MWPhoto alloc] initWithImage:image];\n}\n\n+ (MWPhoto *)photoWithURL:(NSURL *)url {\n    return [[MWPhoto alloc] initWithURL:url];\n}\n\n+ (MWPhoto *)photoWithAsset:(PHAsset *)asset targetSize:(CGSize)targetSize {\n    return [[MWPhoto alloc] initWithAsset:asset targetSize:targetSize];\n}\n\n+ (MWPhoto *)videoWithURL:(NSURL *)url {\n    return [[MWPhoto alloc] initWithVideoURL:url];\n}\n\n#pragma mark - Init\n\n- (id)init {\n    if ((self = [super init])) {\n        self.emptyImage = YES;\n        [self setup];\n    }\n    return self;\n}\n\n- (id)initWithImage:(UIImage *)image {\n    if ((self = [super init])) {\n        self.image = image;\n        [self setup];\n    }\n    return self;\n}\n\n- (id)initWithURL:(NSURL *)url {\n    if ((self = [super init])) {\n        self.photoURL = url;\n        [self setup];\n    }\n    return self;\n}\n\n- (id)initWithAsset:(PHAsset *)asset targetSize:(CGSize)targetSize {\n    if ((self = [super init])) {\n        self.asset = asset;\n        self.assetTargetSize = targetSize;\n        self.isVideo = asset.mediaType == PHAssetMediaTypeVideo;\n        [self setup];\n    }\n    return self;\n}\n\n- (id)initWithVideoURL:(NSURL *)url {\n    if ((self = [super init])) {\n        self.videoURL = url;\n        self.isVideo = YES;\n        self.emptyImage = YES;\n        [self setup];\n    }\n    return self;\n}\n\n- (void)setup {\n    _assetRequestID = PHInvalidImageRequestID;\n    _assetVideoRequestID = PHInvalidImageRequestID;\n}\n\n- (void)dealloc {\n    [self cancelAnyLoading];\n}\n\n#pragma mark - Video\n\n- (void)setVideoURL:(NSURL *)videoURL {\n    _videoURL = videoURL;\n    self.isVideo = YES;\n}\n\n- (void)getVideoURL:(void (^)(NSURL *url))completion {\n    if (_videoURL) {\n        completion(_videoURL);\n    } else if (_asset && _asset.mediaType == PHAssetMediaTypeVideo) {\n        [self cancelVideoRequest]; // Cancel any existing\n        PHVideoRequestOptions *options = [PHVideoRequestOptions new];\n        options.networkAccessAllowed = YES;\n        typeof(self) __weak weakSelf = self;\n        _assetVideoRequestID = [[PHImageManager defaultManager] requestAVAssetForVideo:_asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {\n            \n            // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ // Testing\n            typeof(self) strongSelf = weakSelf;\n            if (!strongSelf) return;\n            strongSelf->_assetVideoRequestID = PHInvalidImageRequestID;\n            if ([asset isKindOfClass:[AVURLAsset class]]) {\n                completion(((AVURLAsset *)asset).URL);\n            } else {\n                completion(nil);\n            }\n            \n        }];\n    }\n}\n\n#pragma mark - MWPhoto Protocol Methods\n\n- (UIImage *)underlyingImage {\n    return _underlyingImage;\n}\n\n- (void)loadUnderlyingImageAndNotify {\n    NSAssert([[NSThread currentThread] isMainThread], @\"This method must be called on the main thread.\");\n    if (_loadingInProgress) return;\n    _loadingInProgress = YES;\n    @try {\n        if (self.underlyingImage) {\n            [self imageLoadingComplete];\n        } else {\n            [self performLoadUnderlyingImageAndNotify];\n        }\n    }\n    @catch (NSException *exception) {\n        self.underlyingImage = nil;\n        _loadingInProgress = NO;\n        [self imageLoadingComplete];\n    }\n    @finally {\n    }\n}\n\n// Set the underlyingImage\n- (void)performLoadUnderlyingImageAndNotify {\n    \n    // Get underlying image\n    if (_image) {\n        \n        // We have UIImage!\n        self.underlyingImage = _image;\n        [self imageLoadingComplete];\n        \n    } else if (_photoURL) {\n        \n        // Check what type of url it is\n        if ([[[_photoURL scheme] lowercaseString] isEqualToString:@\"assets-library\"]) {\n            \n            // Load from assets library\n            [self _performLoadUnderlyingImageAndNotifyWithAssetsLibraryURL: _photoURL];\n            \n        } else if ([_photoURL isFileReferenceURL]) {\n            \n            // Load from local file async\n            [self _performLoadUnderlyingImageAndNotifyWithLocalFileURL: _photoURL];\n            \n        } else {\n            \n            // Load async from web (using SDWebImage)\n            [self _performLoadUnderlyingImageAndNotifyWithWebURL: _photoURL];\n            \n        }\n        \n    } else if (_asset) {\n        \n        // Load from photos asset\n        [self _performLoadUnderlyingImageAndNotifyWithAsset: _asset targetSize:_assetTargetSize];\n        \n    } else {\n        \n        // Image is empty\n        [self imageLoadingComplete];\n        \n    }\n}\n\n// Load from local file\n- (void)_performLoadUnderlyingImageAndNotifyWithWebURL:(NSURL *)url {\n    @try {\n        SDWebImageManager *manager = [SDWebImageManager sharedManager];\n        _webImageOperation = [manager downloadImageWithURL:url\n                                                   options:0\n                                                  progress:^(NSInteger receivedSize, NSInteger expectedSize) {\n                                                      if (expectedSize > 0) {\n                                                          float progress = receivedSize / (float)expectedSize;\n                                                          NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:\n                                                                                [NSNumber numberWithFloat:progress], @\"progress\",\n                                                                                self, @\"photo\", nil];\n                                                          [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_PROGRESS_NOTIFICATION object:dict];\n                                                      }\n                                                  }\n                                                 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {\n                                                     if (error) {\n                                                         MWLog(@\"SDWebImage failed to download image: %@\", error);\n                                                     }\n                                                     _webImageOperation = nil;\n                                                     self.underlyingImage = image;\n                                                     dispatch_async(dispatch_get_main_queue(), ^{\n                                                         [self imageLoadingComplete];\n                                                     });\n                                                 }];\n    } @catch (NSException *e) {\n        MWLog(@\"Photo from web: %@\", e);\n        _webImageOperation = nil;\n        [self imageLoadingComplete];\n    }\n}\n\n// Load from local file\n- (void)_performLoadUnderlyingImageAndNotifyWithLocalFileURL:(NSURL *)url {\n    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n        @autoreleasepool {\n            @try {\n                self.underlyingImage = [UIImage imageWithContentsOfFile:url.path];\n                if (!_underlyingImage) {\n                    MWLog(@\"Error loading photo from path: %@\", url.path);\n                }\n            } @finally {\n                [self performSelectorOnMainThread:@selector(imageLoadingComplete) withObject:nil waitUntilDone:NO];\n            }\n        }\n    });\n}\n\n// Load from asset library async\n- (void)_performLoadUnderlyingImageAndNotifyWithAssetsLibraryURL:(NSURL *)url {\n    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n        @autoreleasepool {\n            @try {\n                ALAssetsLibrary *assetslibrary = [[ALAssetsLibrary alloc] init];\n                [assetslibrary assetForURL:url\n                               resultBlock:^(ALAsset *asset){\n                                   ALAssetRepresentation *rep = [asset defaultRepresentation];\n                                   CGImageRef iref = [rep fullScreenImage];\n                                   if (iref) {\n                                       self.underlyingImage = [UIImage imageWithCGImage:iref];\n                                   }\n                                   [self performSelectorOnMainThread:@selector(imageLoadingComplete) withObject:nil waitUntilDone:NO];\n                               }\n                              failureBlock:^(NSError *error) {\n                                  self.underlyingImage = nil;\n                                  MWLog(@\"Photo from asset library error: %@\",error);\n                                  [self performSelectorOnMainThread:@selector(imageLoadingComplete) withObject:nil waitUntilDone:NO];\n                              }];\n            } @catch (NSException *e) {\n                MWLog(@\"Photo from asset library error: %@\", e);\n                [self performSelectorOnMainThread:@selector(imageLoadingComplete) withObject:nil waitUntilDone:NO];\n            }\n        }\n    });\n}\n\n// Load from photos library\n- (void)_performLoadUnderlyingImageAndNotifyWithAsset:(PHAsset *)asset targetSize:(CGSize)targetSize {\n    \n    PHImageManager *imageManager = [PHImageManager defaultManager];\n    \n    PHImageRequestOptions *options = [PHImageRequestOptions new];\n    options.networkAccessAllowed = YES;\n    options.resizeMode = PHImageRequestOptionsResizeModeFast;\n    options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;\n    options.synchronous = false;\n    options.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *info) {\n        NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:\n                              [NSNumber numberWithDouble: progress], @\"progress\",\n                              self, @\"photo\", nil];\n        [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_PROGRESS_NOTIFICATION object:dict];\n    };\n    \n    _assetRequestID = [imageManager requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeAspectFit options:options resultHandler:^(UIImage *result, NSDictionary *info) {\n        dispatch_async(dispatch_get_main_queue(), ^{\n            self.underlyingImage = result;\n            [self imageLoadingComplete];\n        });\n    }];\n\n}\n\n// Release if we can get it again from path or url\n- (void)unloadUnderlyingImage {\n    _loadingInProgress = NO;\n\tself.underlyingImage = nil;\n}\n\n- (void)imageLoadingComplete {\n    NSAssert([[NSThread currentThread] isMainThread], @\"This method must be called on the main thread.\");\n    // Complete so notify\n    _loadingInProgress = NO;\n    // Notify on next run loop\n    [self performSelector:@selector(postCompleteNotification) withObject:nil afterDelay:0];\n}\n\n- (void)postCompleteNotification {\n    [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_LOADING_DID_END_NOTIFICATION\n                                                        object:self];\n}\n\n- (void)cancelAnyLoading {\n    if (_webImageOperation != nil) {\n        [_webImageOperation cancel];\n        _loadingInProgress = NO;\n    }\n    [self cancelImageRequest];\n    [self cancelVideoRequest];\n}\n\n- (void)cancelImageRequest {\n    if (_assetRequestID != PHInvalidImageRequestID) {\n        [[PHImageManager defaultManager] cancelImageRequest:_assetRequestID];\n        _assetRequestID = PHInvalidImageRequestID;\n    }\n}\n\n- (void)cancelVideoRequest {\n    if (_assetVideoRequestID != PHInvalidImageRequestID) {\n        [[PHImageManager defaultManager] cancelImageRequest:_assetVideoRequestID];\n        _assetVideoRequestID = PHInvalidImageRequestID;\n    }\n}\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWPhotoBrowser.h",
    "content": "//\n//  MWPhotoBrowser.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 14/10/2010.\n//  Copyright 2010 d3i. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"MWPhoto.h\"\n#import \"MWPhotoProtocol.h\"\n#import \"MWCaptionView.h\"\n\n// Debug Logging\n#if 0 // Set to 1 to enable debug logging\n#define MWLog(x, ...) NSLog(x, ## __VA_ARGS__);\n#else\n#define MWLog(x, ...)\n#endif\n\n@class MWPhotoBrowser;\n\n@protocol MWPhotoBrowserDelegate <NSObject>\n\n- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser;\n- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index;\n\n@optional\n\n- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index;\n- (MWCaptionView *)photoBrowser:(MWPhotoBrowser *)photoBrowser captionViewForPhotoAtIndex:(NSUInteger)index;\n- (NSString *)photoBrowser:(MWPhotoBrowser *)photoBrowser titleForPhotoAtIndex:(NSUInteger)index;\n- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser didDisplayPhotoAtIndex:(NSUInteger)index;\n- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser actionButtonPressedForPhotoAtIndex:(NSUInteger)index;\n- (BOOL)photoBrowser:(MWPhotoBrowser *)photoBrowser isPhotoSelectedAtIndex:(NSUInteger)index;\n- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index selectedChanged:(BOOL)selected;\n- (void)photoBrowserDidFinishModalPresentation:(MWPhotoBrowser *)photoBrowser;\n\n@end\n\n@interface MWPhotoBrowser : UIViewController <UIScrollViewDelegate, UIActionSheetDelegate>\n\n@property (nonatomic, weak) IBOutlet id<MWPhotoBrowserDelegate> delegate;\n@property (nonatomic) BOOL zoomPhotosToFill;\n@property (nonatomic) BOOL displayNavArrows;\n@property (nonatomic) BOOL displayActionButton;\n@property (nonatomic) BOOL displaySelectionButtons;\n@property (nonatomic) BOOL alwaysShowControls;\n@property (nonatomic) BOOL enableGrid;\n@property (nonatomic) BOOL enableSwipeToDismiss;\n@property (nonatomic) BOOL startOnGrid;\n@property (nonatomic) BOOL autoPlayOnAppear;\n@property (nonatomic) NSUInteger delayToHideElements;\n@property (nonatomic, readonly) NSUInteger currentIndex;\n\n// Customise image selection icons as they are the only icons with a colour tint\n// Icon should be located in the app's main bundle\n@property (nonatomic, strong) NSString *customImageSelectedIconName;\n@property (nonatomic, strong) NSString *customImageSelectedSmallIconName;\n\n// Init\n- (id)initWithPhotos:(NSArray *)photosArray;\n- (id)initWithDelegate:(id <MWPhotoBrowserDelegate>)delegate;\n\n// Reloads the photo browser and refetches data\n- (void)reloadData;\n\n// Set page that photo browser starts on\n- (void)setCurrentPhotoIndex:(NSUInteger)index;\n\n// Navigation\n- (void)showNextPhotoAnimated:(BOOL)animated;\n- (void)showPreviousPhotoAnimated:(BOOL)animated;\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWPhotoBrowser.m",
    "content": "//\n//  MWPhotoBrowser.m\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 14/10/2010.\n//  Copyright 2010 d3i. All rights reserved.\n//\n\n#import <QuartzCore/QuartzCore.h>\n#import \"MWCommon.h\"\n#import \"MWPhotoBrowser.h\"\n#import \"MWPhotoBrowserPrivate.h\"\n#import \"SDImageCache.h\"\n#import \"UIImage+MWPhotoBrowser.h\"\n\n#define PADDING                  10\n\nstatic void * MWVideoPlayerObservation = &MWVideoPlayerObservation;\n\n@implementation MWPhotoBrowser\n\n#pragma mark - Init\n\n- (id)init {\n    if ((self = [super init])) {\n        [self _initialisation];\n    }\n    return self;\n}\n\n- (id)initWithDelegate:(id <MWPhotoBrowserDelegate>)delegate {\n    if ((self = [self init])) {\n        _delegate = delegate;\n\t}\n\treturn self;\n}\n\n- (id)initWithPhotos:(NSArray *)photosArray {\n\tif ((self = [self init])) {\n\t\t_fixedPhotosArray = photosArray;\n\t}\n\treturn self;\n}\n\n- (id)initWithCoder:(NSCoder *)decoder {\n\tif ((self = [super initWithCoder:decoder])) {\n        [self _initialisation];\n\t}\n\treturn self;\n}\n\n- (void)_initialisation {\n    \n    // Defaults\n    NSNumber *isVCBasedStatusBarAppearanceNum = [[NSBundle mainBundle] objectForInfoDictionaryKey:@\"UIViewControllerBasedStatusBarAppearance\"];\n    if (isVCBasedStatusBarAppearanceNum) {\n        _isVCBasedStatusBarAppearance = isVCBasedStatusBarAppearanceNum.boolValue;\n    } else {\n        _isVCBasedStatusBarAppearance = YES; // default\n    }\n    self.hidesBottomBarWhenPushed = YES;\n    _hasBelongedToViewController = NO;\n    _photoCount = NSNotFound;\n    _previousLayoutBounds = CGRectZero;\n    _currentPageIndex = 0;\n    _previousPageIndex = NSUIntegerMax;\n    _currentVideoIndex = NSUIntegerMax;\n    _displayActionButton = YES;\n    _displayNavArrows = NO;\n    _zoomPhotosToFill = YES;\n    _performingLayout = NO; // Reset on view did appear\n    _rotating = NO;\n    _viewIsActive = NO;\n    _enableGrid = YES;\n    _startOnGrid = NO;\n    _enableSwipeToDismiss = YES;\n    _delayToHideElements = 5;\n    _visiblePages = [[NSMutableSet alloc] init];\n    _recycledPages = [[NSMutableSet alloc] init];\n    _photos = [[NSMutableArray alloc] init];\n    _thumbPhotos = [[NSMutableArray alloc] init];\n    _currentGridContentOffset = CGPointMake(0, CGFLOAT_MAX);\n    _didSavePreviousStateOfNavBar = NO;\n    self.automaticallyAdjustsScrollViewInsets = NO;\n    \n    // Listen for MWPhoto notifications\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(handleMWPhotoLoadingDidEndNotification:)\n                                                 name:MWPHOTO_LOADING_DID_END_NOTIFICATION\n                                               object:nil];\n    \n}\n\n- (void)dealloc {\n    [self clearCurrentVideo];\n    _pagingScrollView.delegate = nil;\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n    [self releaseAllUnderlyingPhotos:NO];\n    [[SDImageCache sharedImageCache] clearMemory]; // clear memory\n}\n\n- (void)releaseAllUnderlyingPhotos:(BOOL)preserveCurrent {\n    // Create a copy in case this array is modified while we are looping through\n    // Release photos\n    NSArray *copy = [_photos copy];\n    for (id p in copy) {\n        if (p != [NSNull null]) {\n            if (preserveCurrent && p == [self photoAtIndex:self.currentIndex]) {\n                continue; // skip current\n            }\n            [p unloadUnderlyingImage];\n        }\n    }\n    // Release thumbs\n    copy = [_thumbPhotos copy];\n    for (id p in copy) {\n        if (p != [NSNull null]) {\n            [p unloadUnderlyingImage];\n        }\n    }\n}\n\n- (void)didReceiveMemoryWarning {\n\n\t// Release any cached data, images, etc that aren't in use.\n    [self releaseAllUnderlyingPhotos:YES];\n\t[_recycledPages removeAllObjects];\n\t\n\t// Releases the view if it doesn't have a superview.\n    [super didReceiveMemoryWarning];\n\t\n}\n\n#pragma mark - View Loading\n\n// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.\n- (void)viewDidLoad {\n    \n    // Validate grid settings\n    if (_startOnGrid) _enableGrid = YES;\n    if (_enableGrid) {\n        _enableGrid = [_delegate respondsToSelector:@selector(photoBrowser:thumbPhotoAtIndex:)];\n    }\n    if (!_enableGrid) _startOnGrid = NO;\n\t\n\t// View\n\tself.view.backgroundColor = [UIColor blackColor];\n    self.view.clipsToBounds = YES;\n\t\n\t// Setup paging scrolling view\n\tCGRect pagingScrollViewFrame = [self frameForPagingScrollView];\n\t_pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame];\n\t_pagingScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n\t_pagingScrollView.pagingEnabled = YES;\n\t_pagingScrollView.delegate = self;\n\t_pagingScrollView.showsHorizontalScrollIndicator = NO;\n\t_pagingScrollView.showsVerticalScrollIndicator = NO;\n\t_pagingScrollView.backgroundColor = [UIColor blackColor];\n    _pagingScrollView.contentSize = [self contentSizeForPagingScrollView];\n\t[self.view addSubview:_pagingScrollView];\n\t\n    // Toolbar\n    _toolbar = [[UIToolbar alloc] initWithFrame:[self frameForToolbarAtOrientation:self.interfaceOrientation]];\n    _toolbar.tintColor = [UIColor whiteColor];\n    _toolbar.barTintColor = nil;\n    [_toolbar setBackgroundImage:nil forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];\n    [_toolbar setBackgroundImage:nil forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsLandscapePhone];\n    _toolbar.barStyle = UIBarStyleBlackTranslucent;\n    _toolbar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;\n    \n    // Toolbar Items\n    if (self.displayNavArrows) {\n        NSString *arrowPathFormat = @\"MWPhotoBrowser.bundle/UIBarButtonItemArrow%@\";\n        UIImage *previousButtonImage = [UIImage imageForResourcePath:[NSString stringWithFormat:arrowPathFormat, @\"Left\"] ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]];\n        UIImage *nextButtonImage = [UIImage imageForResourcePath:[NSString stringWithFormat:arrowPathFormat, @\"Right\"] ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]];\n        _previousButton = [[UIBarButtonItem alloc] initWithImage:previousButtonImage style:UIBarButtonItemStylePlain target:self action:@selector(gotoPreviousPage)];\n        _nextButton = [[UIBarButtonItem alloc] initWithImage:nextButtonImage style:UIBarButtonItemStylePlain target:self action:@selector(gotoNextPage)];\n    }\n    if (self.displayActionButton) {\n        _actionButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(actionButtonPressed:)];\n    }\n    \n    // Update\n    [self reloadData];\n    \n    // Swipe to dismiss\n    if (_enableSwipeToDismiss) {\n        UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doneButtonPressed:)];\n        swipeGesture.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp;\n        [self.view addGestureRecognizer:swipeGesture];\n    }\n    \n\t// Super\n    [super viewDidLoad];\n\t\n}\n\n- (void)performLayout {\n    \n    // Setup\n    _performingLayout = YES;\n    NSUInteger numberOfPhotos = [self numberOfPhotos];\n    \n\t// Setup pages\n    [_visiblePages removeAllObjects];\n    [_recycledPages removeAllObjects];\n    \n    // Navigation buttons\n    if ([self.navigationController.viewControllers objectAtIndex:0] == self) {\n        // We're first on stack so show done button\n        _doneButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@\"Done\", nil) style:UIBarButtonItemStylePlain target:self action:@selector(doneButtonPressed:)];\n        // Set appearance\n        [_doneButton setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];\n        [_doneButton setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];\n        [_doneButton setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];\n        [_doneButton setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsLandscapePhone];\n        [_doneButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateNormal];\n        [_doneButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateHighlighted];\n        self.navigationItem.rightBarButtonItem = _doneButton;\n    } else {\n        // We're not first so show back button\n        UIViewController *previousViewController = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-2];\n        NSString *backButtonTitle = previousViewController.navigationItem.backBarButtonItem ? previousViewController.navigationItem.backBarButtonItem.title : previousViewController.title;\n        UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:backButtonTitle style:UIBarButtonItemStylePlain target:nil action:nil];\n        // Appearance\n        [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];\n        [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];\n        [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];\n        [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsLandscapePhone];\n        [newBackButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateNormal];\n        [newBackButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateHighlighted];\n        _previousViewControllerBackButton = previousViewController.navigationItem.backBarButtonItem; // remember previous\n        previousViewController.navigationItem.backBarButtonItem = newBackButton;\n    }\n\n    // Toolbar items\n    BOOL hasItems = NO;\n    UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];\n    fixedSpace.width = 32; // To balance action button\n    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];\n    NSMutableArray *items = [[NSMutableArray alloc] init];\n\n    // Left button - Grid\n    if (_enableGrid) {\n        hasItems = YES;\n        [items addObject:[[UIBarButtonItem alloc] initWithImage:[UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/UIBarButtonItemGrid\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]] style:UIBarButtonItemStylePlain target:self action:@selector(showGridAnimated)]];\n    } else {\n        [items addObject:fixedSpace];\n    }\n\n    // Middle - Nav\n    if (_previousButton && _nextButton && numberOfPhotos > 1) {\n        hasItems = YES;\n        [items addObject:flexSpace];\n        [items addObject:_previousButton];\n        [items addObject:flexSpace];\n        [items addObject:_nextButton];\n        [items addObject:flexSpace];\n    } else {\n        [items addObject:flexSpace];\n    }\n\n    // Right - Action\n    if (_actionButton && !(!hasItems && !self.navigationItem.rightBarButtonItem)) {\n        [items addObject:_actionButton];\n    } else {\n        // We're not showing the toolbar so try and show in top right\n        if (_actionButton)\n            self.navigationItem.rightBarButtonItem = _actionButton;\n        [items addObject:fixedSpace];\n    }\n\n    // Toolbar visibility\n    [_toolbar setItems:items];\n    BOOL hideToolbar = YES;\n    for (UIBarButtonItem* item in _toolbar.items) {\n        if (item != fixedSpace && item != flexSpace) {\n            hideToolbar = NO;\n            break;\n        }\n    }\n    if (hideToolbar) {\n        [_toolbar removeFromSuperview];\n    } else {\n        [self.view addSubview:_toolbar];\n    }\n    \n    // Update nav\n\t[self updateNavigation];\n    \n    // Content offset\n\t_pagingScrollView.contentOffset = [self contentOffsetForPageAtIndex:_currentPageIndex];\n    [self tilePages];\n    _performingLayout = NO;\n    \n}\n\n// Release any retained subviews of the main view.\n- (void)viewDidUnload {\n\t_currentPageIndex = 0;\n    _pagingScrollView = nil;\n    _visiblePages = nil;\n    _recycledPages = nil;\n    _toolbar = nil;\n    _previousButton = nil;\n    _nextButton = nil;\n    _progressHUD = nil;\n    [super viewDidUnload];\n}\n\n- (BOOL)presentingViewControllerPrefersStatusBarHidden {\n    UIViewController *presenting = self.presentingViewController;\n    if (presenting) {\n        if ([presenting isKindOfClass:[UINavigationController class]]) {\n            presenting = [(UINavigationController *)presenting topViewController];\n        }\n    } else {\n        // We're in a navigation controller so get previous one!\n        if (self.navigationController && self.navigationController.viewControllers.count > 1) {\n            presenting = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-2];\n        }\n    }\n    if (presenting) {\n        return [presenting prefersStatusBarHidden];\n    } else {\n        return NO;\n    }\n}\n\n#pragma mark - Appearance\n\n- (void)viewWillAppear:(BOOL)animated {\n    \n\t// Super\n\t[super viewWillAppear:animated];\n    \n    // Status bar\n    if (!_viewHasAppearedInitially) {\n        _leaveStatusBarAlone = [self presentingViewControllerPrefersStatusBarHidden];\n        // Check if status bar is hidden on first appear, and if so then ignore it\n        if (CGRectEqualToRect([[UIApplication sharedApplication] statusBarFrame], CGRectZero)) {\n            _leaveStatusBarAlone = YES;\n        }\n    }\n    // Set style\n    if (!_leaveStatusBarAlone && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {\n        _previousStatusBarStyle = [[UIApplication sharedApplication] statusBarStyle];\n        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:animated];\n    }\n    \n    // Navigation bar appearance\n    if (!_viewIsActive && [self.navigationController.viewControllers objectAtIndex:0] != self) {\n        [self storePreviousNavBarAppearance];\n    }\n    [self setNavBarAppearance:animated];\n    \n    // Update UI\n\t[self hideControlsAfterDelay];\n    \n    // Initial appearance\n    if (!_viewHasAppearedInitially) {\n        if (_startOnGrid) {\n            [self showGrid:NO];\n        }\n    }\n    \n    // If rotation occured while we're presenting a modal\n    // and the index changed, make sure we show the right one now\n    if (_currentPageIndex != _pageIndexBeforeRotation) {\n        [self jumpToPageAtIndex:_pageIndexBeforeRotation animated:NO];\n    }\n    \n    // Layout\n    [self.view setNeedsLayout];\n\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n    [super viewDidAppear:animated];\n    _viewIsActive = YES;\n    \n    // Autoplay if first is video\n    if (!_viewHasAppearedInitially) {\n        if (_autoPlayOnAppear) {\n            MWPhoto *photo = [self photoAtIndex:_currentPageIndex];\n            if ([photo respondsToSelector:@selector(isVideo)] && photo.isVideo) {\n                [self playVideoAtIndex:_currentPageIndex];\n            }\n        }\n    }\n    \n    _viewHasAppearedInitially = YES;\n        \n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n    \n    // Detect if rotation occurs while we're presenting a modal\n    _pageIndexBeforeRotation = _currentPageIndex;\n    \n    // Check that we're disappearing for good\n    // self.isMovingFromParentViewController just doesn't work, ever. Or self.isBeingDismissed\n    if ((_doneButton && self.navigationController.isBeingDismissed) ||\n        ([self.navigationController.viewControllers objectAtIndex:0] != self && ![self.navigationController.viewControllers containsObject:self])) {\n\n        // State\n        _viewIsActive = NO;\n        [self clearCurrentVideo]; // Clear current playing video\n        \n        // Bar state / appearance\n        [self restorePreviousNavBarAppearance:animated];\n        \n    }\n    \n    // Controls\n    [self.navigationController.navigationBar.layer removeAllAnimations]; // Stop all animations on nav bar\n    [NSObject cancelPreviousPerformRequestsWithTarget:self]; // Cancel any pending toggles from taps\n    [self setControlsHidden:NO animated:NO permanent:YES];\n    \n    // Status bar\n    if (!_leaveStatusBarAlone && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {\n        [[UIApplication sharedApplication] setStatusBarStyle:_previousStatusBarStyle animated:animated];\n    }\n    \n\t// Super\n\t[super viewWillDisappear:animated];\n    \n}\n\n- (void)willMoveToParentViewController:(UIViewController *)parent {\n    if (parent && _hasBelongedToViewController) {\n        [NSException raise:@\"MWPhotoBrowser Instance Reuse\" format:@\"MWPhotoBrowser instances cannot be reused.\"];\n    }\n}\n\n- (void)didMoveToParentViewController:(UIViewController *)parent {\n    if (!parent) _hasBelongedToViewController = YES;\n}\n\n#pragma mark - Nav Bar Appearance\n\n- (void)setNavBarAppearance:(BOOL)animated {\n    [self.navigationController setNavigationBarHidden:NO animated:animated];\n    UINavigationBar *navBar = self.navigationController.navigationBar;\n    navBar.tintColor = [UIColor whiteColor];\n    navBar.barTintColor = nil;\n    navBar.shadowImage = nil;\n    navBar.translucent = YES;\n    navBar.barStyle = UIBarStyleBlackTranslucent;\n    [navBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];\n    [navBar setBackgroundImage:nil forBarMetrics:UIBarMetricsLandscapePhone];\n}\n\n- (void)storePreviousNavBarAppearance {\n    _didSavePreviousStateOfNavBar = YES;\n    _previousNavBarBarTintColor = self.navigationController.navigationBar.barTintColor;\n    _previousNavBarTranslucent = self.navigationController.navigationBar.translucent;\n    _previousNavBarTintColor = self.navigationController.navigationBar.tintColor;\n    _previousNavBarHidden = self.navigationController.navigationBarHidden;\n    _previousNavBarStyle = self.navigationController.navigationBar.barStyle;\n    _previousNavigationBarBackgroundImageDefault = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault];\n    _previousNavigationBarBackgroundImageLandscapePhone = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsLandscapePhone];\n}\n\n- (void)restorePreviousNavBarAppearance:(BOOL)animated {\n    if (_didSavePreviousStateOfNavBar) {\n        [self.navigationController setNavigationBarHidden:_previousNavBarHidden animated:animated];\n        UINavigationBar *navBar = self.navigationController.navigationBar;\n        navBar.tintColor = _previousNavBarTintColor;\n        navBar.translucent = _previousNavBarTranslucent;\n        navBar.barTintColor = _previousNavBarBarTintColor;\n        navBar.barStyle = _previousNavBarStyle;\n        [navBar setBackgroundImage:_previousNavigationBarBackgroundImageDefault forBarMetrics:UIBarMetricsDefault];\n        [navBar setBackgroundImage:_previousNavigationBarBackgroundImageLandscapePhone forBarMetrics:UIBarMetricsLandscapePhone];\n        // Restore back button if we need to\n        if (_previousViewControllerBackButton) {\n            UIViewController *previousViewController = [self.navigationController topViewController]; // We've disappeared so previous is now top\n            previousViewController.navigationItem.backBarButtonItem = _previousViewControllerBackButton;\n            _previousViewControllerBackButton = nil;\n        }\n    }\n}\n\n#pragma mark - Layout\n\n- (void)viewWillLayoutSubviews {\n    [super viewWillLayoutSubviews];\n    [self layoutVisiblePages];\n}\n\n- (void)layoutVisiblePages {\n    \n\t// Flag\n\t_performingLayout = YES;\n\t\n\t// Toolbar\n\t_toolbar.frame = [self frameForToolbarAtOrientation:self.interfaceOrientation];\n    \n\t// Remember index\n\tNSUInteger indexPriorToLayout = _currentPageIndex;\n\t\n\t// Get paging scroll view frame to determine if anything needs changing\n\tCGRect pagingScrollViewFrame = [self frameForPagingScrollView];\n    \n\t// Frame needs changing\n    if (!_skipNextPagingScrollViewPositioning) {\n        _pagingScrollView.frame = pagingScrollViewFrame;\n    }\n    _skipNextPagingScrollViewPositioning = NO;\n\t\n\t// Recalculate contentSize based on current orientation\n\t_pagingScrollView.contentSize = [self contentSizeForPagingScrollView];\n\t\n\t// Adjust frames and configuration of each visible page\n\tfor (MWZoomingScrollView *page in _visiblePages) {\n        NSUInteger index = page.index;\n\t\tpage.frame = [self frameForPageAtIndex:index];\n        if (page.captionView) {\n            page.captionView.frame = [self frameForCaptionView:page.captionView atIndex:index];\n        }\n        if (page.selectedButton) {\n            page.selectedButton.frame = [self frameForSelectedButton:page.selectedButton atIndex:index];\n        }\n        if (page.playButton) {\n            page.playButton.frame = [self frameForPlayButton:page.playButton atIndex:index];\n        }\n        \n        // Adjust scales if bounds has changed since last time\n        if (!CGRectEqualToRect(_previousLayoutBounds, self.view.bounds)) {\n            // Update zooms for new bounds\n            [page setMaxMinZoomScalesForCurrentBounds];\n            _previousLayoutBounds = self.view.bounds;\n        }\n\n\t}\n    \n    // Adjust video loading indicator if it's visible\n    [self positionVideoLoadingIndicator];\n\t\n\t// Adjust contentOffset to preserve page location based on values collected prior to location\n\t_pagingScrollView.contentOffset = [self contentOffsetForPageAtIndex:indexPriorToLayout];\n\t[self didStartViewingPageAtIndex:_currentPageIndex]; // initial\n    \n\t// Reset\n\t_currentPageIndex = indexPriorToLayout;\n\t_performingLayout = NO;\n    \n}\n\n#pragma mark - Rotation\n\n- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {\n    return YES;\n}\n\n- (UIInterfaceOrientationMask)supportedInterfaceOrientations {\n    return UIInterfaceOrientationMaskAll;\n}\n\n- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {\n    \n\t// Remember page index before rotation\n\t_pageIndexBeforeRotation = _currentPageIndex;\n\t_rotating = YES;\n    \n    // In iOS 7 the nav bar gets shown after rotation, but might as well do this for everything!\n    if ([self areControlsHidden]) {\n        // Force hidden\n        self.navigationController.navigationBarHidden = YES;\n    }\n\t\n}\n\n- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {\n\t\n\t// Perform layout\n\t_currentPageIndex = _pageIndexBeforeRotation;\n\t\n\t// Delay control holding\n\t[self hideControlsAfterDelay];\n    \n    // Layout\n    [self layoutVisiblePages];\n\t\n}\n\n- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {\n\t_rotating = NO;\n    // Ensure nav bar isn't re-displayed\n    if ([self areControlsHidden]) {\n        self.navigationController.navigationBarHidden = NO;\n        self.navigationController.navigationBar.alpha = 0;\n    }\n}\n\n#pragma mark - Data\n\n- (NSUInteger)currentIndex {\n    return _currentPageIndex;\n}\n\n- (void)reloadData {\n    \n    // Reset\n    _photoCount = NSNotFound;\n    \n    // Get data\n    NSUInteger numberOfPhotos = [self numberOfPhotos];\n    [self releaseAllUnderlyingPhotos:YES];\n    [_photos removeAllObjects];\n    [_thumbPhotos removeAllObjects];\n    for (int i = 0; i < numberOfPhotos; i++) {\n        [_photos addObject:[NSNull null]];\n        [_thumbPhotos addObject:[NSNull null]];\n    }\n\n    // Update current page index\n    if (numberOfPhotos > 0) {\n        _currentPageIndex = MAX(0, MIN(_currentPageIndex, numberOfPhotos - 1));\n    } else {\n        _currentPageIndex = 0;\n    }\n    \n    // Update layout\n    if ([self isViewLoaded]) {\n        while (_pagingScrollView.subviews.count) {\n            [[_pagingScrollView.subviews lastObject] removeFromSuperview];\n        }\n        [self performLayout];\n        [self.view setNeedsLayout];\n    }\n    \n}\n\n- (NSUInteger)numberOfPhotos {\n    if (_photoCount == NSNotFound) {\n        if ([_delegate respondsToSelector:@selector(numberOfPhotosInPhotoBrowser:)]) {\n            _photoCount = [_delegate numberOfPhotosInPhotoBrowser:self];\n        } else if (_fixedPhotosArray) {\n            _photoCount = _fixedPhotosArray.count;\n        }\n    }\n    if (_photoCount == NSNotFound) _photoCount = 0;\n    return _photoCount;\n}\n\n- (id<MWPhoto>)photoAtIndex:(NSUInteger)index {\n    id <MWPhoto> photo = nil;\n    if (index < _photos.count) {\n        if ([_photos objectAtIndex:index] == [NSNull null]) {\n            if ([_delegate respondsToSelector:@selector(photoBrowser:photoAtIndex:)]) {\n                photo = [_delegate photoBrowser:self photoAtIndex:index];\n            } else if (_fixedPhotosArray && index < _fixedPhotosArray.count) {\n                photo = [_fixedPhotosArray objectAtIndex:index];\n            }\n            if (photo) [_photos replaceObjectAtIndex:index withObject:photo];\n        } else {\n            photo = [_photos objectAtIndex:index];\n        }\n    }\n    return photo;\n}\n\n- (id<MWPhoto>)thumbPhotoAtIndex:(NSUInteger)index {\n    id <MWPhoto> photo = nil;\n    if (index < _thumbPhotos.count) {\n        if ([_thumbPhotos objectAtIndex:index] == [NSNull null]) {\n            if ([_delegate respondsToSelector:@selector(photoBrowser:thumbPhotoAtIndex:)]) {\n                photo = [_delegate photoBrowser:self thumbPhotoAtIndex:index];\n            }\n            if (photo) [_thumbPhotos replaceObjectAtIndex:index withObject:photo];\n        } else {\n            photo = [_thumbPhotos objectAtIndex:index];\n        }\n    }\n    return photo;\n}\n\n- (MWCaptionView *)captionViewForPhotoAtIndex:(NSUInteger)index {\n    MWCaptionView *captionView = nil;\n    if ([_delegate respondsToSelector:@selector(photoBrowser:captionViewForPhotoAtIndex:)]) {\n        captionView = [_delegate photoBrowser:self captionViewForPhotoAtIndex:index];\n    } else {\n        id <MWPhoto> photo = [self photoAtIndex:index];\n        if ([photo respondsToSelector:@selector(caption)]) {\n            if ([photo caption]) captionView = [[MWCaptionView alloc] initWithPhoto:photo];\n        }\n    }\n    captionView.alpha = [self areControlsHidden] ? 0 : 1; // Initial alpha\n    return captionView;\n}\n\n- (BOOL)photoIsSelectedAtIndex:(NSUInteger)index {\n    BOOL value = NO;\n    if (_displaySelectionButtons) {\n        if ([self.delegate respondsToSelector:@selector(photoBrowser:isPhotoSelectedAtIndex:)]) {\n            value = [self.delegate photoBrowser:self isPhotoSelectedAtIndex:index];\n        }\n    }\n    return value;\n}\n\n- (void)setPhotoSelected:(BOOL)selected atIndex:(NSUInteger)index {\n    if (_displaySelectionButtons) {\n        if ([self.delegate respondsToSelector:@selector(photoBrowser:photoAtIndex:selectedChanged:)]) {\n            [self.delegate photoBrowser:self photoAtIndex:index selectedChanged:selected];\n        }\n    }\n}\n\n- (UIImage *)imageForPhoto:(id<MWPhoto>)photo {\n\tif (photo) {\n\t\t// Get image or obtain in background\n\t\tif ([photo underlyingImage]) {\n\t\t\treturn [photo underlyingImage];\n\t\t} else {\n            [photo loadUnderlyingImageAndNotify];\n\t\t}\n\t}\n\treturn nil;\n}\n\n- (void)loadAdjacentPhotosIfNecessary:(id<MWPhoto>)photo {\n    MWZoomingScrollView *page = [self pageDisplayingPhoto:photo];\n    if (page) {\n        // If page is current page then initiate loading of previous and next pages\n        NSUInteger pageIndex = page.index;\n        if (_currentPageIndex == pageIndex) {\n            if (pageIndex > 0) {\n                // Preload index - 1\n                id <MWPhoto> photo = [self photoAtIndex:pageIndex-1];\n                if (![photo underlyingImage]) {\n                    [photo loadUnderlyingImageAndNotify];\n                    MWLog(@\"Pre-loading image at index %lu\", (unsigned long)pageIndex-1);\n                }\n            }\n            if (pageIndex < [self numberOfPhotos] - 1) {\n                // Preload index + 1\n                id <MWPhoto> photo = [self photoAtIndex:pageIndex+1];\n                if (![photo underlyingImage]) {\n                    [photo loadUnderlyingImageAndNotify];\n                    MWLog(@\"Pre-loading image at index %lu\", (unsigned long)pageIndex+1);\n                }\n            }\n        }\n    }\n}\n\n#pragma mark - MWPhoto Loading Notification\n\n- (void)handleMWPhotoLoadingDidEndNotification:(NSNotification *)notification {\n    id <MWPhoto> photo = [notification object];\n    MWZoomingScrollView *page = [self pageDisplayingPhoto:photo];\n    if (page) {\n        if ([photo underlyingImage]) {\n            // Successful load\n            [page displayImage];\n            [self loadAdjacentPhotosIfNecessary:photo];\n        } else {\n            \n            // Failed to load\n            [page displayImageFailure];\n        }\n        // Update nav\n        [self updateNavigation];\n    }\n}\n\n#pragma mark - Paging\n\n- (void)tilePages {\n\t\n\t// Calculate which pages should be visible\n\t// Ignore padding as paging bounces encroach on that\n\t// and lead to false page loads\n\tCGRect visibleBounds = _pagingScrollView.bounds;\n\tNSInteger iFirstIndex = (NSInteger)floorf((CGRectGetMinX(visibleBounds)+PADDING*2) / CGRectGetWidth(visibleBounds));\n\tNSInteger iLastIndex  = (NSInteger)floorf((CGRectGetMaxX(visibleBounds)-PADDING*2-1) / CGRectGetWidth(visibleBounds));\n    if (iFirstIndex < 0) iFirstIndex = 0;\n    if (iFirstIndex > [self numberOfPhotos] - 1) iFirstIndex = [self numberOfPhotos] - 1;\n    if (iLastIndex < 0) iLastIndex = 0;\n    if (iLastIndex > [self numberOfPhotos] - 1) iLastIndex = [self numberOfPhotos] - 1;\n\t\n\t// Recycle no longer needed pages\n    NSInteger pageIndex;\n\tfor (MWZoomingScrollView *page in _visiblePages) {\n        pageIndex = page.index;\n\t\tif (pageIndex < (NSUInteger)iFirstIndex || pageIndex > (NSUInteger)iLastIndex) {\n\t\t\t[_recycledPages addObject:page];\n            [page.captionView removeFromSuperview];\n            [page.selectedButton removeFromSuperview];\n            [page.playButton removeFromSuperview];\n            [page prepareForReuse];\n\t\t\t[page removeFromSuperview];\n\t\t\tMWLog(@\"Removed page at index %lu\", (unsigned long)pageIndex);\n\t\t}\n\t}\n\t[_visiblePages minusSet:_recycledPages];\n    while (_recycledPages.count > 2) // Only keep 2 recycled pages\n        [_recycledPages removeObject:[_recycledPages anyObject]];\n\t\n\t// Add missing pages\n\tfor (NSUInteger index = (NSUInteger)iFirstIndex; index <= (NSUInteger)iLastIndex; index++) {\n\t\tif (![self isDisplayingPageForIndex:index]) {\n            \n            // Add new page\n\t\t\tMWZoomingScrollView *page = [self dequeueRecycledPage];\n\t\t\tif (!page) {\n\t\t\t\tpage = [[MWZoomingScrollView alloc] initWithPhotoBrowser:self];\n\t\t\t}\n\t\t\t[_visiblePages addObject:page];\n\t\t\t[self configurePage:page forIndex:index];\n\n\t\t\t[_pagingScrollView addSubview:page];\n\t\t\tMWLog(@\"Added page at index %lu\", (unsigned long)index);\n            \n            // Add caption\n            MWCaptionView *captionView = [self captionViewForPhotoAtIndex:index];\n            if (captionView) {\n                captionView.frame = [self frameForCaptionView:captionView atIndex:index];\n                [_pagingScrollView addSubview:captionView];\n                page.captionView = captionView;\n            }\n            \n            // Add play button if needed\n            if (page.displayingVideo) {\n                UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom];\n                [playButton setImage:[UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/PlayButtonOverlayLarge\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]] forState:UIControlStateNormal];\n                [playButton setImage:[UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/PlayButtonOverlayLargeTap\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]] forState:UIControlStateHighlighted];\n                [playButton addTarget:self action:@selector(playButtonTapped:) forControlEvents:UIControlEventTouchUpInside];\n                [playButton sizeToFit];\n                playButton.frame = [self frameForPlayButton:playButton atIndex:index];\n                [_pagingScrollView addSubview:playButton];\n                page.playButton = playButton;\n            }\n            \n            // Add selected button\n            if (self.displaySelectionButtons) {\n                UIButton *selectedButton = [UIButton buttonWithType:UIButtonTypeCustom];\n                [selectedButton setImage:[UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/ImageSelectedOff\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]] forState:UIControlStateNormal];\n                UIImage *selectedOnImage;\n                if (self.customImageSelectedIconName) {\n                    selectedOnImage = [UIImage imageNamed:self.customImageSelectedIconName];\n                } else {\n                    selectedOnImage = [UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/ImageSelectedOn\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]];\n                }\n                [selectedButton setImage:selectedOnImage forState:UIControlStateSelected];\n                [selectedButton sizeToFit];\n                selectedButton.adjustsImageWhenHighlighted = NO;\n                [selectedButton addTarget:self action:@selector(selectedButtonTapped:) forControlEvents:UIControlEventTouchUpInside];\n                selectedButton.frame = [self frameForSelectedButton:selectedButton atIndex:index];\n                [_pagingScrollView addSubview:selectedButton];\n                page.selectedButton = selectedButton;\n                selectedButton.selected = [self photoIsSelectedAtIndex:index];\n            }\n            \n\t\t}\n\t}\n\t\n}\n\n- (void)updateVisiblePageStates {\n    NSSet *copy = [_visiblePages copy];\n    for (MWZoomingScrollView *page in copy) {\n        \n        // Update selection\n        page.selectedButton.selected = [self photoIsSelectedAtIndex:page.index];\n        \n    }\n}\n\n- (BOOL)isDisplayingPageForIndex:(NSUInteger)index {\n\tfor (MWZoomingScrollView *page in _visiblePages)\n\t\tif (page.index == index) return YES;\n\treturn NO;\n}\n\n- (MWZoomingScrollView *)pageDisplayedAtIndex:(NSUInteger)index {\n\tMWZoomingScrollView *thePage = nil;\n\tfor (MWZoomingScrollView *page in _visiblePages) {\n\t\tif (page.index == index) {\n\t\t\tthePage = page; break;\n\t\t}\n\t}\n\treturn thePage;\n}\n\n- (MWZoomingScrollView *)pageDisplayingPhoto:(id<MWPhoto>)photo {\n\tMWZoomingScrollView *thePage = nil;\n\tfor (MWZoomingScrollView *page in _visiblePages) {\n\t\tif (page.photo == photo) {\n\t\t\tthePage = page; break;\n\t\t}\n\t}\n\treturn thePage;\n}\n\n- (void)configurePage:(MWZoomingScrollView *)page forIndex:(NSUInteger)index {\n\tpage.frame = [self frameForPageAtIndex:index];\n    page.index = index;\n    page.photo = [self photoAtIndex:index];\n}\n\n- (MWZoomingScrollView *)dequeueRecycledPage {\n\tMWZoomingScrollView *page = [_recycledPages anyObject];\n\tif (page) {\n\t\t[_recycledPages removeObject:page];\n\t}\n\treturn page;\n}\n\n// Handle page changes\n- (void)didStartViewingPageAtIndex:(NSUInteger)index {\n    \n    // Handle 0 photos\n    if (![self numberOfPhotos]) {\n        // Show controls\n        [self setControlsHidden:NO animated:YES permanent:YES];\n        return;\n    }\n    \n    // Handle video on page change\n    if (!_rotating && index != _currentVideoIndex) {\n        [self clearCurrentVideo];\n    }\n    \n    // Release images further away than +/-1\n    NSUInteger i;\n    if (index > 0) {\n        // Release anything < index - 1\n        for (i = 0; i < index-1; i++) { \n            id photo = [_photos objectAtIndex:i];\n            if (photo != [NSNull null]) {\n                [photo unloadUnderlyingImage];\n                [_photos replaceObjectAtIndex:i withObject:[NSNull null]];\n                MWLog(@\"Released underlying image at index %lu\", (unsigned long)i);\n            }\n        }\n    }\n    if (index < [self numberOfPhotos] - 1) {\n        // Release anything > index + 1\n        for (i = index + 2; i < _photos.count; i++) {\n            id photo = [_photos objectAtIndex:i];\n            if (photo != [NSNull null]) {\n                [photo unloadUnderlyingImage];\n                [_photos replaceObjectAtIndex:i withObject:[NSNull null]];\n                MWLog(@\"Released underlying image at index %lu\", (unsigned long)i);\n            }\n        }\n    }\n    \n    // Load adjacent images if needed and the photo is already\n    // loaded. Also called after photo has been loaded in background\n    id <MWPhoto> currentPhoto = [self photoAtIndex:index];\n    if ([currentPhoto underlyingImage]) {\n        // photo loaded so load ajacent now\n        [self loadAdjacentPhotosIfNecessary:currentPhoto];\n    }\n    \n    // Notify delegate\n    if (index != _previousPageIndex) {\n        if ([_delegate respondsToSelector:@selector(photoBrowser:didDisplayPhotoAtIndex:)])\n            [_delegate photoBrowser:self didDisplayPhotoAtIndex:index];\n        _previousPageIndex = index;\n    }\n    \n    // Update nav\n    [self updateNavigation];\n    \n}\n\n#pragma mark - Frame Calculations\n\n- (CGRect)frameForPagingScrollView {\n    CGRect frame = self.view.bounds;// [[UIScreen mainScreen] bounds];\n    frame.origin.x -= PADDING;\n    frame.size.width += (2 * PADDING);\n    return CGRectIntegral(frame);\n}\n\n- (CGRect)frameForPageAtIndex:(NSUInteger)index {\n    // We have to use our paging scroll view's bounds, not frame, to calculate the page placement. When the device is in\n    // landscape orientation, the frame will still be in portrait because the pagingScrollView is the root view controller's\n    // view, so its frame is in window coordinate space, which is never rotated. Its bounds, however, will be in landscape\n    // because it has a rotation transform applied.\n    CGRect bounds = _pagingScrollView.bounds;\n    CGRect pageFrame = bounds;\n    pageFrame.size.width -= (2 * PADDING);\n    pageFrame.origin.x = (bounds.size.width * index) + PADDING;\n    return CGRectIntegral(pageFrame);\n}\n\n- (CGSize)contentSizeForPagingScrollView {\n    // We have to use the paging scroll view's bounds to calculate the contentSize, for the same reason outlined above.\n    CGRect bounds = _pagingScrollView.bounds;\n    return CGSizeMake(bounds.size.width * [self numberOfPhotos], bounds.size.height);\n}\n\n- (CGPoint)contentOffsetForPageAtIndex:(NSUInteger)index {\n\tCGFloat pageWidth = _pagingScrollView.bounds.size.width;\n\tCGFloat newOffset = index * pageWidth;\n\treturn CGPointMake(newOffset, 0);\n}\n\n- (CGRect)frameForToolbarAtOrientation:(UIInterfaceOrientation)orientation {\n    CGFloat height = 44;\n    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&\n        UIInterfaceOrientationIsLandscape(orientation)) height = 32;\n\treturn CGRectIntegral(CGRectMake(0, self.view.bounds.size.height - height, self.view.bounds.size.width, height));\n}\n\n- (CGRect)frameForCaptionView:(MWCaptionView *)captionView atIndex:(NSUInteger)index {\n    CGRect pageFrame = [self frameForPageAtIndex:index];\n    CGSize captionSize = [captionView sizeThatFits:CGSizeMake(pageFrame.size.width, 0)];\n    CGRect captionFrame = CGRectMake(pageFrame.origin.x,\n                                     pageFrame.size.height - captionSize.height - (_toolbar.superview?_toolbar.frame.size.height:0),\n                                     pageFrame.size.width,\n                                     captionSize.height);\n    return CGRectIntegral(captionFrame);\n}\n\n- (CGRect)frameForSelectedButton:(UIButton *)selectedButton atIndex:(NSUInteger)index {\n    CGRect pageFrame = [self frameForPageAtIndex:index];\n    CGFloat padding = 20;\n    CGFloat yOffset = 0;\n    if (![self areControlsHidden]) {\n        UINavigationBar *navBar = self.navigationController.navigationBar;\n        yOffset = navBar.frame.origin.y + navBar.frame.size.height;\n    }\n    CGRect selectedButtonFrame = CGRectMake(pageFrame.origin.x + pageFrame.size.width - selectedButton.frame.size.width - padding,\n                                            padding + yOffset,\n                                            selectedButton.frame.size.width,\n                                            selectedButton.frame.size.height);\n    return CGRectIntegral(selectedButtonFrame);\n}\n\n- (CGRect)frameForPlayButton:(UIButton *)playButton atIndex:(NSUInteger)index {\n    CGRect pageFrame = [self frameForPageAtIndex:index];\n    return CGRectMake(floorf(CGRectGetMidX(pageFrame) - playButton.frame.size.width / 2),\n                      floorf(CGRectGetMidY(pageFrame) - playButton.frame.size.height / 2),\n                      playButton.frame.size.width,\n                      playButton.frame.size.height);\n}\n\n#pragma mark - UIScrollView Delegate\n\n- (void)scrollViewDidScroll:(UIScrollView *)scrollView {\n\t\n    // Checks\n\tif (!_viewIsActive || _performingLayout || _rotating) return;\n\t\n\t// Tile pages\n\t[self tilePages];\n\t\n\t// Calculate current page\n\tCGRect visibleBounds = _pagingScrollView.bounds;\n\tNSInteger index = (NSInteger)(floorf(CGRectGetMidX(visibleBounds) / CGRectGetWidth(visibleBounds)));\n    if (index < 0) index = 0;\n\tif (index > [self numberOfPhotos] - 1) index = [self numberOfPhotos] - 1;\n\tNSUInteger previousCurrentPage = _currentPageIndex;\n\t_currentPageIndex = index;\n\tif (_currentPageIndex != previousCurrentPage) {\n        [self didStartViewingPageAtIndex:index];\n    }\n\t\n}\n\n- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {\n\t// Hide controls when dragging begins\n\t[self setControlsHidden:YES animated:YES permanent:NO];\n}\n\n- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {\n\t// Update nav when page changes\n\t[self updateNavigation];\n}\n\n#pragma mark - Navigation\n\n- (void)updateNavigation {\n    \n\t// Title\n    NSUInteger numberOfPhotos = [self numberOfPhotos];\n    if (_gridController) {\n        if (_gridController.selectionMode) {\n            self.title = NSLocalizedString(@\"Select Photos\", nil);\n        } else {\n            NSString *photosText;\n            if (numberOfPhotos == 1) {\n                photosText = NSLocalizedString(@\"photo\", @\"Used in the context: '1 photo'\");\n            } else {\n                photosText = NSLocalizedString(@\"photos\", @\"Used in the context: '3 photos'\");\n            }\n            self.title = [NSString stringWithFormat:@\"%lu %@\", (unsigned long)numberOfPhotos, photosText];\n        }\n    } else if (numberOfPhotos > 1) {\n        if ([_delegate respondsToSelector:@selector(photoBrowser:titleForPhotoAtIndex:)]) {\n            self.title = [_delegate photoBrowser:self titleForPhotoAtIndex:_currentPageIndex];\n        } else {\n            self.title = [NSString stringWithFormat:@\"%lu %@ %lu\", (unsigned long)(_currentPageIndex+1), NSLocalizedString(@\"of\", @\"Used in the context: 'Showing 1 of 3 items'\"), (unsigned long)numberOfPhotos];\n        }\n\t} else {\n\t\tself.title = nil;\n\t}\n\t\n\t// Buttons\n\t_previousButton.enabled = (_currentPageIndex > 0);\n\t_nextButton.enabled = (_currentPageIndex < numberOfPhotos - 1);\n    \n    // Disable action button if there is no image or it's a video\n    MWPhoto *photo = [self photoAtIndex:_currentPageIndex];\n    if ([photo underlyingImage] == nil || ([photo respondsToSelector:@selector(isVideo)] && photo.isVideo)) {\n        _actionButton.enabled = NO;\n        _actionButton.tintColor = [UIColor clearColor]; // Tint to hide button\n    } else {\n        _actionButton.enabled = YES;\n        _actionButton.tintColor = nil;\n    }\n\t\n}\n\n- (void)jumpToPageAtIndex:(NSUInteger)index animated:(BOOL)animated {\n\t\n\t// Change page\n\tif (index < [self numberOfPhotos]) {\n\t\tCGRect pageFrame = [self frameForPageAtIndex:index];\n        [_pagingScrollView setContentOffset:CGPointMake(pageFrame.origin.x - PADDING, 0) animated:animated];\n\t\t[self updateNavigation];\n\t}\n\t\n\t// Update timer to give more time\n\t[self hideControlsAfterDelay];\n\t\n}\n\n- (void)gotoPreviousPage {\n    [self showPreviousPhotoAnimated:NO];\n}\n- (void)gotoNextPage {\n    [self showNextPhotoAnimated:NO];\n}\n\n- (void)showPreviousPhotoAnimated:(BOOL)animated {\n    [self jumpToPageAtIndex:_currentPageIndex-1 animated:animated];\n}\n\n- (void)showNextPhotoAnimated:(BOOL)animated {\n    [self jumpToPageAtIndex:_currentPageIndex+1 animated:animated];\n}\n\n#pragma mark - Interactions\n\n- (void)selectedButtonTapped:(id)sender {\n    UIButton *selectedButton = (UIButton *)sender;\n    selectedButton.selected = !selectedButton.selected;\n    NSUInteger index = NSUIntegerMax;\n    for (MWZoomingScrollView *page in _visiblePages) {\n        if (page.selectedButton == selectedButton) {\n            index = page.index;\n            break;\n        }\n    }\n    if (index != NSUIntegerMax) {\n        [self setPhotoSelected:selectedButton.selected atIndex:index];\n    }\n}\n\n- (void)playButtonTapped:(id)sender {\n    // Ignore if we're already playing a video\n    if (_currentVideoIndex != NSUIntegerMax) {\n        return;\n    }\n    NSUInteger index = [self indexForPlayButton:sender];\n    if (index != NSUIntegerMax) {\n        if (!_currentVideoPlayerViewController) {\n            [self playVideoAtIndex:index];\n        }\n    }\n}\n\n- (NSUInteger)indexForPlayButton:(UIView *)playButton {\n    NSUInteger index = NSUIntegerMax;\n    for (MWZoomingScrollView *page in _visiblePages) {\n        if (page.playButton == playButton) {\n            index = page.index;\n            break;\n        }\n    }\n    return index;\n}\n\n#pragma mark - Video\n\n- (void)playVideoAtIndex:(NSUInteger)index {\n    id photo = [self photoAtIndex:index];\n    if ([photo respondsToSelector:@selector(getVideoURL:)]) {\n        \n        // Valid for playing\n        [self clearCurrentVideo];\n        _currentVideoIndex = index;\n        [self setVideoLoadingIndicatorVisible:YES atPageIndex:index];\n\n        // Get video and play\n        typeof(self) __weak weakSelf = self;\n        [photo getVideoURL:^(NSURL *url) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                // If the video is not playing anymore then bail\n                typeof(self) strongSelf = weakSelf;\n                if (!strongSelf) return;\n                if (strongSelf->_currentVideoIndex != index || !strongSelf->_viewIsActive) {\n                    return;\n                }\n                if (url) {\n                    [weakSelf _playVideo:url atPhotoIndex:index];\n                } else {\n                    [weakSelf setVideoLoadingIndicatorVisible:NO atPageIndex:index];\n                }\n            });\n        }];\n        \n    }\n}\n\n- (void)_playVideo:(NSURL *)videoURL atPhotoIndex:(NSUInteger)index {\n\n    // Setup player\n    _currentVideoPlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];\n    [_currentVideoPlayerViewController.moviePlayer prepareToPlay];\n    _currentVideoPlayerViewController.moviePlayer.shouldAutoplay = YES;\n    _currentVideoPlayerViewController.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;\n    _currentVideoPlayerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;\n    \n    // Remove the movie player view controller from the \"playback did finish\" notification observers\n    // Observe ourselves so we can get it to use the crossfade transition\n    [[NSNotificationCenter defaultCenter] removeObserver:_currentVideoPlayerViewController\n                                                    name:MPMoviePlayerPlaybackDidFinishNotification\n                                                  object:_currentVideoPlayerViewController.moviePlayer];\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(videoFinishedCallback:)\n                                                 name:MPMoviePlayerPlaybackDidFinishNotification\n                                               object:_currentVideoPlayerViewController.moviePlayer];\n\n    // Show\n    [self presentViewController:_currentVideoPlayerViewController animated:YES completion:nil];\n\n}\n\n- (void)videoFinishedCallback:(NSNotification*)notification {\n    \n    // Remove observer\n    [[NSNotificationCenter defaultCenter] removeObserver:self\n                                                    name:MPMoviePlayerPlaybackDidFinishNotification\n                                                  object:_currentVideoPlayerViewController.moviePlayer];\n    \n    // Clear up\n    [self clearCurrentVideo];\n    \n    // Dismiss\n    BOOL error = [[[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue] == MPMovieFinishReasonPlaybackError;\n    if (error) {\n        // Error occured so dismiss with a delay incase error was immediate and we need to wait to dismiss the VC\n        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n            [self dismissViewControllerAnimated:YES completion:nil];\n        });\n    } else {\n        [self dismissViewControllerAnimated:YES completion:nil];\n    }\n    \n}\n\n- (void)clearCurrentVideo {\n    [_currentVideoPlayerViewController.moviePlayer stop];\n    [_currentVideoLoadingIndicator removeFromSuperview];\n    _currentVideoPlayerViewController = nil;\n    _currentVideoLoadingIndicator = nil;\n    [[self pageDisplayedAtIndex:_currentVideoIndex] playButton].hidden = NO;\n    _currentVideoIndex = NSUIntegerMax;\n}\n\n- (void)setVideoLoadingIndicatorVisible:(BOOL)visible atPageIndex:(NSUInteger)pageIndex {\n    if (_currentVideoLoadingIndicator && !visible) {\n        [_currentVideoLoadingIndicator removeFromSuperview];\n        _currentVideoLoadingIndicator = nil;\n        [[self pageDisplayedAtIndex:pageIndex] playButton].hidden = NO;\n    } else if (!_currentVideoLoadingIndicator && visible) {\n        _currentVideoLoadingIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectZero];\n        [_currentVideoLoadingIndicator sizeToFit];\n        [_currentVideoLoadingIndicator startAnimating];\n        [_pagingScrollView addSubview:_currentVideoLoadingIndicator];\n        [self positionVideoLoadingIndicator];\n        [[self pageDisplayedAtIndex:pageIndex] playButton].hidden = YES;\n    }\n}\n\n- (void)positionVideoLoadingIndicator {\n    if (_currentVideoLoadingIndicator && _currentVideoIndex != NSUIntegerMax) {\n        CGRect frame = [self frameForPageAtIndex:_currentVideoIndex];\n        _currentVideoLoadingIndicator.center = CGPointMake(CGRectGetMidX(frame), CGRectGetMidY(frame));\n    }\n}\n\n#pragma mark - Grid\n\n- (void)showGridAnimated {\n    [self showGrid:YES];\n}\n\n- (void)showGrid:(BOOL)animated {\n\n    if (_gridController) return;\n    \n    // Clear video\n    [self clearCurrentVideo];\n    \n    // Init grid controller\n    _gridController = [[MWGridViewController alloc] init];\n    _gridController.initialContentOffset = _currentGridContentOffset;\n    _gridController.browser = self;\n    _gridController.selectionMode = _displaySelectionButtons;\n    _gridController.view.frame = self.view.bounds;\n    _gridController.view.frame = CGRectOffset(_gridController.view.frame, 0, (self.startOnGrid ? -1 : 1) * self.view.bounds.size.height);\n\n    // Stop specific layout being triggered\n    _skipNextPagingScrollViewPositioning = YES;\n    \n    // Add as a child view controller\n    [self addChildViewController:_gridController];\n    [self.view addSubview:_gridController.view];\n    \n    // Perform any adjustments\n    [_gridController.view layoutIfNeeded];\n    [_gridController adjustOffsetsAsRequired];\n    \n    // Hide action button on nav bar if it exists\n    if (self.navigationItem.rightBarButtonItem == _actionButton) {\n        _gridPreviousRightNavItem = _actionButton;\n        [self.navigationItem setRightBarButtonItem:nil animated:YES];\n    } else {\n        _gridPreviousRightNavItem = nil;\n    }\n    \n    // Update\n    [self updateNavigation];\n    [self setControlsHidden:NO animated:YES permanent:YES];\n    \n    // Animate grid in and photo scroller out\n    [_gridController willMoveToParentViewController:self];\n    [UIView animateWithDuration:animated ? 0.3 : 0 animations:^(void) {\n        _gridController.view.frame = self.view.bounds;\n        CGRect newPagingFrame = [self frameForPagingScrollView];\n        newPagingFrame = CGRectOffset(newPagingFrame, 0, (self.startOnGrid ? 1 : -1) * newPagingFrame.size.height);\n        _pagingScrollView.frame = newPagingFrame;\n    } completion:^(BOOL finished) {\n        [_gridController didMoveToParentViewController:self];\n    }];\n    \n}\n\n- (void)hideGrid {\n    \n    if (!_gridController) return;\n    \n    // Remember previous content offset\n    _currentGridContentOffset = _gridController.collectionView.contentOffset;\n    \n    // Restore action button if it was removed\n    if (_gridPreviousRightNavItem == _actionButton && _actionButton) {\n        [self.navigationItem setRightBarButtonItem:_gridPreviousRightNavItem animated:YES];\n    }\n    \n    // Position prior to hide animation\n    CGRect newPagingFrame = [self frameForPagingScrollView];\n    newPagingFrame = CGRectOffset(newPagingFrame, 0, (self.startOnGrid ? 1 : -1) * newPagingFrame.size.height);\n    _pagingScrollView.frame = newPagingFrame;\n    \n    // Remember and remove controller now so things can detect a nil grid controller\n    MWGridViewController *tmpGridController = _gridController;\n    _gridController = nil;\n    \n    // Update\n    [self updateNavigation];\n    [self updateVisiblePageStates];\n    \n    // Animate, hide grid and show paging scroll view\n    [UIView animateWithDuration:0.3 animations:^{\n        tmpGridController.view.frame = CGRectOffset(self.view.bounds, 0, (self.startOnGrid ? -1 : 1) * self.view.bounds.size.height);\n        _pagingScrollView.frame = [self frameForPagingScrollView];\n    } completion:^(BOOL finished) {\n        [tmpGridController willMoveToParentViewController:nil];\n        [tmpGridController.view removeFromSuperview];\n        [tmpGridController removeFromParentViewController];\n        [self setControlsHidden:NO animated:YES permanent:NO]; // retrigger timer\n    }];\n\n}\n\n#pragma mark - Control Hiding / Showing\n\n// If permanent then we don't set timers to hide again\n// Fades all controls on iOS 5 & 6, and iOS 7 controls slide and fade\n- (void)setControlsHidden:(BOOL)hidden animated:(BOOL)animated permanent:(BOOL)permanent {\n    \n    // Force visible\n    if (![self numberOfPhotos] || _gridController || _alwaysShowControls)\n        hidden = NO;\n    \n    // Cancel any timers\n    [self cancelControlHiding];\n    \n    // Animations & positions\n    CGFloat animatonOffset = 20;\n    CGFloat animationDuration = (animated ? 0.35 : 0);\n    \n    // Status bar\n    if (!_leaveStatusBarAlone) {\n\n        // Hide status bar\n        if (!_isVCBasedStatusBarAppearance) {\n            \n            // Non-view controller based\n            [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated ? UIStatusBarAnimationSlide : UIStatusBarAnimationNone];\n            \n        } else {\n            \n            // View controller based so animate away\n            _statusBarShouldBeHidden = hidden;\n            [UIView animateWithDuration:animationDuration animations:^(void) {\n                [self setNeedsStatusBarAppearanceUpdate];\n            } completion:^(BOOL finished) {}];\n            \n        }\n\n    }\n    \n    // Toolbar, nav bar and captions\n    // Pre-appear animation positions for sliding\n    if ([self areControlsHidden] && !hidden && animated) {\n        \n        // Toolbar\n        _toolbar.frame = CGRectOffset([self frameForToolbarAtOrientation:self.interfaceOrientation], 0, animatonOffset);\n        \n        // Captions\n        for (MWZoomingScrollView *page in _visiblePages) {\n            if (page.captionView) {\n                MWCaptionView *v = page.captionView;\n                // Pass any index, all we're interested in is the Y\n                CGRect captionFrame = [self frameForCaptionView:v atIndex:0];\n                captionFrame.origin.x = v.frame.origin.x; // Reset X\n                v.frame = CGRectOffset(captionFrame, 0, animatonOffset);\n            }\n        }\n        \n    }\n    [UIView animateWithDuration:animationDuration animations:^(void) {\n        \n        CGFloat alpha = hidden ? 0 : 1;\n\n        // Nav bar slides up on it's own on iOS 7+\n        [self.navigationController.navigationBar setAlpha:alpha];\n        \n        // Toolbar\n        _toolbar.frame = [self frameForToolbarAtOrientation:self.interfaceOrientation];\n        if (hidden) _toolbar.frame = CGRectOffset(_toolbar.frame, 0, animatonOffset);\n        _toolbar.alpha = alpha;\n\n        // Captions\n        for (MWZoomingScrollView *page in _visiblePages) {\n            if (page.captionView) {\n                MWCaptionView *v = page.captionView;\n                // Pass any index, all we're interested in is the Y\n                CGRect captionFrame = [self frameForCaptionView:v atIndex:0];\n                captionFrame.origin.x = v.frame.origin.x; // Reset X\n                if (hidden) captionFrame = CGRectOffset(captionFrame, 0, animatonOffset);\n                v.frame = captionFrame;\n                v.alpha = alpha;\n            }\n        }\n        \n        // Selected buttons\n        for (MWZoomingScrollView *page in _visiblePages) {\n            if (page.selectedButton) {\n                UIButton *v = page.selectedButton;\n                CGRect newFrame = [self frameForSelectedButton:v atIndex:0];\n                newFrame.origin.x = v.frame.origin.x;\n                v.frame = newFrame;\n            }\n        }\n\n    } completion:^(BOOL finished) {}];\n    \n\t// Control hiding timer\n\t// Will cancel existing timer but only begin hiding if\n\t// they are visible\n\tif (!permanent) [self hideControlsAfterDelay];\n\t\n}\n\n- (BOOL)prefersStatusBarHidden {\n    if (!_leaveStatusBarAlone) {\n        return _statusBarShouldBeHidden;\n    } else {\n        return [self presentingViewControllerPrefersStatusBarHidden];\n    }\n}\n\n- (UIStatusBarStyle)preferredStatusBarStyle {\n    return UIStatusBarStyleLightContent;\n}\n\n- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {\n    return UIStatusBarAnimationSlide;\n}\n\n- (void)cancelControlHiding {\n\t// If a timer exists then cancel and release\n\tif (_controlVisibilityTimer) {\n\t\t[_controlVisibilityTimer invalidate];\n\t\t_controlVisibilityTimer = nil;\n\t}\n}\n\n// Enable/disable control visiblity timer\n- (void)hideControlsAfterDelay {\n\tif (![self areControlsHidden]) {\n        [self cancelControlHiding];\n\t\t_controlVisibilityTimer = [NSTimer scheduledTimerWithTimeInterval:self.delayToHideElements target:self selector:@selector(hideControls) userInfo:nil repeats:NO];\n\t}\n}\n\n- (BOOL)areControlsHidden { return (_toolbar.alpha == 0); }\n- (void)hideControls { [self setControlsHidden:YES animated:YES permanent:NO]; }\n- (void)showControls { [self setControlsHidden:NO animated:YES permanent:NO]; }\n- (void)toggleControls { [self setControlsHidden:![self areControlsHidden] animated:YES permanent:NO]; }\n\n#pragma mark - Properties\n\n- (void)setCurrentPhotoIndex:(NSUInteger)index {\n    // Validate\n    NSUInteger photoCount = [self numberOfPhotos];\n    if (photoCount == 0) {\n        index = 0;\n    } else {\n        if (index >= photoCount)\n            index = [self numberOfPhotos]-1;\n    }\n    _currentPageIndex = index;\n\tif ([self isViewLoaded]) {\n        [self jumpToPageAtIndex:index animated:NO];\n        if (!_viewIsActive)\n            [self tilePages]; // Force tiling if view is not visible\n    }\n}\n\n#pragma mark - Misc\n\n- (void)doneButtonPressed:(id)sender {\n    // Only if we're modal and there's a done button\n    if (_doneButton) {\n        // See if we actually just want to show/hide grid\n        if (self.enableGrid) {\n            if (self.startOnGrid && !_gridController) {\n                [self showGrid:YES];\n                return;\n            } else if (!self.startOnGrid && _gridController) {\n                [self hideGrid];\n                return;\n            }\n        }\n        // Dismiss view controller\n        if ([_delegate respondsToSelector:@selector(photoBrowserDidFinishModalPresentation:)]) {\n            // Call delegate method and let them dismiss us\n            [_delegate photoBrowserDidFinishModalPresentation:self];\n        } else  {\n            [self dismissViewControllerAnimated:YES completion:nil];\n        }\n    }\n}\n\n#pragma mark - Actions\n\n- (void)actionButtonPressed:(id)sender {\n\n    // Only react when image has loaded\n    id <MWPhoto> photo = [self photoAtIndex:_currentPageIndex];\n    if ([self numberOfPhotos] > 0 && [photo underlyingImage]) {\n        \n        // If they have defined a delegate method then just message them\n        if ([self.delegate respondsToSelector:@selector(photoBrowser:actionButtonPressedForPhotoAtIndex:)]) {\n            \n            // Let delegate handle things\n            [self.delegate photoBrowser:self actionButtonPressedForPhotoAtIndex:_currentPageIndex];\n            \n        } else {\n            \n            // Show activity view controller\n            NSMutableArray *items = [NSMutableArray arrayWithObject:[photo underlyingImage]];\n            if (photo.caption) {\n                [items addObject:photo.caption];\n            }\n            self.activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];\n            \n            // Show loading spinner after a couple of seconds\n            double delayInSeconds = 2.0;\n            dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));\n            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){\n                if (self.activityViewController) {\n                    [self showProgressHUDWithMessage:nil];\n                }\n            });\n\n            // Show\n            typeof(self) __weak weakSelf = self;\n            [self.activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) {\n                weakSelf.activityViewController = nil;\n                [weakSelf hideControlsAfterDelay];\n                [weakSelf hideProgressHUD:YES];\n            }];\n            // iOS 8 - Set the Anchor Point for the popover\n            if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@\"8\")) {\n                self.activityViewController.popoverPresentationController.barButtonItem = _actionButton;\n            }\n            [self presentViewController:self.activityViewController animated:YES completion:nil];\n\n        }\n        \n        // Keep controls hidden\n        [self setControlsHidden:NO animated:YES permanent:YES];\n\n    }\n    \n}\n\n#pragma mark - Action Progress\n\n- (MBProgressHUD *)progressHUD {\n    if (!_progressHUD) {\n        _progressHUD = [[MBProgressHUD alloc] initWithView:self.view];\n        _progressHUD.minSize = CGSizeMake(120, 120);\n        _progressHUD.minShowTime = 1;\n        [self.view addSubview:_progressHUD];\n    }\n    return _progressHUD;\n}\n\n- (void)showProgressHUDWithMessage:(NSString *)message {\n    self.progressHUD.labelText = message;\n    self.progressHUD.mode = MBProgressHUDModeIndeterminate;\n    [self.progressHUD show:YES];\n    self.navigationController.navigationBar.userInteractionEnabled = NO;\n}\n\n- (void)hideProgressHUD:(BOOL)animated {\n    [self.progressHUD hide:animated];\n    self.navigationController.navigationBar.userInteractionEnabled = YES;\n}\n\n- (void)showProgressHUDCompleteMessage:(NSString *)message {\n    if (message) {\n        if (self.progressHUD.isHidden) [self.progressHUD show:YES];\n        self.progressHUD.labelText = message;\n        self.progressHUD.mode = MBProgressHUDModeCustomView;\n        [self.progressHUD hide:YES afterDelay:1.5];\n    } else {\n        [self.progressHUD hide:YES];\n    }\n    self.navigationController.navigationBar.userInteractionEnabled = YES;\n}\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWPhotoBrowserPrivate.h",
    "content": "//\n//  MWPhotoBrowser_Private.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 08/10/2013.\n//\n//\n\n#import <UIKit/UIKit.h>\n#import <MBProgressHUD/MBProgressHUD.h>\n#import <MediaPlayer/MediaPlayer.h>\n#import \"MWGridViewController.h\"\n#import \"MWZoomingScrollView.h\"\n\n// Declare private methods of browser\n@interface MWPhotoBrowser () {\n    \n\t// Data\n    NSUInteger _photoCount;\n    NSMutableArray *_photos;\n    NSMutableArray *_thumbPhotos;\n\tNSArray *_fixedPhotosArray; // Provided via init\n\t\n\t// Views\n\tUIScrollView *_pagingScrollView;\n\t\n\t// Paging & layout\n\tNSMutableSet *_visiblePages, *_recycledPages;\n\tNSUInteger _currentPageIndex;\n    NSUInteger _previousPageIndex;\n    CGRect _previousLayoutBounds;\n\tNSUInteger _pageIndexBeforeRotation;\n\t\n\t// Navigation & controls\n\tUIToolbar *_toolbar;\n\tNSTimer *_controlVisibilityTimer;\n\tUIBarButtonItem *_previousButton, *_nextButton, *_actionButton, *_doneButton;\n    MBProgressHUD *_progressHUD;\n    \n    // Grid\n    MWGridViewController *_gridController;\n    UIBarButtonItem *_gridPreviousLeftNavItem;\n    UIBarButtonItem *_gridPreviousRightNavItem;\n    \n    // Appearance\n    BOOL _previousNavBarHidden;\n    BOOL _previousNavBarTranslucent;\n    UIBarStyle _previousNavBarStyle;\n    UIStatusBarStyle _previousStatusBarStyle;\n    UIColor *_previousNavBarTintColor;\n    UIColor *_previousNavBarBarTintColor;\n    UIBarButtonItem *_previousViewControllerBackButton;\n    UIImage *_previousNavigationBarBackgroundImageDefault;\n    UIImage *_previousNavigationBarBackgroundImageLandscapePhone;\n    \n    // Video\n    MPMoviePlayerViewController *_currentVideoPlayerViewController;\n    NSUInteger _currentVideoIndex;\n    UIActivityIndicatorView *_currentVideoLoadingIndicator;\n    \n    // Misc\n    BOOL _hasBelongedToViewController;\n    BOOL _isVCBasedStatusBarAppearance;\n    BOOL _statusBarShouldBeHidden;\n    BOOL _displayActionButton;\n    BOOL _leaveStatusBarAlone;\n\tBOOL _performingLayout;\n\tBOOL _rotating;\n    BOOL _viewIsActive; // active as in it's in the view heirarchy\n    BOOL _didSavePreviousStateOfNavBar;\n    BOOL _skipNextPagingScrollViewPositioning;\n    BOOL _viewHasAppearedInitially;\n    CGPoint _currentGridContentOffset;\n    \n}\n\n// Properties\n@property (nonatomic) UIActivityViewController *activityViewController;\n\n// Layout\n- (void)layoutVisiblePages;\n- (void)performLayout;\n- (BOOL)presentingViewControllerPrefersStatusBarHidden;\n\n// Nav Bar Appearance\n- (void)setNavBarAppearance:(BOOL)animated;\n- (void)storePreviousNavBarAppearance;\n- (void)restorePreviousNavBarAppearance:(BOOL)animated;\n\n// Paging\n- (void)tilePages;\n- (BOOL)isDisplayingPageForIndex:(NSUInteger)index;\n- (MWZoomingScrollView *)pageDisplayedAtIndex:(NSUInteger)index;\n- (MWZoomingScrollView *)pageDisplayingPhoto:(id<MWPhoto>)photo;\n- (MWZoomingScrollView *)dequeueRecycledPage;\n- (void)configurePage:(MWZoomingScrollView *)page forIndex:(NSUInteger)index;\n- (void)didStartViewingPageAtIndex:(NSUInteger)index;\n\n// Frames\n- (CGRect)frameForPagingScrollView;\n- (CGRect)frameForPageAtIndex:(NSUInteger)index;\n- (CGSize)contentSizeForPagingScrollView;\n- (CGPoint)contentOffsetForPageAtIndex:(NSUInteger)index;\n- (CGRect)frameForToolbarAtOrientation:(UIInterfaceOrientation)orientation;\n- (CGRect)frameForCaptionView:(MWCaptionView *)captionView atIndex:(NSUInteger)index;\n- (CGRect)frameForSelectedButton:(UIButton *)selectedButton atIndex:(NSUInteger)index;\n\n// Navigation\n- (void)updateNavigation;\n- (void)jumpToPageAtIndex:(NSUInteger)index animated:(BOOL)animated;\n- (void)gotoPreviousPage;\n- (void)gotoNextPage;\n\n// Grid\n- (void)showGrid:(BOOL)animated;\n- (void)hideGrid;\n\n// Controls\n- (void)cancelControlHiding;\n- (void)hideControlsAfterDelay;\n- (void)setControlsHidden:(BOOL)hidden animated:(BOOL)animated permanent:(BOOL)permanent;\n- (void)toggleControls;\n- (BOOL)areControlsHidden;\n\n// Data\n- (NSUInteger)numberOfPhotos;\n- (id<MWPhoto>)photoAtIndex:(NSUInteger)index;\n- (id<MWPhoto>)thumbPhotoAtIndex:(NSUInteger)index;\n- (UIImage *)imageForPhoto:(id<MWPhoto>)photo;\n- (BOOL)photoIsSelectedAtIndex:(NSUInteger)index;\n- (void)setPhotoSelected:(BOOL)selected atIndex:(NSUInteger)index;\n- (void)loadAdjacentPhotosIfNecessary:(id<MWPhoto>)photo;\n- (void)releaseAllUnderlyingPhotos:(BOOL)preserveCurrent;\n\n@end\n\n"
  },
  {
    "path": "Pod/Classes/MWPhotoProtocol.h",
    "content": "//\n//  MWPhotoProtocol.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 02/01/2012.\n//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n// Notifications\n#define MWPHOTO_LOADING_DID_END_NOTIFICATION @\"MWPHOTO_LOADING_DID_END_NOTIFICATION\"\n#define MWPHOTO_PROGRESS_NOTIFICATION @\"MWPHOTO_PROGRESS_NOTIFICATION\"\n\n// If you wish to use your own data models for photo then they must conform\n// to this protocol. See instructions for details on each method.\n// Otherwise you can use the MWPhoto object or subclass it yourself to\n// store more information per photo.\n//\n// You can see the MWPhoto class for an example implementation of this protocol\n//\n@protocol MWPhoto <NSObject>\n\n@required\n\n// Return underlying UIImage to be displayed\n// Return nil if the image is not immediately available (loaded into memory, preferably\n// already decompressed) and needs to be loaded from a source (cache, file, web, etc)\n// IMPORTANT: You should *NOT* use this method to initiate\n// fetching of images from any external of source. That should be handled\n// in -loadUnderlyingImageAndNotify: which may be called by the photo browser if this\n// methods returns nil.\n@property (nonatomic, strong) UIImage *underlyingImage;\n\n// Called when the browser has determined the underlying images is not\n// already loaded into memory but needs it.\n- (void)loadUnderlyingImageAndNotify;\n\n// Fetch the image data from a source and notify when complete.\n// You must load the image asyncronously (and decompress it for better performance).\n// It is recommended that you use SDWebImageDecoder to perform the decompression.\n// See MWPhoto object for an example implementation.\n// When the underlying UIImage is loaded (or failed to load) you should post the following\n// notification:\n// [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_LOADING_DID_END_NOTIFICATION\n//                                                     object:self];\n- (void)performLoadUnderlyingImageAndNotify;\n\n// This is called when the photo browser has determined the photo data\n// is no longer needed or there are low memory conditions\n// You should release any underlying (possibly large and decompressed) image data\n// as long as the image can be re-loaded (from cache, file, or URL)\n- (void)unloadUnderlyingImage;\n\n@optional\n\n// If photo is empty, in which case, don't show loading error icons\n@property (nonatomic) BOOL emptyImage;\n\n// Video\n@property (nonatomic) BOOL isVideo;\n- (void)getVideoURL:(void (^)(NSURL *url))completion;\n\n// Return a caption string to be displayed over the image\n// Return nil to display no caption\n- (NSString *)caption;\n\n// Cancel any background loading of image data\n- (void)cancelAnyLoading;\n\n@end"
  },
  {
    "path": "Pod/Classes/MWTapDetectingImageView.h",
    "content": "//\n//  UIImageViewTap.h\n//  Momento\n//\n//  Created by Michael Waterfall on 04/11/2009.\n//  Copyright 2009 d3i. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@protocol MWTapDetectingImageViewDelegate;\n\n@interface MWTapDetectingImageView : UIImageView {}\n\n@property (nonatomic, weak) id <MWTapDetectingImageViewDelegate> tapDelegate;\n\n@end\n\n@protocol MWTapDetectingImageViewDelegate <NSObject>\n\n@optional\n\n- (void)imageView:(UIImageView *)imageView singleTapDetected:(UITouch *)touch;\n- (void)imageView:(UIImageView *)imageView doubleTapDetected:(UITouch *)touch;\n- (void)imageView:(UIImageView *)imageView tripleTapDetected:(UITouch *)touch;\n\n@end"
  },
  {
    "path": "Pod/Classes/MWTapDetectingImageView.m",
    "content": "//\n//  UIImageViewTap.m\n//  Momento\n//\n//  Created by Michael Waterfall on 04/11/2009.\n//  Copyright 2009 d3i. All rights reserved.\n//\n\n#import \"MWTapDetectingImageView.h\"\n\n@implementation MWTapDetectingImageView\n\n- (id)initWithFrame:(CGRect)frame {\n\tif ((self = [super initWithFrame:frame])) {\n\t\tself.userInteractionEnabled = YES;\n\t}\n\treturn self;\n}\n\n- (id)initWithImage:(UIImage *)image {\n\tif ((self = [super initWithImage:image])) {\n\t\tself.userInteractionEnabled = YES;\n\t}\n\treturn self;\n}\n\n- (id)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage {\n\tif ((self = [super initWithImage:image highlightedImage:highlightedImage])) {\n\t\tself.userInteractionEnabled = YES;\n\t}\n\treturn self;\n}\n\n- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {\n\tUITouch *touch = [touches anyObject];\n\tNSUInteger tapCount = touch.tapCount;\n\tswitch (tapCount) {\n\t\tcase 1:\n\t\t\t[self handleSingleTap:touch];\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t[self handleDoubleTap:touch];\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\t[self handleTripleTap:touch];\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\t[[self nextResponder] touchesEnded:touches withEvent:event];\n}\n\n- (void)handleSingleTap:(UITouch *)touch {\n\tif ([_tapDelegate respondsToSelector:@selector(imageView:singleTapDetected:)])\n\t\t[_tapDelegate imageView:self singleTapDetected:touch];\n}\n\n- (void)handleDoubleTap:(UITouch *)touch {\n\tif ([_tapDelegate respondsToSelector:@selector(imageView:doubleTapDetected:)])\n\t\t[_tapDelegate imageView:self doubleTapDetected:touch];\n}\n\n- (void)handleTripleTap:(UITouch *)touch {\n\tif ([_tapDelegate respondsToSelector:@selector(imageView:tripleTapDetected:)])\n\t\t[_tapDelegate imageView:self tripleTapDetected:touch];\n}\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWTapDetectingView.h",
    "content": "//\n//  UIViewTap.h\n//  Momento\n//\n//  Created by Michael Waterfall on 04/11/2009.\n//  Copyright 2009 d3i. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@protocol MWTapDetectingViewDelegate;\n\n@interface MWTapDetectingView : UIView {}\n\n@property (nonatomic, weak) id <MWTapDetectingViewDelegate> tapDelegate;\n\n@end\n\n@protocol MWTapDetectingViewDelegate <NSObject>\n\n@optional\n\n- (void)view:(UIView *)view singleTapDetected:(UITouch *)touch;\n- (void)view:(UIView *)view doubleTapDetected:(UITouch *)touch;\n- (void)view:(UIView *)view tripleTapDetected:(UITouch *)touch;\n\n@end"
  },
  {
    "path": "Pod/Classes/MWTapDetectingView.m",
    "content": "//\n//  UIViewTap.m\n//  Momento\n//\n//  Created by Michael Waterfall on 04/11/2009.\n//  Copyright 2009 d3i. All rights reserved.\n//\n\n#import \"MWTapDetectingView.h\"\n\n@implementation MWTapDetectingView\n\n- (id)init {\n\tif ((self = [super init])) {\n\t\tself.userInteractionEnabled = YES;\n\t}\n\treturn self;\n}\n\n- (id)initWithFrame:(CGRect)frame {\n\tif ((self = [super initWithFrame:frame])) {\n\t\tself.userInteractionEnabled = YES;\n\t}\n\treturn self;\n}\n\n- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {\n\tUITouch *touch = [touches anyObject];\n\tNSUInteger tapCount = touch.tapCount;\n\tswitch (tapCount) {\n\t\tcase 1:\n\t\t\t[self handleSingleTap:touch];\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t[self handleDoubleTap:touch];\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\t[self handleTripleTap:touch];\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\t[[self nextResponder] touchesEnded:touches withEvent:event];\n}\n\n- (void)handleSingleTap:(UITouch *)touch {\n\tif ([_tapDelegate respondsToSelector:@selector(view:singleTapDetected:)])\n\t\t[_tapDelegate view:self singleTapDetected:touch];\n}\n\n- (void)handleDoubleTap:(UITouch *)touch {\n\tif ([_tapDelegate respondsToSelector:@selector(view:doubleTapDetected:)])\n\t\t[_tapDelegate view:self doubleTapDetected:touch];\n}\n\n- (void)handleTripleTap:(UITouch *)touch {\n\tif ([_tapDelegate respondsToSelector:@selector(view:tripleTapDetected:)])\n\t\t[_tapDelegate view:self tripleTapDetected:touch];\n}\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWZoomingScrollView.h",
    "content": "//\n//  ZoomingScrollView.h\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 14/10/2010.\n//  Copyright 2010 d3i. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"MWPhotoProtocol.h\"\n#import \"MWTapDetectingImageView.h\"\n#import \"MWTapDetectingView.h\"\n\n@class MWPhotoBrowser, MWPhoto, MWCaptionView;\n\n@interface MWZoomingScrollView : UIScrollView <UIScrollViewDelegate, MWTapDetectingImageViewDelegate, MWTapDetectingViewDelegate> {\n\n}\n\n@property () NSUInteger index;\n@property (nonatomic) id <MWPhoto> photo;\n@property (nonatomic, weak) MWCaptionView *captionView;\n@property (nonatomic, weak) UIButton *selectedButton;\n@property (nonatomic, weak) UIButton *playButton;\n\n- (id)initWithPhotoBrowser:(MWPhotoBrowser *)browser;\n- (void)displayImage;\n- (void)displayImageFailure;\n- (void)setMaxMinZoomScalesForCurrentBounds;\n- (void)prepareForReuse;\n- (BOOL)displayingVideo;\n- (void)setImageHidden:(BOOL)hidden;\n\n@end\n"
  },
  {
    "path": "Pod/Classes/MWZoomingScrollView.m",
    "content": "//\n//  ZoomingScrollView.m\n//  MWPhotoBrowser\n//\n//  Created by Michael Waterfall on 14/10/2010.\n//  Copyright 2010 d3i. All rights reserved.\n//\n\n#import <DACircularProgress/DACircularProgressView.h>\n#import \"MWCommon.h\"\n#import \"MWZoomingScrollView.h\"\n#import \"MWPhotoBrowser.h\"\n#import \"MWPhoto.h\"\n#import \"MWPhotoBrowserPrivate.h\"\n#import \"UIImage+MWPhotoBrowser.h\"\n\n// Private methods and properties\n@interface MWZoomingScrollView () {\n    \n    MWPhotoBrowser __weak *_photoBrowser;\n\tMWTapDetectingView *_tapView; // for background taps\n\tMWTapDetectingImageView *_photoImageView;\n\tDACircularProgressView *_loadingIndicator;\n    UIImageView *_loadingError;\n    \n}\n\n@end\n\n@implementation MWZoomingScrollView\n\n- (id)initWithPhotoBrowser:(MWPhotoBrowser *)browser {\n    if ((self = [super init])) {\n        \n        // Setup\n        _index = NSUIntegerMax;\n        _photoBrowser = browser;\n        \n\t\t// Tap view for background\n\t\t_tapView = [[MWTapDetectingView alloc] initWithFrame:self.bounds];\n\t\t_tapView.tapDelegate = self;\n\t\t_tapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n\t\t_tapView.backgroundColor = [UIColor blackColor];\n\t\t[self addSubview:_tapView];\n\t\t\n\t\t// Image view\n\t\t_photoImageView = [[MWTapDetectingImageView alloc] initWithFrame:CGRectZero];\n\t\t_photoImageView.tapDelegate = self;\n\t\t_photoImageView.contentMode = UIViewContentModeCenter;\n\t\t_photoImageView.backgroundColor = [UIColor blackColor];\n\t\t[self addSubview:_photoImageView];\n\t\t\n\t\t// Loading indicator\n\t\t_loadingIndicator = [[DACircularProgressView alloc] initWithFrame:CGRectMake(140.0f, 30.0f, 40.0f, 40.0f)];\n        _loadingIndicator.userInteractionEnabled = NO;\n        _loadingIndicator.thicknessRatio = 0.1;\n        _loadingIndicator.roundedCorners = NO;\n\t\t_loadingIndicator.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin |\n        UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;\n\t\t[self addSubview:_loadingIndicator];\n\n        // Listen progress notifications\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(setProgressFromNotification:)\n                                                     name:MWPHOTO_PROGRESS_NOTIFICATION\n                                                   object:nil];\n        \n\t\t// Setup\n\t\tself.backgroundColor = [UIColor blackColor];\n\t\tself.delegate = self;\n\t\tself.showsHorizontalScrollIndicator = NO;\n\t\tself.showsVerticalScrollIndicator = NO;\n\t\tself.decelerationRate = UIScrollViewDecelerationRateFast;\n\t\tself.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n        \n    }\n    return self;\n}\n\n- (void)dealloc {\n    if ([_photo respondsToSelector:@selector(cancelAnyLoading)]) {\n        [_photo cancelAnyLoading];\n    }\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n- (void)prepareForReuse {\n    [self hideImageFailure];\n    self.photo = nil;\n    self.captionView = nil;\n    self.selectedButton = nil;\n    self.playButton = nil;\n    _photoImageView.hidden = NO;\n    _photoImageView.image = nil;\n    _index = NSUIntegerMax;\n}\n\n- (BOOL)displayingVideo {\n    return [_photo respondsToSelector:@selector(isVideo)] && _photo.isVideo;\n}\n\n- (void)setImageHidden:(BOOL)hidden {\n    _photoImageView.hidden = hidden;\n}\n\n#pragma mark - Image\n\n- (void)setPhoto:(id<MWPhoto>)photo {\n    // Cancel any loading on old photo\n    if (_photo && photo == nil) {\n        if ([_photo respondsToSelector:@selector(cancelAnyLoading)]) {\n            [_photo cancelAnyLoading];\n        }\n    }\n    _photo = photo;\n    UIImage *img = [_photoBrowser imageForPhoto:_photo];\n    if (img) {\n        [self displayImage];\n    } else {\n        // Will be loading so show loading\n        [self showLoadingIndicator];\n    }\n}\n\n// Get and display image\n- (void)displayImage {\n\tif (_photo && _photoImageView.image == nil) {\n\t\t\n\t\t// Reset\n\t\tself.maximumZoomScale = 1;\n\t\tself.minimumZoomScale = 1;\n\t\tself.zoomScale = 1;\n\t\tself.contentSize = CGSizeMake(0, 0);\n\t\t\n\t\t// Get image from browser as it handles ordering of fetching\n\t\tUIImage *img = [_photoBrowser imageForPhoto:_photo];\n\t\tif (img) {\n\t\t\t\n\t\t\t// Hide indicator\n\t\t\t[self hideLoadingIndicator];\n\t\t\t\n\t\t\t// Set image\n\t\t\t_photoImageView.image = img;\n\t\t\t_photoImageView.hidden = NO;\n\t\t\t\n\t\t\t// Setup photo frame\n\t\t\tCGRect photoImageViewFrame;\n\t\t\tphotoImageViewFrame.origin = CGPointZero;\n\t\t\tphotoImageViewFrame.size = img.size;\n\t\t\t_photoImageView.frame = photoImageViewFrame;\n\t\t\tself.contentSize = photoImageViewFrame.size;\n\n\t\t\t// Set zoom to minimum zoom\n\t\t\t[self setMaxMinZoomScalesForCurrentBounds];\n\t\t\t\n\t\t} else  {\n\n            // Show image failure\n            [self displayImageFailure];\n\t\t\t\n\t\t}\n\t\t[self setNeedsLayout];\n\t}\n}\n\n// Image failed so just show black!\n- (void)displayImageFailure {\n    [self hideLoadingIndicator];\n    _photoImageView.image = nil;\n    \n    // Show if image is not empty\n    if (![_photo respondsToSelector:@selector(emptyImage)] || !_photo.emptyImage) {\n        if (!_loadingError) {\n            _loadingError = [UIImageView new];\n            _loadingError.image = [UIImage imageForResourcePath:@\"MWPhotoBrowser.bundle/ImageError\" ofType:@\"png\" inBundle:[NSBundle bundleForClass:[self class]]];\n            _loadingError.userInteractionEnabled = NO;\n            _loadingError.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin |\n            UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;\n            [_loadingError sizeToFit];\n            [self addSubview:_loadingError];\n        }\n        _loadingError.frame = CGRectMake(floorf((self.bounds.size.width - _loadingError.frame.size.width) / 2.),\n                                         floorf((self.bounds.size.height - _loadingError.frame.size.height) / 2),\n                                         _loadingError.frame.size.width,\n                                         _loadingError.frame.size.height);\n    }\n}\n\n- (void)hideImageFailure {\n    if (_loadingError) {\n        [_loadingError removeFromSuperview];\n        _loadingError = nil;\n    }\n}\n\n#pragma mark - Loading Progress\n\n- (void)setProgressFromNotification:(NSNotification *)notification {\n    dispatch_async(dispatch_get_main_queue(), ^{\n        NSDictionary *dict = [notification object];\n        id <MWPhoto> photoWithProgress = [dict objectForKey:@\"photo\"];\n        if (photoWithProgress == self.photo) {\n            float progress = [[dict valueForKey:@\"progress\"] floatValue];\n            _loadingIndicator.progress = MAX(MIN(1, progress), 0);\n        }\n    });\n}\n\n- (void)hideLoadingIndicator {\n    _loadingIndicator.hidden = YES;\n}\n\n- (void)showLoadingIndicator {\n    self.zoomScale = 0;\n    self.minimumZoomScale = 0;\n    self.maximumZoomScale = 0;\n    _loadingIndicator.progress = 0;\n    _loadingIndicator.hidden = NO;\n    [self hideImageFailure];\n}\n\n#pragma mark - Setup\n\n- (CGFloat)initialZoomScaleWithMinScale {\n    CGFloat zoomScale = self.minimumZoomScale;\n    if (_photoImageView && _photoBrowser.zoomPhotosToFill) {\n        // Zoom image to fill if the aspect ratios are fairly similar\n        CGSize boundsSize = self.bounds.size;\n        CGSize imageSize = _photoImageView.image.size;\n        CGFloat boundsAR = boundsSize.width / boundsSize.height;\n        CGFloat imageAR = imageSize.width / imageSize.height;\n        CGFloat xScale = boundsSize.width / imageSize.width;    // the scale needed to perfectly fit the image width-wise\n        CGFloat yScale = boundsSize.height / imageSize.height;  // the scale needed to perfectly fit the image height-wise\n        // Zooms standard portrait images on a 3.5in screen but not on a 4in screen.\n        if (ABS(boundsAR - imageAR) < 0.17) {\n            zoomScale = MAX(xScale, yScale);\n            // Ensure we don't zoom in or out too far, just in case\n            zoomScale = MIN(MAX(self.minimumZoomScale, zoomScale), self.maximumZoomScale);\n        }\n    }\n    return zoomScale;\n}\n\n- (void)setMaxMinZoomScalesForCurrentBounds {\n    \n    // Reset\n    self.maximumZoomScale = 1;\n    self.minimumZoomScale = 1;\n    self.zoomScale = 1;\n    \n    // Bail if no image\n    if (_photoImageView.image == nil) return;\n    \n    // Reset position\n    _photoImageView.frame = CGRectMake(0, 0, _photoImageView.frame.size.width, _photoImageView.frame.size.height);\n\t\n    // Sizes\n    CGSize boundsSize = self.bounds.size;\n    CGSize imageSize = _photoImageView.image.size;\n    \n    // Calculate Min\n    CGFloat xScale = boundsSize.width / imageSize.width;    // the scale needed to perfectly fit the image width-wise\n    CGFloat yScale = boundsSize.height / imageSize.height;  // the scale needed to perfectly fit the image height-wise\n    CGFloat minScale = MIN(xScale, yScale);                 // use minimum of these to allow the image to become fully visible\n    \n    // Calculate Max\n    CGFloat maxScale = 3;\n    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {\n        // Let them go a bit bigger on a bigger screen!\n        maxScale = 4;\n    }\n    \n    // Image is smaller than screen so no zooming!\n    if (xScale >= 1 && yScale >= 1) {\n        minScale = 1.0;\n    }\n    \n    // Set min/max zoom\n    self.maximumZoomScale = maxScale;\n    self.minimumZoomScale = minScale;\n    \n    // Initial zoom\n    self.zoomScale = [self initialZoomScaleWithMinScale];\n    \n    // If we're zooming to fill then centralise\n    if (self.zoomScale != minScale) {\n        \n        // Centralise\n        self.contentOffset = CGPointMake((imageSize.width * self.zoomScale - boundsSize.width) / 2.0,\n                                         (imageSize.height * self.zoomScale - boundsSize.height) / 2.0);\n\n    }\n    \n    // Disable scrolling initially until the first pinch to fix issues with swiping on an initally zoomed in photo\n    self.scrollEnabled = NO;\n    \n    // If it's a video then disable zooming\n    if ([self displayingVideo]) {\n        self.maximumZoomScale = self.zoomScale;\n        self.minimumZoomScale = self.zoomScale;\n    }\n\n    // Layout\n\t[self setNeedsLayout];\n\n}\n\n#pragma mark - Layout\n\n- (void)layoutSubviews {\n\t\n\t// Update tap view frame\n\t_tapView.frame = self.bounds;\n\t\n\t// Position indicators (centre does not seem to work!)\n\tif (!_loadingIndicator.hidden)\n        _loadingIndicator.frame = CGRectMake(floorf((self.bounds.size.width - _loadingIndicator.frame.size.width) / 2.),\n                                         floorf((self.bounds.size.height - _loadingIndicator.frame.size.height) / 2),\n                                         _loadingIndicator.frame.size.width,\n                                         _loadingIndicator.frame.size.height);\n\tif (_loadingError)\n        _loadingError.frame = CGRectMake(floorf((self.bounds.size.width - _loadingError.frame.size.width) / 2.),\n                                         floorf((self.bounds.size.height - _loadingError.frame.size.height) / 2),\n                                         _loadingError.frame.size.width,\n                                         _loadingError.frame.size.height);\n\n\t// Super\n\t[super layoutSubviews];\n\t\n    // Center the image as it becomes smaller than the size of the screen\n    CGSize boundsSize = self.bounds.size;\n    CGRect frameToCenter = _photoImageView.frame;\n    \n    // Horizontally\n    if (frameToCenter.size.width < boundsSize.width) {\n        frameToCenter.origin.x = floorf((boundsSize.width - frameToCenter.size.width) / 2.0);\n\t} else {\n        frameToCenter.origin.x = 0;\n\t}\n    \n    // Vertically\n    if (frameToCenter.size.height < boundsSize.height) {\n        frameToCenter.origin.y = floorf((boundsSize.height - frameToCenter.size.height) / 2.0);\n\t} else {\n        frameToCenter.origin.y = 0;\n\t}\n    \n\t// Center\n\tif (!CGRectEqualToRect(_photoImageView.frame, frameToCenter))\n\t\t_photoImageView.frame = frameToCenter;\n\t\n}\n\n#pragma mark - UIScrollViewDelegate\n\n- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {\n\treturn _photoImageView;\n}\n\n- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {\n\t[_photoBrowser cancelControlHiding];\n}\n\n- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {\n    self.scrollEnabled = YES; // reset\n\t[_photoBrowser cancelControlHiding];\n}\n\n- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {\n\t[_photoBrowser hideControlsAfterDelay];\n}\n\n- (void)scrollViewDidZoom:(UIScrollView *)scrollView {\n    [self setNeedsLayout];\n    [self layoutIfNeeded];\n}\n\n#pragma mark - Tap Detection\n\n- (void)handleSingleTap:(CGPoint)touchPoint {\n\t[_photoBrowser performSelector:@selector(toggleControls) withObject:nil afterDelay:0.2];\n}\n\n- (void)handleDoubleTap:(CGPoint)touchPoint {\n    \n    // Dont double tap to zoom if showing a video\n    if ([self displayingVideo]) {\n        return;\n    }\n\t\n\t// Cancel any single tap handling\n\t[NSObject cancelPreviousPerformRequestsWithTarget:_photoBrowser];\n\t\n\t// Zoom\n\tif (self.zoomScale != self.minimumZoomScale && self.zoomScale != [self initialZoomScaleWithMinScale]) {\n\t\t\n\t\t// Zoom out\n\t\t[self setZoomScale:self.minimumZoomScale animated:YES];\n\t\t\n\t} else {\n\t\t\n\t\t// Zoom in to twice the size\n        CGFloat newZoomScale = ((self.maximumZoomScale + self.minimumZoomScale) / 2);\n        CGFloat xsize = self.bounds.size.width / newZoomScale;\n        CGFloat ysize = self.bounds.size.height / newZoomScale;\n        [self zoomToRect:CGRectMake(touchPoint.x - xsize/2, touchPoint.y - ysize/2, xsize, ysize) animated:YES];\n\n\t}\n\t\n\t// Delay controls\n\t[_photoBrowser hideControlsAfterDelay];\n\t\n}\n\n// Image View\n- (void)imageView:(UIImageView *)imageView singleTapDetected:(UITouch *)touch { \n    [self handleSingleTap:[touch locationInView:imageView]];\n}\n- (void)imageView:(UIImageView *)imageView doubleTapDetected:(UITouch *)touch {\n    [self handleDoubleTap:[touch locationInView:imageView]];\n}\n\n// Background View\n- (void)view:(UIView *)view singleTapDetected:(UITouch *)touch {\n    // Translate touch location to image view location\n    CGFloat touchX = [touch locationInView:view].x;\n    CGFloat touchY = [touch locationInView:view].y;\n    touchX *= 1/self.zoomScale;\n    touchY *= 1/self.zoomScale;\n    touchX += self.contentOffset.x;\n    touchY += self.contentOffset.y;\n    [self handleSingleTap:CGPointMake(touchX, touchY)];\n}\n- (void)view:(UIView *)view doubleTapDetected:(UITouch *)touch {\n    // Translate touch location to image view location\n    CGFloat touchX = [touch locationInView:view].x;\n    CGFloat touchY = [touch locationInView:view].y;\n    touchX *= 1/self.zoomScale;\n    touchY *= 1/self.zoomScale;\n    touchX += self.contentOffset.x;\n    touchY += self.contentOffset.y;\n    [self handleDoubleTap:CGPointMake(touchX, touchY)];\n}\n\n@end\n"
  },
  {
    "path": "Pod/Classes/UIImage+MWPhotoBrowser.h",
    "content": "//\n//  UIImage+MWPhotoBrowser.h\n//  Pods\n//\n//  Created by Michael Waterfall on 05/07/2015.\n//\n//\n\n#import <Foundation/Foundation.h>\n\n@interface UIImage (MWPhotoBrowser)\n\n+ (UIImage *)imageForResourcePath:(NSString *)path ofType:(NSString *)type inBundle:(NSBundle *)bundle;\n+ (UIImage *)clearImageWithSize:(CGSize)size;\n\n@end\n"
  },
  {
    "path": "Pod/Classes/UIImage+MWPhotoBrowser.m",
    "content": "//\n//  UIImage+MWPhotoBrowser.m\n//  Pods\n//\n//  Created by Michael Waterfall on 05/07/2015.\n//\n//\n\n#import \"UIImage+MWPhotoBrowser.h\"\n\n@implementation UIImage (MWPhotoBrowser)\n\n+ (UIImage *)imageForResourcePath:(NSString *)path ofType:(NSString *)type inBundle:(NSBundle *)bundle {\n    return [UIImage imageWithContentsOfFile:[bundle pathForResource:path ofType:type]];\n}\n\n+ (UIImage *)clearImageWithSize:(CGSize)size {\n    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);\n    UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();\n    UIGraphicsEndImageContext();\n    return blank;\n}\n\n@end\n"
  },
  {
    "path": "README.md",
    "content": "# MWPhotoBrowser\n\n<!--[![CI Status](http://img.shields.io/travis/Michael Waterfall/MWPhotoBrowser.svg?style=flat)](https://travis-ci.org/Michael Waterfall/MWPhotoBrowser)-->\n[![Version](https://img.shields.io/cocoapods/v/MWPhotoBrowser.svg?style=flat)](http://cocoapods.org/pods/MWPhotoBrowser)\n[![License](https://img.shields.io/cocoapods/l/MWPhotoBrowser.svg?style=flat)](http://cocoapods.org/pods/MWPhotoBrowser)\n[![Platform](https://img.shields.io/cocoapods/p/MWPhotoBrowser.svg?style=flat)](http://cocoapods.org/pods/MWPhotoBrowser)\n\n[![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=mwaterfall&url=https://github.com/mwaterfall/MWPhotoBrowser&title=MWPhotoBrowser&language=&tags=github&category=software)\n\n## A simple iOS photo and video browser with optional grid view, captions and selections.\n\nMWPhotoBrowser can display one or more images or videos by providing either `UIImage` objects, `PHAsset` objects, or URLs to library assets, web images/videos or local files. The photo browser handles the downloading and caching of photos from the web seamlessly. Photos can be zoomed and panned, and optional (customisable) captions can be displayed.\n\nThe browser can also be used to allow the user to select one or more photos using either the grid or main image view.\n\n[![Alt][screenshot1_thumb]][screenshot1]    [![Alt][screenshot2_thumb]][screenshot2]    [![Alt][screenshot3_thumb]][screenshot3]    [![Alt][screenshot4_thumb]][screenshot4]    [![Alt][screenshot5_thumb]][screenshot5]    [![Alt][screenshot6_thumb]][screenshot6]\n\n[screenshot1_thumb]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser1t.png\n[screenshot1]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser1.png\n[screenshot2_thumb]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser2t.png\n[screenshot2]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser2.png\n[screenshot3_thumb]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser3t.png\n[screenshot3]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser3.png\n[screenshot4_thumb]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser4t.png\n[screenshot4]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser4.png\n[screenshot5_thumb]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser5t.png\n[screenshot5]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser5.png\n[screenshot6_thumb]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser6t.png\n[screenshot6]: https://raw.github.com/mwaterfall/MWPhotoBrowser/master/Screenshots/MWPhotoBrowser6.png\n\nWorks on iOS 7+. All strings are localisable so they can be used in apps that support multiple languages.\n\n## Usage\n\nMWPhotoBrowser is designed to be presented within a navigation controller. Simply set the delegate (which must conform to `MWPhotoBrowserDelegate`) and implement the 2 required delegate methods to provide the photo browser with the data in the form of `MWPhoto` objects. You can create an `MWPhoto` object by providing a `UIImage` object, `PHAsset` object, or a URL containing the path to a file, an image online or an asset from the asset library.\n\n`MWPhoto` objects handle caching, file management, downloading of web images, and various optimisations for you. If however you would like to use your own data model to represent photos you can simply ensure your model conforms to the `MWPhoto` protocol. You can then handle the management of caching, downloads, etc, yourself. More information on this can be found in `MWPhotoProtocol.h`.\n\nSee the code snippet below for an example of how to implement the photo browser. There is also a simple demo app within the project.\n\n```obj-c\n// Create array of MWPhoto objects\nself.photos = [NSMutableArray array];\n\n// Add photos\n[photos addObject:[MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"photo2l\" ofType:@\"jpg\"]]]];\n[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b.jpg\"]]];\n[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3590/3329114220_5fbc5bc92b.jpg\"]]];\n\n// Add video with poster photo\nMWPhoto *video = [MWPhoto photoWithURL:[NSURL URLWithString:@\"https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/e15/11192696_824079697688618_1761661_n.jpg\"]];\nvideo.videoURL = [[NSURL alloc] initWithString:@\"https://scontent.cdninstagram.com/hphotos-xpa1/t50.2886-16/11200303_1440130956287424_1714699187_n.mp4\"];\n[photos addObject:video];\n\n// Create browser (must be done each time photo browser is\n// displayed. Photo browser objects cannot be re-used)\nMWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];\n\n// Set options\nbrowser.displayActionButton = YES; // Show action button to allow sharing, copying, etc (defaults to YES)\nbrowser.displayNavArrows = NO; // Whether to display left and right nav arrows on toolbar (defaults to NO)\nbrowser.displaySelectionButtons = NO; // Whether selection buttons are shown on each image (defaults to NO)\nbrowser.zoomPhotosToFill = YES; // Images that almost fill the screen will be initially zoomed to fill (defaults to YES)\nbrowser.alwaysShowControls = NO; // Allows to control whether the bars and controls are always visible or whether they fade away to show the photo full (defaults to NO)\nbrowser.enableGrid = YES; // Whether to allow the viewing of all the photo thumbnails on a grid (defaults to YES)\nbrowser.startOnGrid = NO; // Whether to start on the grid of thumbnails instead of the first photo (defaults to NO)\nbrowser.autoPlayOnAppear = NO; // Auto-play first video\n\n// Customise selection images to change colours if required\nbrowser.customImageSelectedIconName = @\"ImageSelected.png\";\nbrowser.customImageSelectedSmallIconName = @\"ImageSelectedSmall.png\";\n\n// Optionally set the current visible photo before displaying\n[browser setCurrentPhotoIndex:1];\n\n// Present\n[self.navigationController pushViewController:browser animated:YES];\n\n// Manipulate\n[browser showNextPhotoAnimated:YES];\n[browser showPreviousPhotoAnimated:YES];\n[browser setCurrentPhotoIndex:10];\n```\n\nThen respond to the required delegate methods:\n\n```obj-c\n- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser {\n    return self.photos.count;\n}\n\n- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index {\n    if (index < self.photos.count) {\n        return [self.photos objectAtIndex:index];\n    }\n    return nil;\n}\n```\n\nYou can present the browser modally simply by wrapping it in a new navigation controller and presenting that. The demo app allows you to toggle between the two presentation types.\n\n\n### Videos\n\nYou can represent videos in MWPhoto objects by providing a standard MWPhoto image object with a `videoURL`. You can also use a `PHAsset` object or a URL to an assets library video.\n\n```obj-c\n\n// Video with URL including poster photo\nMWPhoto *video = [MWPhoto photoWithURL:[NSURL URLWithString:@\"https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/e15/11192696_824079697688618_1761661_n.jpg\"]];\nvideo.videoURL = [NSURL URLWithString:@\"https://scontent.cdninstagram.com/hphotos-xpa1/t50.2886-16/11200303_1440130956287424_1714699187_n.mp4\"];\n\n// Video with PHAsset\nMWPhoto *video = [MWPhoto photoWithAsset:asset targetSize:[UIScreen mainScreen].bounds.size]; // Example sizing\n\n// Video with ALAsset\nMWPhoto *video = [MWPhoto photoWithURL:asset.defaultRepresentation.url];\nif ([asset valueForProperty:ALAssetPropertyType] == ALAssetTypeVideo) {\n    photo.videoURL = asset.defaultRepresentation.url;\n}\n\n// Video with no poster photo\nMWPhoto *video = [MWPhoto videoWithURL:[NSURL URLWithString:@\"https://scontent.cdninstagram.com/hphotos-xfa1/t50.2886-16/11237510_945154435524423_2137519922_n.mp4\"]];\n\n// Video grid thumbnail\nMWPhoto *videoThumb = [MWPhoto photoWithURL:[NSURL URLWithString:@\"https://scontent.cdninstagram.com/hphotos-xaf1/t51.2885-15/s150x150/e15/11240463_963135443745570_1519872157_n.jpg\"]];\nvideoThumb.isVideo = YES;\n\n// Video grid thumbnail for video with no poster photo\nMWPhoto *videoThumb = [MWPhoto new];\nvideoThumb.isVideo = YES;\n\n```\n\n\n### Grid\n\nIn order to properly show the grid of thumbnails, you must ensure the property `enableGrid` is set to `YES`, and implement the following delegate method:\n\n```obj-c\n- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index;\n```\n\nThe photo browser can also start on the grid by enabling the `startOnGrid` property.\n\n\n### Actions\n\nBy default, if the action button is visible then the image (and caption if it exists) are sent to a UIActivityViewController.\n\nYou can provide a custom action by implementing the following delegate method:\n\n```obj-c\n- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser actionButtonPressedForPhotoAtIndex:(NSUInteger)index {\n    // Do your thing!\n}\n```\n\n\n### Photo Captions\n\nPhoto captions can be displayed simply by setting the `caption` property on specific photos:\n\n```obj-c\nMWPhoto *photo = [MWPhoto photoWithURL:[NSURL URLWithString:@\"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b.jpg\"]];\nphoto.caption = @\"Campervan\";\n```\n\nNo caption will be displayed if the caption property is not set.\n\n\n#### Custom Captions\n\nBy default, the caption is a simple black transparent view with a label displaying the photo's caption in white. If you want to implement your own caption view, follow these steps:\n\n1. Optionally use a subclass of `MWPhoto` for your photos so you can store more data than a simple caption string.\n2. Subclass `MWCaptionView` and override `-setupCaption` and `-sizeThatFits:` (and any other UIView methods you see fit) to layout your own view and set it's size. More information on this can be found in `MWCaptionView.h`\n3. Implement the `-photoBrowser:captionViewForPhotoAtIndex:` MWPhotoBrowser delegate method (shown below).\n\nExample delegate method for custom caption view:\n\n```obj-c\n- (MWCaptionView *)photoBrowser:(MWPhotoBrowser *)photoBrowser captionViewForPhotoAtIndex:(NSUInteger)index {\n    MWPhoto *photo = [self.photos objectAtIndex:index];\n    MyMWCaptionViewSubclass *captionView = [[MyMWCaptionViewSubclass alloc] initWithPhoto:photo];\n    return captionView;\n}\n```\n\n\n#### Selections\n\nThe photo browser can display check boxes allowing the user to select one or more of the photos. To use this feature, simply enable the `displaySelectionButtons` property, and implement the following delegate methods:\n\n```obj-c\n- (BOOL)photoBrowser:(MWPhotoBrowser *)photoBrowser isPhotoSelectedAtIndex:(NSUInteger)index {\n    return [[_selections objectAtIndex:index] boolValue];\n}\n\n- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index selectedChanged:(BOOL)selected {\n    [_selections replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:selected]];\n}\n```\n\n\n## Installation\n\nMWPhotoBrowser is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod \"MWPhotoBrowser\"\n```\n\n\n## Usage\n\nTo run the example project, clone the repo, and run `pod install` from the Example directory first.\n\nThen import the photo browser into your source files (or into your bridging header if you're using with Swift and not using frameworks with Cocoapods):\n\n```obj-c\n#import \"MWPhotoBrowser.h\"\n```\n\nIf you are using Swift and frameworks, then you can just import the browser into your Swift source file:\n\n```swift\nimport MWPhotoBrowser\n```\n\n\n## Author\n\nMichael Waterfall, michael@d3i.com\n\n\n## License\n\nMWPhotoBrowser is available under the MIT license. See the LICENSE file for more info.\n\n\n## Notes\n\nDemo photos kindly provided by [Oliver Waters](<http://twitter.com/oliverwaters>).\n"
  }
]