[
  {
    "path": "Podfile",
    "content": "platform :ios, '8.0'\ntarget 'testPasterImage' do\n\npod 'BlocksKit', '~> 2.2.5'\npod 'NBSwipePageView', :git => 'https://github.com/xuzhe/NBSwipePageView.git'\n\nend\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/BlocksKit+MessageUI.h",
    "content": "//\n//  BlocksKit+MessageUI\n//\n//  The Objective-C block utilities you always wish you had.\n//\n//  Copyright (c) 2011-2012, 2013-2014 Zachary Waldowski\n//  Copyright (c) 2012-2013 Pandamonia LLC\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\n#import <BlocksKit/MFMailComposeViewController+BlocksKit.h>\n#import <BlocksKit/MFMessageComposeViewController+BlocksKit.h>\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/BlocksKit+UIKit.h",
    "content": "//\n//  BlocksKit+UIKit\n//\n//  The Objective-C block utilities you always wish you had.\n//\n//  Copyright (c) 2011-2012, 2013-2014 Zachary Waldowski\n//  Copyright (c) 2012-2013 Pandamonia LLC\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\n#import <BlocksKit/UIActionSheet+BlocksKit.h>\n#import <BlocksKit/UIAlertView+BlocksKit.h>\n#import <BlocksKit/UIBarButtonItem+BlocksKit.h>\n#import <BlocksKit/UIControl+BlocksKit.h>\n#import <BlocksKit/UIGestureRecognizer+BlocksKit.h>\n#import <BlocksKit/UIPopoverController+BlocksKit.h>\n#import <BlocksKit/UITextField+BlocksKit.h>\n#import <BlocksKit/UIView+BlocksKit.h>\n#import <BlocksKit/UIWebView+BlocksKit.h>\n#import <BlocksKit/UITextField+BlocksKit.h>\n#import <BlocksKit/UIImagePickerController+BlocksKit.h>\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/BlocksKit.h",
    "content": "//\n//  BlocksKit\n//\n//  The Objective-C block utilities you always wish you had.\n//\n//  Copyright (c) 2011-2012, 2013-2014 Zachary Waldowski\n//  Copyright (c) 2012-2013 Pandamonia LLC\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\n#import <BlocksKit/NSArray+BlocksKit.h>\n#import <BlocksKit/NSDictionary+BlocksKit.h>\n#import <BlocksKit/NSIndexSet+BlocksKit.h>\n#import <BlocksKit/NSInvocation+BlocksKit.h>\n#import <BlocksKit/NSMutableArray+BlocksKit.h>\n#import <BlocksKit/NSMutableDictionary+BlocksKit.h>\n#import <BlocksKit/NSMutableIndexSet+BlocksKit.h>\n#import <BlocksKit/NSMutableOrderedSet+BlocksKit.h>\n#import <BlocksKit/NSMutableSet+BlocksKit.h>\n#import <BlocksKit/NSObject+BKAssociatedObjects.h>\n#import <BlocksKit/NSObject+BKBlockExecution.h>\n#import <BlocksKit/NSObject+BKBlockObservation.h>\n#import <BlocksKit/NSOrderedSet+BlocksKit.h>\n#import <BlocksKit/NSSet+BlocksKit.h>\n#import <BlocksKit/NSTimer+BlocksKit.h>\n#import <BlocksKit/BKMacros.h>\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/BKMacros.h",
    "content": "//\n//  BKMacros.h\n//  BlocksKit\n//\n//  Includes code by Michael Ash. <https://github.com/mikeash>.\n//\n\n#import \"NSArray+BlocksKit.h\"\n#import \"NSSet+BlocksKit.h\"\n#import \"NSDictionary+BlocksKit.h\"\n#import \"NSIndexSet+BlocksKit.h\"\n\n#ifndef __BLOCKSKIT_MACROS__\n#define __BLOCKSKIT_MACROS__\n\n#define __BK_EACH_WRAPPER(...) (^{ __block CFMutableDictionaryRef BK_eachTable = nil; \\\n\t\t(void)BK_eachTable; \\\n\t\t__typeof__(__VA_ARGS__) BK_retval = __VA_ARGS__; \\\n\t\tif(BK_eachTable) \\\n\t\t\tCFRelease(BK_eachTable); \\\n\t\treturn BK_retval; \\\n\t}())\n\n#define __BK_EACH_WRAPPER_VOID(...) (^{ __block CFMutableDictionaryRef BK_eachTable = nil; \\\n\t\t(void)BK_eachTable; \\\n\t\t__VA_ARGS__; \\\n\t\tif(BK_eachTable) \\\n\t\t\tCFRelease(BK_eachTable); \\\n\t}())\n\n#define BK_EACH(collection, ...) __BK_EACH_WRAPPER_VOID([collection bk_each:^(id obj) { __VA_ARGS__ }])\n#define BK_MAP(collection, ...) __BK_EACH_WRAPPER([collection bk_map:^id(id obj) { return (__VA_ARGS__); }])\n#define BK_SELECT(collection, ...) __BK_EACH_WRAPPER([collection bk_select: ^BOOL (id obj) { return (__VA_ARGS__) != 0; }])\n#define BK_REJECT(collection, ...) __BK_EACH_WRAPPER([collection bk_select: ^BOOL (id obj) { return (__VA_ARGS__) == 0; }])\n#define BK_MATCH(collection, ...) __BK_EACH_WRAPPER([collection bk_match: ^BOOL (id obj) { return (__VA_ARGS__) != 0; }])\n#define BK_REDUCE(collection, initial, ...) __BK_EACH_WRAPPER([collection bk_reduce: (initial) withBlock: ^id (id a, id b) { return (__VA_ARGS__); }])\n\n// BK_APPLY is not wrapped, because we don't guarantee that the order matches the current collection during parallel execution.\n#define BK_APPLY(collection, ...) [collection bk_apply:^(id obj) { __VA_ARGS__ }]\n\nstatic inline id BKNextHelper(NSArray *array, CFMutableDictionaryRef *eachTablePtr) {\n\n    if (!*eachTablePtr) {\n        CFDictionaryKeyCallBacks keycb = {\n            0,\n            kCFTypeDictionaryKeyCallBacks.retain,\n            kCFTypeDictionaryKeyCallBacks.release,\n            kCFTypeDictionaryKeyCallBacks.copyDescription,\n            NULL,\n            NULL\n        };\n        *eachTablePtr = CFDictionaryCreateMutable(NULL, 0, &keycb, &kCFTypeDictionaryValueCallBacks);\n    }\n\n    NSEnumerator *enumerator = (__bridge id)CFDictionaryGetValue(*eachTablePtr, (__bridge CFArrayRef)array);\n    if (!enumerator) {\n        enumerator = [array objectEnumerator];\n        CFDictionarySetValue(*eachTablePtr, (__bridge CFArrayRef)array, (__bridge void *)enumerator);\n    }\n    return [enumerator nextObject];\n}\n\n#define BK_NEXT(array) BKNextHelper(array, &BK_eachTable)\n\n#ifndef EACH\n#define EACH BK_EACH\n#endif\n\n#ifndef APPLY\n#define APPLY BK_APPLY\n#endif\n\n#ifndef MAP\n#define MAP BK_MAP\n#endif\n\n#ifndef SELECT\n#define SELECT BK_SELECT\n#endif\n\n#ifndef REJECT\n#define REJECT BK_REJECT\n#endif\n\n#ifndef MATCH\n#define MATCH BK_MATCH\n#endif\n\n#ifndef REDUCE\n#define REDUCE BK_REDUCE\n#endif\n\n#ifndef NEXT\n#define NEXT BK_NEXT\n#endif\n\n#endif"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSArray+BlocksKit.h",
    "content": "//\n//  NSArray+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n#import <CoreGraphics/CGBase.h>\n\n/** Block extensions for NSArray.\n\n Both inspired by and resembling Smalltalk syntax, these utilities\n allows for iteration of an array in a concise way that\n saves quite a bit of boilerplate code for filtering or finding\n objects or an object.\n\n Includes code by the following:\n\n- [Robin Lu](https://github.com/robin)\n- [Michael Ash](https://github.com/mikeash)\n- [Aleks Nesterow](https://github.com/nesterow)\n- [Zach Waldowski](https://github.com/zwaldowski)\n\n @see NSDictionary(BlocksKit)\n @see NSSet(BlocksKit)\n */\n@interface NSArray (BlocksKit)\n\n/** Loops through an array and executes the given block with each object.\n\n @param block A single-argument, void-returning code block.\n */\n- (void)bk_each:(void (^)(id obj))block;\n\n/** Enumerates through an array concurrently and executes\n the given block once for each object.\n\n Enumeration will occur on appropriate background queues. This\n will have a noticeable speed increase, especially on dual-core\n devices, but you *must* be aware of the thread safety of the\n objects you message from within the block. Be aware that the\n order of objects is not necessarily the order each block will\n be called in.\n\n @param block A single-argument, void-returning code block.\n */\n- (void)bk_apply:(void (^)(id obj))block;\n\n/** Loops through an array to find the object matching the block.\n\n bk_match: is functionally identical to bk_select:, but will stop and return\n on the first match.\n\n @param block A single-argument, `BOOL`-returning code block.\n @return Returns the object, if found, or `nil`.\n @see bk_select:\n */\n- (id)bk_match:(BOOL (^)(id obj))block;\n\n/** Loops through an array to find the objects matching the block.\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns an array of the objects found.\n @see bk_match:\n */\n- (NSArray *)bk_select:(BOOL (^)(id obj))block;\n\n/** Loops through an array to find the objects not matching the block.\n\n This selector performs *literally* the exact same function as bk_select: but in reverse.\n\n This is useful, as one may expect, for removing objects from an array.\n\t NSArray *new = [computers bk_reject:^BOOL(id obj) {\n\t   return ([obj isUgly]);\n\t }];\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns an array of all objects not found.\n */\n- (NSArray *)bk_reject:(BOOL (^)(id obj))block;\n\n/** Call the block once for each object and create an array of the return values.\n\n This is sometimes referred to as a transform, mutating one of each object:\n\t NSArray *new = [stringArray bk_map:^id(id obj) {\n\t   return [obj stringByAppendingString:@\".png\"]);\n\t }];\n\n @param block A single-argument, object-returning code block.\n @return Returns an array of the objects returned by the block.\n */\n- (NSArray *)bk_map:(id (^)(id obj))block;\n\n/** Arbitrarily accumulate objects using a block.\n\n The concept of this selector is difficult to illustrate in words. The sum can\n be any NSObject, including (but not limited to) a string, number, or value.\n\n For example, you can concentate the strings in an array:\n\t NSString *concentrated = [stringArray bk_reduce:@\"\" withBlock:^id(id sum, id obj) {\n\t   return [sum stringByAppendingString:obj];\n\t }];\n\n You can also do something like summing the lengths of strings in an array:\n\t NSUInteger value = [[[stringArray bk_reduce:nil withBlock:^id(id sum, id obj) {\n\t   return @([sum integerValue] + obj.length);\n\t }]] unsignedIntegerValue];\n\n @param initial The value of the reduction at its start.\n @param block A block that takes the current sum and the next object to return the new sum.\n @return An accumulated value.\n */\n- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block;\n\n/**\n Sometimes we just want to loop an objects list and reduce one property, where\n each result is a primitive type.\n\n For example, say we want to calculate the total age of a list of people.\n\n Code without using block will be something like:\n\n\t NSArray *peoples = @[p1, p2, p3];\n\t NSInteger totalAge = 0;\n\t for (People *people in peoples) {\n\t     totalAge += [people age];\n\t }\n\n We can use a block to make it simpler:\n\n\t NSArray *peoples = @[p1, p2, p3];\n\t NSInteger totalAge = [peoples reduceInteger:0 withBlock:^(NSInteger result, id obj, NSInteger index) {\n\t \t return result + [obj age];\n\t }];\n\n */\n- (NSInteger)bk_reduceInteger:(NSInteger)initial withBlock:(NSInteger(^)(NSInteger result, id obj))block;\n\n/**\n Sometimes we just want to loop an objects list and reduce one property, where\n each result is a primitive type.\n \n For instance, say we want to caculate the total balance from a list of people.\n \n Code without using a block will be something like:\n \n\t NSArray *peoples = @[p1, p2, p3];\n\t CGFloat totalBalance = 0;\n\t for (People *people in peoples) {\n\t     totalBalance += [people balance];\n\t }\n \n We can use a block to make it simpler:\n \n\t NSArray *peoples = @[p1, p2, p3];\n\t CGFloat totalBalance = [peoples reduceFloat:.0f WithBlock:^CGFloat(CGFloat result, id obj, NSInteger index) {\n\t \t return result + [obj balance];\n\t }];\n\n */\n\n- (CGFloat)bk_reduceFloat:(CGFloat)inital withBlock:(CGFloat(^)(CGFloat result, id obj))block;\n\n/** Loops through an array to find whether any object matches the block.\n\n This method is similar to the Scala list `exists`. It is functionally\n identical to bk_match: but returns a `BOOL` instead. It is not recommended\n to use bk_any: as a check condition before executing bk_match:, since it would\n require two loops through the array.\n\n For example, you can find if a string in an array starts with a certain letter:\n\n\t NSString *letter = @\"A\";\n\t BOOL containsLetter = [stringArray bk_any:^(id obj) {\n\t   return [obj hasPrefix:@\"A\"];\n\t }];\n\n @param block A single-argument, BOOL-returning code block.\n @return YES for the first time the block returns YES for an object, NO otherwise.\n */\n- (BOOL)bk_any:(BOOL (^)(id obj))block;\n\n/** Loops through an array to find whether no objects match the block.\n\n This selector performs *literally* the exact same function as bk_all: but in reverse.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES if the block returns NO for all objects in the array, NO otherwise.\n */\n- (BOOL)bk_none:(BOOL (^)(id obj))block;\n\n/** Loops through an array to find whether all objects match the block.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES if the block returns YES for all objects in the array, NO otherwise.\n */\n- (BOOL)bk_all:(BOOL (^)(id obj))block;\n\n/** Tests whether every element of this array relates to the corresponding element of another array according to match by block.\n\n For example, finding if a list of numbers corresponds to their sequenced string values;\n NSArray *numbers = @[ @(1), @(2), @(3) ];\n NSArray *letters = @[ @\"1\", @\"2\", @\"3\" ];\n BOOL doesCorrespond = [numbers bk_corresponds:letters withBlock:^(id number, id letter) {\n\treturn [[number stringValue] isEqualToString:letter];\n }];\n\n @param list An array of objects to compare with.\n @param block A two-argument, BOOL-returning code block.\n @return Returns a BOOL, true if every element of array relates to corresponding element in another array.\n */\n- (BOOL)bk_corresponds:(NSArray *)list withBlock:(BOOL (^)(id obj1, id obj2))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSArray+BlocksKit.m",
    "content": "//\n//  NSArray+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSArray+BlocksKit.h\"\n\n@implementation NSArray (BlocksKit)\n\n- (void)bk_each:(void (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tblock(obj);\n\t}];\n}\n\n- (void)bk_apply:(void (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tblock(obj);\n\t}];\n}\n\n- (id)bk_match:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSUInteger index = [self indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n\t\treturn block(obj);\n\t}];\n\n\tif (index == NSNotFound)\n\t\treturn nil;\n\n\treturn self[index];\n}\n\n- (NSArray *)bk_select:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\treturn [self objectsAtIndexes:[self indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n\t\treturn block(obj);\n\t}]];\n}\n\n- (NSArray *)bk_reject:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\treturn [self bk_select:^BOOL(id obj) {\n\t\treturn !block(obj);\n\t}];\n}\n\n- (NSArray *)bk_map:(id (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSMutableArray *result = [NSMutableArray arrayWithCapacity:self.count];\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tid value = block(obj) ?: [NSNull null];\n\t\t[result addObject:value];\n\t}];\n\n\treturn result;\n}\n\n- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block id result = initial;\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tresult = block(result, obj);\n\t}];\n\n\treturn result;\n}\n\n- (NSInteger)bk_reduceInteger:(NSInteger)initial withBlock:(NSInteger (^)(NSInteger, id))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block NSInteger result = initial;\n    \n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tresult = block(result, obj);\n\t}];\n    \n\treturn result;\n}\n\n- (CGFloat)bk_reduceFloat:(CGFloat)inital withBlock:(CGFloat (^)(CGFloat, id))block\n{\n\tNSParameterAssert(block != nil);\n    \n\t__block CGFloat result = inital;\n    \n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tresult = block(result, obj);\n    }];\n    \n\treturn result;\n}\n\n- (BOOL)bk_any:(BOOL (^)(id obj))block\n{\n\treturn [self bk_match:block] != nil;\n}\n\n- (BOOL)bk_none:(BOOL (^)(id obj))block\n{\n\treturn [self bk_match:block] == nil;\n}\n\n- (BOOL)bk_all:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block BOOL result = YES;\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tif (!block(obj)) {\n\t\t\tresult = NO;\n\t\t\t*stop = YES;\n\t\t}\n\t}];\n\n\treturn result;\n}\n\n- (BOOL)bk_corresponds:(NSArray *)list withBlock:(BOOL (^)(id obj1, id obj2))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block BOOL result = NO;\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tif (idx < list.count) {\n\t\t\tid obj2 = list[idx];\n\t\t\tresult = block(obj, obj2);\n\t\t} else {\n\t\t\tresult = NO;\n\t\t}\n\t\t*stop = !result;\n\t}];\n\n\treturn result;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSDictionary+BlocksKit.h",
    "content": "//\n//  NSDictionary+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extension for NSDictionary.\n\n Both inspired by and resembling Smalltalk syntax, this utility\n allows iteration of a dictionary in a concise way that\n saves quite a bit of boilerplate code.\n\n Includes code by the following:\n\n- [Mirko Kiefer](https://github.com/mirkok)\n- [Zach Waldowski](https://github.com/zwaldowski)\n\n @see NSArray(BlocksKit)\n @see NSSet(BlocksKit)\n */\n@interface NSDictionary (BlocksKit)\n\n/** Loops through the dictionary and executes the given block using each item.\n\n @param block A block that performs an action using a key/value pair.\n */\n- (void)bk_each:(void (^)(id key, id obj))block;\n\n/** Enumerates through the dictionary concurrently and executes\n the given block once for each pair.\n\n Enumeration will occur on appropriate background queues;\n the system will spawn threads as need for execution. This\n will have a noticeable speed increase, especially on dual-core\n devices, but you *must* be aware of the thread safety of the\n objects you message from within the block.\n\n @param block A block that performs an action using a key/value pair.\n */\n- (void)bk_apply:(void (^)(id key, id obj))block;\n\n/** Loops through a dictionary to find the first key/value pair matching the block.\n\n bk_match: is functionally identical to bk_select:, but will stop and return\n the value on the first match.\n\n @param block A BOOL-returning code block for a key/value pair.\n @return The value of the first pair found;\n */\n- (id)bk_match:(BOOL (^)(id key, id obj))block;\n\n/** Loops through a dictionary to find the key/value pairs matching the block.\n\n @param block A BOOL-returning code block for a key/value pair.\n @return Returns a dictionary of the objects found.\n */\n- (NSDictionary *)bk_select:(BOOL (^)(id key, id obj))block;\n\n/** Loops through a dictionary to find the key/value pairs not matching the block.\n\n This selector performs *literally* the exact same function as bk_select: but in reverse.\n\n This is useful, as one may expect, for filtering objects.\n\t NSDictionary *strings = [userData bk_reject:^BOOL(id key, id value) {\n\t   return ([obj isKindOfClass:[NSString class]]);\n\t }];\n\n @param block A BOOL-returning code block for a key/value pair.\n @return Returns a dictionary of all objects not found.\n */\n- (NSDictionary *)bk_reject:(BOOL (^)(id key, id obj))block;\n\n/** Call the block once for each object and create a dictionary with the same keys\n and a new set of values.\n\n @param block A block that returns a new value for a key/value pair.\n @return Returns a dictionary of the objects returned by the block.\n */\n- (NSDictionary *)bk_map:(id (^)(id key, id obj))block;\n\n/** Loops through a dictionary to find whether any key/value pair matches the block.\n\n This method is similar to the Scala list `exists`. It is functionally\n identical to bk_match: but returns a `BOOL` instead. It is not recommended\n to use bk_any: as a check condition before executing bk_match:, since it would\n require two loops through the dictionary.\n\n @param block A two-argument, BOOL-returning code block.\n @return YES for the first time the block returns YES for a key/value pair, NO otherwise.\n */\n- (BOOL)bk_any:(BOOL (^)(id key, id obj))block;\n\n/** Loops through a dictionary to find whether no key/value pairs match the block.\n\n This selector performs *literally* the exact same function as bk_all: but in reverse.\n\n @param block A two-argument, BOOL-returning code block.\n @return YES if the block returns NO for all key/value pairs in the dictionary, NO otherwise.\n */\n- (BOOL)bk_none:(BOOL (^)(id key, id obj))block;\n\n/** Loops through a dictionary to find whether all key/value pairs match the block.\n\n @param block A two-argument, BOOL-returning code block.\n @return YES if the block returns YES for all key/value pairs in the dictionary, NO otherwise.\n */\n- (BOOL)bk_all:(BOOL (^)(id key, id obj))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSDictionary+BlocksKit.m",
    "content": "//\n//  NSDictionary+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSDictionary+BlocksKit.h\"\n\n@implementation NSDictionary (BlocksKit)\n\n- (void)bk_each:(void (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {\n\t\tblock(key, obj);\n\t}];\n}\n\n- (void)bk_apply:(void (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id key, id obj, BOOL *stop) {\n\t\tblock(key, obj);\n\t}];\n}\n\n- (id)bk_match:(BOOL (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\treturn self[[[self keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {\n\t\tif (block(key, obj)) {\n\t\t\t*stop = YES;\n\t\t\treturn YES;\n\t\t}\n\n\t\treturn NO;\n\t}] anyObject]];\n}\n\n- (NSDictionary *)bk_select:(BOOL (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSArray *keys = [[self keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {\n\t\treturn block(key, obj);\n\t}] allObjects];\n\n\tNSArray *objects = [self objectsForKeys:keys notFoundMarker:[NSNull null]];\n\treturn [NSDictionary dictionaryWithObjects:objects forKeys:keys];\n}\n\n- (NSDictionary *)bk_reject:(BOOL (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\treturn [self bk_select:^BOOL(id key, id obj) {\n\t\treturn !block(key, obj);\n\t}];\n}\n\n- (NSDictionary *)bk_map:(id (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSMutableDictionary *result = [NSMutableDictionary dictionaryWithCapacity:self.count];\n\n\t[self bk_each:^(id key, id obj) {\n\t\tid value = block(key, obj) ?: [NSNull null];\n\t\tresult[key] = value;\n\t}];\n\n\treturn result;\n}\n\n- (BOOL)bk_any:(BOOL (^)(id key, id obj))block\n{\n\treturn [self bk_match:block] != nil;\n}\n\n- (BOOL)bk_none:(BOOL (^)(id key, id obj))block\n{\n\treturn [self bk_match:block] == nil;\n}\n\n- (BOOL)bk_all:(BOOL (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block BOOL result = YES;\n\n\t[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {\n\t\tif (!block(key, obj)) {\n\t\t\tresult = NO;\n\t\t\t*stop = YES;\n\t\t}\n\t}];\n\n\treturn result;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSIndexSet+BlocksKit.h",
    "content": "//\n//  NSIndexSet+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extensions for NSIndexSet.\n\n Both inspired by and resembling Smalltalk syntax, these utilities\n allows for iteration of an array in a concise way that\n saves quite a bit of boilerplate code for filtering or finding\n objects or an object.\n\n Includes code by the following:\n\n- [Robin Lu](https://github.com/robin)\n- [Michael Ash](https://github.com/mikeash)\n- [Zach Waldowski](https://github.com/zwaldowski)\n- [Kaelin Colclasure]<https://github.com/kaelin>\n\n @see NSArray(BlocksKit)\n @see NSDictionary(BlocksKit)\n @see NSSet(BlocksKit)\n */\n@interface NSIndexSet (BlocksKit)\n\n/** Loops through an index set and executes the given block at each index.\n\n @param block A single-argument, void-returning code block.\n */\n- (void)bk_each:(void (^)(NSUInteger index))block;\n\n/** Enumerates each index in an index set concurrently and executes the\n given block once per index.\n\n Enumeration will occur on appropriate background queues.\n Be aware that the block will not necessarily be executed\n in order for each index.\n\n @param block A single-argument, void-returning code block.\n */\n- (void)bk_apply:(void (^)(NSUInteger index))block;\n\n/** Loops through an array and returns the index matching the block.\n\n @param block A single-argument, `BOOL`-returning code block.\n @return Returns the index if found, `NSNotFound` otherwise.\n @see bk_select:\n */\n- (NSUInteger)bk_match:(BOOL (^)(NSUInteger index))block;\n\n/** Loops through an index set and returns an all indexes matching the block.\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns an index set of matching indexes found.\n @see bk_match:\n */\n- (NSIndexSet *)bk_select:(BOOL (^)(NSUInteger index))block;\n\n/** Loops through an index set and returns an all indexes but the ones matching the block.\n\n This selector performs *literally* the exact same function as bk_select: but in reverse.\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns an index set of all indexes but those matched.\n */\n- (NSIndexSet *)bk_reject:(BOOL (^)(NSUInteger index))block;\n\n/** Call the block once for each index and create an index set with the new values.\n\n @param block A block that returns a new index for an index.\n @return An index set of the indexes returned by the block.\n */\n- (NSIndexSet *)bk_map:(NSUInteger (^)(NSUInteger index))block;\n\n/** Call the block once for each index and create an array of the return values.\n\n This method allows transforming indexes into objects:\n\t int values[10] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 };\n\t NSIndexSet *idxs = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 10)];\n\t NSArray *new = [idxs mapIndex:^id(NSUInteger index) {\n\t   return [NSNumber numberWithInt:values[index]]);\n\t }];\n\n @param block A block that returns an object for an index.\n @return Returns an array of the objects returned by the block.\n */\n- (NSArray *)bk_mapIndex:(id (^)(NSUInteger index))block;\n\n/** Loops through an index set to find whether any of the indexes matche the block.\n\n This method is similar to the Scala list `exists`. It is functionally\n identical to bk_match: but returns a `BOOL` instead. It is not recommended\n to use bk_any: as a check condition before executing bk_match:, since it would\n require two loops through the index set.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES for the first time the block returns YES for an index, NO otherwise.\n */\n- (BOOL)bk_any:(BOOL (^)(NSUInteger index))block;\n\n/** Loops through an index set to find whether all objects match the block.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES if the block returns YES for all indexes in the array, NO otherwise.\n */\n- (BOOL)bk_all:(BOOL (^)(NSUInteger index))block;\n\n/** Loops through an index set to find whether no objects match the block.\n\n This selector performs *literally* the exact same function as bk_all: but in reverse.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES if the block returns NO for all indexes in the array, NO otherwise.\n */\n- (BOOL)bk_none:(BOOL (^)(NSUInteger index))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSIndexSet+BlocksKit.m",
    "content": "//\n//  NSIndexSet+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSIndexSet+BlocksKit.h\"\n\n@implementation NSIndexSet (BlocksKit)\n\n- (void)bk_each:(void (^)(NSUInteger index))block {\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {\n\t\tblock(idx);\n\t}];\n}\n\n- (void)bk_apply:(void (^)(NSUInteger index))block {\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateIndexesWithOptions:NSEnumerationConcurrent usingBlock:^(NSUInteger idx, BOOL *stop) {\n\t\tblock(idx);\n\t}];\n}\n\n- (NSUInteger)bk_match:(BOOL (^)(NSUInteger index))block {\n\tNSParameterAssert(block != nil);\n\n\treturn [self indexPassingTest:^BOOL(NSUInteger idx, BOOL *stop) {\n\t\treturn block(idx);\n\t}];\n}\n\n- (NSIndexSet *)bk_select:(BOOL (^)(NSUInteger index))block {\n\tNSParameterAssert(block != nil);\n\n\tNSIndexSet *list = [self indexesPassingTest:^BOOL(NSUInteger idx, BOOL *stop) {\n\t\treturn block(idx);\n\t}];\n\n\tif (!list.count) return nil;\n\treturn list;\n}\n\n- (NSIndexSet *)bk_reject:(BOOL (^)(NSUInteger index))block {\n\tNSParameterAssert(block != nil);\n\treturn [self bk_select:^BOOL(NSUInteger idx) {\n\t\treturn !block(idx);\n\t}];\n}\n\n- (NSIndexSet *)bk_map:(NSUInteger (^)(NSUInteger index))block {\n\tNSParameterAssert(block != nil);\n\n\tNSMutableIndexSet *list = [NSMutableIndexSet indexSet];\n\n\t[self enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {\n\t\t[list addIndex:block(idx)];\n\t}];\n\n\tif (!list.count) return nil;\n\treturn list;\n}\n\n- (NSArray *)bk_mapIndex:(id (^)(NSUInteger index))block {\n\tNSParameterAssert(block != nil);\n\n\tNSMutableArray *result = [NSMutableArray arrayWithCapacity:self.count];\n\n\t[self enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {\n\t\tid value = block(idx) ?: [NSNull null];\n\t\t[result addObject:value];\n\t}];\n\n\treturn result;\n}\n\n- (BOOL)bk_any:(BOOL (^)(NSUInteger index))block {\n\treturn [self bk_match:block] != NSNotFound;\n}\n\n- (BOOL)bk_none:(BOOL (^)(NSUInteger index))block {\n\treturn [self bk_match:block] == NSNotFound;\n}\n\n- (BOOL)bk_all:(BOOL (^)(NSUInteger index))block {\n\tNSParameterAssert(block != nil);\n\n\t__block BOOL result = YES;\n\n\t[self enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {\n\t\tif (!block(idx)) {\n\t\t\tresult = NO;\n\t\t\t*stop = YES;\n\t\t}\n\t}];\n\n\treturn result;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSInvocation+BlocksKit.h",
    "content": "//\n//  NSInvocation+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** BlocksKit extensions for NSInvocation. */\n@interface NSInvocation (BlocksKit)\n\n/** Generates a forwarding `NSInvocation` instance for a given method call\n encapsulated by the given block.\n\n\tNSInvocation *invocation = [NSInvocation invocationWithTarget:target block:^(id myObject) {\n\t\t[myObject someMethodWithArg:42.0];\n\t}];\n\n This returns an invocation with the appropriate target, selector, and arguments\n without creating the buffers yourself. It is only recommended to call a method\n on the argument to the block only once. More complicated forwarding machinery\n can be accomplished by the A2DynamicDelegate family of classes included in\n BlocksKit.\n\n Created by [Jonathan Rentzch](https://github.com/rentzsch) as\n `NSInvocation-blocks`.\n\n @param target The object to \"grab\" the block invocation from.\n @param block A code block.\n @return A fully-prepared instance of NSInvocation ready to be invoked.\n */\n+ (NSInvocation *)bk_invocationWithTarget:(id)target block:(void (^)(id target))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSInvocation+BlocksKit.m",
    "content": "//\n//  NSInvocation+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSInvocation+BlocksKit.h\"\n\n@interface BKInvocationGrabber : NSProxy\n\n+ (BKInvocationGrabber *)grabberWithTarget:(id)target;\n\n@property (nonatomic, strong) id target;\n@property (nonatomic, strong) NSInvocation *invocation;\n\n@end\n\n@implementation BKInvocationGrabber\n\n+ (BKInvocationGrabber *)grabberWithTarget:(id)target {\n\tBKInvocationGrabber *instance = [BKInvocationGrabber alloc];\n\tinstance.target = target;\n\treturn instance;\n}\n\n- (NSMethodSignature*)methodSignatureForSelector:(SEL)selector {\n\treturn [self.target methodSignatureForSelector:selector];\n}\n\n- (void)forwardInvocation:(NSInvocation*)invocation {\n\t[invocation setTarget:self.target];\n\tNSParameterAssert(self.invocation == nil);\n\tself.invocation = invocation;\n}\n\n@end\n\n\n@implementation NSInvocation (BlocksKit)\n\n+ (NSInvocation *)bk_invocationWithTarget:(id)target block:(void (^)(id target))block\n{\n\tNSParameterAssert(block != nil);\n\tBKInvocationGrabber *grabber = [BKInvocationGrabber grabberWithTarget:target];\n\tblock(grabber);\n\treturn grabber.invocation;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableArray+BlocksKit.h",
    "content": "//\n//  NSMutableArray+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extensions for NSMutableArray.\n\n These utilities expound upon the BlocksKit additions to the immutable\n superclass by allowing certain utilities to work on an instance of the mutable\n class, saving memory by not creating an immutable copy of the results.\n\n Includes code by the following:\n\n - [Martin Schürrer](https://github.com/MSch)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @see NSArray(BlocksKit)\n */\n@interface NSMutableArray (BlocksKit)\n\n/** Filters a mutable array to the objects matching the block.\n\n @param block A single-argument, BOOL-returning code block.\n @see <NSArray(BlocksKit)>bk_reject:\n */\n- (void)bk_performSelect:(BOOL (^)(id obj))block;\n\n/** Filters a mutable array to all objects but the ones matching the block,\n the logical inverse to bk_select:.\n\n @param block A single-argument, BOOL-returning code block.\n @see <NSArray(BlocksKit)>bk_select:\n */\n- (void)bk_performReject:(BOOL (^)(id obj))block;\n\n/** Transform the objects in the array to the results of the block.\n\n This is sometimes referred to as a transform, mutating one of each object:\n\t[foo bk_performMap:^id(id obj) {\n\t  return [dateTransformer dateFromString:obj];\n\t}];\n\n @param block A single-argument, object-returning code block.\n @see <NSArray(BlocksKit)>bk_map:\n */\n- (void)bk_performMap:(id (^)(id obj))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableArray+BlocksKit.m",
    "content": "//\n//  NSMutableArray+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSMutableArray+BlocksKit.h\"\n\n@implementation NSMutableArray (BlocksKit)\n\n- (void)bk_performSelect:(BOOL (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\n\tNSIndexSet *list = [self indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n\t\treturn !block(obj);\n\t}];\n\n\tif (!list.count) return;\n\t[self removeObjectsAtIndexes:list];\n}\n\n- (void)bk_performReject:(BOOL (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\treturn [self bk_performSelect:^BOOL(id obj) {\n\t\treturn !block(obj);\n\t}];\n}\n\n- (void)bk_performMap:(id (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\n\tNSMutableArray *new = [self mutableCopy];\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tid value = block(obj) ?: [NSNull null];\n\t\tif ([value isEqual:obj]) return;\n\t\tnew[idx] = value;\n\t}];\n\n\t[self setArray:new];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableDictionary+BlocksKit.h",
    "content": "//\n//  NSMutableDictionary+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extensions for NSMutableDictionary.\n\n These utilities expound upon the BlocksKit additions to the immutable\n superclass by allowing certain utilities to work on an instance of the mutable\n class, saving memory by not creating an immutable copy of the results.\n\n Includes code by the following:\n\n - [Martin Schürrer](https://github.com/MSch)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @see NSDictionary(BlocksKit)\n */\n@interface NSMutableDictionary (BlocksKit)\n\n/** Filters a mutable dictionary to the key/value pairs matching the block.\n\n @param block A BOOL-returning code block for a key/value pair.\n @see <NSDictionary(BlocksKit)>bk_reject:\n */\n- (void)bk_performSelect:(BOOL (^)(id key, id obj))block;\n\n/** Filters a mutable dictionary to the key/value pairs not matching the block,\n the logical inverse to bk_select:.\n\n @param block A BOOL-returning code block for a key/value pair.\n @see <NSDictionary(BlocksKit)>bk_select:\n */\n- (void)bk_performReject:(BOOL (^)(id key, id obj))block;\n\n/** Transform each value of the dictionary to a new value, as returned by the\n block.\n\n @param block A block that returns a new value for a given key/value pair.\n @see <NSDictionary(BlocksKit)>bk_map:\n */\n- (void)bk_performMap:(id (^)(id key, id obj))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableDictionary+BlocksKit.m",
    "content": "//\n//  NSMutableDictionary+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSMutableDictionary+BlocksKit.h\"\n\n@implementation NSMutableDictionary (BlocksKit)\n\n- (void)bk_performSelect:(BOOL (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSArray *keys = [[self keysOfEntriesWithOptions:NSEnumerationConcurrent passingTest:^BOOL(id key, id obj, BOOL *stop) {\n\t\treturn !block(key, obj);\n\t}] allObjects];\n\n\t[self removeObjectsForKeys:keys];\n}\n\n- (void)bk_performReject:(BOOL (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\t[self bk_performSelect:^BOOL(id key, id obj) {\n\t\treturn !block(key, obj);\n\t}];\n}\n\n- (void)bk_performMap:(id (^)(id key, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSMutableDictionary *new = [self mutableCopy];\n\n\t[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {\n\t\tid value = block(key, obj) ?: [NSNull null];\n\t\tif ([value isEqual:obj]) return;\n\t\tnew[key] = value;\n\t}];\n\n\t[self setDictionary:new];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableIndexSet+BlocksKit.h",
    "content": "//\n//  NSMutableIndexSet+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extensions for NSMutableIndexSet.\n\n These utilities expound upon the BlocksKit additions to the immutable\n superclass by allowing certain utilities to work on an instance of the mutable\n class, saving memory by not creating an immutable copy of the results.\n\n @see NSIndexSet(BlocksKit)\n */\n@interface NSMutableIndexSet (BlocksKit)\n\n/** Filters a mutable index set to the indexes matching the block.\n\n @param block A single-argument, BOOL-returning code block.\n @see <NSIndexSet(BlocksKit)>bk_reject:\n */\n- (void)bk_performSelect:(BOOL (^)(NSUInteger index))block;\n\n/** Filters a mutable index set to all indexes but the ones matching the block,\n the logical inverse to bk_select:.\n\n @param block A single-argument, BOOL-returning code block.\n @see <NSIndexSet(BlocksKit)>bk_select:\n */\n- (void)bk_performReject:(BOOL (^)(NSUInteger index))block;\n\n/** Transform each index of the index set to a new index, as returned by the\n block.\n\n @param block A block that returns a new index for a index.\n @see <NSIndexSet(BlocksKit)>bk_map:\n */\n- (void)bk_performMap:(NSUInteger (^)(NSUInteger index))block;\n\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableIndexSet+BlocksKit.m",
    "content": "//\n//  NSMutableIndexSet+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSMutableIndexSet+BlocksKit.h\"\n\n@implementation NSMutableIndexSet (BlocksKit)\n\n- (void)bk_performSelect:(BOOL (^)(NSUInteger index))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSIndexSet *list = [self indexesPassingTest:^BOOL(NSUInteger idx, BOOL *stop) {\n\t\treturn !block(idx);\n\t}];\n\n\tif (!list.count) return;\n\t[self removeIndexes:list];\n}\n\n- (void)bk_performReject:(BOOL (^)(NSUInteger index))block\n{\n\tNSParameterAssert(block != nil);\n\treturn [self bk_performSelect:^BOOL(NSUInteger idx) {\n\t\treturn !block(idx);\n\t}];\n}\n\n- (void)bk_performMap:(NSUInteger (^)(NSUInteger index))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSMutableIndexSet *new = [self mutableCopy];\n\n\t[self enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {\n\t\t[new addIndex:block(idx)];\n\t}];\n\n\t[self removeAllIndexes];\n\t[self addIndexes:new];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h",
    "content": "//\n//  NSMutableOrderedSet+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extensions for NSMutableOrderedSet.\n\n These utilities expound upon the BlocksKit additions to the immutable\n superclass by allowing certain utilities to work on an instance of the mutable\n class, saving memory by not creating an immutable copy of the results.\n\n Includes code by the following:\n\n - [Martin Schürrer](https://github.com/MSch)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @see NSOrderedSet(BlocksKit)\n */\n@interface NSMutableOrderedSet (BlocksKit)\n\n/** Filters a mutable ordered set to the objects matching the block.\n\n @param block A single-argument, BOOL-returning code block.\n @see <NSOrderedSet(BlocksKit)>bk_reject:\n */\n- (void)bk_performSelect:(BOOL (^)(id obj))block;\n\n/** Filters a mutable ordered set to all objects but the ones matching the\n block, the logical inverse to bk_select:.\n\n @param block A single-argument, BOOL-returning code block.\n @see <NSOrderedSet(BlocksKit)>bk_select:\n */\n- (void)bk_performReject:(BOOL (^)(id obj))block;\n\n/** Transform the objects in the ordered set to the results of the block.\n\n This is sometimes referred to as a transform, mutating one of each object:\n\t [foo bk_performMap:^id(id obj) {\n\t\t return [dateTransformer dateFromString:obj];\n\t }];\n\n @param block A single-argument, object-returning code block.\n @see <NSOrderedSet(BlocksKit)>bk_map:\n */\n- (void)bk_performMap:(id (^)(id obj))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.m",
    "content": "//\n//  NSMutableOrderedSet+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSMutableOrderedSet+BlocksKit.h\"\n\n@implementation NSMutableOrderedSet (BlocksKit)\n\n- (void)bk_performSelect:(BOOL (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\n\tNSIndexSet *list = [self indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n\t\treturn !block(obj);\n\t}];\n\n\tif (!list.count) return;\n\t[self removeObjectsAtIndexes:list];\n}\n\n- (void)bk_performReject:(BOOL (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\treturn [self bk_performSelect:^BOOL(id obj) {\n\t\treturn !block(obj);\n\t}];\n}\n\n- (void)bk_performMap:(id (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\n\tNSMutableIndexSet *newIndexes = [NSMutableIndexSet indexSet];\n\tNSMutableArray *newObjects = [NSMutableArray arrayWithCapacity:self.count];\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tid value = block(obj) ?: [NSNull null];\n\t\tif ([value isEqual:obj]) return;\n\t\t[newIndexes addIndex:idx];\n\t\t[newObjects addObject:obj];\n\t}];\n\n\t[self replaceObjectsAtIndexes:newIndexes withObjects:newObjects];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableSet+BlocksKit.h",
    "content": "//\n//  NSMutableSet+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extensions for NSMutableSet.\n\n These utilities expound upon the BlocksKit additions to the immutable\n superclass by allowing certain utilities to work on an instance of the mutable\n class, saving memory by not creating an immutable copy of the results.\n\n Includes code by the following:\n\n - [Martin Schürrer](https://github.com/MSch)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @see NSSet(BlocksKit)\n */\n@interface NSMutableSet (BlocksKit)\n\n/** Filters a mutable set to the objects matching the block.\n\n @param block A single-argument, BOOL-returning code block.\n @see <NSSet(BlocksKit)>bk_reject:\n */\n- (void)bk_performSelect:(BOOL (^)(id obj))block;\n\n/** Filters a mutable set to all objects but the ones matching the block,\n the logical inverse to bk_select:.\n\n @param block A single-argument, BOOL-returning code block.\n @see <NSSet(BlocksKit)>bk_select:\n */\n- (void)bk_performReject:(BOOL (^)(id obj))block;\n\n/** Transform the objects in the set to the results of the block.\n\n This is sometimes referred to as a transform, mutating one of each object:\n\t[controllers bk_map:^id(id obj) {\n\t  return [obj view];\n\t}];\n\n @param block A single-argument, object-returning code block.\n @see <NSSet(BlocksKit)>bk_map:\n */\n- (void)bk_performMap:(id (^)(id obj))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSMutableSet+BlocksKit.m",
    "content": "//\n//  NSMutableSet+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSMutableSet+BlocksKit.h\"\n\n@implementation NSMutableSet (BlocksKit)\n\n- (void)bk_performSelect:(BOOL (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\n\tNSSet *list = [self objectsPassingTest:^BOOL(id obj, BOOL *stop) {\n\t\treturn block(obj);\n\t}];\n\n\t[self setSet:list];\n}\n\n- (void)bk_performReject:(BOOL (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\t[self bk_performSelect:^BOOL(id obj) {\n\t\treturn !block(obj);\n\t}];\n}\n\n- (void)bk_performMap:(id (^)(id obj))block {\n\tNSParameterAssert(block != nil);\n\n\tNSMutableSet *new = [NSMutableSet setWithCapacity:self.count];\n\n\t[self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {\n\t\tid value = block(obj);\n\t\tif (!value) return;\n\t\t[new addObject:value];\n\t}];\n\n\t[self setSet:new];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSObject+BKAssociatedObjects.h",
    "content": "//\n//  NSObject+BKAssociatedObjects.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Objective-C wrapper for 10.6+ associated object API.\n\n In Mac OS X Snow Leopard and iOS 3.0, Apple introduced an addition to the\n Objective-C Runtime called associated objects. Associated objects allow for the\n pairing of a random key and object pair to be saved on an instance.\n\n In BlocksKit, associated objects allow us to emulate instance variables in the\n ategories we use.\n\n Class methods also exist for each association. These associations are unique to\n each class, and exist for the lifetime of the application unless set to `nil`.\n Each class is a unique meta-object; the ultimate singleton.\n\n Created by [Andy Matuschak](https://github.com/andymatuschak) as\n `AMAssociatedObjects`.\n */\n@interface NSObject (BKAssociatedObjects)\n\n/** Strongly associates an object with the reciever.\n\n The associated value is retained as if it were a property\n synthesized with `nonatomic` and `retain`.\n\n Using retained association is strongly recommended for most\n Objective-C object derivative of NSObject, particularly\n when it is subject to being externally released or is in an\n `NSAutoreleasePool`.\n\n @param value Any object.\n @param key A unique key pointer.\n */\n- (void)bk_associateValue:(id)value withKey:(const void *)key;\n\n/** Strongly associates an object with the receiving class.\n\n @see associateValue:withKey:\n @param value Any object.\n @param key A unique key pointer.\n */\n+ (void)bk_associateValue:(id)value withKey:(const void *)key;\n\n/** Strongly, thread-safely associates an object with the reciever.\n\n The associated value is retained as if it were a property\n synthesized with `atomic` and `retain`.\n\n Using retained association is strongly recommended for most\n Objective-C object derivative of NSObject, particularly\n when it is subject to being externally released or is in an\n `NSAutoreleasePool`.\n\n @see associateValue:withKey:\n @param value Any object.\n @param key A unique key pointer.\n */\n- (void)bk_atomicallyAssociateValue:(id)value withKey:(const void *)key;\n\n/** Strongly, thread-safely associates an object with the receiving class.\n\n @see associateValue:withKey:\n @param value Any object.\n @param key A unique key pointer.\n */\n+ (void)bk_atomicallyAssociateValue:(id)value withKey:(const void *)key;\n\n/** Associates a copy of an object with the reciever.\n\n The associated value is copied as if it were a property\n synthesized with `nonatomic` and `copy`.\n\n Using copied association is recommended for a block or\n otherwise `NSCopying`-compliant instances like NSString.\n\n @param value Any object, pointer, or value.\n @param key A unique key pointer.\n */\n- (void)bk_associateCopyOfValue:(id)value withKey:(const void *)key;\n\n/** Associates a copy of an object with the receiving class.\n\n @see associateCopyOfValue:withKey:\n @param value Any object, pointer, or value.\n @param key A unique key pointer.\n */\n+ (void)bk_associateCopyOfValue:(id)value withKey:(const void *)key;\n\n/** Thread-safely associates a copy of an object with the reciever.\n\n The associated value is copied as if it were a property\n synthesized with `atomic` and `copy`.\n\n Using copied association is recommended for a block or\n otherwise `NSCopying`-compliant instances like NSString.\n\n @see associateCopyOfValue:withKey:\n @param value Any object, pointer, or value.\n @param key A unique key pointer.\n */\n- (void)bk_atomicallyAssociateCopyOfValue:(id)value withKey:(const void *)key;\n\n/** Thread-safely associates a copy of an object with the receiving class.\n\n @see associateCopyOfValue:withKey:\n @param value Any object, pointer, or value.\n @param key A unique key pointer.\n */\n+ (void)bk_atomicallyAssociateCopyOfValue:(id)value withKey:(const void *)key;\n\n/** Weakly associates an object with the reciever.\n\n A weak association will cause the pointer to be set to zero\n or nil upon the disappearance of what it references;\n in other words, the associated object is not kept alive.\n\n @param value Any object.\n @param key A unique key pointer.\n */\n- (void)bk_weaklyAssociateValue:(__autoreleasing id)value withKey:(const void *)key;\n\n/** Weakly associates an object with the receiving class.\n\n @see weaklyAssociateValue:withKey:\n @param value Any object.\n @param key A unique key pointer.\n */\n+ (void)bk_weaklyAssociateValue:(__autoreleasing id)value withKey:(const void *)key;\n\n/** Returns the associated value for a key on the reciever.\n\n @param key A unique key pointer.\n @return The object associated with the key, or `nil` if not found.\n */\n- (id)bk_associatedValueForKey:(const void *)key;\n\n/** Returns the associated value for a key on the receiving class.\n\n @see associatedValueForKey:\n @param key A unique key pointer.\n @return The object associated with the key, or `nil` if not found.\n */\n+ (id)bk_associatedValueForKey:(const void *)key;\n\n/** Returns the reciever to a clean state by removing all\n associated objects, releasing them if necessary. */\n- (void)bk_removeAllAssociatedObjects;\n\n/** Returns the recieving class to a clean state by removing\n all associated objects, releasing them if necessary. */\n+ (void)bk_removeAllAssociatedObjects;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSObject+BKAssociatedObjects.m",
    "content": "//\n//  NSObject+BKAssociatedObjects.m\n//  BlocksKit\n//\n\n#import <objc/runtime.h>\n#import \"NSObject+BKAssociatedObjects.h\"\n\n#pragma mark - Weak support\n\n@interface _BKWeakAssociatedObject : NSObject\n\n@property (nonatomic, weak) id value;\n\n@end\n\n@implementation _BKWeakAssociatedObject\n\n@end\n\n@implementation NSObject (BKAssociatedObjects)\n\n#pragma mark - Instance Methods\n\n- (void)bk_associateValue:(id)value withKey:(const void *)key\n{\n\tobjc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n- (void)bk_atomicallyAssociateValue:(id)value withKey:(const void *)key\n{\n\tobjc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);\n}\n\n- (void)bk_associateCopyOfValue:(id)value withKey:(const void *)key\n{\n\tobjc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_COPY_NONATOMIC);\n}\n\n- (void)bk_atomicallyAssociateCopyOfValue:(id)value withKey:(const void *)key\n{\n\tobjc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_COPY);\n}\n\n- (void)bk_weaklyAssociateValue:(__autoreleasing id)value withKey:(const void *)key\n{\n\t_BKWeakAssociatedObject *assoc = objc_getAssociatedObject(self, key);\n\tif (!assoc) {\n\t\tassoc = [_BKWeakAssociatedObject new];\n\t\t[self bk_associateValue:assoc withKey:key];\n\t}\n\tassoc.value = value;\n}\n\n- (id)bk_associatedValueForKey:(const void *)key\n{\n\tid value = objc_getAssociatedObject(self, key);\n\tif (value && [value isKindOfClass:[_BKWeakAssociatedObject class]]) {\n\t\treturn [(_BKWeakAssociatedObject *)value value];\n\t}\n\treturn value;\n}\n\n- (void)bk_removeAllAssociatedObjects\n{\n\tobjc_removeAssociatedObjects(self);\n}\n\n#pragma mark - Class Methods\n\n+ (void)bk_associateValue:(id)value withKey:(const void *)key\n{\n\tobjc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n+ (void)bk_atomicallyAssociateValue:(id)value withKey:(const void *)key\n{\n\tobjc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);\n}\n\n+ (void)bk_associateCopyOfValue:(id)value withKey:(const void *)key\n{\n\tobjc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_COPY_NONATOMIC);\n}\n\n+ (void)bk_atomicallyAssociateCopyOfValue:(id)value withKey:(const void *)key\n{\n\tobjc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_COPY);\n}\n\n+ (void)bk_weaklyAssociateValue:(__autoreleasing id)value withKey:(const void *)key\n{\n\t_BKWeakAssociatedObject *assoc = objc_getAssociatedObject(self, key);\n\tif (!assoc) {\n\t\tassoc = [_BKWeakAssociatedObject new];\n\t\t[self bk_associateValue:assoc withKey:key];\n\t}\n\tassoc.value = value;\n}\n\n+ (id)bk_associatedValueForKey:(const void *)key\n{\n\tid value = objc_getAssociatedObject(self, key);\n\tif (value && [value isKindOfClass:[_BKWeakAssociatedObject class]]) {\n\t\treturn [(_BKWeakAssociatedObject *)value value];\n\t}\n\treturn value;\n}\n\n+ (void)bk_removeAllAssociatedObjects\n{\n\tobjc_removeAssociatedObjects(self);\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSObject+BKBlockExecution.h",
    "content": "//\n//  NSObject+BKBlockExecution.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block execution on *any* object.\n\n This category overhauls the `performSelector:` utilities on\n NSObject to instead use blocks.  Not only are the blocks performed\n extremely speedily, thread-safely, and asynchronously using\n Grand Central Dispatch, but each convenience method also returns\n a pointer that can be used to cancel the execution before it happens!\n\n Includes code by the following:\n\n - [Peter Steinberger](https://github.com/steipete)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n */\n@interface NSObject (BKBlockExecution)\n\n/** Executes a block after a given delay on the reciever.\n\n\t[array performBlock:^(id obj) {\n\t  [obj addObject:self];\n\t  [self release];\n\t} afterDelay:0.5f];\n\n @warning *Important:* Use of the **self** reference in a block will\n reference the current implementation context.  The block argument,\n `obj`, should be used instead.\n\n @param block A single-argument code block, where `obj` is the reciever.\n @param delay A measure in seconds.\n @return Returns a pointer to the block that may or may not execute the given block.\n */\n- (id)bk_performBlock:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay;\n\n/** Executes a block after a given delay.\n\n This class method is functionally identical to its instance method version.  It still executes\n asynchronously via GCD.  However, the current context is not passed so that the block is performed\n in a general context.\n\n Block execution is very useful, particularly for small events that you would like delayed.\n\n\t[object performBlock:^{\n\t  [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];\n\t} afterDelay:0.5f];\n\n @see performBlock:afterDelay:\n @param block A code block.\n @param delay A measure in seconds.\n @return Returns a pointer to the block that may or may not execute the given block.\n */\n+ (id)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay;\n\n/** Executes a block in the background after a given delay on the receiver.\n \n This class method is functionally identical to `- (id)bk_performBlock:afterDelay:`,\n except the block will be performed on a background thread instead of the main thread.\n \n @see performBlock:afterDelay:\n @param block A code block.\n @param delay A measure in seconds.\n @return Returns a pointer to the block that may or may not execute the given block.\n */\n- (id)bk_performBlockInBackground:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay;\n\n/** Executes a block in the background after a given delay.\n \n This class method is functionally identical to `+ (id)bk_performBlock:afterDelay:`, \n except the block will be performed on a background thread instead of the main thread.\n \n @see performBlock:afterDelay:\n @param block A code block.\n @param delay A measure in seconds.\n @return Returns a pointer to the block that may or may not execute the given block.\n */\n+ (id)bk_performBlockInBackground:(void (^)(void))block afterDelay:(NSTimeInterval)delay;\n\n/** Executes a block in the background after a given delay.\n \n This class method is functionally identical to `+ (id)bk_performBlock:afterDelay:`,\n except the block will be performed on the specified thread instead of the main thread.\n \n @see performBlock:afterDelay:\n @param block A code block.\n @param queue A background queue.\n @param delay A measure in seconds.\n @return Returns a pointer to the block that may or may not execute the given block.\n */\n+ (id)bk_performBlock:(void (^)(void))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay;\n\n/** Executes a block in the background after a given delay.\n \n This class method is functionally identical to `- (id)bk_performBlock:afterDelay:`,\n except the block will be performed on the specified thread instead of the main thread.\n \n @see performBlock:afterDelay:\n @param block A code block.\n @param queue A background queue.\n @param delay A measure in seconds.\n @return Returns a pointer to the block that may or may not execute the given block.\n */\n- (id)bk_performBlock:(void (^)(id obj))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay;\n\n/** Cancels the potential execution of a block.\n\n @warning *Important:* It is not recommended to cancel a block executed\n with no delay (a delay of 0.0).  While it it still possible to catch the block\n before GCD has executed it, it has likely already been executed and disposed of.\n\n @param block A pointer to a containing block, as returned from one of the\n `performBlock` selectors.\n */\n+ (void)bk_cancelBlock:(id)block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSObject+BKBlockExecution.m",
    "content": "//\n//  NSObject+BKBlockExecution.m\n//  BlocksKit\n//\n\n#import \"NSObject+BKBlockExecution.h\"\n\n#define BKTimeDelay(t) dispatch_time(DISPATCH_TIME_NOW, (uint64_t)(NSEC_PER_SEC * t))\n\n@implementation NSObject (BlocksKit)\n\n- (id)bk_performBlock:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay\n{\n\treturn [self bk_performBlock:block onQueue:dispatch_get_main_queue() afterDelay:delay];\n}\n\n+ (id)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay\n{\n\treturn [NSObject bk_performBlock:block onQueue:dispatch_get_main_queue() afterDelay:delay];\n}\n\n- (id)bk_performBlockInBackground:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay\n{\n\treturn [self bk_performBlock:block onQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) afterDelay:delay];\n}\n\n+ (id)bk_performBlockInBackground:(void (^)(void))block afterDelay:(NSTimeInterval)delay\n{\n\treturn [NSObject bk_performBlock:block onQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) afterDelay:delay];\n}\n\n- (id)bk_performBlock:(void (^)(id obj))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay\n{\n\tNSParameterAssert(block != nil);\n\t\n\t__block BOOL cancelled = NO;\n\t\n\tvoid (^wrapper)(BOOL) = ^(BOOL cancel) {\n\t\tif (cancel) {\n\t\t\tcancelled = YES;\n\t\t\treturn;\n\t\t}\n\t\tif (!cancelled) block(self);\n\t};\n\t\n\tdispatch_after(BKTimeDelay(delay), queue, ^{\n\t\twrapper(NO);\n\t});\n\t\n\treturn [wrapper copy];\n}\n\n+ (id)bk_performBlock:(void (^)(void))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay\n{\n\tNSParameterAssert(block != nil);\n\t\n\t__block BOOL cancelled = NO;\n\t\n\tvoid (^wrapper)(BOOL) = ^(BOOL cancel) {\n\t\tif (cancel) {\n\t\t\tcancelled = YES;\n\t\t\treturn;\n\t\t}\n\t\tif (!cancelled) block();\n\t};\n\t\n\tdispatch_after(BKTimeDelay(delay), queue, ^{ wrapper(NO); });\n\t\n\treturn [wrapper copy];\n}\n\n+ (void)bk_cancelBlock:(id)block\n{\n\tNSParameterAssert(block != nil);\n\tvoid (^wrapper)(BOOL) = block;\n\twrapper(YES);\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSObject+BKBlockObservation.h",
    "content": "//\n//  NSObject+BKBlockObservation.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Blocks wrapper for key-value observation.\n\n In Mac OS X Panther, Apple introduced an API called \"key-value\n observing.\"  It implements an [observer pattern](http://en.wikipedia.org/wiki/Observer_pattern),\n where an object will notify observers of any changes in state.\n\n NSNotification is a rudimentary form of this design style;\n KVO, however, allows for the observation of any change in key-value state.\n The API for key-value observation, however, is flawed, ugly, and lengthy.\n\n Like most of the other block abilities in BlocksKit, observation saves\n and a bunch of code and a bunch of potential bugs.\n\n Includes code by the following:\n\n - [Andy Matuschak](https://github.com/andymatuschak)\n - [Jon Sterling](https://github.com/jonsterling)\n - [Zach Waldowski](https://github.com/zwaldowski)\n - [Jonathan Wight](https://github.com/schwa)\n */\n\n@interface NSObject (BlockObservation)\n\n/** Adds an observer to an object conforming to NSKeyValueObserving.\n\n Adds a block observer that executes a block upon a state change.\n\n @param keyPath The property to observe, relative to the reciever.\n @param task A block with no return argument, and a single parameter: the reciever.\n @return Returns a globally unique process identifier for removing\n observation with removeObserverWithBlockToken:.\n @see addObserverForKeyPath:identifier:options:task:\n */\n- (NSString *)bk_addObserverForKeyPath:(NSString *)keyPath task:(void (^)(id target))task;\n\n/** Adds an observer to an object conforming to NSKeyValueObserving.\n\n Adds a block observer that executes the same block upon\n multiple state changes.\n\n @param keyPaths An array of properties to observe, relative to the reciever.\n @param task A block with no return argument and two parameters: the\n reciever and the key path of the value change.\n @return A unique identifier for removing\n observation with removeObserverWithBlockToken:.\n @see addObserverForKeyPath:identifier:options:task:\n */\n- (NSString *)bk_addObserverForKeyPaths:(NSArray *)keyPaths task:(void (^)(id obj, NSString *keyPath))task;\n\n/** Adds an observer to an object conforming to NSKeyValueObserving.\n\n Adds a block observer that executes a block upon a state change\n with specific options.\n\n @param keyPath The property to observe, relative to the reciever.\n @param options The NSKeyValueObservingOptions to use.\n @param task A block with no return argument and two parameters: the\n reciever and the change dictionary.\n @return Returns a globally unique process identifier for removing\n observation with removeObserverWithBlockToken:.\n @see addObserverForKeyPath:identifier:options:task:\n */\n- (NSString *)bk_addObserverForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options task:(void (^)(id obj, NSDictionary *change))task;\n\n/** Adds an observer to an object conforming to NSKeyValueObserving.\n\n Adds a block observer that executes the same block upon\n multiple state changes with specific options.\n\n @param keyPaths An array of properties to observe, relative to the reciever.\n @param options The NSKeyValueObservingOptions to use.\n @param task A block with no return argument and three parameters: the\n reciever, the key path of the value change, and the change dictionary.\n @return A unique identifier for removing\n observation with removeObserverWithBlockToken:.\n @see addObserverForKeyPath:identifier:options:task:\n */\n- (NSString *)bk_addObserverForKeyPaths:(NSArray *)keyPaths options:(NSKeyValueObservingOptions)options task:(void (^)(id obj, NSString *keyPath, NSDictionary *change))task;\n\n/** Adds an observer to an object conforming to NSKeyValueObserving.\n\n Adds a block observer that executes the block upon a\n state change.\n\n @param keyPath The property to observe, relative to the reciever.\n @param token An identifier for the observation block.\n @param options The NSKeyValueObservingOptions to use.\n @param task A block responding to the reciever and the KVO change.\n observation with removeObserverWithBlockToken:.\n @see addObserverForKeyPath:task:\n */\n- (void)bk_addObserverForKeyPath:(NSString *)keyPath identifier:(NSString *)token options:(NSKeyValueObservingOptions)options task:(void (^)(id obj, NSDictionary *change))task;\n\n/** Adds an observer to an object conforming to NSKeyValueObserving.\n\n Adds a block observer that executes the same block upon\n multiple state changes.\n\n @param keyPaths An array of properties to observe, relative to the reciever.\n @param token An identifier for the observation block.\n @param options The NSKeyValueObservingOptions to use.\n @param task A block responding to the reciever, the key path, and the KVO change.\n observation with removeObserversWithIdentifier:.\n @see addObserverForKeyPath:task:\n */\n- (void)bk_addObserverForKeyPaths:(NSArray *)keyPaths identifier:(NSString *)token options:(NSKeyValueObservingOptions)options task:(void (^)(id obj, NSString *keyPath, NSDictionary *change))task;\n\n/** Removes a block observer.\n\n @param keyPath The property to stop observing, relative to the reciever.\n @param token The unique key returned by addObserverForKeyPath:task:\n or the identifier given in addObserverForKeyPath:identifier:task:.\n @see removeObserversWithIdentifier:\n */\n- (void)bk_removeObserverForKeyPath:(NSString *)keyPath identifier:(NSString *)token;\n\n/** Removes multiple block observers with a certain identifier.\n\n @param token A unique key returned by addObserverForKeyPath:task:\n and addObserverForKeyPaths:task: or the identifier given in\n addObserverForKeyPath:identifier:task: and\n addObserverForKeyPaths:identifier:task:.\n @see removeObserverForKeyPath:identifier:\n */\n- (void)bk_removeObserversWithIdentifier:(NSString *)token;\n\n/** Remove all registered block observers. */\n- (void)bk_removeAllBlockObservers;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSObject+BKBlockObservation.m",
    "content": "//\n//  NSObject+BKBlockObservation.m\n//  BlocksKit\n//\n\n#import <objc/runtime.h>\n#import <objc/message.h>\n#import \"NSArray+BlocksKit.h\"\n#import \"NSDictionary+BlocksKit.h\"\n#import \"NSObject+BKAssociatedObjects.h\"\n#import \"NSObject+BKBlockObservation.h\"\n#import \"NSSet+BlocksKit.h\"\n\ntypedef NS_ENUM(int, BKObserverContext) {\n\tBKObserverContextKey,\n\tBKObserverContextKeyWithChange,\n\tBKObserverContextManyKeys,\n\tBKObserverContextManyKeysWithChange\n};\n\n@interface _BKObserver : NSObject {\n\tBOOL _isObserving;\n}\n\n@property (nonatomic, readonly, unsafe_unretained) id observee;\n@property (nonatomic, readonly) NSMutableArray *keyPaths;\n@property (nonatomic, readonly) id task;\n@property (nonatomic, readonly) BKObserverContext context;\n\n- (id)initWithObservee:(id)observee keyPaths:(NSArray *)keyPaths context:(BKObserverContext)context task:(id)task;\n\n@end\n\nstatic void *BKObserverBlocksKey = &BKObserverBlocksKey;\nstatic void *BKBlockObservationContext = &BKBlockObservationContext;\n\n@implementation _BKObserver\n\n- (id)initWithObservee:(id)observee keyPaths:(NSArray *)keyPaths context:(BKObserverContext)context task:(id)task\n{\n\tif ((self = [super init])) {\n\t\t_observee = observee;\n\t\t_keyPaths = [keyPaths mutableCopy];\n\t\t_context = context;\n\t\t_task = [task copy];\n\t}\n\treturn self;\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context\n{\n\tif (context != BKBlockObservationContext) return;\n\n\t@synchronized(self) {\n\t\tswitch (self.context) {\n\t\t\tcase BKObserverContextKey: {\n\t\t\t\tvoid (^task)(id) = self.task;\n\t\t\t\ttask(object);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase BKObserverContextKeyWithChange: {\n\t\t\t\tvoid (^task)(id, NSDictionary *) = self.task;\n\t\t\t\ttask(object, change);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase BKObserverContextManyKeys: {\n\t\t\t\tvoid (^task)(id, NSString *) = self.task;\n\t\t\t\ttask(object, keyPath);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase BKObserverContextManyKeysWithChange: {\n\t\t\t\tvoid (^task)(id, NSString *, NSDictionary *) = self.task;\n\t\t\t\ttask(object, keyPath, change);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n- (void)startObservingWithOptions:(NSKeyValueObservingOptions)options\n{\n\t@synchronized(self) {\n\t\tif (_isObserving) return;\n\n\t\t[self.keyPaths bk_each:^(NSString *keyPath) {\n\t\t\t[self.observee addObserver:self forKeyPath:keyPath options:options context:BKBlockObservationContext];\n\t\t}];\n\n\t\t_isObserving = YES;\n\t}\n}\n\n- (void)stopObservingKeyPath:(NSString *)keyPath\n{\n\tNSParameterAssert(keyPath);\n\n\t@synchronized (self) {\n\t\tif (!_isObserving) return;\n\t\tif (![self.keyPaths containsObject:keyPath]) return;\n\n\t\tNSObject *observee = self.observee;\n\t\tif (!observee) return;\n\n\t\t[self.keyPaths removeObject: keyPath];\n\t\tkeyPath = [keyPath copy];\n\n\t\tif (!self.keyPaths.count) {\n\t\t\t_task = nil;\n\t\t\t_observee = nil;\n\t\t\t_keyPaths = nil;\n\t\t}\n\n\t\t[observee removeObserver:self forKeyPath:keyPath context:BKBlockObservationContext];\n\t}\n}\n\n- (void)_stopObservingLocked\n{\n\tif (!_isObserving) return;\n\n\t_task = nil;\n\n\tNSObject *observee = self.observee;\n\tNSArray *keyPaths = [self.keyPaths copy];\n\n\t_observee = nil;\n\t_keyPaths = nil;\n\n\t[keyPaths bk_each:^(NSString *keyPath) {\n\t\t[observee removeObserver:self forKeyPath:keyPath context:BKBlockObservationContext];\n\t}];\n}\n\n- (void)stopObserving\n{\n\tif (_observee == nil) return;\n\n\t@synchronized (self) {\n\t\t[self _stopObservingLocked];\n\t}\n}\n\n- (void)dealloc\n{\n\tif (self.keyPaths) {\n\t\t[self _stopObservingLocked];\n\t}\n}\n\n@end\n\n@implementation NSObject (BlockObservation)\n\n- (NSString *)bk_addObserverForKeyPath:(NSString *)keyPath task:(void (^)(id target))task\n{\n\tNSString *token = [[NSProcessInfo processInfo] globallyUniqueString];\n\t[self bk_addObserverForKeyPaths:@[ keyPath ] identifier:token options:0 context:BKObserverContextKey task:task];\n\treturn token;\n}\n\n- (NSString *)bk_addObserverForKeyPaths:(NSArray *)keyPaths task:(void (^)(id obj, NSString *keyPath))task\n{\n\tNSString *token = [[NSProcessInfo processInfo] globallyUniqueString];\n\t[self bk_addObserverForKeyPaths:keyPaths identifier:token options:0 context:BKObserverContextManyKeys task:task];\n\treturn token;\n}\n\n- (NSString *)bk_addObserverForKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options task:(void (^)(id obj, NSDictionary *change))task\n{\n\tNSString *token = [[NSProcessInfo processInfo] globallyUniqueString];\n\t[self bk_addObserverForKeyPath:keyPath identifier:token options:options task:task];\n\treturn token;\n}\n\n- (NSString *)bk_addObserverForKeyPaths:(NSArray *)keyPaths options:(NSKeyValueObservingOptions)options task:(void (^)(id obj, NSString *keyPath, NSDictionary *change))task\n{\n\tNSString *token = [[NSProcessInfo processInfo] globallyUniqueString];\n\t[self bk_addObserverForKeyPaths:keyPaths identifier:token options:options task:task];\n\treturn token;\n}\n\n- (void)bk_addObserverForKeyPath:(NSString *)keyPath identifier:(NSString *)identifier options:(NSKeyValueObservingOptions)options task:(void (^)(id obj, NSDictionary *change))task\n{\n\tBKObserverContext context = (options == 0) ? BKObserverContextKey : BKObserverContextKeyWithChange;\n\t[self bk_addObserverForKeyPaths:@[keyPath] identifier:identifier options:options context:context task:task];\n}\n\n- (void)bk_addObserverForKeyPaths:(NSArray *)keyPaths identifier:(NSString *)identifier options:(NSKeyValueObservingOptions)options task:(void (^)(id obj, NSString *keyPath, NSDictionary *change))task\n{\n\tBKObserverContext context = (options == 0) ? BKObserverContextManyKeys : BKObserverContextManyKeysWithChange;\n\t[self bk_addObserverForKeyPaths:keyPaths identifier:identifier options:options context:context task:task];\n}\n\n- (void)bk_removeObserverForKeyPath:(NSString *)keyPath identifier:(NSString *)token\n{\n\tNSParameterAssert(keyPath.length);\n\tNSParameterAssert(token.length);\n\n\tNSMutableDictionary *dict;\n\n\t@synchronized (self) {\n\t\tdict = [self bk_observerBlocks];\n\t\tif (!dict) return;\n\t}\n\n\t_BKObserver *observer = dict[token];\n\t[observer stopObservingKeyPath:keyPath];\n\n\tif (observer.keyPaths.count == 0) {\n\t\t[dict removeObjectForKey:token];\n\t}\n\n\tif (dict.count == 0) [self bk_setObserverBlocks:nil];\n}\n\n- (void)bk_removeObserversWithIdentifier:(NSString *)token\n{\n\tNSParameterAssert(token);\n\n\tNSMutableDictionary *dict;\n\n\t@synchronized (self) {\n\t\tdict = [self bk_observerBlocks];\n\t\tif (!dict) return;\n\t}\n\n\t_BKObserver *observer = dict[token];\n\t[observer stopObserving];\n\n\t[dict removeObjectForKey:token];\n\n\tif (dict.count == 0) [self bk_setObserverBlocks:nil];\n}\n\n- (void)bk_removeAllBlockObservers\n{\n\tNSDictionary *dict;\n\n\t@synchronized (self) {\n\t\tdict = [[self bk_observerBlocks] copy];\n\t\t[self bk_setObserverBlocks:nil];\n\t}\n\n\t[dict.allValues bk_each:^(_BKObserver *trampoline) {\n\t\t[trampoline stopObserving];\n\t}];\n}\n\n#pragma mark - \"Private\"s\n\n+ (NSMutableSet *)bk_observedClassesHash\n{\n\tstatic dispatch_once_t onceToken;\n\tstatic NSMutableSet *swizzledClasses = nil;\n\tdispatch_once(&onceToken, ^{\n\t\tswizzledClasses = [[NSMutableSet alloc] init];\n\t});\n\n\treturn swizzledClasses;\n}\n\n- (void)bk_addObserverForKeyPaths:(NSArray *)keyPaths identifier:(NSString *)identifier options:(NSKeyValueObservingOptions)options context:(BKObserverContext)context task:(id)task\n{\n\tNSParameterAssert(keyPaths.count);\n\tNSParameterAssert(identifier.length);\n\tNSParameterAssert(task);\n\n    Class classToSwizzle = self.class;\n    NSMutableSet *classes = self.class.bk_observedClassesHash;\n    @synchronized (classes) {\n        NSString *className = NSStringFromClass(classToSwizzle);\n        if (![classes containsObject:className]) {\n            SEL deallocSelector = sel_registerName(\"dealloc\");\n            \n\t\t\t__block void (*originalDealloc)(__unsafe_unretained id, SEL) = NULL;\n            \n\t\t\tid newDealloc = ^(__unsafe_unretained id objSelf) {\n                [objSelf bk_removeAllBlockObservers];\n                \n                if (originalDealloc == NULL) {\n                    struct objc_super superInfo = {\n                        .receiver = objSelf,\n                        .super_class = class_getSuperclass(classToSwizzle)\n                    };\n                    \n                    void (*msgSend)(struct objc_super *, SEL) = (__typeof__(msgSend))objc_msgSendSuper;\n                    msgSend(&superInfo, deallocSelector);\n                } else {\n                    originalDealloc(objSelf, deallocSelector);\n                }\n            };\n            \n            IMP newDeallocIMP = imp_implementationWithBlock(newDealloc);\n            \n            if (!class_addMethod(classToSwizzle, deallocSelector, newDeallocIMP, \"v@:\")) {\n                // The class already contains a method implementation.\n                Method deallocMethod = class_getInstanceMethod(classToSwizzle, deallocSelector);\n                \n                // We need to store original implementation before setting new implementation\n                // in case method is called at the time of setting.\n                originalDealloc = (void(*)(__unsafe_unretained id, SEL))method_getImplementation(deallocMethod);\n                \n                // We need to store original implementation again, in case it just changed.\n                originalDealloc = (void(*)(__unsafe_unretained id, SEL))method_setImplementation(deallocMethod, newDeallocIMP);\n            }\n            \n            [classes addObject:className];\n        }\n    }\n\n\tNSMutableDictionary *dict;\n\t_BKObserver *observer = [[_BKObserver alloc] initWithObservee:self keyPaths:keyPaths context:context task:task];\n\t[observer startObservingWithOptions:options];\n\n\t@synchronized (self) {\n\t\tdict = [self bk_observerBlocks];\n\n\t\tif (dict == nil) {\n\t\t\tdict = [NSMutableDictionary dictionary];\n\t\t\t[self bk_setObserverBlocks:dict];\n\t\t}\n\t}\n\n\tdict[identifier] = observer;\n}\n\n- (void)bk_setObserverBlocks:(NSMutableDictionary *)dict\n{\n\t[self bk_associateValue:dict withKey:BKObserverBlocksKey];\n}\n\n- (NSMutableDictionary *)bk_observerBlocks\n{\n\treturn [self bk_associatedValueForKey:BKObserverBlocksKey];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSOrderedSet+BlocksKit.h",
    "content": "//\n//  NSOrderedSet+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extensions for NSOrderedSet.\n\n Both inspired by and resembling Smalltalk syntax, these utilities allow for\n iteration through an ordered set (also known as a uniqued array) in a concise\n way that saves a ton of boilerplate code for filtering or finding objects.\n\n Includes code by the following:\n\n - Robin Lu. <https://github.com/robin>. 2009.\n - Michael Ash. <https://github.com/mikeash>. 2010. BSD.\n - Aleks Nesterow. <https://github.com/nesterow>. 2010. BSD.\n - Zach Waldowski. <https://github.com/zwaldowski>. 2011.\n\n @see NSArray(BlocksKit)\n @see NSSet(BlocksKit)\n */\n@interface NSOrderedSet (BlocksKit)\n\n/** Loops through an ordered set and executes the given block with each object.\n\n @param block A single-argument, void-returning code block.\n */\n- (void)bk_each:(void (^)(id obj))block;\n\n/** Enumerates through an ordered set concurrently and executes the given block\n once for each object.\n\n Enumeration will occur on appropriate background queues. This will have a\n noticeable speed increase, especially on multi-core devices, but you *must*\n be aware of the thread safety of the objects you message from within the block.\n Be aware that the order of objects is not necessarily the order each block will\n be called in.\n\n @param block A single-argument, void-returning code block.\n */\n- (void)bk_apply:(void (^)(id obj))block;\n\n/** Loops through an ordered set to find the object matching the block.\n\n bk_match: is functionally identical to bk_select:, but will stop and return\n on the first match.\n\n @param block A single-argument, `BOOL`-returning code block.\n @return Returns the object, if found, or `nil`.\n @see bk_select:\n */\n- (id)bk_match:(BOOL (^)(id obj))block;\n\n/** Loops through an ordered set to find the objects matching the block.\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns an ordered set of the objects found.\n @see bk_match:\n */\n- (NSOrderedSet *)bk_select:(BOOL (^)(id obj))block;\n\n/** Loops through an ordered set to to find the objects not matching the block.\n\n This selector performs *literally* the exact same function as bk_select: but in\n reverse.\n\n This is useful, as one may expect, for removing objects from an ordered set to.\n\t NSOrderedSet *new = [computers bk_reject:^BOOL(id obj) {\n\t\t return ([obj isUgly]);\n\t }];\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns an ordered set of all objects not found.\n */\n- (NSOrderedSet *)bk_reject:(BOOL (^)(id obj))block;\n\n/** Call the block once for each object and create an ordered set of the return\n values.\n\n This is sometimes referred to as a transform, mutating one of each object:\n\t NSOrderedSet *new = [stringArray bk_map:^id(id obj) {\n\t\t return [obj stringByAppendingString:@\".png\"]);\n\t }];\n\n @param block A single-argument, object-returning code block.\n @return Returns an ordered set of the objects returned by the block.\n */\n- (NSOrderedSet *)bk_map:(id (^)(id obj))block;\n\n/** Arbitrarily accumulate objects using a block.\n\n The concept of this selector is difficult to illustrate in words. The sum can\n be any NSObject, including (but not limited to) a string, number, or value.\n\n For example, you can concentate the strings in an ordered set:\n\t NSString *concentrated = [stringArray bk_reduce:@\"\" withBlock:^id(id sum, id obj) {\n\t\t return [sum stringByAppendingString:obj];\n\t }];\n\n You can also do something like summing the lengths of strings in an ordered set:\n\t NSUInteger value = [[[stringArray bk_reduce:nil withBlock:^id(id sum, id obj) {\n\t\t return @([sum integerValue] + obj.length);\n\t }]] unsignedIntegerValue];\n\n @param initial The value of the reduction at its start.\n @param block A block that takes the current sum and the next object to return the new sum.\n @return An accumulated value.\n */\n- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block;\n\n/** Loops through an ordered set to find whether any object matches the block.\n\n This method is similar to the Scala list `exists`. It is functionally\n identical to bk_match: but returns a `BOOL` instead. It is not recommended\n to use bk_any: as a check condition before executing bk_match:, since it would\n require two loops through the ordered set.\n\n For example, you can find if a string in an ordered set starts with a certain\n letter:\n\n\t NSString *letter = @\"A\";\n\t BOOL containsLetter = [stringArray bk_any:^(id obj) {\n\t\t return [obj hasPrefix:@\"A\"];\n\t }];\n\n @param block A single-argument, BOOL-returning code block.\n @return YES for the first time the block returns YES for an object, NO otherwise.\n */\n- (BOOL)bk_any:(BOOL (^)(id obj))block;\n\n/** Loops through an ordered set to find whether no objects match the block.\n\n This selector performs *literally* the exact same function as bk_all: but in reverse.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES if the block returns NO for all objects in the ordered set, NO\n otherwise.\n */\n- (BOOL)bk_none:(BOOL (^)(id obj))block;\n\n/** Loops through an ordered set to find whether all objects match the block.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES if the block returns YES for all objects in the ordered set, NO\n otherwise.\n */\n- (BOOL)bk_all:(BOOL (^)(id obj))block;\n\n/** Tests whether every element of this ordered set relates to the corresponding\n element of another array according to match by block.\n\n For example, finding if a list of numbers corresponds to their sequenced string values;\n\n\t NSArray *numbers = @[ @(1), @(2), @(3) ];\n\t NSArray *letters = @[ @\"1\", @\"2\", @\"3\" ];\n\t BOOL doesCorrespond = [numbers bk_corresponds:letters withBlock:^(id number, id letter) {\n\t\t return [[number stringValue] isEqualToString:letter];\n\t }];\n\n @param list An array of objects to compare with.\n @param block A two-argument, BOOL-returning code block.\n @return Returns a BOOL, true if every element of the ordered set relates to\n corresponding element in another ordered set.\n */\n- (BOOL)bk_corresponds:(NSOrderedSet *)list withBlock:(BOOL (^)(id obj1, id obj2))block;\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSOrderedSet+BlocksKit.m",
    "content": "//\n//  NSOrderedSet+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSOrderedSet+BlocksKit.h\"\n\n@implementation NSOrderedSet (BlocksKit)\n\n- (void)bk_each:(void (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tblock(obj);\n\t}];\n}\n\n- (void)bk_apply:(void (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tblock(obj);\n\t}];\n}\n\n- (id)bk_match:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSUInteger index = [self indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n\t\treturn block(obj);\n\t}];\n\n\tif (index == NSNotFound) return nil;\n\treturn self[index];\n}\n\n- (NSOrderedSet *)bk_select:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSArray *objects = [self objectsAtIndexes:[self indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n\t\treturn block(obj);\n\t}]];\n\n\tif (!objects.count) return [[self class] orderedSet];\n\treturn [[self class] orderedSetWithArray:objects];\n}\n\n- (NSOrderedSet *)bk_reject:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\treturn [self bk_select:^BOOL(id obj) {\n\t\treturn !block(obj);\n\t}];\n}\n\n- (NSOrderedSet *)bk_map:(id (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSMutableOrderedSet *result = [NSMutableOrderedSet orderedSetWithCapacity:self.count];\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tid value = block(obj) ?: [NSNull null];\n\t\t[result addObject:value];\n\t}];\n\n\treturn result;\n}\n\n- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block id result = initial;\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tresult = block(result, obj);\n\t}];\n\n\treturn result;\n}\n\n- (BOOL)bk_any:(BOOL (^)(id obj))block\n{\n\treturn [self bk_match:block] != nil;\n}\n\n- (BOOL)bk_none:(BOOL (^)(id obj))block\n{\n\treturn [self bk_match:block] == nil;\n}\n\n- (BOOL)bk_all:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block BOOL result = YES;\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tif (!block(obj)) {\n\t\t\tresult = NO;\n\t\t\t*stop = YES;\n\t\t}\n\t}];\n\n\treturn result;\n}\n\n- (BOOL)bk_corresponds:(NSOrderedSet *)list withBlock:(BOOL (^)(id obj1, id obj2))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block BOOL result = NO;\n\n\t[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tif (idx < list.count) {\n\t\t\tid obj2 = list[idx];\n\t\t\tresult = block(obj, obj2);\n\t\t} else {\n\t\t\tresult = NO;\n\t\t}\n\t\t*stop = !result;\n\t}];\n\n\treturn result;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSSet+BlocksKit.h",
    "content": "//\n//  NSSet+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Block extensions for NSSet.\n\n Both inspired by and resembling Smalltalk syntax, these utilities allows for\n iteration of a set in a logical way that saves quite a bit of boilerplate code\n for filtering or finding objects or an object.\n\n Includes code by the following:\n\n- [Michael Ash](https://github.com/mikeash)\n- [Corey Floyd](https://github.com/coreyfloyd)\n- [Aleks Nesterow](https://github.com/nesterow)\n- [Zach Waldowski](https://github.com/zwaldowski)\n\n @see NSArray(BlocksKit)\n @see NSDictionary(BlocksKit)\n */\n@interface NSSet (BlocksKit)\n\n/** Loops through a set and executes the given block with each object.\n\n @param block A single-argument, void-returning code block.\n */\n- (void)bk_each:(void (^)(id obj))block;\n\n/** Enumerates through a set concurrently and executes\n the given block once for each object.\n\n Enumeration will occur on appropriate background queues. This\n will have a noticeable speed increase, especially on dual-core\n devices, but you *must* be aware of the thread safety of the\n objects you message from within the block.\n\n @param block A single-argument, void-returning code block.\n */\n- (void)bk_apply:(void (^)(id obj))block;\n\n/** Loops through a set to find the object matching the block.\n\n bk_match: is functionally identical to bk_select:, but will stop and return\n on the first match.\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns the object if found, `nil` otherwise.\n @see bk_select:\n */\n- (id)bk_match:(BOOL (^)(id obj))block;\n\n/** Loops through a set to find the objects matching the block.\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns a set of the objects found.\n @see bk_match:\n */\n- (NSSet *)bk_select:(BOOL (^)(id obj))block;\n\n/** Loops through a set to find the objects not matching the block.\n\n This selector performs *literally* the exact same function as select, but in reverse.\n\n This is useful, as one may expect, for removing objects from a set:\n\t NSSet *new = [reusableWebViews bk_reject:^BOOL(id obj) {\n\t   return ([obj isLoading]);\n\t }];\n\n @param block A single-argument, BOOL-returning code block.\n @return Returns an array of all objects not found.\n */\n- (NSSet *)bk_reject:(BOOL (^)(id obj))block;\n\n/** Call the block once for each object and create a set of the return values.\n\n This is sometimes referred to as a transform, mutating one of each object:\n\t NSSet *new = [mimeTypes bk_map:^id(id obj) {\n\t   return [@\"x-company-\" stringByAppendingString:obj]);\n\t }];\n\n @param block A single-argument, object-returning code block.\n @return Returns a set of the objects returned by the block.\n */\n- (NSSet *)bk_map:(id (^)(id obj))block;\n\n/** Arbitrarily accumulate objects using a block.\n\n The concept of this selector is difficult to illustrate in words. The sum can\n be any NSObject, including (but not limited to) a string, number, or value.\n\n You can also do something like summing the count of an item:\n\t NSUInteger numberOfBodyParts = [[bodyList bk_reduce:nil withBlock:^id(id sum, id obj) {\n\t   return @([sum integerValue] + obj.numberOfAppendages);\n\t }] unsignedIntegerValue];\n\n @param initial The value of the reduction at its start.\n @param block A block that takes the current sum and the next object to return the new sum.\n @return An accumulated value.\n */\n- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block;\n\n/** Loops through a set to find whether any object matches the block.\n\n This method is similar to the Scala list `exists`. It is functionally\n identical to bk_match: but returns a `BOOL` instead. It is not recommended\n to use bk_any: as a check condition before executing bk_match:, since it would\n require two loops through the array.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES for the first time the block returns YES for an object, NO otherwise.\n */\n- (BOOL)bk_any:(BOOL (^)(id obj))block;\n\n/** Loops through a set to find whether no objects match the block.\n\n This selector performs *literally* the exact same function as bk_all: but in reverse.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES if the block returns NO for all objects in the set, NO otherwise.\n */\n- (BOOL)bk_none:(BOOL (^)(id obj))block;\n\n/** Loops through a set to find whether all objects match the block.\n\n @param block A single-argument, BOOL-returning code block.\n @return YES if the block returns YES for all objects in the set, NO otherwise.\n */\n- (BOOL)bk_all:(BOOL (^)(id obj))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSSet+BlocksKit.m",
    "content": "//\n//  NSSet+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSSet+BlocksKit.h\"\n\n@implementation NSSet (BlocksKit)\n\n- (void)bk_each:(void (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {\n\t\tblock(obj);\n\t}];\n}\n\n- (void)bk_apply:(void (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t[self enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, BOOL *stop) {\n\t\tblock(obj);\n\t}];\n}\n\n- (id)bk_match:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\treturn [[self objectsPassingTest:^BOOL(id obj, BOOL *stop) {\n\t\tif (block(obj)) {\n\t\t\t*stop = YES;\n\t\t\treturn YES;\n\t\t}\n\n\t\treturn NO;\n\t}] anyObject];\n}\n\n- (NSSet *)bk_select:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\treturn [self objectsPassingTest:^BOOL(id obj, BOOL *stop) {\n\t\treturn block(obj);\n\t}];\n}\n\n- (NSSet *)bk_reject:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\treturn [self objectsPassingTest:^BOOL(id obj, BOOL *stop) {\n\t\treturn !block(obj);\n\t}];\n}\n\n- (NSSet *)bk_map:(id (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\tNSMutableSet *result = [NSMutableSet setWithCapacity:self.count];\n\n\t[self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {\n\t\tid value = block(obj) ?:[NSNull null];\n\t\t[result addObject:value];\n\t}];\n\n\treturn result;\n}\n\n- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block id result = initial;\n\n\t[self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {\n\t\tresult = block(result, obj);\n\t}];\n\n\treturn result;\n}\n\n- (BOOL)bk_any:(BOOL (^)(id obj))block\n{\n\treturn [self bk_match:block] != nil;\n}\n\n- (BOOL)bk_none:(BOOL (^)(id obj))block\n{\n\treturn [self bk_match:block] == nil;\n}\n\n- (BOOL)bk_all:(BOOL (^)(id obj))block\n{\n\tNSParameterAssert(block != nil);\n\n\t__block BOOL result = YES;\n\n\t[self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {\n\t\tif (!block(obj)) {\n\t\t\tresult = NO;\n\t\t\t*stop = YES;\n\t\t}\n\t}];\n\n\treturn result;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSTimer+BlocksKit.h",
    "content": "//\n//  NSTimer+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** Simple category on NSTimer to give it blocks capability.\n\n Created by [Jiva DeVoe](https://github.com/jivadevoe) as `NSTimer-Blocks`.\n*/\n@interface NSTimer (BlocksKit)\n\n/** Creates and returns a block-based NSTimer object and schedules it on the current run loop.\n\n @param inTimeInterval The number of seconds between firings of the timer.\n @param inBlock The block that the NSTimer fires.\n @param inRepeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires.\n @return A new NSTimer object, configured according to the specified parameters.\n */\n+ (NSTimer *)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))inBlock repeats:(BOOL)inRepeats;\n\n/** Creates and returns a block-based NSTimer initialized with the specified block.\n\n You must add the new timer to a run loop, using `-addTimer:forMode:`. Then,\n after seconds seconds have elapsed, the timer fires the block.  If the timer\n is configured to repeat, there is no need to subsequently re-add the timer.\n\n @param inTimeInterval The number of seconds between firings of the timer.\n @param inBlock The block that the NSTimer fires.\n @param inRepeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires.\n @return A new NSTimer object, configured according to the specified parameters.\n */\n+ (NSTimer *)bk_timerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))inBlock repeats:(BOOL)inRepeats;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/Core/NSTimer+BlocksKit.m",
    "content": "//\n//  NSTimer+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSTimer+BlocksKit.h\"\n\n@interface NSTimer (BlocksKitPrivate)\n\n+ (void)bk_executeBlockFromTimer:(NSTimer *)aTimer;\n\n@end\n\n@implementation NSTimer (BlocksKit)\n\n+ (id)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))block repeats:(BOOL)inRepeats\n{\n\tNSParameterAssert(block != nil);\n\treturn [self scheduledTimerWithTimeInterval:inTimeInterval target:self selector:@selector(bk_executeBlockFromTimer:) userInfo:[block copy] repeats:inRepeats];\n}\n\n+ (id)bk_timerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))block repeats:(BOOL)inRepeats\n{\n\tNSParameterAssert(block != nil);\n\treturn [self timerWithTimeInterval:inTimeInterval target:self selector:@selector(bk_executeBlockFromTimer:) userInfo:[block copy] repeats:inRepeats];\n}\n\n+ (void)bk_executeBlockFromTimer:(NSTimer *)aTimer {\n\tvoid (^block)(NSTimer *) = [aTimer userInfo];\n\tif (block) block(aTimer);\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/A2BlockInvocation.h",
    "content": "//\n//  A2BlockInvocation.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/// If a block invocation is instiated with an invalid method signature,\n/// an `NSInvalidArgumentException` is thrown containing this key in the\n/// user info.\nextern NSString *const A2IncompatibleMethodSignatureKey;\n\n/** An `A2BlockInvocation` is an Objective-C block call rendered static, that\n is, it is an action turned into an object. `A2BlockInvocation` objects are used\n to store and forward closure invocations between objects, primarily by the\n `A2DynamicDelegate` system.\n\n A block invocation object can be repeatedly dispatched with multiple sets of\n arguments with the same flexibility as NSInvocation. This design makes\n `A2BlockInvocation` extremely useful, because blocks can be used to capture\n scope and a block invocation can be used to save it for later.\n\n Like `NSInvocation`, `A2BlockInvocation` does not support invocations of\n methods with variadic arguments or union arguments.\n */\n@interface A2BlockInvocation : NSObject\n\n/** Inspects the given block literal and returns a compatible method signature.\n\n The returned method signature is suitable for use in the Foundation forwarding\n system to link a method call to a block invocation.\n\n @param block An Objective-C block literal\n @return A method signature matching the declared prototype for the block\n */\n+ (NSMethodSignature *)methodSignatureForBlock:(id)block;\n\n/** @name Creating A2BlockInvocation Objects */\n\n/** Returns a block invocation object able to construct calls to a given block.\n\n This method synthesizes a compatible method signature for the given block.\n\n @param block A block literal\n @return An initialized block invocation object\n @see methodSignatureForBlock\n */\n- (instancetype)initWithBlock:(id)block;\n\n/** Returns a block invocation object able to construct calls to a given block\n using a given Objective-C method signature.\n\n The method signature given must be compatible with the signature of the block;\n that is, equal to the block signature but with a `SEL` (`':'`) as the second\n parameter. Passing in an incompatible method signature will raise an exception.\n\n An example method returning a string for an integer argument would have the\n following properties:\n - Block type signature of `NSString *(^)(int)`\n - Block function definition of `NSString *(*)(id, int)`\n - Block signature of `\"@@?i\"`\n - Method signature of `\"@:i\"` or `\"@i\"`\n\n @param block An Objective-C block literal\n @param methodSignature An method signature matching the block\n @return An initialized block invocation object\n */\n- (instancetype)initWithBlock:(id)block methodSignature:(NSMethodSignature *)methodSignature;\n\n/** @name Getting the Block and Method Signatures */\n\n/// The receiver's method signature, reflecting the block with a selector.\n/// Appropriate for use in `-methodSignatureForSelector:`.\n@property (nonatomic, strong, readonly) NSMethodSignature *methodSignature;\n\n/// Returns the receiver's block.\n@property (nonatomic, copy, readonly) id block;\n\n/** Calls the receiver's block with the arguments from the given invocation,\n providing a buffer containing the block's return value upon return.\n\n @param inv An instance of NSInvocation with values for its arguments set.\n @param returnValue On return, the block's return value, or `nil` for a void\n return type.\n @param NO if the buffer copies necessary for invocation failed, YES otherwise.\n @see invokeWithInvocation:returnValue:\n */\n- (BOOL)invokeWithInvocation:(NSInvocation *)inv returnValue:(out NSValue **)returnValue;\n\n/** Calls the receiver's block with the arguments from the given invocation\n and sets the return value on the given invocation.\n\n @param inv An instance of NSInvocation with values for its arguments set.\n @see invokeWithInvocation:returnValue:\n */\n- (void)invokeWithInvocation:(NSInvocation *)inv;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/A2BlockInvocation.m",
    "content": "//\n//  A2BlockInvocation.m\n//  BlocksKit\n//\n\n#import \"A2BlockInvocation.h\"\n\nNSString *const A2IncompatibleMethodSignatureKey = @\"incompatibleMethodSignature\";\n\n#ifndef NSFoundationVersionNumber10_8\n#define NSFoundationVersionNumber10_8 945.00\n#endif\n\n#ifndef NSFoundationVersionNumber_iOS_6_0\n#define NSFoundationVersionNumber_iOS_6_0  993.00\n#endif\n\n#pragma mark Block Internals\n\ntypedef NS_OPTIONS(int, BKBlockFlags) {\n\tBKBlockFlagsHasCopyDisposeHelpers = (1 << 25),\n\tBKBlockFlagsHasSignature          = (1 << 30)\n};\n\ntypedef struct _BKBlock {\n\t__unused Class isa;\n\tBKBlockFlags flags;\n\t__unused int reserved;\n\tvoid (__unused *invoke)(struct _BKBlock *block, ...);\n\tstruct {\n\t\tunsigned long int reserved;\n\t\tunsigned long int size;\n\t\t// requires BKBlockFlagsHasCopyDisposeHelpers\n\t\tvoid (*copy)(void *dst, const void *src);\n\t\tvoid (*dispose)(const void *);\n\t\t// requires BKBlockFlagsHasSignature\n\t\tconst char *signature;\n\t\tconst char *layout;\n\t} *descriptor;\n\t// imported variables\n} *BKBlockRef;\n\n@interface A2BlockInvocation ()\n\n@property (nonatomic, readonly) NSMethodSignature *blockSignature;\n\n@end\n\n@implementation A2BlockInvocation\n\n/** Determines if two given signatures (block or method) are compatible.\n\n A signature is compatible with another signature if their return types and\n parameter types are equal, minus the parameter types dedicated to the Obj-C\n method reciever and selector or a block literal argument.\n\n @param signatureA Any signature object reflecting a block or method signature\n @param signatureB Any signature object reflecting a block or method signature\n @return YES if the given signatures may be used to dispatch for one another\n */\n+ (BOOL)isSignature:(NSMethodSignature *)signatureA compatibleWithSignature:(NSMethodSignature *)signatureB __attribute__((pure))\n{\n\tif (!signatureA || !signatureB) return NO;\n\tif ([signatureA isEqual:signatureB]) return YES;\n\tif (signatureA.methodReturnType[0] != signatureB.methodReturnType[0]) return NO;\n\n\tNSMethodSignature *methodSignature = nil, *blockSignature = nil;\n\tif (signatureA.numberOfArguments > signatureB.numberOfArguments) {\n\t\tmethodSignature = signatureA;\n\t\tblockSignature = signatureB;\n\t} else if (signatureB.numberOfArguments > signatureA.numberOfArguments) {\n\t\tmethodSignature = signatureB;\n\t\tblockSignature = signatureA;\n\t} else {\n\t\treturn NO;\n\t}\n\n\tNSUInteger numberOfArguments = methodSignature.numberOfArguments;\n\tfor (NSUInteger i = 2; i < numberOfArguments; i++) {\n\t\tif ([methodSignature getArgumentTypeAtIndex:i][0] != [blockSignature getArgumentTypeAtIndex:i - 1][0])\n\t\t\treturn NO;\n\t}\n\n\treturn YES;\n}\n\n/** Inspects the given block literal and returns a compatible type signature.\n\n Unlike a typical method signature, a block type signature has no `self` (`'@'`)\n or `_cmd` (`':'`) parameter, but instead just one parameter for the block itself\n (`'@?'`).\n\n @param block An Objective-C block literal\n @return A method signature matching the declared prototype for the block\n */\n+ (NSMethodSignature *)typeSignatureForBlock:(id)block __attribute__((pure, nonnull(1)))\n{\n\tBKBlockRef layout = (__bridge void *)block;\n\n\tif (!(layout->flags & BKBlockFlagsHasSignature))\n\t\treturn nil;\n\n\tvoid *desc = layout->descriptor;\n\tdesc += 2 * sizeof(unsigned long int);\n\n\tif (layout->flags & BKBlockFlagsHasCopyDisposeHelpers)\n\t\tdesc += 2 * sizeof(void *);\n\n\tif (!desc)\n\t\treturn nil;\n\n\tconst char *signature = (*(const char **)desc);\n\n\treturn [NSMethodSignature signatureWithObjCTypes:signature];\n}\n\n/// Creates a method signature compatible with a given block signature.\n+ (NSMethodSignature *)methodSignatureForBlockSignature:(NSMethodSignature *)original\n{\n\tif (!original) return nil;\n\n\tif (original.numberOfArguments < 1) {\n\t\treturn nil;\n\t}\n\n\tif (original.numberOfArguments >= 2 && strcmp(@encode(SEL), [original getArgumentTypeAtIndex:1]) == 0) {\n\t\treturn original;\n\t}\n\n\t// initial capacity is num. arguments - 1 (@? -> @) + 1 (:) + 1 (ret type)\n\t// optimistically assuming most signature components are char[1]\n\tNSMutableString *signature = [[NSMutableString alloc] initWithCapacity:original.numberOfArguments + 1];\n\n\tconst char *retTypeStr = original.methodReturnType;\n\t[signature appendFormat:@\"%s%s%s\", retTypeStr, @encode(id), @encode(SEL)];\n\n\tfor (NSUInteger i = 1; i < original.numberOfArguments; i++) {\n\t\tconst char *typeStr = [original getArgumentTypeAtIndex:i];\n\t\tNSString *type = [[NSString alloc] initWithBytesNoCopy:(void *)typeStr length:strlen(typeStr) encoding:NSUTF8StringEncoding freeWhenDone:NO];\n\t\t[signature appendString:type];\n\t}\n\n\treturn [NSMethodSignature signatureWithObjCTypes:signature.UTF8String];\n}\n\n+ (NSMethodSignature *)methodSignatureForBlock:(id)block\n{\n\tNSMethodSignature *original = [self typeSignatureForBlock:block];\n\tif (!original) return nil;\n\treturn [self methodSignatureForBlockSignature:original];\n}\n\n- (instancetype)initWithBlock:(id)block methodSignature:(NSMethodSignature *)methodSignature blockSignature:(NSMethodSignature *)blockSignature\n{\n\tself = [super init];\n\tif (self) {\n\t\t_block = [block copy];\n\t\t_methodSignature = methodSignature;\n\t\t_blockSignature = blockSignature;\n\t}\n\treturn self;\n}\n\n- (instancetype)initWithBlock:(id)block\n{\n\tNSParameterAssert(block);\n\tNSMethodSignature *blockSignature = [[self class] typeSignatureForBlock:block];\n\tNSMethodSignature *methodSignature = [[self class] methodSignatureForBlockSignature:blockSignature];\n\tNSAssert(methodSignature, @\"Incompatible block: %@\", block);\n\treturn (self = [self initWithBlock:block methodSignature:methodSignature blockSignature:blockSignature]);\n}\n\n- (instancetype)initWithBlock:(id)block methodSignature:(NSMethodSignature *)methodSignature\n{\n\tNSParameterAssert(block);\n\tNSMethodSignature *blockSignature = [[self class] typeSignatureForBlock:block];\n\tif (![[self class] isSignature:methodSignature compatibleWithSignature:blockSignature]) {\n\t\t@throw [NSException exceptionWithName:NSInvalidArgumentException reason:@\"Attempted to create block invocation with incompatible signatures\" userInfo:@{A2IncompatibleMethodSignatureKey: methodSignature}];\n\t}\n\treturn (self = [self initWithBlock:block methodSignature:methodSignature blockSignature:blockSignature]);\n}\n\n- (BOOL)invokeWithInvocation:(NSInvocation *)outerInv returnValue:(out NSValue **)outReturnValue setOnInvocation:(BOOL)setOnInvocation\n{\n\tNSParameterAssert(outerInv);\n\n\tNSMethodSignature *sig = self.methodSignature;\n\n\tif (![outerInv.methodSignature isEqual:sig]) {\n\t\tNSAssert(0, @\"Attempted to invoke block invocation with incompatible frame\");\n\t\treturn NO;\n\t}\n\n\tNSInvocation *innerInv = [NSInvocation invocationWithMethodSignature:self.blockSignature];\n\n\tvoid *argBuf = NULL;\n\n\tfor (NSUInteger i = 2; i < sig.numberOfArguments; i++) {\n\t\tconst char *type = [sig getArgumentTypeAtIndex:i];\n\t\tNSUInteger argSize;\n\t\tNSGetSizeAndAlignment(type, &argSize, NULL);\n\n\t\tif (!(argBuf = reallocf(argBuf, argSize))) {\n\t\t\treturn NO;\n\t\t}\n\n\t\t[outerInv getArgument:argBuf atIndex:i];\n\t\t[innerInv setArgument:argBuf atIndex:i - 1];\n\t}\n\n\t[innerInv invokeWithTarget:self.block];\n\n\tNSUInteger retSize = sig.methodReturnLength;\n\tif (retSize) {\n\t\tif (outReturnValue || setOnInvocation) {\n\t\t\tif (!(argBuf = reallocf(argBuf, retSize))) {\n\t\t\t\treturn NO;\n\t\t\t}\n\n\t\t\t[innerInv getReturnValue:argBuf];\n\n\t\t\tif (setOnInvocation) {\n\t\t\t\t[outerInv setReturnValue:argBuf];\n\t\t\t}\n\n\t\t\tif (outReturnValue) {\n\t\t\t\t*outReturnValue = [NSValue valueWithBytes:argBuf objCType:sig.methodReturnType];\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (outReturnValue) {\n\t\t\t*outReturnValue = nil;\n\t\t}\n\t}\n\n\tfree(argBuf);\n\n\treturn YES;\n}\n\n- (void)invokeWithInvocation:(NSInvocation *)inv\n{\n\t[self invokeWithInvocation:inv returnValue:NULL setOnInvocation:YES];\n}\n\n- (BOOL)invokeWithInvocation:(NSInvocation *)inv returnValue:(out NSValue **)returnValue\n{\n\treturn [self invokeWithInvocation:inv returnValue:returnValue setOnInvocation:NO];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/A2DynamicDelegate.h",
    "content": "//\n//  A2DynamicDelegate.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n#import <BlocksKit/NSObject+A2BlockDelegate.h>\n#import <BlocksKit/NSObject+A2DynamicDelegate.h>\n\n/** A2DynamicDelegate implements a class's delegate, data source, or other\n delegated protocol by associating protocol methods with a block implementation.\n\n\t- (IBAction) annoyUser\n\t{\n\t\t// Create an alert view\n\t\tUIAlertView *alertView = [[UIAlertView alloc]\n\t\t\t\t\t\t\t\t  initWithTitle:@\"Hello World!\"\n\t\t\t\t\t\t\t\t  message:@\"This alert's delegate is implemented using blocks. That's so cool!\"\n\t\t\t\t\t\t\t\t  delegate:nil\n\t\t\t\t\t\t\t\t  cancelButtonTitle:@\"Meh.\"\n\t\t\t\t\t\t\t\t  otherButtonTitles:@\"Woo!\", nil];\n\n\t\t// Get the dynamic delegate\n\t\tA2DynamicDelegate *dd = alertView.bk_dynamicDelegate;\n\n\t\t// Implement -alertViewShouldEnableFirstOtherButton:\n\t\t[dd implementMethod:@selector(alertViewShouldEnableFirstOtherButton:) withBlock:^(UIAlertView *alertView) {\n\t\t\tNSLog(@\"Message: %@\", alertView.message);\n\t\t\treturn YES;\n\t\t}];\n\n\t\t// Implement -alertView:willDismissWithButtonIndex:\n\t\t[dd implementMethod:@selector(alertView:willDismissWithButtonIndex:) withBlock:^(UIAlertView *alertView, NSInteger buttonIndex) {\n\t\t\tNSLog(@\"You pushed button #%d (%@)\", buttonIndex, [alertView buttonTitleAtIndex:buttonIndex]);\n\t\t}];\n\n\t\t// Set the delegate\n\t\talertView.delegate = dd;\n\n\t\t[alertView show];\n\t}\n\n A2DynamicDelegate is designed to be 'plug and play'.\n */\n@interface A2DynamicDelegate : NSProxy\n\n/**\n * The designated initializer for the A2DynamicDelegate proxy.\n *\n * An instance of A2DynamicDelegate should generally not be created by the user,\n * but instead by calling a method in NSObject(A2DynamicDelegate). Since\n * delegates are usually weak references on the part of the delegating object, a\n * dynamic delegate would be deallocated immediately after its declaring scope\n * ends. NSObject(A2DynamicDelegate) creates a strong reference.\n *\n * @param protocol A protocol to which the dynamic delegate should conform.\n * @return An initialized delegate proxy.\n */\n- (id)initWithProtocol:(Protocol *)protocol;\n\n/** The protocol delegating the dynamic delegate. */\n@property (nonatomic, readonly) Protocol *protocol;\n\n/** A dictionary of custom handlers to be used by custom responders\n in a A2Dynamic(Protocol Name) subclass of A2DynamicDelegate, like\n `A2DynamicUIAlertViewDelegate`. */\n@property (nonatomic, strong, readonly) NSMutableDictionary *handlers;\n\n/** When replacing the delegate using the A2BlockDelegate extensions, the object\n responding to classical delegate method implementations. */\n@property (nonatomic, weak, readonly) id realDelegate;\n\n/** @name Block Instance Method Implementations */\n\n/** The block that is to be fired when the specified\n selector is called on the reciever.\n\n @param selector An encoded selector. Must not be NULL.\n @return A code block, or nil if no block is assigned.\n */\n- (id)blockImplementationForMethod:(SEL)selector;\n\n/** Assigns the given block to be fired when the specified\n selector is called on the reciever.\n\n\t[tableView.dynamicDataSource implementMethod:@selector(numberOfSectionsInTableView:)\n\t\t\t\t\t\t\t\t\t  withBlock:NSInteger^(UITableView *tableView) {\n\t\treturn 2;\n\t}];\n\n @warning Starting with A2DynamicDelegate 2.0, a block will\n not be checked for a matching signature. A block can have\n less parameters than the original selector and will be\n ignored, but cannot have more.\n\n @param selector An encoded selector. Must not be NULL.\n @param block A code block with the same signature as selector.\n */\n- (void)implementMethod:(SEL)selector withBlock:(id)block;\n\n/** Disassociates any block so that nothing will be fired\n when the specified selector is called on the reciever.\n\n @param selector An encoded selector. Must not be NULL.\n */\n- (void)removeBlockImplementationForMethod:(SEL)selector;\n\n/** @name Block Class Method Implementations */\n\n/** The block that is to be fired when the specified\n selector is called on the delegating object's class.\n\n @param selector An encoded selector. Must not be NULL.\n @return A code block, or nil if no block is assigned.\n */\n- (id)blockImplementationForClassMethod:(SEL)selector;\n\n/** Assigns the given block to be fired when the specified\n selector is called on the reciever.\n\n @warning Starting with A2DynamicDelegate 2.0, a block will\n not be checked for a matching signature. A block can have\n less parameters than the original selector and will be\n ignored, but cannot have more.\n\n @param selector An encoded selector. Must not be NULL.\n @param block A code block with the same signature as selector.\n */\n- (void)implementClassMethod:(SEL)selector withBlock:(id)block;\n\n/** Disassociates any blocks so that nothing will be fired\n when the specified selector is called on the delegating\n object's class.\n\n @param selector An encoded selector. Must not be NULL.\n */\n- (void)removeBlockImplementationForClassMethod:(SEL)selector;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/A2DynamicDelegate.m",
    "content": "//\n//  A2DynamicDelegate.m\n//  BlocksKit\n//\n\n#import <objc/message.h>\n#import \"A2BlockInvocation.h\"\n#import \"A2DynamicDelegate.h\"\n\nProtocol *a2_dataSourceProtocol(Class cls);\nProtocol *a2_delegateProtocol(Class cls);\nProtocol *a2_protocolForDelegatingObject(id obj, Protocol *protocol);\n\nstatic BOOL selectorsEqual(const void *item1, const void *item2, NSUInteger(*__unused size)(const void __unused *item))\n{\n\treturn sel_isEqual((SEL)item1, (SEL)item2);\n}\n\nstatic NSString *selectorDescribe(const void *item1)\n{\n\treturn NSStringFromSelector((SEL)item1);\n}\n\n@interface NSMapTable (BKAdditions)\n\n+ (instancetype)bk_selectorsToStrongObjectsMapTable;\n- (id)bk_objectForSelector:(SEL)aSEL;\n- (void)bk_removeObjectForSelector:(SEL)aSEL;\n- (void)bk_setObject:(id)anObject forSelector:(SEL)aSEL;\n\n@end\n\n@implementation NSMapTable (BKAdditions)\n\n+ (instancetype)bk_selectorsToStrongObjectsMapTable\n{\n\tNSPointerFunctions *selectors = [NSPointerFunctions pointerFunctionsWithOptions:NSPointerFunctionsOpaqueMemory|NSPointerFunctionsOpaquePersonality];\n\tselectors.isEqualFunction = selectorsEqual;\n\tselectors.descriptionFunction = selectorDescribe;\n\n\tNSPointerFunctions *strongObjects = [NSPointerFunctions pointerFunctionsWithOptions:NSPointerFunctionsStrongMemory|NSPointerFunctionsObjectPersonality];\n\n\treturn [[NSMapTable alloc] initWithKeyPointerFunctions:selectors valuePointerFunctions:strongObjects capacity:1];\n}\n\n- (id)bk_objectForSelector:(SEL)aSEL\n{\n\tvoid *selAsPtr = aSEL;\n\treturn [self objectForKey:(__bridge id)selAsPtr];\n}\n\n- (void)bk_removeObjectForSelector:(SEL)aSEL\n{\n\tvoid *selAsPtr = aSEL;\n\t[self removeObjectForKey:(__bridge id)selAsPtr];\n}\n\n- (void)bk_setObject:(id)anObject forSelector:(SEL)aSEL\n{\n\tvoid *selAsPtr = aSEL;\n\t[self setObject:anObject forKey:(__bridge id)selAsPtr];\n}\n\n\n@end\n\n@interface A2DynamicClassDelegate : A2DynamicDelegate\n\n@property (nonatomic) Class proxiedClass;\n\n@end\n\n#pragma mark -\n\n@interface A2DynamicDelegate ()\n\n@property (nonatomic) A2DynamicClassDelegate *classProxy;\n@property (nonatomic, readonly) NSMapTable *invocationsBySelectors;\n@property (nonatomic, weak, readwrite) id realDelegate;\n\n- (BOOL) isClassProxy;\n\n@end\n\n@implementation A2DynamicDelegate\n\n- (A2DynamicClassDelegate *)classProxy\n{\n\tif (!_classProxy)\n\t{\n\t\t_classProxy = [[A2DynamicClassDelegate alloc] initWithProtocol:self.protocol];\n\t\t_classProxy.proxiedClass = object_getClass(self);\n\t}\n\n\treturn _classProxy;\n}\n\n- (BOOL)isClassProxy\n{\n\treturn NO;\n}\n\n- (Class)class\n{\n\tClass myClass = object_getClass(self);\n\tif (myClass == [A2DynamicDelegate class] || [myClass superclass] == [A2DynamicDelegate class])\n\t\treturn (Class)self.classProxy;\n\treturn [super class];\n}\n\n- (id)initWithProtocol:(Protocol *)protocol\n{\n\t_protocol = protocol;\n\t_handlers = [NSMutableDictionary dictionary];\n\t_invocationsBySelectors = [NSMapTable bk_selectorsToStrongObjectsMapTable];\n\treturn self;\n}\n\n- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector\n{\n\tA2BlockInvocation *invocation = nil;\n\tif ((invocation = [self.invocationsBySelectors bk_objectForSelector:aSelector]))\n\t\treturn invocation.methodSignature;\n\telse if ([self.realDelegate methodSignatureForSelector:aSelector])\n\t\treturn [self.realDelegate methodSignatureForSelector:aSelector];\n\telse if (class_respondsToSelector(object_getClass(self), aSelector))\n\t\treturn [object_getClass(self) methodSignatureForSelector:aSelector];\n\treturn [[NSObject class] methodSignatureForSelector:aSelector];\n}\n\n+ (NSString *)description\n{\n\treturn @\"A2DynamicDelegate\";\n}\n- (NSString *)description\n{\n\treturn [NSString stringWithFormat:@\"<A2DynamicDelegate:%p; protocol = %@>\", (__bridge void *)self, NSStringFromProtocol(self.protocol)];\n}\n\n- (void)forwardInvocation:(NSInvocation *)outerInv\n{\n\tSEL selector = outerInv.selector;\n\tA2BlockInvocation *innerInv = nil;\n\tif ((innerInv = [self.invocationsBySelectors bk_objectForSelector:selector])) {\n\t\t[innerInv invokeWithInvocation:outerInv];\n\t} else if ([self.realDelegate respondsToSelector:selector]) {\n\t\t[outerInv invokeWithTarget:self.realDelegate];\n\t}\n}\n\n#pragma mark -\n\n- (BOOL)conformsToProtocol:(Protocol *)aProtocol\n{\n\treturn protocol_isEqual(aProtocol, self.protocol) || [super conformsToProtocol:aProtocol];\n}\n- (BOOL)respondsToSelector:(SEL)selector\n{\n\treturn [self.invocationsBySelectors bk_objectForSelector:selector] || class_respondsToSelector(object_getClass(self), selector) || [self.realDelegate respondsToSelector:selector];\n}\n\n- (void)doesNotRecognizeSelector:(SEL)aSelector\n{\n\t[NSException raise:NSInvalidArgumentException format:@\"-[%s %@]: unrecognized selector sent to instance %p\", object_getClassName(self), NSStringFromSelector(aSelector), (__bridge void *)self];\n}\n\n#pragma mark - Block Instance Method Implementations\n\n- (id)blockImplementationForMethod:(SEL)selector\n{\n\tA2BlockInvocation *invocation = nil;\n\tif ((invocation = [self.invocationsBySelectors bk_objectForSelector:selector]))\n\t\treturn invocation.block;\n\treturn NULL;\n}\n\n- (void)implementMethod:(SEL)selector withBlock:(id)block\n{\n\tNSCAssert(selector, @\"Attempt to implement or remove NULL selector\");\n\tBOOL isClassMethod = self.isClassProxy;\n\n\tif (!block) {\n\t\t[self.invocationsBySelectors bk_removeObjectForSelector:selector];\n\t\treturn;\n\t}\n\n\tstruct objc_method_description methodDescription = protocol_getMethodDescription(self.protocol, selector, YES, !isClassMethod);\n\tif (!methodDescription.name) methodDescription = protocol_getMethodDescription(self.protocol, selector, NO, !isClassMethod);\n\n\tA2BlockInvocation *inv = nil;\n\tif (methodDescription.name) {\n\t\tNSMethodSignature *protoSig = [NSMethodSignature signatureWithObjCTypes:methodDescription.types];\n\t\tinv = [[A2BlockInvocation alloc] initWithBlock:block methodSignature:protoSig];\n\t} else {\n\t\tinv = [[A2BlockInvocation alloc] initWithBlock:block];\n\t}\n\n\t[self.invocationsBySelectors bk_setObject:inv forSelector:selector];\n}\n- (void)removeBlockImplementationForMethod:(SEL)selector __unused\n{\n\t[self implementMethod:selector withBlock:nil];\n}\n\n#pragma mark - Block Class Method Implementations\n\n- (id)blockImplementationForClassMethod:(SEL)selector\n{\n\treturn [self.classProxy blockImplementationForMethod:selector];\n}\n\n- (void)implementClassMethod:(SEL)selector withBlock:(id)block\n{\n\t[self.classProxy implementMethod:selector withBlock:block];\n}\n- (void)removeBlockImplementationForClassMethod:(SEL)selector __unused\n{\n\t[self.classProxy implementMethod:selector withBlock:nil];\n}\n\n@end\n\n#pragma mark -\n\n@implementation A2DynamicClassDelegate\n\n- (BOOL)isClassProxy\n{\n\treturn YES;\n}\n- (BOOL)isEqual:(id)object\n{\n\treturn [super isEqual:object] || [_proxiedClass isEqual:object];\n}\n- (BOOL)respondsToSelector:(SEL)aSelector\n{\n\treturn [self.invocationsBySelectors bk_objectForSelector:aSelector] || [_proxiedClass respondsToSelector:aSelector];\n}\n\n- (Class)class\n{\n\treturn self.proxiedClass;\n}\n\n- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector\n{\n\tA2BlockInvocation *invocation = nil;\n\tif ((invocation = [self.invocationsBySelectors bk_objectForSelector:aSelector]))\n\t\treturn invocation.methodSignature;\n\telse if ([_proxiedClass methodSignatureForSelector:aSelector])\n\t\treturn [_proxiedClass methodSignatureForSelector:aSelector];\n\treturn [[NSObject class] methodSignatureForSelector:aSelector];\n}\n\n- (NSString *)description\n{\n\treturn [_proxiedClass description];\n}\n\n- (NSUInteger)hash\n{\n\treturn [_proxiedClass hash];\n}\n\n- (void)forwardInvocation:(NSInvocation *)outerInv\n{\n\tSEL selector = outerInv.selector;\n\tA2BlockInvocation *innerInv = nil;\n\tif ((innerInv = [self.invocationsBySelectors bk_objectForSelector:selector])) {\n\t\t[innerInv invokeWithInvocation:outerInv];\n\t} else {\n\t\t[outerInv invokeWithTarget:_proxiedClass];\n\t}\n}\n\n#pragma mark - Unavailable Methods\n\n- (id)blockImplementationForClassMethod:(SEL)selector\n{\n\t[self doesNotRecognizeSelector:_cmd];\n\treturn nil;\n}\n\n- (void)implementClassMethod:(SEL)selector withBlock:(id)block\n{\n\t[self doesNotRecognizeSelector:_cmd];\n}\n- (void)removeBlockImplementationForClassMethod:(SEL)selector\n{\n\t[self doesNotRecognizeSelector:_cmd];\n}\n\n@end\n\n#pragma mark - Helper functions\n\nstatic Protocol *a2_classProtocol(Class _cls, NSString *suffix, NSString *description)\n{\n\tClass cls = _cls;\n\twhile (cls) {\n\t\tNSString *className = NSStringFromClass(cls);\n\t\tNSString *protocolName = [className stringByAppendingString:suffix];\n\t\tProtocol *protocol = objc_getProtocol(protocolName.UTF8String);\n\t\tif (protocol) return protocol;\n\n\t\tcls = class_getSuperclass(cls);\n\t}\n\n\tNSCAssert(NO, @\"Specify protocol explicitly: could not determine %@ protocol for class %@ (tried <%@>)\", description, NSStringFromClass(_cls), [NSStringFromClass(_cls) stringByAppendingString:suffix]);\n\treturn nil;\n}\n\nProtocol *a2_dataSourceProtocol(Class cls)\n{\n\treturn a2_classProtocol(cls, @\"DataSource\", @\"data source\");\n}\nProtocol *a2_delegateProtocol(Class cls)\n{\n\treturn a2_classProtocol(cls, @\"Delegate\", @\"delegate\");\n}\nProtocol *a2_protocolForDelegatingObject(id obj, Protocol *protocol)\n{\n\tNSString *protocolName = NSStringFromProtocol(protocol);\n\tif ([protocolName hasSuffix:@\"Delegate\"]) {\n\t\tProtocol *p = a2_delegateProtocol([obj class]);\n\t\tif (p) return p;\n\t} else if ([protocolName hasSuffix:@\"DataSource\"]) {\n\t\tProtocol *p = a2_dataSourceProtocol([obj class]);\n\t\tif (p) return p;\n\t}\n\n\treturn protocol;\n}\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h",
    "content": "//\n//  NSCache+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** NSCache with block adding of objects\n\n This category allows you to conditionally add objects to\n an instance of NSCache using blocks.  Both the normal\n delegation pattern and a block callback for NSCache's one\n delegate method are allowed.\n\n These methods emulate Rails caching behavior.\n\n Created by [Igor Evsukov](https://github.com/evsukov89) and contributed to BlocksKit.\n */\n\n@interface NSCache (BlocksKit)\n\n/** Returns the value associated with a given key. If there is no\n object for that key, it uses the result of the block, saves\n that to the cache, and returns it.\n\n This mimics the cache behavior of Ruby on Rails.  The following code:\n\n\t @products = Rails.cache.fetch('products') do\n\t   Product.all\n\t end\n\n becomes:\n\n\t NSMutableArray *products = [cache objectForKey:@\"products\" withGetter:^id{\n\t   return [Product all];\n\t }];\n\n @return The value associated with *key*, or the object returned\n by the block if no value is associated with *key*.\n @param key An object identifying the value.\n @param getterBlock A block used to get an object if there is no\n value in the cache.\n */\n- (id)bk_objectForKey:(id)key withGetter:(id (^)(void))getterBlock;\n\n/** Called when an object is about to be evicted from the cache.\n\n This block callback is an analog for the cache:willEviceObject:\n method of NSCacheDelegate.\n */\n@property (nonatomic, copy, setter = bk_setWillEvictBlock:) void (^bk_willEvictBlock)(NSCache *cache, id obj);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m",
    "content": "//\n//  NSCache+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"A2DynamicDelegate.h\"\n#import \"NSCache+BlocksKit.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n\n#pragma mark Custom delegate\n\n@interface A2DynamicNSCacheDelegate : A2DynamicDelegate <NSCacheDelegate>\n\n@end\n\n@implementation A2DynamicNSCacheDelegate\n\n- (void)cache:(NSCache *)cache willEvictObject:(id)obj\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(cache:willEvictObject:)])\n\t\t[realDelegate cache:cache willEvictObject:obj];\n\n\tvoid (^orig)(NSCache *, id) = [self blockImplementationForMethod:_cmd];\n\tif (orig) orig(cache, obj);\n}\n\n@end\n\n#pragma mark Category\n\n@implementation NSCache (BlocksKit)\n\n@dynamic bk_willEvictBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegate];\n\t\t[self bk_linkDelegateMethods:@{ @\"bk_willEvictBlock\": @\"cache:willEvictObject:\" }];\n\t}\n}\n\n#pragma mark Methods\n\n- (id)bk_objectForKey:(id)key withGetter:(id (^)(void))block\n{\n\tid object = [self objectForKey:key];\n\tif (object) return object;\n\n\tif (block) {\n\t\tobject = block();\n\t\t[self setObject:object forKey:key];\n\t}\n\n\treturn object;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h",
    "content": "//\n//  NSURLConnection+BlocksKit.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** NSURLConnection with both delegate and block callback support.\n\n It also adds useful block handlers for tracking upload and download progress.\n\n Here is a small example:\n\t - (void)downloadImage:(id)sender {\n\t\t self.downloadButton.enabled = NO;\n\t\t self.progressView.progress = 0.0f;\n\t\t NSURL *imageURL = [NSURL URLWithString:@\"http://icanhascheezburger.files.wordpress.com/2011/06/funny-pictures-nyan-cat-wannabe1.jpg\"];\n\t\t NSURLRequest *request = [NSURLRequest requestWithURL:imageURL];\n\t\t NSURLConnection *connection = [NSURLConnection connectionWithRequest:request];\n\t\t connection.delegate = self;\n\t\t connection.failureBlock = ^(NSURLConnection *connection, NSError *error) {\n\t\t\t [[UIAlertView alertViewWithTitle:@\"Download error\" message:[error localizedDescription]] show];\n\n\t\t\t self.downloadButton.enabled = YES;\n\t\t\t self.progressView.progress = 0.0f;\n\t\t };\n\t\t connection.successBlock = ^(NSURLConnection *connection, NSURLResponse *response, NSData *responseData) {\n\t\t\t self.imageView.image = [UIImage imageWithData:responseData];\n\t\t\t self.downloadButton.enabled = YES;\n\t\t };\n\t\t connection.downloadBlock = ^(double progress) {\n\t\t\t self.progressView.progress = progress;\n\t\t };\n\n\t\t [connection start];\n\t }\n\n\t //these methods will be called too!\n\t - (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite {\n\t\t NSLog(@\"%s\",__PRETTY_FUNCTION__);\n\t }\n\n\t - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {\n\t\t NSLog(@\"%s\",__PRETTY_FUNCTION__);\n\t }\n\n Created by Igor Evsukov as\n [IEURLConnection](https://github.com/evsukov89/IEURLConnection) and contributed\n to BlocksKit.\n*/\n\n@interface NSURLConnection (BlocksKit)\n\n/** A mutable delegate that implements the NSURLConnectionDelegate protocol.\n\n This property allows for both use of block callbacks and delegate methods\n in an instance of NSURLConnection.  It only works on block-backed\n NSURLConnection instances.\n */\n@property (nonatomic, weak, setter = setDelegate:) id delegate;\n\n/** The block fired once the connection recieves a response from the server.\n\n This block corresponds to the connection:didReceiveResponse: method\n of NSURLConnectionDataDelegate. */\n@property (nonatomic, copy, setter = bk_setResponseBlock:) void (^bk_responseBlock)(NSURLConnection *connection, NSURLResponse *response);\n\n/** The block fired upon the failure of the connection.\n\n This block corresponds to the connection:didFailWithError:\n method of NSURLConnectionDelegate. */\n@property (nonatomic, copy, setter = bk_setFailureBlock:) void (^bk_failureBlock)(NSURLConnection *connection, NSError *error);\n\n/** The block that  upon the successful completion of the connection.\n\n This block corresponds to the connectionDidFinishLoading:\n method of NSURLConnectionDelegate.\n\n @warning If the delegate implements connection:didRecieveData:, then this\n block will *not* include the data recieved by the connection and appending\n the recieved data to an instance NSMutableData is left up to the user due\n to the behavior of frameworks that use NSURLConnection.\n */\n@property (nonatomic, copy, setter = bk_setSuccessBlock:) void (^bk_successBlock)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData);\n\n/** The block fired every time new data is sent to the server,\n representing the current percentage of completion.\n\n This block corresponds to the\n connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:\n method of NSURLConnectionDelegate.\n */\n@property (nonatomic, copy, setter = bk_setUploadBlock:) void (^bk_uploadBlock)(double percent);\n\n/** The block fired every time new data is recieved from the server,\n representing the current percentage of completion.\n\n This block corresponds to the connection:didRecieveData:\n method of NSURLConnectionDelegate.\n */\n@property (nonatomic, copy, setter = bk_setDownloadBlock:) void (^bk_downloadBlock)(double percent);\n\n/** Creates and returns an initialized block-backed URL connection that does not begin to load the data for the URL request.\n\n @param request The URL request to load.\n @return An autoreleased NSURLConnection for the specified URL request.\n */\n+ (NSURLConnection *)bk_connectionWithRequest:(NSURLRequest *)request;\n\n/** Creates, starts, and returns an asynchronous, block-backed URL connection\n\n @return New and running NSURLConnection with the specified properties.\n @param request The URL request to load.\n @param success A code block that acts on instances of NSURLResponse and NSData in the event of a successful connection.\n @param failure A code block that acts on instances of NSURLResponse and NSError in the event of a failed connection.\n */\n+ (NSURLConnection *)bk_startConnectionWithRequest:(NSURLRequest *)request successHandler:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))success failureHandler:(void (^)(NSURLConnection *connection, NSError *error))failure;\n\n/** Returns an initialized block-backed URL connection.\n\n @return Newly initialized NSURLConnection with the specified properties.\n @param request The URL request to load.\n */\n- (id)bk_initWithRequest:(NSURLRequest *)request NS_REPLACES_RECEIVER;\n\n/** Returns an initialized URL connection with the specified completion handler.\n\n @return Newly initialized NSURLConnection with the specified properties.\n @param request The URL request to load.\n @param block A code block that acts on instances of NSURLResponse and NSData in the event of a successful connection.\n */\n- (id)bk_initWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))block NS_REPLACES_RECEIVER;\n\n/** Causes the connection to begin loading data, if it has not already, with the specified block to be fired on successful completion.\n\n @param block A code block that acts on instances of NSURLResponse and NSData in the event of a successful connection.\n */\n- (void)bk_startWithCompletionBlock:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.m",
    "content": "//\n//  NSURLConnection+BlocksKit.m\n//  BlocksKit\n//\n\n#import <objc/runtime.h>\n#import \"A2DynamicDelegate.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n#import \"NSObject+A2DynamicDelegate.h\"\n#import \"NSURLConnection+BlocksKit.h\"\n\n#pragma mark Private\n\nstatic const void *BKResponseDataKey = &BKResponseDataKey;\nstatic const void *BKResponseKey = &BKResponseKey;\nstatic const void *BKResponseLengthKey = &BKResponseLengthKey;\n\n@interface NSURLConnection (BlocksKitPrivate)\n\n@property (nonatomic, retain, setter = bk_setResponseData:) NSMutableData *bk_responseData;\n@property (nonatomic, retain, setter = bk_setResponse:) NSURLResponse *bk_response;\n@property (nonatomic, setter = bk_setResponseLength:) NSUInteger bk_responseLength;\n\n@end\n\n@implementation NSURLConnection (BlocksKitPrivate)\n\n- (NSMutableData *)bk_responseData\n{\n\treturn objc_getAssociatedObject(self, BKResponseDataKey);\n}\n\n- (void)bk_setResponseData:(NSMutableData *)responseData\n{\n\tobjc_setAssociatedObject(self, BKResponseDataKey, responseData, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n- (NSURLResponse *)bk_response\n{\n\treturn objc_getAssociatedObject(self, BKResponseKey);\n}\n\n- (void)bk_setResponse:(NSURLResponse *)response\n{\n\tobjc_setAssociatedObject(self, BKResponseKey, response, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n- (NSUInteger)bk_responseLength\n{\n\treturn [objc_getAssociatedObject(self, BKResponseLengthKey) unsignedIntegerValue];\n}\n\n- (void)bk_setResponseLength:(NSUInteger)responseLength\n{\n\tobjc_setAssociatedObject(self, BKResponseLengthKey, @(responseLength), OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n@end\n\n#pragma mark - BKURLConnectionInformalDelegate - iOS 4.3 & Snow Leopard support\n\n@protocol BKURLConnectionInformalDelegate <NSObject>\n\n- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;\n- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;\n- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite;\n- (void)connectionDidFinishLoading:(NSURLConnection *)connection;\n- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;\n- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;\n- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;\n\n@end\n\n@interface A2DynamicBKURLConnectionInformalDelegate : A2DynamicDelegate <BKURLConnectionInformalDelegate>\n\n@end\n\n@implementation A2DynamicBKURLConnectionInformalDelegate\n\n- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didReceiveResponse:)])\n\t\t[realDelegate connection:connection didReceiveResponse:response];\n\n\tconnection.bk_responseLength = 0;\n\t[connection.bk_responseData setLength:0];\n\n\tconnection.bk_response = response;\n\n\tvoid (^block)(NSURLConnection *, NSURLResponse *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(connection, response);\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data\n{\n\tconnection.bk_responseLength += data.length;\n\n\tvoid (^block)(double) = connection.bk_downloadBlock;\n\tif (block && connection.bk_response && connection.bk_response.expectedContentLength != NSURLResponseUnknownLength)\n\t\tblock((double)connection.bk_responseLength / (double)connection.bk_response.expectedContentLength);\n\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didReceiveData:)]) {\n\t\t[realDelegate connection:connection didReceiveData:data];\n\t\treturn;\n\t}\n\n\tNSMutableData *responseData = connection.bk_responseData;\n\tif (!responseData) {\n\t\tresponseData = [NSMutableData data];\n\t\tconnection.bk_responseData = responseData;\n\t}\n\n\t[responseData appendData:data];\n}\n\n- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:)])\n\t\t[realDelegate connection:connection didSendBodyData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite];\n\n\tvoid (^block)(double) = connection.bk_uploadBlock;\n\tif (block) block((double)totalBytesWritten/(double)totalBytesExpectedToWrite);\n}\n\n- (void)connectionDidFinishLoading:(NSURLConnection *)connection\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connectionDidFinishLoading:)])\n\t\t[realDelegate connectionDidFinishLoading:connection];\n\n\tif (!connection.bk_responseData.length)\n\t\tconnection.bk_responseData = nil;\n\n\tvoid (^block)(NSURLConnection *, NSURLResponse *, NSData *) = connection.bk_successBlock;\n\tif (block) block(connection, connection.bk_response, connection.bk_responseData);\n}\n\n- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didFailWithError:)])\n\t\t[realDelegate connection:connection didFailWithError:error];\n\n\tconnection.bk_responseLength = 0;\n\t[connection.bk_responseData setLength:0];\n\n\tvoid (^block)(NSURLConnection *, NSError *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(connection, error);\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didReceiveAuthenticationChallenge:)])\n\t\t[realDelegate connection:connection didReceiveAuthenticationChallenge:challenge];\n}\n\n- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:canAuthenticateAgainstProtectionSpace:)])\n\t\treturn [realDelegate connection:connection canAuthenticateAgainstProtectionSpace:protectionSpace];\n\n\treturn NO;\n}\n\n@end\n\n#pragma mark - NSURLConnectionDelegate - iOS 5.0 & Lion support\n\n@interface A2DynamicNSURLConnectionDelegate : A2DynamicDelegate <NSURLConnectionDelegate>\n\n@end\n\n@implementation A2DynamicNSURLConnectionDelegate\n\n- (BOOL)conformsToProtocol:(Protocol *)protocol\n{\n\tProtocol *dataDelegateProtocol = objc_getProtocol(\"NSURLConnectionDataDelegate\");\n\treturn (protocol_isEqual(protocol, dataDelegateProtocol) || protocol_isEqual(protocol, self.protocol) || [super conformsToProtocol:protocol]);\n}\n\n- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didFailWithError:)])\n\t\t[realDelegate connection:connection didFailWithError:error];\n\n\tconnection.bk_responseLength = 0;\n\t[connection.bk_responseData setLength:0];\n\n\tvoid (^block)(NSURLConnection *, NSError *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(connection, error);\n}\n\n- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connectionShouldUseCredentialStorage:)])\n\t\treturn [realDelegate connectionShouldUseCredentialStorage:connection];\n\n\treturn YES;\n}\n\n- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:willSendRequestForAuthenticationChallenge:)])\n\t\t[realDelegate connection:connection willSendRequestForAuthenticationChallenge:challenge];\n}\n\n#pragma mark - NSURLConnectionDataDelegate\n\n- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:willSendRequest:redirectResponse:)])\n\t\treturn [realDelegate connection:connection willSendRequest:request redirectResponse:response];\n\n\treturn request;\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didReceiveResponse:)])\n\t\t[realDelegate connection:connection didReceiveResponse:response];\n\n\tconnection.bk_responseLength = 0;\n\n\tif (connection.bk_responseData)\n\t\t[connection.bk_responseData setLength:0];\n\n\tconnection.bk_response = response;\n\n\tvoid (^block)(NSURLConnection *, NSURLResponse *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(connection, response);\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data\n{\n\tconnection.bk_responseLength += data.length;\n\n\tvoid (^block)(double) = connection.bk_downloadBlock;\n\tif (block && connection.bk_response && connection.bk_response.expectedContentLength != NSURLResponseUnknownLength)\n\t\tblock((double)connection.bk_responseLength / (double)connection.bk_response.expectedContentLength);\n\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didReceiveData:)]) {\n\t\t[realDelegate connection:connection didReceiveData:data];\n\t\treturn;\n\t}\n\n\tNSMutableData *responseData = connection.bk_responseData;\n\tif (!responseData) {\n\t\tresponseData = [NSMutableData data];\n\t\tconnection.bk_responseData = responseData;\n\t}\n\n\t[responseData appendData:data];\n}\n\n- (NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:needNewBodyStream:)])\n\t\treturn [realDelegate connection:connection needNewBodyStream:request];\n\n\treturn nil;\n}\n\n- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:)])\n\t\t[realDelegate connection:connection didSendBodyData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite];\n\n\tvoid (^block)(double) = connection.bk_uploadBlock;\n\tif (block)\n\t\tblock((double)totalBytesWritten/(double)totalBytesExpectedToWrite);\n}\n\n- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:willCacheResponse:)])\n\t\treturn [realDelegate connection:connection willCacheResponse:cachedResponse];\n\n\treturn cachedResponse;\n}\n\n- (void)connectionDidFinishLoading:(NSURLConnection *)connection\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connectionDidFinishLoading:)])\n\t\t[realDelegate connectionDidFinishLoading:connection];\n\n\tif (!connection.bk_responseData.length)\n\t\tconnection.bk_responseData = nil;\n\n\tvoid (^block)(NSURLConnection *, NSURLResponse *, NSData *) = connection.bk_successBlock;\n\tif (block)\n\t\tblock(connection, connection.bk_response, connection.bk_responseData);\n}\n\n#pragma mark - Deprecated iOS 4.x authentication methods\n\n- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:didReceiveAuthenticationChallenge:)])\n\t\t[realDelegate connection:connection didReceiveAuthenticationChallenge:challenge];\n}\n\n- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(connection:canAuthenticateAgainstProtectionSpace:)])\n\t\treturn [realDelegate connection:connection canAuthenticateAgainstProtectionSpace:protectionSpace];\n\n\treturn NO;\n}\n\n@end\n\n#pragma mark - Category\n\nstatic NSString *const kSuccessBlockKey = @\"NSURLConnectionDidFinishLoading\";\nstatic NSString *const kFailureBlockKey = @\"NSURLConnectionDidFailWithError\";\nstatic NSString *const kUploadBlockKey = @\"NSURLConnectionDidSendData\";\nstatic NSString *const kDownloadBlockKey = @\"NSURLConnectionDidRecieveData\";\n\n@implementation NSURLConnection (BlocksKit)\n\n@dynamic delegate, bk_responseBlock, bk_failureBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegate];\n\t\t[self bk_linkDelegateMethods:@{ @\"bk_responseBlock\": @\"connection:didReceiveResponse:\", @\"bk_failureBlock\": @\"connection:didFailWithError:\" }];\n\t}\n}\n\n#pragma mark Initializers\n\n+ (NSURLConnection*)bk_connectionWithRequest:(NSURLRequest *)request\n{\n\treturn [[[self class] alloc] bk_initWithRequest:request];\n}\n\n+ (NSURLConnection *)bk_startConnectionWithRequest:(NSURLRequest *)request successHandler:(void (^)(NSURLConnection *, NSURLResponse *, NSData *))success failureHandler:(void (^)(NSURLConnection *, NSError *))failure\n{\n\tProtocol *delegateProtocol = objc_getProtocol(\"NSURLConnectionDelegate\");\n\tif (!delegateProtocol)\n\t\tdelegateProtocol = @protocol(BKURLConnectionInformalDelegate);\n\tNSURLConnection *ret = [[self class] alloc];\n\tA2DynamicDelegate *dd = [ret bk_dynamicDelegateForProtocol:delegateProtocol];\n\tif (success)\n\t\tdd.handlers[kSuccessBlockKey] = [success copy];\n\tif (failure)\n\t\t[dd implementMethod:@selector(connection:didFailWithError:) withBlock:[failure copy]];\n\treturn [ret initWithRequest:request delegate:dd startImmediately:YES];\n}\n\n- (id)bk_initWithRequest:(NSURLRequest *)request\n{\n\treturn (self = [self bk_initWithRequest:request completionHandler:nil]);\n}\n\n- (id)bk_initWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLConnection *, NSURLResponse *, NSData *))block\n{\n\tProtocol *delegateProtocol = objc_getProtocol(\"NSURLConnectionDelegate\");\n\tif (!delegateProtocol)\n\t\tdelegateProtocol = @protocol(BKURLConnectionInformalDelegate);\n\tA2DynamicDelegate *dd = [self bk_dynamicDelegateForProtocol:delegateProtocol];\n\tif (block)\n\t\tdd.handlers[kSuccessBlockKey] = [block copy];\n\treturn (self = [self initWithRequest:request delegate:dd startImmediately:NO]);\n}\n\n- (void)bk_startWithCompletionBlock:(void (^)(NSURLConnection *, NSURLResponse *, NSData *))block\n{\n\tself.bk_successBlock = block;\n\t[self start];\n}\n\n#pragma mark Properties\n\n- (void (^)(NSURLConnection *, NSURLResponse *, NSData *))bk_successBlock {\n\treturn [self.bk_dynamicDelegate handlers][kSuccessBlockKey];\n}\n\n- (void)bk_setSuccessBlock:(void (^)(NSURLConnection *, NSURLResponse *, NSData *))block {\n\tif (block)\n\t\t[self.bk_dynamicDelegate handlers][kSuccessBlockKey] = [block copy];\n\telse\n\t\t[[self.bk_dynamicDelegate handlers] removeObjectForKey:kSuccessBlockKey];\n}\n\n- (void (^)(double))bk_uploadBlock {\n\treturn [self.bk_dynamicDelegate handlers][kUploadBlockKey];\n}\n\n- (void)bk_setUploadBlock:(void (^)(double))block {\n\tif (block)\n\t\t[self.bk_dynamicDelegate handlers][kUploadBlockKey] = [block copy];\n\telse\n\t\t[[self.bk_dynamicDelegate handlers] removeObjectForKey:kUploadBlockKey];\n}\n\n- (void (^)(double))bk_downloadBlock {\n\treturn [self.bk_dynamicDelegate handlers][kDownloadBlockKey];\n}\n\n- (void)bk_setDownloadBlock:(void (^)(double))block {\n\tif (block)\n\t\t[self.bk_dynamicDelegate handlers][kDownloadBlockKey] = [block copy];\n\telse\n\t\t[[self.bk_dynamicDelegate handlers] removeObjectForKey:kDownloadBlockKey];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h",
    "content": "//\n//  NSObject+A2BlockDelegate.h\n//  BlocksKit\n//\n\n#import <Foundation/Foundation.h>\n\n/** The A2BlockDelegate category extends features provided by A2DynamicDelegate\n to create custom block properties in a category on a delegating object and\n dynamically map them to delegate (`UIAlertViewDelegate`), data source\n (`UITableViewDataSource`), or other delegated protocol\n (`NSErrorRecoveryAttempting`) methods.\n\n A2BlockDelegate also supports replacing the delegate of a given class with an\n automatic - though optional - version of these block-based properties, while\n still allowing for traditional method-based delegate implementations.\n\n Simply call one of the methods in the category on a class to add a block\n property to that class, preferably during a `+load` method in a category.\n\n To interplay between classes that support delegation but are extended to have\n block properties through delegate replacement extended to have block\n properties, one should implement an `A2Dynamic<ProtocolName>` subclass of\n `A2DynamicDelegate`. This behavior is documented in detail in the class\n documentation for A2DynamicDelegate, and examples exist in BlocksKit.\n */\n@interface NSObject (A2BlockDelegate)\n\n/** @name Linking Block Properties */\n\n/** Synthesizes multiple properties and links them to the appropriate selector\n in the data source protocol.\n\n A2DynamicDelegate assumes a protocol name `FooBarDataSource` for instances of\n class `FooBar`. The method will generate appropriate `setHandler:` and\n `handler` implementations for each property name and selector name string pair.\n\n @param selectorsForPropertyNames A dictionary with property names as keys and\n selector strings as objects.\n */\n+ (void)bk_linkDataSourceMethods:(NSDictionary *)selectorsForPropertyNames;\n\n/** Synthesizes multiple properties and links them to the appropriate selector\n in the delegate protocol.\n\n A2DynamicDelegate assumes a protocol name `FooBarDelegate` for instances of\n class `FooBar`. The method will generate appropriate `setHandler:` and\n `handler` implementations for each property name and selector name string pair.\n\n @param selectorsForPropertyNames A dictionary with property names as keys and\n selectors strings as objects.\n */\n+ (void)bk_linkDelegateMethods:(NSDictionary *)selectorsForPropertyNames;\n\n/** Synthesizes multiple properties and links them to the appropriate selector\n in the given protocol.\n\n The method will generate appropriate `setHandler:` and `handler`\n implementations for each property name and selector name string pair.\n\n @param protocol A protocol that declares all of the given selectors. Must not\n be NULL.\n @param selectorsForPropertyNames A dictionary with property names as keys and\n selector strings as objects.\n */\n+ (void)bk_linkProtocol:(Protocol *)protocol methods:(NSDictionary *)selectorsForPropertyNames;\n\n/** @name Delegate replacement properties */\n\n/** Registers a dynamic data source replacement using the property name\n `dataSource` and the protocol name `FooBarDataSource` for an instance of\n `FooBar`. */\n+ (void)bk_registerDynamicDataSource;\n\n/** Registers a dynamic delegate replacement using the property name `delegate`\n and the protocol name `FooBarDelegate` for an instance of `FooBar`. */\n+ (void)bk_registerDynamicDelegate;\n\n/** Registers a dynamic data source replacement using the given property name\n and the protocol name `FooBarDataSource` for an instance of `FooBar`.\n\n @param dataSourceName The name of the class' data source property. Must not be\n nil.\n */\n+ (void)bk_registerDynamicDataSourceNamed:(NSString *)dataSourceName;\n\n/** Registers a dynamic delegate replacement using the given property name and\n the protocol name `FooBarDelegate` for an instance of `FooBar`.\n\n @param delegateName The name of the class' delegate property. Must not be nil.\n */\n+ (void)bk_registerDynamicDelegateNamed:(NSString *)delegateName;\n\n/** Registers a dynamic protocol implementation replacement\n using the given property name and the given protocol.\n\n @param delegateName The name of the class' delegation protocol property, such\n as `safeDelegate`. Must not be nil.\n @param protocol A properly encoded protocol. Must not be NULL.\n */\n+ (void)bk_registerDynamicDelegateNamed:(NSString *)delegateName forProtocol:(Protocol *)protocol;\n\n/** Creates or gets a dynamic delegate, assuring that it is the delegate.\n @see bk_dynamicDelegate:\n @return A dynamic delegate.\n */\n- (id)bk_ensuredDynamicDelegate;\n\n/** Creates or gets a dynamic protocol implementation, assuring that it is\n assigned to the delegate property correspending to that protocol\n @see bk_dynamicDelegateForProtocol:\n @return A dynamic delegate.\n */\n- (id)bk_ensuredDynamicDelegateForProtocol:(Protocol *)protocol;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.m",
    "content": "//\n//  NSObject+A2BlockDelegate.m\n//  BlocksKit\n//\n\n#import <objc/message.h>\n#import \"NSObject+A2BlockDelegate.h\"\n#import \"NSObject+A2DynamicDelegate.h\"\n\n#pragma mark - Declarations and macros\n\nextern Protocol *a2_dataSourceProtocol(Class cls);\nextern Protocol *a2_delegateProtocol(Class cls);\n\n#pragma mark - Functions\n\nstatic BOOL bk_object_isKindOfClass(id obj, Class testClass)\n{\n\tBOOL isKindOfClass = NO;\n\tClass cls = object_getClass(obj);\n\twhile (cls && !isKindOfClass) {\n\t\tisKindOfClass = (cls == testClass);\n\t\tcls = class_getSuperclass(cls);\n\t}\n\n\treturn isKindOfClass;\n}\n\nstatic Protocol *a2_protocolForDelegatingObject(id obj, Protocol *protocol)\n{\n\tNSString *protocolName = NSStringFromProtocol(protocol);\n\tif ([protocolName hasSuffix:@\"Delegate\"]) {\n\t\tProtocol *p = a2_delegateProtocol([obj class]);\n\t\tif (p) return p;\n\t} else if ([protocolName hasSuffix:@\"DataSource\"]) {\n\t\tProtocol *p = a2_dataSourceProtocol([obj class]);\n\t\tif (p) return p;\n\t}\n\n\treturn protocol;\n}\n\nstatic inline BOOL isValidIMP(IMP impl) {\n#if defined(__arm64__)\n    if (impl == NULL || impl == _objc_msgForward) return NO;\n#else\n    if (impl == NULL || impl == _objc_msgForward || impl == (IMP)_objc_msgForward_stret) return NO;\n#endif\n    return YES;\n}\n\nstatic BOOL addMethodWithIMP(Class cls, SEL oldSel, SEL newSel, IMP newIMP, const char *types, BOOL aggressive) {\n\tif (!class_addMethod(cls, oldSel, newIMP, types)) {\n\t\treturn NO;\n\t}\n\n\t// We just ended up implementing a method that doesn't exist\n\t// (-[NSURLConnection setDelegate:]) or overrode a superclass\n\t// version (-[UIImagePickerController setDelegate:]).\n\tIMP parentIMP = NULL;\n\tClass superclass = class_getSuperclass(cls);\n\twhile (superclass && !isValidIMP(parentIMP)) {\n\t\tparentIMP = class_getMethodImplementation(superclass, oldSel);\n\t\tif (isValidIMP(parentIMP)) {\n\t\t\tbreak;\n\t\t} else {\n\t\t\tparentIMP = NULL;\n\t\t}\n\n\t\tsuperclass = class_getSuperclass(superclass);\n\t}\n\n\tif (parentIMP) {\n\t\tif (aggressive) {\n\t\t\treturn class_addMethod(cls, newSel, parentIMP, types);\n\t\t}\n\n\t\tclass_replaceMethod(cls, newSel, newIMP, types);\n\t\tclass_replaceMethod(cls, oldSel, parentIMP, types);\n\t}\n\n\treturn YES;\n}\n\nstatic BOOL swizzleWithIMP(Class cls, SEL oldSel, SEL newSel, IMP newIMP, const char *types, BOOL aggressive) {\n    Method origMethod = class_getInstanceMethod(cls, oldSel);\n\n\tif (addMethodWithIMP(cls, oldSel, newSel, newIMP, types, aggressive)) {\n\t\treturn YES;\n\t}\n\n\t// common case, actual swap\n\tBOOL ret = class_addMethod(cls, newSel, newIMP, types);\n\tMethod newMethod = class_getInstanceMethod(cls, newSel);\n\tmethod_exchangeImplementations(origMethod, newMethod);\n\treturn ret;\n}\n\nstatic SEL selectorWithPattern(const char *prefix, const char *key, const char *suffix) {\n\tsize_t prefixLength = prefix ? strlen(prefix) : 0;\n\tsize_t suffixLength = suffix ? strlen(suffix) : 0;\n\n\tchar initial = key[0];\n\tif (prefixLength) initial = (char)toupper(initial);\n\tsize_t initialLength = 1;\n\n\tconst char *rest = key + initialLength;\n\tsize_t restLength = strlen(rest);\n\n\tchar selector[prefixLength + initialLength + restLength + suffixLength + 1];\n\tmemcpy(selector, prefix, prefixLength);\n\tselector[prefixLength] = initial;\n\tmemcpy(selector + prefixLength + initialLength, rest, restLength);\n\tmemcpy(selector + prefixLength + initialLength + restLength, suffix, suffixLength);\n\tselector[prefixLength + initialLength + restLength + suffixLength] = '\\0';\n\n\treturn sel_registerName(selector);\n}\n\nstatic SEL getterForProperty(objc_property_t property, const char *name)\n{\n\tif (property) {\n\t\tchar *getterName = property_copyAttributeValue(property, \"G\");\n\t\tif (getterName) {\n\t\t\tSEL getter = sel_getUid(getterName);\n\t\t\tfree(getterName);\n\t\t\tif (getter) return getter;\n\t\t}\n\t}\n\n\tconst char *propertyName = property ? property_getName(property) : name;\n\treturn sel_registerName(propertyName);\n}\n\nstatic SEL setterForProperty(objc_property_t property, const char *name)\n{\n\tif (property) {\n\t\tchar *setterName = property_copyAttributeValue(property, \"S\");\n\t\tif (setterName) {\n\t\t\tSEL setter = sel_getUid(setterName);\n\t\t\tfree(setterName);\n\t\t\tif (setter) return setter;\n\t\t}\n\t}\n\n\tconst char *propertyName = property ? property_getName(property) : name;\n\treturn selectorWithPattern(\"set\", propertyName, \":\");\n}\n\nstatic inline SEL prefixedSelector(SEL original) {\n\treturn selectorWithPattern(\"a2_\", sel_getName(original), NULL);\n}\n\n#pragma mark -\n\ntypedef struct {\n\tSEL setter;\n\tSEL a2_setter;\n\tSEL getter;\n} A2BlockDelegateInfo;\n\nstatic NSUInteger A2BlockDelegateInfoSize(const void *__unused item) {\n\treturn sizeof(A2BlockDelegateInfo);\n}\n\nstatic NSString *A2BlockDelegateInfoDescribe(const void *__unused item) {\n\tif (!item) { return nil; }\n\tconst A2BlockDelegateInfo *info = item;\n\treturn [NSString stringWithFormat:@\"(setter: %s, getter: %s)\", sel_getName(info->setter), sel_getName(info->getter)];\n}\n\nstatic inline A2DynamicDelegate *getDynamicDelegate(NSObject *delegatingObject, Protocol *protocol, const A2BlockDelegateInfo *info, BOOL ensuring) {\n\tA2DynamicDelegate *dynamicDelegate = [delegatingObject bk_dynamicDelegateForProtocol:a2_protocolForDelegatingObject(delegatingObject, protocol)];\n\n\tif (!info || !info->setter || !info->getter) {\n\t\treturn dynamicDelegate;\n\t}\n\n\tif (!info->a2_setter && !info->setter) { return dynamicDelegate; }\n\n\tid (*getterDispatch)(id, SEL) = (id (*)(id, SEL)) objc_msgSend;\n\tid originalDelegate = getterDispatch(delegatingObject, info->getter);\n\n\tif (bk_object_isKindOfClass(originalDelegate, A2DynamicDelegate.class)) { return dynamicDelegate; }\n\n\tvoid (*setterDispatch)(id, SEL, id) = (void (*)(id, SEL, id)) objc_msgSend;\n\tsetterDispatch(delegatingObject, info->a2_setter ?: info->setter, dynamicDelegate);\n\n\treturn dynamicDelegate;\n}\n\ntypedef A2DynamicDelegate *(^A2GetDynamicDelegateBlock)(NSObject *, BOOL);\n\n@interface A2DynamicDelegate ()\n\n@property (nonatomic, weak, readwrite) id realDelegate;\n\n@end\n\n#pragma mark -\n\n@implementation NSObject (A2BlockDelegate)\n\n#pragma mark Helpers\n\n+ (NSMapTable *)bk_delegateInfoByProtocol:(BOOL)createIfNeeded\n{\n\tNSMapTable *delegateInfo = objc_getAssociatedObject(self, _cmd);\n\tif (delegateInfo || !createIfNeeded) { return delegateInfo; }\n\n\tNSPointerFunctions *protocols = [NSPointerFunctions pointerFunctionsWithOptions:NSPointerFunctionsOpaqueMemory|NSPointerFunctionsObjectPointerPersonality];\n\tNSPointerFunctions *infoStruct = [NSPointerFunctions pointerFunctionsWithOptions:NSPointerFunctionsMallocMemory|NSPointerFunctionsStructPersonality|NSPointerFunctionsCopyIn];\n\tinfoStruct.sizeFunction = A2BlockDelegateInfoSize;\n\tinfoStruct.descriptionFunction = A2BlockDelegateInfoDescribe;\n\n\tdelegateInfo = [[NSMapTable alloc] initWithKeyPointerFunctions:protocols valuePointerFunctions:infoStruct capacity:0];\n\tobjc_setAssociatedObject(self, _cmd, delegateInfo, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\n\treturn delegateInfo;\n}\n\n+ (const A2BlockDelegateInfo *)bk_delegateInfoForProtocol:(Protocol *)protocol\n{\n\tA2BlockDelegateInfo *infoAsPtr = NULL;\n\tClass cls = self;\n\twhile ((infoAsPtr == NULL || infoAsPtr->getter == NULL) && cls != nil && cls != NSObject.class) {\n\t\tNSMapTable *map = [cls bk_delegateInfoByProtocol:NO];\n\t\tinfoAsPtr = (__bridge void *)[map objectForKey:protocol];\n\t\tcls = [cls superclass];\n\t}\n\tNSCAssert(infoAsPtr != NULL, @\"Class %@ not assigned dynamic delegate for protocol %@\", NSStringFromClass(self), NSStringFromProtocol(protocol));\n\treturn infoAsPtr;\n}\n\n#pragma mark Linking block properties\n\n+ (void)bk_linkDataSourceMethods:(NSDictionary *)dictionary\n{\n\t[self bk_linkProtocol:a2_dataSourceProtocol(self) methods:dictionary];\n}\n\n+ (void)bk_linkDelegateMethods:(NSDictionary *)dictionary\n{\n\t[self bk_linkProtocol:a2_delegateProtocol(self) methods:dictionary];\n}\n\n+ (void)bk_linkProtocol:(Protocol *)protocol methods:(NSDictionary *)dictionary\n{\n\t[dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *propertyName, NSString *selectorName, BOOL *stop) {\n\t\tconst char *name = propertyName.UTF8String;\n\t\tobjc_property_t property = class_getProperty(self, name);\n\t\tNSCAssert(property, @\"Property \\\"%@\\\" does not exist on class %s\", propertyName, class_getName(self));\n\n\t\tchar *dynamic = property_copyAttributeValue(property, \"D\");\n\t\tNSCAssert2(dynamic, @\"Property \\\"%@\\\" on class %s must be backed with \\\"@dynamic\\\"\", propertyName, class_getName(self));\n\t\tfree(dynamic);\n\n\t\tchar *copy = property_copyAttributeValue(property, \"C\");\n\t\tNSCAssert2(copy, @\"Property \\\"%@\\\" on class %s must be defined with the \\\"copy\\\" attribute\", propertyName, class_getName(self));\n\t\tfree(copy);\n\n\t\tSEL selector = NSSelectorFromString(selectorName);\n\t\tSEL getter = getterForProperty(property, name);\n\t\tSEL setter = setterForProperty(property, name);\n\n\t\tif (class_respondsToSelector(self, setter) || class_respondsToSelector(self, getter)) { return; }\n\n\t\tconst A2BlockDelegateInfo *info = [self bk_delegateInfoForProtocol:protocol];\n\n\t\tIMP getterImplementation = imp_implementationWithBlock(^(NSObject *delegatingObject) {\n\t\t\tA2DynamicDelegate *delegate = getDynamicDelegate(delegatingObject, protocol, info, NO);\n\t\t\treturn [delegate blockImplementationForMethod:selector];\n\t\t});\n\n\t\tif (!class_addMethod(self, getter, getterImplementation, \"@@:\")) {\n\t\t\tNSCAssert(NO, @\"Could not implement getter for \\\"%@\\\" property.\", propertyName);\n\t\t}\n\n\t\tIMP setterImplementation = imp_implementationWithBlock(^(NSObject *delegatingObject, id block) {\n\t\t\tA2DynamicDelegate *delegate = getDynamicDelegate(delegatingObject, protocol, info, YES);\n\t\t\t[delegate implementMethod:selector withBlock:block];\n\t\t});\n\n\t\tif (!class_addMethod(self, setter, setterImplementation, \"v@:@\")) {\n\t\t\tNSCAssert(NO, @\"Could not implement setter for \\\"%@\\\" property.\", propertyName);\n\t\t}\n\t}];\n}\n\n#pragma mark Dynamic Delegate Replacement\n\n+ (void)bk_registerDynamicDataSource\n{\n\t[self bk_registerDynamicDelegateNamed:@\"dataSource\" forProtocol:a2_dataSourceProtocol(self)];\n}\n+ (void)bk_registerDynamicDelegate\n{\n\t[self bk_registerDynamicDelegateNamed:@\"delegate\" forProtocol:a2_delegateProtocol(self)];\n}\n\n+ (void)bk_registerDynamicDataSourceNamed:(NSString *)dataSourceName\n{\n\t[self bk_registerDynamicDelegateNamed:dataSourceName forProtocol:a2_dataSourceProtocol(self)];\n}\n+ (void)bk_registerDynamicDelegateNamed:(NSString *)delegateName\n{\n\t[self bk_registerDynamicDelegateNamed:delegateName forProtocol:a2_delegateProtocol(self)];\n}\n\n+ (void)bk_registerDynamicDelegateNamed:(NSString *)delegateName forProtocol:(Protocol *)protocol\n{\n\tNSMapTable *propertyMap = [self bk_delegateInfoByProtocol:YES];\n\tA2BlockDelegateInfo *infoAsPtr = (__bridge void *)[propertyMap objectForKey:protocol];\n\tif (infoAsPtr != NULL) { return; }\n\n\tconst char *name = delegateName.UTF8String;\n\tobjc_property_t property = class_getProperty(self, name);\n\tSEL setter = setterForProperty(property, name);\n\tSEL a2_setter = prefixedSelector(setter);\n\tSEL getter = getterForProperty(property, name);\n\n\tA2BlockDelegateInfo info = {\n\t\tsetter, a2_setter, getter\n\t};\n\n\t[propertyMap setObject:(__bridge id)&info forKey:protocol];\n\tinfoAsPtr = (__bridge void *)[propertyMap objectForKey:protocol];\n\n\tIMP setterImplementation = imp_implementationWithBlock(^(NSObject *delegatingObject, id delegate) {\n\t\tA2DynamicDelegate *dynamicDelegate = getDynamicDelegate(delegatingObject, protocol, infoAsPtr, YES);\n\t\tif ([delegate isEqual:dynamicDelegate]) {\n\t\t\tdelegate = nil;\n\t\t}\n\t\tdynamicDelegate.realDelegate = delegate;\n\t});\n\n\tif (!swizzleWithIMP(self, setter, a2_setter, setterImplementation, \"v@:@\", YES)) {\n\t\tbzero(infoAsPtr, sizeof(A2BlockDelegateInfo));\n\t\treturn;\n\t}\n\n\tif (![self instancesRespondToSelector:getter]) {\n\t\tIMP getterImplementation = imp_implementationWithBlock(^(NSObject *delegatingObject) {\n\t\t\treturn [delegatingObject bk_dynamicDelegateForProtocol:a2_protocolForDelegatingObject(delegatingObject, protocol)];\n\t\t});\n\n\t\taddMethodWithIMP(self, getter, NULL, getterImplementation, \"@@:\", NO);\n\t}\n}\n\n- (id)bk_ensuredDynamicDelegate\n{\n\tProtocol *protocol = a2_delegateProtocol(self.class);\n\treturn [self bk_ensuredDynamicDelegateForProtocol:protocol];\n}\n\n- (id)bk_ensuredDynamicDelegateForProtocol:(Protocol *)protocol\n{\n\tconst A2BlockDelegateInfo *info = [self.class bk_delegateInfoForProtocol:protocol];\n\treturn getDynamicDelegate(self, protocol, info, YES);\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h",
    "content": "//\n//  NSObject+A2DynamicDelegate.h\n//  BlocksKit\n//\n\n#import <BlocksKit/A2DynamicDelegate.h>\n#import <Foundation/Foundation.h>\n\n/** The A2DynamicDelegate category to NSObject provides the primary interface\n by which dynamic delegates are generated for a given object. */\n@interface NSObject (A2DynamicDelegate)\n\n/** Creates or gets a dynamic data source for the reciever.\n\n A2DynamicDelegate assumes a protocol name `FooBarDataSource`\n for instances of class `FooBar`. The object is given a strong\n attachment to the reciever, and is automatically deallocated\n when the reciever is released.\n\n If the user implements a `A2DynamicFooBarDataSource` subclass\n of A2DynamicDelegate, its implementation of any method\n will be used over the block. If the block needs to be used,\n it can be called from within the custom\n implementation using blockImplementationForMethod:.\n\n @see <A2DynamicDelegate>blockImplementationForMethod:\n @return A dynamic data source.\n */\n- (id)bk_dynamicDataSource;\n\n/** Creates or gets a dynamic delegate for the reciever.\n\n A2DynamicDelegate assumes a protocol name `FooBarDelegate`\n for instances of class `FooBar`. The object is given a strong\n attachment to the reciever, and is automatically deallocated\n when the reciever is released.\n\n If the user implements a `A2DynamicFooBarDelegate` subclass\n of A2DynamicDelegate, its implementation of any method\n will be used over the block. If the block needs to be used,\n it can be called from within the custom\n implementation using blockImplementationForMethod:.\n\n @see <A2DynamicDelegate>blockImplementationForMethod:\n @return A dynamic delegate.\n */\n- (id)bk_dynamicDelegate;\n\n/** Creates or gets a dynamic protocol implementation for\n the reciever. The designated initializer.\n\n The object is given a strong attachment to the reciever,\n and is automatically deallocated when the reciever is released.\n\n If the user implements a subclass of A2DynamicDelegate prepended\n with `A2Dynamic`, such as `A2DynamicFooProvider`, its\n implementation of any method will be used over the block.\n If the block needs to be used, it can be called from within the\n custom implementation using blockImplementationForMethod:.\n\n @param protocol A custom protocol.\n @return A dynamic protocol implementation.\n @see <A2DynamicDelegate>blockImplementationForMethod:\n */\n- (id)bk_dynamicDelegateForProtocol:(Protocol *)protocol;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.m",
    "content": "//\n//  NSObject+A2DynamicDelegate.m\n//  BlocksKit\n//\n\n#import <objc/runtime.h>\n#import \"NSObject+A2DynamicDelegate.h\"\n\nextern Protocol *a2_dataSourceProtocol(Class cls);\nextern Protocol *a2_delegateProtocol(Class cls);\n\nstatic Class a2_dynamicDelegateClass(Class cls, NSString *suffix)\n{\n\twhile (cls) {\n\t\tNSString *className = [NSString stringWithFormat:@\"A2Dynamic%@%@\", NSStringFromClass(cls), suffix];\n\t\tClass ddClass = NSClassFromString(className);\n\t\tif (ddClass) return ddClass;\n\n\t\tcls = class_getSuperclass(cls);\n\t}\n\n\treturn [A2DynamicDelegate class];\n}\n\nstatic dispatch_queue_t a2_backgroundQueue(void)\n{\n\tstatic dispatch_once_t onceToken;\n\tstatic dispatch_queue_t backgroundQueue = nil;\n\tdispatch_once(&onceToken, ^{\n\t\tbackgroundQueue = dispatch_queue_create(\"BlocksKit.DynamicDelegate.Queue\", DISPATCH_QUEUE_SERIAL);\n\t});\n\treturn backgroundQueue;\n}\n\n@implementation NSObject (A2DynamicDelegate)\n\n- (id)bk_dynamicDataSource\n{\n\tProtocol *protocol = a2_dataSourceProtocol([self class]);\n\tClass class = a2_dynamicDelegateClass([self class], @\"DataSource\");\n\treturn [self bk_dynamicDelegateWithClass:class forProtocol:protocol];\n}\n- (id)bk_dynamicDelegate\n{\n\tProtocol *protocol = a2_delegateProtocol([self class]);\n\tClass class = a2_dynamicDelegateClass([self class], @\"Delegate\");\n\treturn [self bk_dynamicDelegateWithClass:class forProtocol:protocol];\n}\n- (id)bk_dynamicDelegateForProtocol:(Protocol *)protocol\n{\n\tClass class = [A2DynamicDelegate class];\n\tNSString *protocolName = NSStringFromProtocol(protocol);\n\tif ([protocolName hasSuffix:@\"Delegate\"]) {\n\t\tclass = a2_dynamicDelegateClass([self class], @\"Delegate\");\n\t} else if ([protocolName hasSuffix:@\"DataSource\"]) {\n\t\tclass = a2_dynamicDelegateClass([self class], @\"DataSource\");\n\t}\n\n\treturn [self bk_dynamicDelegateWithClass:class forProtocol:protocol];\n}\n- (id)bk_dynamicDelegateWithClass:(Class)cls forProtocol:(Protocol *)protocol\n{\n\t/**\n\t * Storing the dynamic delegate as an associated object of the delegating\n\t * object not only allows us to later retrieve the delegate, but it also\n\t * creates a strong relationship to the delegate. Since delegates are weak\n\t * references on the part of the delegating object, a dynamic delegate\n\t * would be deallocated immediately after its declaring scope ends.\n\t * Therefore, this strong relationship is required to ensure that the\n\t * delegate's lifetime is at least as long as that of the delegating object.\n\t **/\n\n\t__block A2DynamicDelegate *dynamicDelegate;\n\n\tdispatch_sync(a2_backgroundQueue(), ^{\n\t\tdynamicDelegate = objc_getAssociatedObject(self, (__bridge const void *)protocol);\n\n\t\tif (!dynamicDelegate)\n\t\t{\n\t\t\tdynamicDelegate = [[cls alloc] initWithProtocol:protocol];\n\t\t\tobjc_setAssociatedObject(self, (__bridge const void *)protocol, dynamicDelegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t\t}\n\t});\n\n\treturn dynamicDelegate;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h",
    "content": "//\n//  MFMailComposeViewController+BlocksKit.h\n//  BlocksKit\n//\n\n#import <MessageUI/MessageUI.h>\n\n/** MFMailComposeViewController with block callbacks.\n\n If you provide a completion handler to an instance of\n MFMailComposeViewController but do not implement a delegate callback for\n mailComposeController:didFinishWithResult:error:, the mail compose view\n controller will automatically be dismissed if it was launched modally.\n\n Created by [Igor Evsukov](https://github.com/evsukov89) and contributed to\n BlocksKit.\n\n @warning MFMailComposeViewController is only available on a platform with MessageUI.\n */\n@interface MFMailComposeViewController (BlocksKit)\n\n/**  The block fired on the dismissal of the mail composition interface.\n\n This block callback is an analog for the\n mailComposeController:didFinishWithResult:error:method\n of MFMailComposeViewControllerDelegate.\n*/\n@property (nonatomic, copy, setter = bk_setCompletionBlock:) void (^bk_completionBlock)(MFMailComposeViewController *controller, MFMailComposeResult result, NSError *error);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.m",
    "content": "//\n//  MFMailComposeViewController+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"A2DynamicDelegate.h\"\n#import \"MFMailComposeViewController+BlocksKit.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n\n#pragma mark Custom delegate\n\n@interface A2DynamicMFMailComposeViewControllerDelegate : A2DynamicDelegate <MFMailComposeViewControllerDelegate>\n\n@end\n\n@implementation A2DynamicMFMailComposeViewControllerDelegate\n\n- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error\n{\n\tid realDelegate = self.realDelegate;\n\tBOOL shouldDismiss = (realDelegate && [realDelegate respondsToSelector:@selector(mailComposeController:didFinishWithResult:error:)]);\n\tif (shouldDismiss)\n\t\t[realDelegate mailComposeController:controller didFinishWithResult:result error:error];\n\n\tvoid (^block)(MFMailComposeViewController *, MFMailComposeResult, NSError *) = [self blockImplementationForMethod:_cmd];\n\tif (shouldDismiss) {\n\t\tif (block) block(controller, result, error);\n\t} else {\n#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000\n\t\t__weak typeof(controller) weakController = controller;\n\t\t[controller dismissViewControllerAnimated:YES completion:^{\n\t\t\ttypeof(&*weakController) strongController = weakController;\n\t\t\tif (block) block(strongController, result, error);\n\t\t}];\n#else\n#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000\n\t\tif ([controller respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {\n\t\t\t__weak typeof(controller) weakController = controller;\n\t\t\t[controller dismissViewControllerAnimated:YES completion:^{\n\t\t\t\ttypeof(&*weakController) strongController = weakController;\n\t\t\t\tif (block) block(strongController, result, error);\n\t\t\t}];\n\t\t} else {\n#endif\n\t\t\t[controller dismissModalViewControllerAnimated:YES];\n\t\t\tif (block) block(controller, result, error);\n#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000\n\t\t}\n#endif\n#endif\n\t}\n}\n\n@end\n\n#pragma mark Category\n\n@implementation MFMailComposeViewController (BlocksKit)\n\n@dynamic bk_completionBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegateNamed:@\"mailComposeDelegate\"];\n\t\t[self bk_linkDelegateMethods:@{ @\"bk_completionBlock\": @\"mailComposeController:didFinishWithResult:error:\" }];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h",
    "content": "//\n//  MFMessageComposeViewController+BlocksKit.h\n//  BlocksKit\n//\n\n#import <MessageUI/MessageUI.h>\n\n/** MFMessageComposeViewController with block callback in addition to delegation.\n \n If you provide a completion handler to an instance of\n MFMessageComposeViewController but do not implement a delegate callback for\n messageComposeViewController:didFinishWithResult:error:, the message compose\n view controller will automatically be dismissed if it was launched modally.\n\n Created by [Igor Evsukov](https://github.com/evsukov89) and contributed to\n BlocksKit.\n\n @warning MFMessageComposeViewController is only available on a platform with MessageUI.\n*/\n@interface MFMessageComposeViewController (BlocksKit)\n\n/** The block fired on the dismissal of the SMS composition interface.\n \n This block callback is an analog for the\n messageComposeViewController:didFinishWithResult: method\n of MFMessageComposeViewControllerDelegate.\n */\n@property (nonatomic, copy, setter = bk_setCompletionBlock:) void (^bk_completionBlock)(MFMessageComposeViewController *controller, MessageComposeResult result);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.m",
    "content": "//\n//  MFMessageComposeViewController+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"A2DynamicDelegate.h\"\n#import \"MFMessageComposeViewController+BlocksKit.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n\n#pragma mark Custom delegate\n\n@interface A2DynamicMFMessageComposeViewControllerDelegate : A2DynamicDelegate <MFMessageComposeViewControllerDelegate>\n\n@end\n\n@implementation A2DynamicMFMessageComposeViewControllerDelegate\n\n- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result\n{\n\tid realDelegate = self.realDelegate;\n\tBOOL shouldDismiss = (realDelegate && [realDelegate respondsToSelector:@selector(messageComposeViewController:didFinishWithResult:)]);\n\tif (shouldDismiss)\n\t\t[realDelegate messageComposeViewController:controller didFinishWithResult:result];\n\n\tvoid (^block)(MFMessageComposeViewController *, MessageComposeResult) = [self blockImplementationForMethod:_cmd];\n\tif (shouldDismiss) {\n\t\tif (block) block(controller, result);\n\t} else {\n#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000\n\t\t__weak typeof(controller) weakController = controller;\n\t\t[controller dismissViewControllerAnimated:YES completion:^{\n\t\t\ttypeof(&*weakController) strongController = weakController;\n\t\t\tif (block) block(strongController, result);\n\t\t}];\n#else\n#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000\n\t\tif ([controller respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {\n\t\t\t__weak typeof(controller) weakController = controller;\n\t\t\t[controller dismissViewControllerAnimated:YES completion:^{\n\t\t\t\ttypeof(&*weakController) strongController = weakController;\n\t\t\t\tif (block) block(strongController, result);\n\t\t\t}];\n\t\t} else {\n#endif\n\t\t\t[controller dismissModalViewControllerAnimated:YES];\n\t\t\tif (block) block(controller, result);\n#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000\n\t\t}\n#endif\n#endif\n\t}\n}\n\n@end\n\n#pragma mark - Category\n\n@implementation MFMessageComposeViewController (BlocksKit)\n\n@dynamic bk_completionBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegateNamed:@\"messageComposeDelegate\"];\n\t\t[self bk_linkDelegateMethods:@{ @\"bk_completionBlock\": @\"messageComposeViewController:didFinishWithResult:\" }];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIActionSheet+BlocksKit.h",
    "content": "//\n//  UIActionSheet+BlocksKit.h\n//  BlocksKit\n//\n\n#import <UIKit/UIKit.h>\n\n/** UIActionSheet without delegates!\n\n This set of extensions and convenience classes allows\n for an instance of UIActionSheet without the implementation\n of a delegate.  Any time you instantiate a UIActionSheet\n using the methods here, you must add buttons using\n addButtonWithTitle:handler: to make sure nothing breaks.\n\n A typical invocation might go like this:\n\t UIActionSheet *testSheet = [UIActionSheet actionSheetWithTitle:@\"Please select one.\"];\n\t [testSheet addButtonWithTitle:@\"Zip\" handler:^{ NSLog(@\"Zip!\"); }];\n\t [testSheet addButtonWithTitle:@\"Zap\" handler:^{ NSLog(@\"Zap!\"); }];\n\t [testSheet addButtonWithTitle:@\"Zop\" handler:^{ NSLog(@\"Zop!\"); }];\n\t [testSheet setDestructiveButtonWithTitle:@\"No!\" handler:^{ NSLog(@\"Fine!\"); }];\n\t [testSheet setCancelButtonWithTitle:nil handler:^{ NSLog(@\"Never mind, then!\"); }];\n\t [testSheet showInView:self.view];\n\n Includes code by the following:\n\n - [Landon Fuller](http://landonf.bikemonkey.org), \"Using Blocks\".\n - [Peter Steinberger](https://github.com/steipete)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @warning UIActionSheet is only available on a platform with UIKit.\n */\n@interface UIActionSheet (BlocksKit) <UIActionSheetDelegate>\n\n///-----------------------------------\n/// @name Creating action sheets\n///-----------------------------------\n\n/** Creates and returns a new action sheet with only a title and cancel button.\n\n @param title The header of the action sheet.\n @return A newly created action sheet.\n */\n+ (id)bk_actionSheetWithTitle:(NSString *)title;\n\n/** Returns a configured action sheet with only a title and cancel button.\n\n @param title The header of the action sheet.\n @return An instantiated actionSheet.\n */\n- (id)bk_initWithTitle:(NSString *)title NS_REPLACES_RECEIVER;\n\n///-----------------------------------\n/// @name Adding buttons\n///-----------------------------------\n\n/** Add a new button with an associated code block.\n\n @param title The text of the button.\n @param block A block of code.\n */\n- (NSInteger)bk_addButtonWithTitle:(NSString *)title handler:(void (^)(void))block;\n\n/** Set the destructive (red) button with an associated code block.\n \n @warning Because buttons cannot be removed from an action sheet,\n be aware that the effects of calling this method are cumulative.\n Previously added destructive buttons will become normal buttons.\n\n @param title The text of the button.\n @param block A block of code.\n */\n- (NSInteger)bk_setDestructiveButtonWithTitle:(NSString *)title handler:(void (^)(void))block;\n\n/** Set the title and trigger of the cancel button.\n \n `block` can be set to `nil`, but this is generally useless as\n the cancel button is configured already to do nothing.\n \n iPhone users will have the button shown regardless; if the title is\n set to `nil`, it will automatically be localized.\n \n @param title The text of the button.\n @param block A block of code.\n */\n- (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block;\n\n///-----------------------------------\n/// @name Altering actions\n///-----------------------------------\n\n/** Sets the block that is to be fired when a button is pressed.\n \n @param block A code block, or nil to set no response.\n @param index The index of a button already added to the action sheet.\n*/\n- (void)bk_setHandler:(void (^)(void))block forButtonAtIndex:(NSInteger)index;\n\n/** The block that is to be fired when a button is pressed.\n \n @param index The index of a button already added to the action sheet.\n @return A code block, or nil if no block is assigned.\n */\n- (void (^)(void))bk_handlerForButtonAtIndex:(NSInteger)index;\n\n/** The block to be fired when the action sheet is dismissed with the cancel\n button and/or action.\n\n This property performs the same action as setCancelButtonWithTitle:handler:\n but with `title` set to nil.  Contrary to setCancelButtonWithTitle:handler:,\n you can set this property multiple times and multiple cancel buttons will\n not be generated.\n */\n@property (nonatomic, copy, setter = bk_setCancelBlock:) void (^bk_cancelBlock)(void);\n\n/** The block to be fired before the action sheet will show. */\n@property (nonatomic, copy, setter = bk_setWillShowBlock:) void (^bk_willShowBlock)(UIActionSheet *actionSheet);\n\n/** The block to be fired when the action sheet shows. */\n@property (nonatomic, copy, setter = bk_setDidShowBlock:) void (^bk_didShowBlock)(UIActionSheet *actionSheet);\n\n/** The block to be fired before the action sheet will dismiss. */\n@property (nonatomic, copy, setter = bk_setWillDismissBlock:) void (^bk_willDismissBlock)(UIActionSheet *actionSheet, NSInteger buttonIndex);\n\n/** The block to be fired after the action sheet dismisses. */\n@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIActionSheet *actionSheet, NSInteger buttonIndex);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIActionSheet+BlocksKit.m",
    "content": "//\n//  UIActionSheet+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"NSObject+A2BlockDelegate.h\"\n#import \"NSObject+A2DynamicDelegate.h\"\n#import \"UIActionSheet+BlocksKit.h\"\n\n#pragma mark Custom delegate\n\n@interface A2DynamicUIActionSheetDelegate : A2DynamicDelegate <UIActionSheetDelegate>\n\n@end\n\n@implementation A2DynamicUIActionSheetDelegate\n\n- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(actionSheet:clickedButtonAtIndex:)])\n\t\t[realDelegate actionSheet:actionSheet clickedButtonAtIndex:buttonIndex];\n\t\n\tvoid (^block)(void) = self.handlers[@(buttonIndex)];\n\tif (block) block();\n}\n\n- (void)willPresentActionSheet:(UIActionSheet *)actionSheet\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(willPresentActionSheet:)])\n\t\t[realDelegate willPresentActionSheet:actionSheet];\n\n\tvoid (^block)(UIActionSheet *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(actionSheet);\n}\n\n- (void)didPresentActionSheet:(UIActionSheet *)actionSheet\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(didPresentActionSheet:)])\n\t\t[realDelegate didPresentActionSheet:actionSheet];\n\t\n\tvoid (^block)(UIActionSheet *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(actionSheet);\n}\n\n- (void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(actionSheet:willDismissWithButtonIndex:)])\n\t\t[realDelegate actionSheet:actionSheet willDismissWithButtonIndex:buttonIndex];\n\t\n\tvoid (^block)(UIActionSheet *, NSInteger) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(actionSheet, buttonIndex);\n}\n\n- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(actionSheet:didDismissWithButtonIndex:)])\n\t\t[realDelegate actionSheet:actionSheet didDismissWithButtonIndex:buttonIndex];\n\n\tvoid (^block)(UIActionSheet *, NSInteger) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(actionSheet, buttonIndex);\n}\n\n- (void)actionSheetCancel:(UIActionSheet *)actionSheet\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(actionSheetCancel:)])\n\t\t[realDelegate actionSheetCancel:actionSheet];\n\t\n\tvoid (^block)(void) = actionSheet.bk_cancelBlock;\n\tif (block) block();\n}\n\n@end\n\n#pragma mark - Category\n\n@implementation UIActionSheet (BlocksKit)\n\n@dynamic bk_willShowBlock, bk_didShowBlock, bk_willDismissBlock, bk_didDismissBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegate];\n\t\t[self bk_linkDelegateMethods:@{\n\t\t\t@\"bk_willShowBlock\": @\"willPresentActionSheet:\",\n\t\t\t@\"bk_didShowBlock\": @\"didPresentActionSheet:\",\n\t\t\t@\"bk_willDismissBlock\": @\"actionSheet:willDismissWithButtonIndex:\",\n\t\t\t@\"bk_didDismissBlock\": @\"actionSheet:didDismissWithButtonIndex:\"\n\t\t}];\n\t}\n}\n\n#pragma mark Initializers\n\n+ (id)bk_actionSheetWithTitle:(NSString *)title {\n\treturn [[[self class] alloc] bk_initWithTitle:title];\n}\n\n- (id)bk_initWithTitle:(NSString *)title {\n\tself = [self initWithTitle:title delegate:self.bk_dynamicDelegate cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];\n\tif (!self) { return nil; }\n\tself.delegate = self.bk_dynamicDelegate;\n\treturn self;\n}\n\n#pragma mark Actions\n\n- (NSInteger)bk_addButtonWithTitle:(NSString *)title handler:(void (^)(void))block {\n\tNSAssert(title.length, @\"A button without a title cannot be added to an action sheet.\");\n\tNSInteger index = [self addButtonWithTitle:title];\n\t[self bk_setHandler:block forButtonAtIndex:index];\n\treturn index;\n}\n\n- (NSInteger)bk_setDestructiveButtonWithTitle:(NSString *)title handler:(void (^)(void))block {\n\tNSInteger index = [self bk_addButtonWithTitle:title handler:block];\n\tself.destructiveButtonIndex = index;\n\treturn index;\n}\n\t\t\t\t\t\t\t\t\t\t\t\n- (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block {\n\tNSInteger cancelButtonIndex = self.cancelButtonIndex;\n\n\tif ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) && !title.length)\n\t\ttitle = NSLocalizedString(@\"Cancel\", nil);\n\n\tif (title.length)\n\t\tcancelButtonIndex = [self addButtonWithTitle:title];\n\n\t[self bk_setHandler:block forButtonAtIndex:cancelButtonIndex];\n\tself.cancelButtonIndex = cancelButtonIndex;\n\treturn cancelButtonIndex;\n}\n\n#pragma mark Properties\n\n- (void)bk_setHandler:(void (^)(void))block forButtonAtIndex:(NSInteger)index {\n\tA2DynamicUIActionSheetDelegate *delegate = self.bk_ensuredDynamicDelegate;\n\n\tif (block) {\n\t\tdelegate.handlers[@(index)] = [block copy];\n\t} else {\n\t\t[delegate.handlers removeObjectForKey:@(index)];\n\t}\n}\n\n- (void (^)(void))bk_handlerForButtonAtIndex:(NSInteger)index\n{\n\treturn [self.bk_dynamicDelegate handlers][@(index)];\n}\n\n- (void (^)(void))bk_cancelBlock\n{\n\treturn [self bk_handlerForButtonAtIndex:self.cancelButtonIndex];\n}\n\n- (void)bk_setCancelBlock:(void (^)(void))block\n{\n\t[self bk_setHandler:block forButtonAtIndex:self.cancelButtonIndex];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIAlertView+BlocksKit.h",
    "content": "//\n//  UIAlertView+BlocksKit.h\n//  BlocksKit\n//\n\n#import <UIKit/UIKit.h>\n\n/** UIAlertView without delegates!\n\n This set of extensions and convenience classes allows\n for an instance of UIAlertView without the implementation\n of a delegate.  Any time you instantiate a UIAlertView\n using the methods here, you must add buttons using\n addButtonWithTitle:handler:otherwise nothing will happen.\n\n A typical invocation will go like this:\n\t UIAlertView *testView = [UIAlertView alertViewWithTitle:@\"Application Alert\" message:@\"This app will explode in 42 seconds.\"];\n\t [testView setCancelButtonWithTitle:@\"Oh No!\" handler:^{ NSLog(@\"Boom!\"); }];\n\t [testView show];\n\n A more traditional, and more useful, modal dialog looks like so:\n\tUIAlertView *testView = [UIAlertView alertViewWithTitle:@\"Very important!\" message:@\"Do you like chocolate?\"];\n\t[testView addButtonWithTitle:@\"Yes\" handler:^{ NSLog(@\"Yay!\"); }];\n\t[testView addButtonWithTitle:@\"No\" handler:^{ NSLog(@\"We hate you.\"); }];\n\t[testView show];\n\n Includes code by the following:\n\n - [Landon Fuller](http://landonf.bikemonkey.org), \"Using Blocks\".\n - [Peter Steinberger](https://github.com/steipete)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @warning UIAlertView is only available on a platform with UIKit.\n */\n@interface UIAlertView (BlocksKit)\n\n///-----------------------------------\n/// @name Creating alert views\n///-----------------------------------\n\n/** Creates and shows a new alert view with only a title, message, and cancel button.\n \n @param title The title of the alert view.\n @param message The message content of the alert.\n @param cancelButtonTitle The title of the cancel button. If both cancelButtonTitle and otherButtonTitles are empty or nil, defaults to a \n @param otherButtonTitles Titles of additional buttons to add to the receiver.\n @param block A block of code to be fired on the dismissal of the alert view.\n \n @return The UIAlertView.\n */\n+ (UIAlertView*)bk_showAlertViewWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray *)otherButtonTitles handler:(void (^)(UIAlertView *alertView, NSInteger buttonIndex))block;\n\n/** Creates and returns a new alert view with only a title and cancel button.\n\n @param title The title of the alert view.\n @return A newly created alert view.\n */\n+ (id)bk_alertViewWithTitle:(NSString *)title;\n\n/** Creates and returns a new alert view with only a title, message, and cancel button.\n\n @param title The title of the alert view.\n @param message The message content of the alert.\n @return A newly created alert view.\n */\n+ (id)bk_alertViewWithTitle:(NSString *)title message:(NSString *)message;\n\n/** Returns a configured alert view with only a title, message, and cancel button.\n \n @param title The title of the alert view.\n @param message The message content of the alert.\n @return An instantiated alert view.\n */\n- (id)bk_initWithTitle:(NSString *)title message:(NSString *)message NS_REPLACES_RECEIVER;\n\n///-----------------------------------\n/// @name Adding buttons\n///-----------------------------------\n\n/** Add a new button with an associated code block.\n \n @param title The text of the button.\n @param block A block of code.\n */\n- (NSInteger)bk_addButtonWithTitle:(NSString *)title handler:(void (^)(void))block;\n\n/** Set the title and trigger of the cancel button.\n \n @param title The text of the button.\n @param block A block of code.\n */\n- (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block;\n\n///-----------------------------------\n/// @name Altering actions\n///-----------------------------------\n\n/** Sets the block that is to be fired when a button is pressed.\n \n @param block A code block, or nil to set no response.\n @param index The index of a button already added to the action sheet.\n */\n- (void)bk_setHandler:(void (^)(void))block forButtonAtIndex:(NSInteger)index;\n\n/** The block that is to be fired when a button is pressed.\n \n @param index The index of the button already added to the alert view.\n @return A code block, or nil if no block yet assigned.\n */\n- (void (^)(void))bk_handlerForButtonAtIndex:(NSInteger)index;\n\n/** The block to be fired when the action sheet is dismissed with the cancel\n button.\n\n Contrary to setCancelButtonWithTitle:handler:, you can set this\n property multiple times but multiple cancel buttons will\n not be generated.\n */\n@property (nonatomic, copy, setter = bk_setCancelBlock:) void (^bk_cancelBlock)(void);\n\n/** The block to be fired before the alert view will show. */\n@property (nonatomic, copy, setter = bk_setWillShowBlock:) void (^bk_willShowBlock)(UIAlertView *alertView);\n\n/** The block to be fired when the alert view shows. */\n@property (nonatomic, copy, setter = bk_setDidShowBlock:) void (^bk_didShowBlock)(UIAlertView *alertView);\n\n/** The block to be fired before the alert view will dismiss. */\n@property (nonatomic, copy, setter = bk_setWillDismissBlock:) void (^bk_willDismissBlock)(UIAlertView *alertView, NSInteger buttonIndex);\n\n/** The block to be fired after the alert view dismisses. */\n@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIAlertView *alertView, NSInteger buttonIndex);\n\n/** The block to be fired to determine whether the first non-cancel should be enabled */\n@property (nonatomic, copy, setter = bk_SetShouldEnableFirstOtherButtonBlock:) BOOL (^bk_shouldEnableFirstOtherButtonBlock)(UIAlertView *alertView) NS_AVAILABLE_IOS(5_0);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIAlertView+BlocksKit.m",
    "content": "//\n//  UIAlertView+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"A2DynamicDelegate.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n#import \"NSObject+A2DynamicDelegate.h\"\n#import \"UIAlertView+BlocksKit.h\"\n\n#pragma mark Delegate\n\n@interface A2DynamicUIAlertViewDelegate : A2DynamicDelegate <UIAlertViewDelegate>\n\n@end\n\n@implementation A2DynamicUIAlertViewDelegate\n\n- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView\n{\n\tBOOL should = YES;\n\t\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(alertViewShouldEnableFirstOtherButton:)])\n\t\tshould &= [realDelegate alertViewShouldEnableFirstOtherButton:alertView];\n\t\n\tBOOL (^block)(UIAlertView *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tshould &= block(alertView);\n\t\n\treturn should;\n}\n\n- (void)alertViewCancel:(UIAlertView *)alertView\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(alertViewCancel:)])\n\t\t[realDelegate alertViewCancel:alertView];\n\t\n\tid key = @(alertView.cancelButtonIndex);\n\tvoid (^cancelBlock)(void) = (self.handlers)[key];\n\tif (cancelBlock)\n\t\tcancelBlock();\n}\n\n- (void)willPresentAlertView:(UIAlertView *)alertView\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(willPresentAlertView:)])\n\t\t[realDelegate willPresentAlertView:alertView];\n\t\n\tvoid (^block)(UIAlertView *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tblock(alertView);\n}\n\n- (void)didPresentAlertView:(UIAlertView *)alertView\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(didPresentAlertView:)])\n\t\t[realDelegate didPresentAlertView:alertView];\n\t\n\tvoid (^block)(UIAlertView *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tblock(alertView);\n}\n\n- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(alertView:willDismissWithButtonIndex:)])\n\t\t[realDelegate alertView:alertView willDismissWithButtonIndex:buttonIndex];\n\t\n\tvoid (^block)(UIAlertView *, NSInteger) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tblock(alertView, buttonIndex);\n}\n\n- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(alertView:didDismissWithButtonIndex:)])\n\t\t[realDelegate alertView:alertView didDismissWithButtonIndex:buttonIndex];\n\t\n\tvoid (^block)(UIAlertView *, NSInteger) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tblock(alertView, buttonIndex);\n}\n\n- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)])\n\t\t[realDelegate alertView:alertView clickedButtonAtIndex:buttonIndex];\n\t\n\tvoid (^block)(UIAlertView *, NSInteger) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tblock(alertView, buttonIndex);\n\t\n\tid key = @(buttonIndex);\n\tvoid (^buttonBlock)(void) = (self.handlers)[key];\n\tif (buttonBlock)\n\t\tbuttonBlock();\n}\n\n@end\n\n#pragma mark - Category\n\n@implementation UIAlertView (BlocksKit)\n\n@dynamic bk_willShowBlock, bk_didShowBlock, bk_willDismissBlock, bk_didDismissBlock, bk_shouldEnableFirstOtherButtonBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegate];\n\t\t[self bk_linkDelegateMethods:@{\n\t\t\t@\"bk_willShowBlock\": @\"willPresentAlertView:\",\n\t\t\t@\"bk_didShowBlock\": @\"didPresentAlertView:\",\n\t\t\t@\"bk_willDismissBlock\": @\"alertView:willDismissWithButtonIndex:\",\n\t\t\t@\"bk_didDismissBlock\": @\"alertView:didDismissWithButtonIndex:\",\n\t\t\t@\"bk_shouldEnableFirstOtherButtonBlock\": @\"alertViewShouldEnableFirstOtherButton:\"\n\t\t}];\n\t}\n}\n\n#pragma mark Convenience\n\n+ (UIAlertView*)bk_showAlertViewWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray *)otherButtonTitles handler:(void (^)(UIAlertView *alertView, NSInteger buttonIndex))block\n{\n\t// If no buttons were specified, cancel button becomes \"Dismiss\"\n\tif (!cancelButtonTitle.length && !otherButtonTitles.count)\n\t\tcancelButtonTitle = NSLocalizedString(@\"Dismiss\", nil);\n\t\n\tUIAlertView *alertView = [[[self class] alloc] initWithTitle:title message:message delegate:self.bk_dynamicDelegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil];\n\n\t// Set other buttons\n\t[otherButtonTitles enumerateObjectsUsingBlock:^(NSString *button, NSUInteger idx, BOOL *stop) {\n\t\t[alertView addButtonWithTitle:button];\n\t}];\n\n\t// Set `didDismissBlock`\n\tif (block) alertView.bk_didDismissBlock = block;\n\t\n\t// Show alert view\n\t[alertView show];\n\t\n\treturn alertView;\n}\n\n#pragma mark Initializers\n\n+ (id)bk_alertViewWithTitle:(NSString *)title\n{\n\treturn [self bk_alertViewWithTitle:title message:nil];\n}\n\n+ (id)bk_alertViewWithTitle:(NSString *)title message:(NSString *)message\n{\n\treturn [[[self class] alloc] bk_initWithTitle:title message:message];\n}\n\n- (id)bk_initWithTitle:(NSString *)title message:(NSString *)message\n{\n\tself = [self initWithTitle:title message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];\n\tif (!self) return nil;\n\n\tself.delegate = self.bk_dynamicDelegate;\n\n\treturn self;\n}\n\n#pragma Actions\n\n- (NSInteger)bk_addButtonWithTitle:(NSString *)title handler:(void (^)(void))block\n{\n\tNSAssert(title.length, @\"A button without a title cannot be added to the alert view.\");\n\tNSInteger index = [self addButtonWithTitle:title];\n\t[self bk_setHandler:block forButtonAtIndex:index];\n\treturn index;\n}\n\n- (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block\n{\n\tif (!title.length)\n\t\ttitle = NSLocalizedString(@\"Cancel\", nil);\n\tNSInteger cancelButtonIndex = [self addButtonWithTitle:title];\n\tself.cancelButtonIndex = cancelButtonIndex;\n\t[self bk_setHandler:block forButtonAtIndex:cancelButtonIndex];\n\treturn cancelButtonIndex;\n}\n\n#pragma mark Properties\n\n- (void)bk_setHandler:(void (^)(void))block forButtonAtIndex:(NSInteger)index\n{\n\tid key = @(index);\n\tif (block)\n\t\t[self.bk_dynamicDelegate handlers][key] = [block copy];\n\telse\n\t\t[[self.bk_dynamicDelegate handlers] removeObjectForKey:key];\n}\n\n- (void (^)(void))bk_handlerForButtonAtIndex:(NSInteger)index\n{\n\treturn [self.bk_dynamicDelegate handlers][@(index)];\n}\n\n- (void (^)(void))bk_cancelBlock\n{\n\treturn [self bk_handlerForButtonAtIndex:self.cancelButtonIndex];\n}\n\n- (void)bk_setCancelBlock:(void (^)(void))block\n{\n\tif (block && self.cancelButtonIndex == -1) {\n\t\t[self bk_setCancelButtonWithTitle:nil handler:block];\n\t\treturn;\n\t}\n\t\n\t[self bk_setHandler:block forButtonAtIndex:self.cancelButtonIndex];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h",
    "content": "//\n//  UIBarButtonItem+BlocksKit.h\n//  BlocksKit\n//\n\n#import <UIKit/UIKit.h>\n\n/** Block event initialization for UIBarButtonItem.\n\n This set of extensions has near-drop-in replacements\n for the standard set of UIBarButton item initializations,\n using a block handler instead of a target/selector.\n\n Includes code by the following:\n\n - [Kevin O'Neill](https://github.com/kevinoneill)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @warning UIBarButtonItem is only available on a platform with UIKit.\n */\n@interface UIBarButtonItem (BlocksKit)\n\n/** Creates and returns a configured item containing the specified system item.\n\n @return Newly initialized item with the specified properties.\n @param systemItem The system item to use as the item representation. One of the constants defined in UIBarButtonSystemItem.\n @param action The block that gets fired on the button press.\n */\n- (id)bk_initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem handler:(void (^)(id sender))action NS_REPLACES_RECEIVER;\n\n/** Creates and returns a configured item using the specified image and style.\n \n @return Newly initialized item with the specified properties.\n @param image The item’s image. If nil an image is not displayed.\n If this image is too large to fit on the bar, it is scaled to fit\n The size of a toolbar and navigation bar image is 20 x 20 points.\n @param style The style of the item. One of the constants defined in UIBarButtonItemStyle.\n @param action The block that gets fired on the button press.\n */\n- (id)bk_initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action NS_REPLACES_RECEIVER;\n\n/** Creates and returns a configured item using the specified image and style.\n\n @return Newly initialized item with the specified properties.\n @param image The item’s image. If nil an image is not displayed.\n @param landscapeImagePhone The image to be used for the item in landscape bars in the UIUserInterfaceIdiomPhone idiom.\n @param style The style of the item. One of the constants defined in UIBarButtonItemStyle.\n @param action The block that gets fired on the button press.\n */\n- (id)bk_initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action NS_REPLACES_RECEIVER NS_AVAILABLE_IOS(5_0);\n\n/** Creates and returns a configured item using the specified text and style.\n \n @return Newly initialized item with the specified properties.\n @param title The text displayed on the button item.\n @param style The style of the item. One of the constants defined in UIBarButtonItemStyle.\n @param action The block that gets fired on the button press.\n */\n- (id)bk_initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action NS_REPLACES_RECEIVER;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.m",
    "content": "//\n//  UIBarButtonItem+BlocksKit.m\n//  BlocksKit\n//\n\n#import <objc/runtime.h>\n#import \"UIBarButtonItem+BlocksKit.h\"\n\nstatic const void *BKBarButtonItemBlockKey = &BKBarButtonItemBlockKey;\n\n@interface UIBarButtonItem (BlocksKitPrivate)\n\n- (void)bk_handleAction:(UIBarButtonItem *)sender;\n\n@end\n\n@implementation UIBarButtonItem (BlocksKit)\n\n- (id)bk_initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem handler:(void (^)(id sender))action\n{\n\tself = [self initWithBarButtonSystemItem:systemItem target:self action:@selector(bk_handleAction:)];\n\tif (!self) return nil;\n\n\tobjc_setAssociatedObject(self, BKBarButtonItemBlockKey, action, OBJC_ASSOCIATION_COPY_NONATOMIC);\n\n\treturn self;\n}\n\n- (id)bk_initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action\n{\n\tself = [self initWithImage:image style:style target:self action:@selector(bk_handleAction:)];\n\tif (!self) return nil;\n\n\tobjc_setAssociatedObject(self, BKBarButtonItemBlockKey, action, OBJC_ASSOCIATION_COPY_NONATOMIC);\n\n\treturn self;\n}\n\n- (id)bk_initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action\n{\n\tself = [self initWithImage:image landscapeImagePhone:landscapeImagePhone style:style target:self action:@selector(bk_handleAction:)];\n\tif (!self) return nil;\n\n\tobjc_setAssociatedObject(self, BKBarButtonItemBlockKey, action, OBJC_ASSOCIATION_COPY_NONATOMIC);\n\n\treturn self;\n}\n\n- (id)bk_initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action\n{\n\tself = [self initWithTitle:title style:style target:self action:@selector(bk_handleAction:)];\n\tif (!self) return nil;\n\n\tobjc_setAssociatedObject(self, BKBarButtonItemBlockKey, action, OBJC_ASSOCIATION_COPY_NONATOMIC);\n\n\treturn self;\n}\n\n- (void)bk_handleAction:(UIBarButtonItem *)sender\n{\n\tvoid (^block)(id) = objc_getAssociatedObject(self, BKBarButtonItemBlockKey);\n\tif (block) block(self);\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIControl+BlocksKit.h",
    "content": "//\n//  UIControl+BlocksKit.h\n//  BlocksKit\n//\n\n#import <UIKit/UIKit.h>\n\n/** Block control event handling for UIControl.\n\n Includes code by the following:\n\n - [Kevin O'Neill](https://github.com/kevinoneill)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @warning UIControl is only available on a platform with UIKit.\n */\n@interface UIControl (BlocksKit)\n\n///-----------------------------------\n/// @name Block event handling\n///-----------------------------------\n\n/** Adds a block for a particular event to an internal dispatch table.\n\n @param handler A block representing an action message, with an argument for the sender.\n @param controlEvents A bitmask specifying the control events for which the action message is sent.\n @see removeEventHandlersForControlEvents:\n */\n- (void)bk_addEventHandler:(void (^)(id sender))handler forControlEvents:(UIControlEvents)controlEvents;\n\n/** Removes all blocks for a particular event combination.\n @param controlEvents A bitmask specifying the control events for which the block will be removed.\n @see addEventHandler:forControlEvents:\n */\n- (void)bk_removeEventHandlersForControlEvents:(UIControlEvents)controlEvents;\n\n/** Checks to see if the control has any blocks for a particular event combination.\n @param controlEvents A bitmask specifying the control events for which to check for blocks.\n @see addEventHandler:forControlEvents:\n @return Returns YES if there are blocks for these control events, NO otherwise.\n */\n- (BOOL)bk_hasEventHandlersForControlEvents:(UIControlEvents)controlEvents;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIControl+BlocksKit.m",
    "content": "//\n//  UIControl+BlocksKit.m\n//  BlocksKit\n//\n\n#import <objc/runtime.h>\n#import \"UIControl+BlocksKit.h\"\n\nstatic const void *BKControlHandlersKey = &BKControlHandlersKey;\n\n#pragma mark Private\n\n@interface BKControlWrapper : NSObject <NSCopying>\n\n- (id)initWithHandler:(void (^)(id sender))handler forControlEvents:(UIControlEvents)controlEvents;\n\n@property (nonatomic) UIControlEvents controlEvents;\n@property (nonatomic, copy) void (^handler)(id sender);\n\n@end\n\n@implementation BKControlWrapper\n\n- (id)initWithHandler:(void (^)(id sender))handler forControlEvents:(UIControlEvents)controlEvents\n{\n\tself = [super init];\n\tif (!self) return nil;\n\n\tself.handler = handler;\n\tself.controlEvents = controlEvents;\n\n\treturn self;\n}\n\n- (id)copyWithZone:(NSZone *)zone\n{\n\treturn [[BKControlWrapper alloc] initWithHandler:self.handler forControlEvents:self.controlEvents];\n}\n\n- (void)invoke:(id)sender\n{\n\tself.handler(sender);\n}\n\n@end\n\n#pragma mark Category\n\n@implementation UIControl (BlocksKit)\n\n- (void)bk_addEventHandler:(void (^)(id sender))handler forControlEvents:(UIControlEvents)controlEvents\n{\n\tNSParameterAssert(handler);\n\t\n\tNSMutableDictionary *events = objc_getAssociatedObject(self, BKControlHandlersKey);\n\tif (!events) {\n\t\tevents = [NSMutableDictionary dictionary];\n\t\tobjc_setAssociatedObject(self, BKControlHandlersKey, events, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t}\n\n\tNSNumber *key = @(controlEvents);\n\tNSMutableSet *handlers = events[key];\n\tif (!handlers) {\n\t\thandlers = [NSMutableSet set];\n\t\tevents[key] = handlers;\n\t}\n\t\n\tBKControlWrapper *target = [[BKControlWrapper alloc] initWithHandler:handler forControlEvents:controlEvents];\n\t[handlers addObject:target];\n\t[self addTarget:target action:@selector(invoke:) forControlEvents:controlEvents];\n}\n\n- (void)bk_removeEventHandlersForControlEvents:(UIControlEvents)controlEvents\n{\n\tNSMutableDictionary *events = objc_getAssociatedObject(self, BKControlHandlersKey);\n\tif (!events) {\n\t\tevents = [NSMutableDictionary dictionary];\n\t\tobjc_setAssociatedObject(self, BKControlHandlersKey, events, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t}\n\n\tNSNumber *key = @(controlEvents);\n\tNSSet *handlers = events[key];\n\n\tif (!handlers)\n\t\treturn;\n\n\t[handlers enumerateObjectsUsingBlock:^(id sender, BOOL *stop) {\n\t\t[self removeTarget:sender action:NULL forControlEvents:controlEvents];\n\t}];\n\n\t[events removeObjectForKey:key];\n}\n\n- (BOOL)bk_hasEventHandlersForControlEvents:(UIControlEvents)controlEvents\n{\n\tNSMutableDictionary *events = objc_getAssociatedObject(self, BKControlHandlersKey);\n\tif (!events) {\n\t\tevents = [NSMutableDictionary dictionary];\n\t\tobjc_setAssociatedObject(self, BKControlHandlersKey, events, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n\t}\n\n\tNSNumber *key = @(controlEvents);\n\tNSSet *handlers = events[key];\n\t\n\tif (!handlers)\n\t\treturn NO;\n\t\n\treturn !!handlers.count;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h",
    "content": "//\n//  UIGestureRecognizer+BlocksKit.h\n//  BlocksKit\n//\n\n#import <UIKit/UIKit.h>\n\n/** Block functionality for UIGestureRecognizer.\n\n Use of the delay property is pretty straightforward, although\n cancellation might be a little harder to swallow.  An example\n follows:\n\t UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) {\n\t\t NSLog(@\"Single tap.\");\n\t } delay:0.18];\n\t [self addGestureRecognizer:singleTap];\n \n\t UITapGestureRecognizer *doubleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) {\n\t\t[singleTap cancel];\n\t\tNSLog(@\"Double tap.\");\n\t }];\n\t doubleTap.numberOfTapsRequired = 2;\n\t [self addGestureRecognizer:doubleTap];\n\n Believe it or not, the above code is fully memory-safe and efficient.  Eagle-eyed coders\n will notice that this setup emulates UIGestureRecognizer's requireGestureRecognizerToFail:,\n and, yes, it totally apes it.  Not only is this setup much faster on the user's end of\n things, it is more flexible and allows for much more complicated setups.\n\n Includes code by the following:\n\n - [Kevin O'Neill](https://github.com/kevinoneill)\n - [Zach Waldowski](https://github.com/zwaldowski)\n\n @warning UIGestureRecognizer is only available on a platform with UIKit.\n \n @warning It is not recommended to use the Apple-supplied locationInView and state\n methods on a *delayed* block-backed gesture recognizer, as these properties are\n likely to have been cleared by the time by the block fires.  It is instead recommended\n to use the arguments provided to the block.\n */\n\n@interface UIGestureRecognizer (BlocksKit)\n\n/** An autoreleased gesture recognizer that will, on firing, call\n the given block asynchronously after a number of seconds.\n\n @return An autoreleased instance of a concrete UIGestureRecognizer subclass, or `nil`.\n @param block The block which handles an executed gesture.\n @param delay A number of seconds after which the block will fire.\n */\n+ (id)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay;\n\n/** Initializes an allocated gesture recognizer that will call the given block\n after a given delay.\n \n An alternative to the designated initializer.\n \n @return An initialized instance of a concrete UIGestureRecognizer subclass or `nil`.\n @param block The block which handles an executed gesture.\n @param delay A number of seconds after which the block will fire.\n */\n- (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay NS_REPLACES_RECEIVER;\n\n/** An autoreleased gesture recognizer that will call the given block.\n \n For convenience and compatibility reasons, this method is indentical\n to using recognizerWithHandler:delay: with a delay of 0.0.\n  \n @return An initialized and autoreleased instance of a concrete UIGestureRecognizer\n subclass, or `nil`.\n @param block The block which handles an executed gesture.\n */\n+ (id)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block;\n\n/** Initializes an allocated gesture recognizer that will call the given block.\n \n This method is indentical to calling initWithHandler:delay: with a delay of 0.0.\n\n @return An initialized instance of a concrete UIGestureRecognizer subclass or `nil`.\n @param block The block which handles an executed gesture.\n */\n- (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block NS_REPLACES_RECEIVER;\n\n/** Allows the block that will be fired by the gesture recognizer\n to be modified after the fact.\n */\n@property (nonatomic, copy, setter = bk_setHandler:) void (^bk_handler)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location);\n\n/** Allows the length of the delay after which the gesture\n recognizer will be fired to modify. */\n@property (nonatomic, setter = bk_setHandlerDelay:) NSTimeInterval bk_handlerDelay;\n\n/** If the recognizer happens to be fired, calling this method\n will stop it from firing, but only if a delay is set.\n\n @warning This method is not for arbitrarily canceling the\n firing of a recognizer, but will only function for a block\n handler *after the recognizer has already been fired*.  Be\n sure to make your delay times accomodate this likelihood.\n */\n- (void)bk_cancel;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.m",
    "content": "//\n//  UIGestureRecognizer+BlocksKit.m\n//  BlocksKit\n//\n\n#import <objc/runtime.h>\n#import \"UIGestureRecognizer+BlocksKit.h\"\n\nstatic const void *BKGestureRecognizerBlockKey = &BKGestureRecognizerBlockKey;\nstatic const void *BKGestureRecognizerDelayKey = &BKGestureRecognizerDelayKey;\nstatic const void *BKGestureRecognizerShouldHandleActionKey = &BKGestureRecognizerShouldHandleActionKey;\n\n@interface UIGestureRecognizer (BlocksKitInternal)\n\n@property (nonatomic, setter = bk_setShouldHandleAction:) BOOL bk_shouldHandleAction;\n\n- (void)bk_handleAction:(UIGestureRecognizer *)recognizer;\n\n@end\n\n@implementation UIGestureRecognizer (BlocksKit)\n\n+ (id)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay\n{\n\treturn [[[self class] alloc] bk_initWithHandler:block delay:delay];\n}\n\n- (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay\n{\n\tself = [self initWithTarget:self action:@selector(bk_handleAction:)];\n\tif (!self) return nil;\n\n\tself.bk_handler = block;\n\tself.bk_handlerDelay = delay;\n\n\treturn self;\n}\n\n+ (id)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block\n{\n\treturn [self bk_recognizerWithHandler:block delay:0.0];\n}\n\n- (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block\n{\n\treturn (self = [self bk_initWithHandler:block delay:0.0]);\n}\n\n- (void)bk_handleAction:(UIGestureRecognizer *)recognizer\n{\n\tvoid (^handler)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location) = recognizer.bk_handler;\n\tif (!handler) return;\n\t\n\tNSTimeInterval delay = self.bk_handlerDelay;\n\tCGPoint location = [self locationInView:self.view];\n\tvoid (^block)(void) = ^{\n\t\tif (!self.bk_shouldHandleAction) return;\n\t\thandler(self, self.state, location);\n\t};\n\n\tself.bk_shouldHandleAction = YES;\n\n\tif (!delay) {\n\t\tblock();\n\t\treturn;\n\t}\n\n\tdispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC));\n\tdispatch_after(popTime, dispatch_get_main_queue(), block);\n}\n\n- (void)bk_setHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))handler\n{\n\tobjc_setAssociatedObject(self, BKGestureRecognizerBlockKey, handler, OBJC_ASSOCIATION_COPY_NONATOMIC);\n}\n\n- (void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))bk_handler\n{\n\treturn objc_getAssociatedObject(self, BKGestureRecognizerBlockKey);\n}\n\n- (void)bk_setHandlerDelay:(NSTimeInterval)delay\n{\n\tNSNumber *delayValue = delay ? @(delay) : nil;\n\tobjc_setAssociatedObject(self, BKGestureRecognizerDelayKey, delayValue, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n- (NSTimeInterval)bk_handlerDelay\n{\n\treturn [objc_getAssociatedObject(self, BKGestureRecognizerDelayKey) doubleValue];\n}\n\n- (void)bk_setShouldHandleAction:(BOOL)flag\n{\n\tobjc_setAssociatedObject(self, BKGestureRecognizerShouldHandleActionKey, @(flag), OBJC_ASSOCIATION_COPY_NONATOMIC);\n}\n\n- (BOOL)bk_shouldHandleAction\n{\n\treturn [objc_getAssociatedObject(self, BKGestureRecognizerShouldHandleActionKey) boolValue];\n}\n\n- (void)bk_cancel\n{\n\tself.bk_shouldHandleAction = NO;\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIImagePickerController+BlocksKit.h",
    "content": "//\n//  UIImagePickerController+BlocksKit.h\n//  BlocksKit\n//\n//  Contributed by Yas Kuraishi.\n//\n\n#import <UIKit/UIKit.h>\n\n/** UIImagePickerController with block callback.\n\n Created by [Yas Kuraishi](https://github.com/YasKuraishi) and contributed to\n BlocksKit.\n\n @warning UIImagePickerController is only available on a platform with\n UIKit.\n*/\n@interface UIImagePickerController (BlocksKit)\n\n/**\n *\tThe block that fires after the receiver finished picking up an image\n */\n@property (nonatomic, copy) void(^bk_didFinishPickingMediaBlock)(UIImagePickerController *, NSDictionary *);\n\n/**\n *\tThe block that fires after the user cancels out of picker\n */\n@property (nonatomic, copy) void(^bk_didCancelBlock)(UIImagePickerController *);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIImagePickerController+BlocksKit.m",
    "content": "//\n//  UIImagePickerController+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"A2DynamicDelegate.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n#import \"UIImagePickerController+BlocksKit.h\"\n\n#pragma mark Custom delegate\n\n@interface A2DynamicUIImagePickerControllerDelegate : A2DynamicDelegate <UIImagePickerControllerDelegate>\n\n@end\n\n@implementation A2DynamicUIImagePickerControllerDelegate\n\n- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(imagePickerController:didFinishPickingMediaWithInfo:)])\n\t\t[realDelegate imagePickerController:picker didFinishPickingMediaWithInfo:info];\n\n\tvoid (^block)(UIImagePickerController *, NSDictionary *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(picker, info);\n}\n\n- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(imagePickerControllerDidCancel:)])\n\t\t[realDelegate imagePickerControllerDidCancel:picker];\n\n\tvoid (^block)(UIImagePickerController *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(picker);\n}\n\n@end\n\n#pragma mark Category\n\n@implementation UIImagePickerController (BlocksKit)\n\n@dynamic bk_didFinishPickingMediaBlock;\n@dynamic bk_didCancelBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegate];\n\t\t[self bk_linkDelegateMethods:@{ @\"bk_didFinishPickingMediaBlock\": @\"imagePickerController:didFinishPickingMediaWithInfo:\",\n                                        @\"bk_didCancelBlock\": @\"imagePickerControllerDidCancel:\" }];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIPopoverController+BlocksKit.h",
    "content": "//\n//  UIPopoverController+BlocksKit.h\n//  BlocksKit\n//\n\n#import <UIKit/UIKit.h>\n\n/** Block functionality for UIPopoverController.\n \n Created by [Alexsander Akers](https://github.com/a2) and contributed to BlocksKit.\n \n @warning UIPopovercontroller is only available on a platform with UIKit.\n */\n@interface UIPopoverController (BlocksKit)\n\n/** The block to be called when the popover controller will dismiss the popover. Return NO to prevent the dismissal of the view. */\n@property (nonatomic, copy, setter = bk_setShouldDismissBlock:) BOOL (^bk_shouldDismissBlock)(UIPopoverController *popoverController);\n\n/** The block to be called when the user has taken action to dismiss the popover. This is not called when -dismissPopoverAnimated: is called directly. */\n@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIPopoverController *popoverController);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIPopoverController+BlocksKit.m",
    "content": "//\n//  UIPopoverController+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"A2DynamicDelegate.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n#import \"UIPopoverController+BlocksKit.h\"\n\n#pragma mark - Delegate\n\n@interface A2DynamicUIPopoverControllerDelegate : A2DynamicDelegate <UIPopoverControllerDelegate>\n\n@end\n\n@implementation A2DynamicUIPopoverControllerDelegate\n\n- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController\n{\n\tBOOL should = YES;\n\t\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(popoverControllerShouldDismissPopover:)])\n\t\tshould &= [realDelegate popoverControllerShouldDismissPopover:popoverController];\n\t\n\tBOOL (^block)(UIPopoverController *) = [self blockImplementationForMethod:_cmd];\n\tif (block) should &= block(popoverController);\n\t\n\treturn should;\n}\n\n- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(popoverControllerDidDismissPopover:)])\n\t\t[realDelegate popoverControllerDidDismissPopover:popoverController];\n\t\n\tvoid (^block)(UIPopoverController *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(popoverController);\n}\n\n@end\n\n#pragma mark - Category\n\n@implementation UIPopoverController (BlocksKit)\n\n@dynamic bk_didDismissBlock, bk_shouldDismissBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegate];\n\t\t[self bk_linkDelegateMethods:@{ @\"bk_didDismissBlock\": @\"popoverControllerDidDismissPopover:\", @\"bk_shouldDismissBlock\": @\"popoverControllerShouldDismissPopover:\" }];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UITextField+BlocksKit.h",
    "content": "//\n//  UITextField+BlocksKit.h\n//  BlocksKit\n//\n//  Contributed by Samuel E. Giddins.\n//\n\n#import <UIKit/UITextField.h>\n#import \"BlocksKit.h\"\n\n/** Block callbacks for UITextField.\n\n @warning UITextField is only available on a platform with UIKit.\n\n Created by [Samuel E. Giddins](https://github.com/segiddins) and\n contributed to BlocksKit.\n */\n@interface UITextField (BlocksKit)\n\n/**\n *\tThe block that fires before the receiver begins editing\n *\n *  The return value indicates whether the receiver should begin editing\n */\n@property (nonatomic, copy) BOOL(^bk_shouldBeginEditingBlock)(UITextField *);\n\n/**\n *\tThe block that fires after the receiver begins editing\n */\n@property (nonatomic, copy) void(^bk_didBeginEditingBlock)(UITextField *);\n\n/**\n *\tThe block that fires before the receiver ends editing\n *\n *  The return value indicates whether the receiver should end editing\n */\n@property (nonatomic, copy) BOOL(^bk_shouldEndEditingBlock)(UITextField *);\n\n/**\n *\tThe block that fires after the receiver ends editing\n */\n@property (nonatomic, copy) void(^bk_didEndEditingBlock)(UITextField *);\n\n/**\n *\tThe block that fires when the receiver's text will change\n *\n *  The return value indicates whether the receiver should replace the characters in the given range with the replacement string\n */\n@property (nonatomic, copy) BOOL(^bk_shouldChangeCharactersInRangeWithReplacementStringBlock)(UITextField *, NSRange, NSString *);\n\n/**\n *\tThe block that fires when the receiver's clear button is pressed\n *\n *  The return value indicates whether the receiver should clear its contents\n */\n@property (nonatomic, copy) BOOL(^bk_shouldClearBlock)(UITextField *);\n\n/**\n *\tThe block that fires when the keyboard's return button is pressed and the receiver is the first responder\n *\n *  The return value indicates whether the receiver should return\n */\n@property (nonatomic, copy) BOOL(^bk_shouldReturnBlock)(UITextField *);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UITextField+BlocksKit.m",
    "content": "//\n//  UITextField+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"UITextField+BlocksKit.h\"\n#import \"A2DynamicDelegate.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n\n#pragma mark Delegate\n\n@interface A2DynamicUITextFieldDelegate : A2DynamicDelegate\n\n@end\n\n@implementation A2DynamicUITextFieldDelegate\n\n- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField\n{\n\tBOOL ret = YES;\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(textFieldShouldBeginEditing:)])\n\t\tret = [realDelegate textFieldShouldBeginEditing:textField];\n\tBOOL (^block)(UITextField *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tret &= block(textField);\n\treturn ret;\n}\n\n- (void)textFieldDidBeginEditing:(UITextField *)textField\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(textFieldDidBeginEditing:)])\n\t\t[realDelegate textFieldDidBeginEditing:textField];\n\tvoid (^block)(UITextField *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tblock(textField);\n}\n\n- (BOOL)textFieldShouldEndEditing:(UITextField *)textField\n{\n\tBOOL ret = YES;\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(textFieldShouldEndEditing:)])\n\t\tret = [realDelegate textFieldShouldEndEditing:textField];\n\tBOOL (^block)(UITextField *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tret &= block(textField);\n\treturn ret;\n}\n\n- (void)textFieldDidEndEditing:(UITextField *)textField\n{\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(textFieldDidEndEditing:)])\n\t\t[realDelegate textFieldDidEndEditing:textField];\n\tvoid (^block)(UITextField *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tblock(textField);\n}\n\n- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string\n{\n\tBOOL ret = YES;\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)])\n\t\tret = [realDelegate textField:textField shouldChangeCharactersInRange:range replacementString:string];\n\tBOOL (^block)(UITextField *, NSRange, NSString *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tret &= block(textField, range, string);\n\treturn ret;\n}\n\n- (BOOL)textFieldShouldClear:(UITextField *)textField\n{\n\tBOOL ret = YES;\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(textFieldShouldClear:)])\n\t\tret = [realDelegate textFieldShouldClear:textField];\n\tBOOL (^block)(UITextField *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tret &= block(textField);\n\treturn ret;\n}\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField\n{\n\tBOOL ret = YES;\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(textFieldShouldReturn:)])\n\t\tret = [realDelegate textFieldShouldReturn:textField];\n\tBOOL (^block)(UITextField *) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tret &= block(textField);\n\treturn ret;\n}\n\n@end\n\n#pragma mark - Category\n\n@implementation UITextField (BlocksKit)\n\n@dynamic bk_shouldBeginEditingBlock, bk_didBeginEditingBlock, bk_shouldEndEditingBlock, bk_didEndEditingBlock, bk_shouldChangeCharactersInRangeWithReplacementStringBlock, bk_shouldClearBlock, bk_shouldReturnBlock;\n\n+ (void)load {\n    [self bk_registerDynamicDelegate];\n    [self bk_linkDelegateMethods: @{\n        @\"bk_shouldBeginEditingBlock\": @\"textFieldShouldBeginEditing:\",\n        @\"bk_didBeginEditingBlock\": @\"textFieldDidBeginEditing:\",\n        @\"bk_shouldEndEditingBlock\": @\"textFieldShouldEndEditing:\",\n        @\"bk_didEndEditingBlock\" : @\"textFieldDidEndEditing:\",\n        @\"bk_shouldChangeCharactersInRangeWithReplacementStringBlock\" : @\"textField:shouldChangeCharactersInRange:replacementString:\",\n        @\"bk_shouldClearBlock\" : @\"textFieldShouldClear:\",\n        @\"bk_shouldReturnBlock\" : @\"textFieldShouldReturn:\",\n    }];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIView+BlocksKit.h",
    "content": "//\n//  UIView+BlocksKit.h\n//  BlocksKit\n//\n\n#import <UIKit/UIKit.h>\n\n/** Convenience on-touch methods for UIView.\n\n Includes code by the following:\n\n - Kevin O'Neill. <https://github.com/kevinoneill>. 2011. BSD.\n - Jake Marsh. <https://github.com/jakemarsh>. 2011. \n - Zach Waldowski. <https://github.com/zwaldowski>. 2011.\n\n @warning UIView is only available on a platform with UIKit.\n */\n@interface UIView (BlocksKit)\n\n/** Abstract creation of a block-backed UITapGestureRecognizer.\n\n This method allows for the recognition of any arbitrary number\n of fingers tapping any number of times on a view.  An instance\n of UITapGesture recognizer is allocated for the block and added\n to the recieving view.\n \n @warning This method has an _additive_ effect. Do not call it multiple\n times to set-up or tear-down. The view will discard the gesture recognizer\n on release.\n\n @param numberOfTouches The number of fingers tapping that will trigger the block.\n @param numberOfTaps The number of taps required to trigger the block.\n @param block The handler for the UITapGestureRecognizer\n @see whenTapped:\n @see whenDoubleTapped:\n */\n- (void)bk_whenTouches:(NSUInteger)numberOfTouches tapped:(NSUInteger)numberOfTaps handler:(void (^)(void))block;\n\n/** Adds a recognizer for one finger tapping once.\n \n @warning This method has an _additive_ effect. Do not call it multiple\n times to set-up or tear-down. The view will discard the gesture recognizer\n on release.\n\n @param block The handler for the tap recognizer\n @see whenDoubleTapped:\n @see whenTouches:tapped:handler:\n */\n- (void)bk_whenTapped:(void (^)(void))block;\n\n/** Adds a recognizer for one finger tapping twice.\n \n @warning This method has an _additive_ effect. Do not call it multiple\n times to set-up or tear-down. The view will discard the gesture recognizer\n on release.\n \n @param block The handler for the tap recognizer\n @see whenTapped:\n @see whenTouches:tapped:handler:\n */\n- (void)bk_whenDoubleTapped:(void (^)(void))block;\n\n/** A convenience wrapper that non-recursively loops through the subviews of a view.\n \n @param block A code block that interacts with a UIView sender.\n */\n- (void)bk_eachSubview:(void (^)(UIView *subview))block;\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIView+BlocksKit.m",
    "content": "//\n//  UIView+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"UIGestureRecognizer+BlocksKit.h\"\n#import \"UIView+BlocksKit.h\"\n\n@implementation UIView (BlocksKit)\n\n- (void)bk_whenTouches:(NSUInteger)numberOfTouches tapped:(NSUInteger)numberOfTaps handler:(void (^)(void))block\n{\n\tif (!block) return;\n\t\n\tUITapGestureRecognizer *gesture = [UITapGestureRecognizer bk_recognizerWithHandler:^(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location) {\n\t\tif (state == UIGestureRecognizerStateRecognized) block();\n\t}];\n\t\n\tgesture.numberOfTouchesRequired = numberOfTouches;\n\tgesture.numberOfTapsRequired = numberOfTaps;\n\n\t[self.gestureRecognizers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n\t\tif (![obj isKindOfClass:[UITapGestureRecognizer class]]) return;\n\n\t\tUITapGestureRecognizer *tap = obj;\n\t\tBOOL rightTouches = (tap.numberOfTouchesRequired == numberOfTouches);\n\t\tBOOL rightTaps = (tap.numberOfTapsRequired == numberOfTaps);\n\t\tif (rightTouches && rightTaps) {\n\t\t\t[gesture requireGestureRecognizerToFail:tap];\n\t\t}\n\t}];\n\n\t[self addGestureRecognizer:gesture];\n}\n\n- (void)bk_whenTapped:(void (^)(void))block\n{\n\t[self bk_whenTouches:1 tapped:1 handler:block];\n}\n\n- (void)bk_whenDoubleTapped:(void (^)(void))block\n{\n\t[self bk_whenTouches:2 tapped:1 handler:block];\n}\n\n- (void)bk_eachSubview:(void (^)(UIView *subview))block\n{\n\tNSParameterAssert(block != nil);\n\n\t[self.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {\n\t\tblock(subview);\n\t}];\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIWebView+BlocksKit.h",
    "content": "//\n//  UIWebView+BlocksKit.h\n//  BlocksKit\n//\n\n#import <UIKit/UIKit.h>\n\n/** Block callbacks for UIWebView.\n\n @warning UIWebView is only available on a platform with UIKit.\n*/\n\n@interface UIWebView (BlocksKit)\n\n/** The block to be decide whether a URL will be loaded. \n \n @warning If the delegate implements webView:shouldStartLoadWithRequest:navigationType:,\n the return values of both the delegate method and the block will be considered.\n*/\n@property (nonatomic, copy, setter = bk_setShouldStartLoadBlock:) BOOL (^bk_shouldStartLoadBlock)(UIWebView *webView, NSURLRequest *request, UIWebViewNavigationType navigationType);\n\n/** The block that is fired when the web view starts loading. */\n@property (nonatomic, copy, setter = bk_setDidStartLoadBlock:) void (^bk_didStartLoadBlock)(UIWebView *webView);\n\n/** The block that is fired when the web view finishes loading. */\n@property (nonatomic, copy, setter = bk_setDidFinishLoadBlock:) void (^bk_didFinishLoadBlock)(UIWebView *webView);\n\n/** The block that is fired when the web view stops loading due to an error. */\n@property (nonatomic, copy, setter = bk_setDidFinishWithErrorBlock:) void (^bk_didFinishWithErrorBlock)(UIWebView *webView, NSError *error);\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/BlocksKit/UIKit/UIWebView+BlocksKit.m",
    "content": "//\n//  UIWebView+BlocksKit.m\n//  BlocksKit\n//\n\n#import \"A2DynamicDelegate.h\"\n#import \"NSObject+A2BlockDelegate.h\"\n#import \"UIWebView+BlocksKit.h\"\n\n#pragma mark Custom delegate\n\n@interface A2DynamicUIWebViewDelegate : A2DynamicDelegate <UIWebViewDelegate>\n@end\n\n@implementation A2DynamicUIWebViewDelegate\n\n- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {\n\tBOOL ret = YES;\n\t\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)])\n\t\tret = [realDelegate webView:webView shouldStartLoadWithRequest:request navigationType:navigationType];\n\n\tBOOL (^block)(UIWebView *, NSURLRequest *, UIWebViewNavigationType) = [self blockImplementationForMethod:_cmd];\n\tif (block)\n\t\tret &= block(webView, request, navigationType);\n\n\treturn ret;\n}\n\n- (void)webViewDidStartLoad:(UIWebView *)webView {\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(webViewDidStartLoad:)])\n\t\t[realDelegate webViewDidStartLoad:webView];\n\n\tvoid (^block)(UIWebView *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(webView);\n}\n\n- (void)webViewDidFinishLoad:(UIWebView *)webView {\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(webViewDidFinishLoad:)])\n\t\t[realDelegate webViewDidFinishLoad:webView];\n\n\tvoid (^block)(UIWebView *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(webView);\n}\n\n- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {\n\tid realDelegate = self.realDelegate;\n\tif (realDelegate && [realDelegate respondsToSelector:@selector(webView:didFailLoadWithError:)])\n\t\t[realDelegate webView:webView didFailLoadWithError:error];\n\n\tvoid (^block)(UIWebView *, NSError *) = [self blockImplementationForMethod:_cmd];\n\tif (block) block(webView, error);\n}\n\n@end\n\n#pragma mark Category\n\n@implementation UIWebView (BlocksKit)\n\n@dynamic bk_shouldStartLoadBlock, bk_didStartLoadBlock, bk_didFinishLoadBlock, bk_didFinishWithErrorBlock;\n\n+ (void)load\n{\n\t@autoreleasepool {\n\t\t[self bk_registerDynamicDelegate];\n\t\t[self bk_linkDelegateMethods:@{\n\t\t\t@\"bk_shouldStartLoadBlock\": @\"webView:shouldStartLoadWithRequest:navigationType:\",\n\t\t\t@\"bk_didStartLoadBlock\": @\"webViewDidStartLoad:\",\n\t\t\t@\"bk_didFinishLoadBlock\": @\"webViewDidFinishLoad:\",\n\t\t\t@\"bk_didFinishWithErrorBlock\": @\"webView:didFailLoadWithError:\"\n\t\t}];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Pods/BlocksKit/LICENSE",
    "content": "//\n//  LICENSE\n//  BlocksKit\n//\n\nCopyright (c) 2011-2014 Zachary Waldowski, Alexsander Akers, and the BlocksKit Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Pods/BlocksKit/README.md",
    "content": "[BlocksKit](https://zwaldowski.github.io/BlocksKit)\n===================================================\n\nBlocks in C and Objective-C are downright magical.  They make coding easier and potentially quicker, not to mention faster on the front end with multithreading and Grand Central Dispatch.  BlocksKit hopes to facilitate this kind of programming by removing some of the annoying - and, in some cases, impeding - limits on coding with blocks.\n\nBlocksKit is a framework for OS X Mountain Lion and newer and a static library for iOS 6 and newer.\n\nBlocksKit was created by [Zachary Waldowski](https://github.com/zwaldowski) and [Alexsander Akers](https://github.com/a2) and is maintained by Zachary Waldowski.\n\nInstallation\n============\n\nBlocksKit can be added to a project using [CocoaPods](https://github.com/cocoapods/cocoapods). One may also use targets included in the project.\n\n### Library\n\n* Download a release of BlocksKit.\n* Run \"Archive\" in XCode.\n* By default the static library will be compiled to `~/Library/Developer/Xcode/DerivedData`.\n* Move libBlocksKit.a and Headers to your project's folder, preferably a subfolder like \"Vendor\".\n* In \"Build Phases\", Drag libBlocksKit.a into your target's \"Link Binary With Libraries\" build phase.\n* In the build settings of your target or project, change \"Other Linker Flags\" to `-ObjC`. Make sure your app is linked with CoreGraphics, Foundation, MessageUI, and UIKit.\n* Change (or add) to \"Header Search Paths\" the relative path to BlocksKit's headers, like `$(SRCROOT)/Vendor/Headers`.\n* Insert `#import <BlocksKit/BlocksKit.h>` in your project's prefix header.\n\n### Framework\n\nSee the included `Configurations/MacBundleFramework.xcconfig` for more information.\n\nDocumentation\n=============\n\nAn Xcode-compatible documentation set is available [from CocoaDocs](http://cocoadocs.org/docsets/BlocksKit/).\n\nLicense\n=======\n\nBlocksKit is maintained under the MIT license.  **The project itself is free for use in any and all projects.**  You can use BlocksKit in any project, public or private, with or without attribution - though we prefer attribution! It helps us.\n\nUnsure about your rights?  [Read more.](http://opensource.org/licenses/MIT)\n\nIndividual credits for included code exist in the header files and documentation. We thank them for their contributions to the open source community.\n"
  },
  {
    "path": "Pods/Local Podspecs/NBSwipePageView.podspec.json",
    "content": "{\n  \"name\": \"NBSwipePageView\",\n  \"version\": \"0.1\",\n  \"license\": \"zlib\",\n  \"summary\": \"NBSwipePageView is an Objective-C library for easily creating table-based forms on iOS. It is ideal for settings pages or user data entry tasks.\",\n  \"homepage\": \"https://github.com/xuzhe/NBSwipePageView.git\",\n  \"authors\": \"Nick Lockwood\",\n  \"source\": {\n    \"git\": \"https://github.com/xuzhe/NBSwipePageView.git\",\n    \"tag\": \"0.1\"\n  },\n  \"source_files\": \"NBSwipePageView/*.{h,m}\",\n  \"requires_arc\": true,\n  \"platforms\": {\n    \"ios\": \"5.0\"\n  }\n}\n"
  },
  {
    "path": "Pods/NBSwipePageView/NBSwipePageView/NBSwipePageView.h",
    "content": "//\n//  NBSwipePageView.h\n//  NBSwipePageView\n//\n//  Created by 徐 哲 on 4/25/12.\n//  Copyright (c) 2012 ラクラクテクノロジーズ株式会社 XUZHE.COM. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"NBSwipePageViewSheet.h\"\n\ntypedef enum {\n    NBSwipePageViewPageAnimationFade,\n    NBSwipePageViewPageAnimationRight,           // slide in from right (or out to right)\n    NBSwipePageViewPageAnimationLeft,\n    NBSwipePageViewPageAnimationTop,\n    NBSwipePageViewPageAnimationBottom,\n    NBSwipePageViewPageAnimationNone,            // \n    NBSwipePageViewPageAnimationMiddle,          // attempts to keep cell centered in the space it will/did occupy\n    NBSwipePageViewPageAnimationAutomatic = 100  // chooses an appropriate animation style for you\n} NBSwipePageViewPageAnimation;\n\ntypedef enum {\n    NBSwipePageViewModePageSize = 0,\n    NBSwipePageViewModeFullSize = 1,\n} NBSwipePageViewMode;\n\n@protocol NBSwipePageViewDelegate;\n@protocol NBSwipePageViewDataSource;\n\n@interface NBSwipePageView : UIView\n\n@property (unsafe_unretained, nonatomic) IBOutlet id<NBSwipePageViewDelegate> delegate;\n@property (unsafe_unretained, nonatomic) IBOutlet id<NBSwipePageViewDataSource> dataSource;\n\n@property (readonly, nonatomic) NSUInteger currentPageIndex;\n@property (readonly, nonatomic) BOOL isAnimating;\n@property (readonly, nonatomic) UIScrollView *scrollView;\n@property (assign, nonatomic) CGSize scaleScrollView;\n@property (assign, nonatomic) NBSwipePageViewMode pageViewMode;\n@property (assign, nonatomic) BOOL allowsSelection;\n@property (assign, nonatomic) BOOL disableScrollInFullSizeMode;\n@property (strong, nonatomic) UIView *pageHeaderView;\n@property (strong, nonatomic) UIView *pageTailView;\n@property (strong, nonatomic) UIView *backgroundView;\n@property (strong, nonatomic) UIView *pageTitleView;\n@property (strong, nonatomic) void (^visibleViewEffectBlock)(id obj, NSUInteger idx, BOOL *stop);\n@property (readonly, nonatomic) NSArray *visiblePages;\n\n// UIScrollViews's property\n@property (assign, nonatomic) BOOL delaysContentTouches;\n@property (assign, nonatomic) UIEdgeInsets contentInset;\n@property (assign, nonatomic) CGPoint contentOffset;\n@property (assign, nonatomic) CGSize contentSize;\n@property (assign, nonatomic) BOOL pagingEnabled;\n@property (assign, nonatomic) BOOL scrollEnabled;\n@property (readonly, assign, nonatomic) BOOL dragging;\n@property (readonly, assign, nonatomic) BOOL tracking;\n@property (readonly, assign, nonatomic) BOOL decelerating;\n\n// Reload all pages. Always call this method after Data Source is changed.\n- (NBSwipePageViewSheet *)dequeueReusableCellWithIdentifier:(NSString *)reuseIdentifier;\n- (void)reloadData;\n- (void)scrollToPageAtIndex:(NSUInteger)index animated:(BOOL)animated;\n- (NBSwipePageViewSheet *)swipePageViewSheetAtIndex:(NSUInteger)index;\n- (void)setPageViewMode:(NBSwipePageViewMode)pageViewMode animated:(BOOL)animated;\n- (BOOL)selectPageAtIndex:(NSUInteger)index animated:(BOOL)animated scrollToMiddle:(BOOL)scrollToMiddle;\n- (BOOL)deselectPageAtIndex:(NSUInteger)index animated:(BOOL)animated;\n\n// Pulished methods for fast offset and index convert\n- (NSUInteger)pageIndexOfCurrentOffset;\n- (CGPoint)contentOffsetOfIndex:(NSUInteger)index;\n\n// TODO: Edit the page view\n- (void)beginUpdates;\n- (void)endUpdates;\n- (void)insertPagesAtIndexes:(NSIndexSet *)indexes withPageAnimation:(NBSwipePageViewPageAnimation)animated;\n- (void)deletePagesAtIndexes:(NSIndexSet *)indexes withPageAnimation:(NBSwipePageViewPageAnimation)animated;\n- (void)movePageAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex;\n@end\n\n@protocol NBSwipePageViewDelegate <NSObject, UIScrollViewDelegate>\n@optional\n// This delegate will be called after the user stoped the scroll.\n// The index should always equal to currentPage index.\n// The animated is YES if the page is scrolled by user or by scrollToPageAtIndex:animated:YES.\n- (void)swipePageView:(NBSwipePageView *)swipePageView didScrollToPageAtIndex:(NSUInteger)index animated:(BOOL)animated;\n\n// This delegate will be called when the user starts to scroll.\n// The index is depend on the direction of user's swipe. If user is trying to swipe to the left page of the first page\n// or the right page of the last page, the index will be equal to currentPage index.\n// The animated is YES if the page is scrolled by user or by scrollToPageAtIndex:animated:YES.\n- (void)swipePageView:(NBSwipePageView *)swipePageView willScrollToPageAtIndex:(NSUInteger)index animated:(BOOL)animated;\n\n// This delegate will be called after the user scrolled back to the page which just started the scroll.\n- (void)swipePageView:(NBSwipePageView *)swipePageView didCancelScrollFromPageAtIndex:(NSUInteger)index;\n\n- (CGFloat)scaleOfSmallViewModeForSwipePageView:(NBSwipePageView *)swipePageView;  // default is 60%\n\n- (NSUInteger)swipePageView:(NBSwipePageView *)swipePageView willSelectPageAtIndex:(NSUInteger)index;\n- (void)swipePageView:(NBSwipePageView *)swipePageView didSelectPageAtIndex:(NSUInteger)index;\n- (NSUInteger)swipePageView:(NBSwipePageView *)swipePageView willDeselectPageAtIndex:(NSUInteger)index;\n- (void)swipePageView:(NBSwipePageView *)swipePageView didDeselectPageAtIndex:(NSUInteger)index;\n\n// TODO: Action Menu Support\n- (BOOL)swipePageView:(NBSwipePageView *)swipePageView shouldShowMenuForPageAtIndex:(NSUInteger)index;\n- (BOOL)swipePageView:(NBSwipePageView *)swipePageView canPerformAction:(SEL)action forPageAtIndex:(NSUInteger)index withSender:(id)sender;\n- (void)swipePageView:(NBSwipePageView *)swipePageView performAction:(SEL)action forPageAtIndex:(NSUInteger)index withSender:(id)sender;\n\n// TODO: Editing Page View Support\n- (void)swipePageView:(NBSwipePageView *)swipePageView willBeginEditingPageAtIndex:(NSUInteger)index;\n- (void)swipePageView:(NBSwipePageView *)swipePageView didEndEditingPageAtIndex:(NSUInteger)index;\n- (void)swipePageView:(NBSwipePageView *)swipePageView editingStyleForPageAtIndex:(NSUInteger)index;\n\n@end\n\n@protocol NBSwipePageViewDataSource <NSObject>\n@required\n// You should use this data source to tell me how many pages in the swipe page view.\n- (NSUInteger)numberOfPagesInSwipePageView:(NBSwipePageView *)swipePageView;\n// Give me a sheet for the page at index.\n- (NBSwipePageViewSheet *)swipePageView:(NBSwipePageView *)swipePageView sheetForPageAtIndex:(NSUInteger)index;\n\n@optional\n// TODO: Editing page views\n- (BOOL)swipePageView:(NBSwipePageView *)swipePageView canEditPageAtIndex:(NSUInteger)index;\n- (void)swipePageView:(NBSwipePageView *)swipePageView commitEditingStyle:(NBSwipePageViewSheetEditingStyle)editingStyle forPagetAtIndex:(NSUInteger)index;\n\n// TODO: Reording page views\n- (BOOL)swipePageView:(NBSwipePageView *)swipePageView canMovePageAtIndex:(NSUInteger)index;\n- (void)swipePageView:(NBSwipePageView *)swipePageView movePageAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex;\n\n@end\n"
  },
  {
    "path": "Pods/NBSwipePageView/NBSwipePageView/NBSwipePageView.m",
    "content": "//\n//  NBSwipePageView.m\n//  NBSwipePageView\n//\n//  Created by 徐 哲 on 4/25/12.\n//  Copyright (c) 2012 ラクラクテクノロジーズ株式会社 XUZHE.COM. All rights reserved.\n//\n\n#import \"NBSwipePageView.h\"\n\n#define kMaxVisiblePageLength           3\n\n@interface NBSwipePageTouchView : UIView\n\n@property (unsafe_unretained, nonatomic) UIView *touchHandlerView;\n@end\n\n@implementation NBSwipePageTouchView\n\n- (void)initCodes {\n    self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n    self.backgroundColor = [UIColor clearColor];\n}\n\n- (id)init {\n    self = [super init];\n    if (self) {\n        [self initCodes];\n    }\n    return self;\n}\n\n- (id)initWithCoder:(NSCoder *)coder {\n    self = [super initWithCoder:coder];\n    if (self) {\n        [self initCodes];\n    }\n    return self;\n}\n\n- (id)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self initCodes];\n    }\n    return self;\n}\n\n- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {\n\tif (_touchHandlerView && [self pointInside:point withEvent:event]) {\n        UIView *test = [_touchHandlerView hitTest:[self convertPoint:point toView:_touchHandlerView] withEvent:event];\n\t\treturn test == nil ? _touchHandlerView : test;\n\t}\n\treturn nil;\n}\n\n@end\n\n// ======================= NBSwipePageView =======================\n@interface NBSwipePageView (PrivateMethod) <UIScrollViewDelegate, UIGestureRecognizerDelegate>\n\n@end\n\n@implementation NBSwipePageView {\n    NBSwipePageTouchView *_touchView;\n    NBSwipePageViewSheet *_currentPage;\n    NSMutableArray *_visiblePages;\n    NSMutableDictionary *_reusablePages;\n    NSUInteger _cachedNumberOfPages;\n    NSRange _visibleRange;\n    BOOL _isPendingScrolledPageUpdateNotification;\n    CGFloat _cachedScaleRate;\n    NSUInteger _selectedPageIndex;\n}\n\n#pragma mark - Init Codes\n- (void)initCodes {\n    // init settings\n    _currentPageIndex = NSNotFound;\n    _selectedPageIndex = NSNotFound;\n    _allowsSelection = NO;\n    _disableScrollInFullSizeMode = NO;  // defult is do NOT disable scroll in full size mode\n    _isPendingScrolledPageUpdateNotification = NO;\n    \n    _scaleScrollView = CGSizeMake(1.0f, 1.0f);\n    \n    // init views\n    _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];\n    _scrollView.delegate = self;\n    _scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n    _scrollView.backgroundColor = [UIColor clearColor];\n    _scrollView.pagingEnabled = YES;\n    _scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;\n    _scrollView.clipsToBounds = NO;\n    _scrollView.delaysContentTouches = YES;\n    _scrollView.showsVerticalScrollIndicator = NO;\n    _scrollView.showsHorizontalScrollIndicator = NO;\n    _scrollView.alwaysBounceHorizontal = YES;\n    _scrollView.canCancelContentTouches = YES;\n    [self addSubview:_scrollView];\n    \n    [self setPageViewMode:NBSwipePageViewModePageSize]; // default mode is page size\n    \n    // set tap gesture recognizer for page selection\n\tUITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];\n\t[_scrollView addGestureRecognizer:tapRecognizer];\n\ttapRecognizer.delegate = self;\n    \n    UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];\n    [_scrollView addGestureRecognizer:longPressRecognizer];\n    longPressRecognizer.delegate = self;\n\n    // init caches\n    _cachedNumberOfPages = 0;\n    _visiblePages = [NSMutableArray arrayWithCapacity:4];\n    _reusablePages = [NSMutableDictionary dictionary];\n    \n    _visibleRange.location = 0;\n    _visibleRange.length = 0;\n}\n\n- (id)init {\n    self = [super init];\n    if (self) {\n        [self initCodes];\n    }\n    return self;\n}\n\n- (id)initWithCoder:(NSCoder *)coder {\n    self = [super initWithCoder:coder];\n    if (self) {\n        [self initCodes];\n    }\n    return self;\n}\n\n- (id)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self initCodes];\n    }\n    return self;\n}\n\n//- (void)dealloc {\n//    NSLog(@\"Just for release check.\");\n//}\n\n- (void)setFrame:(CGRect)frame {\n    [super setFrame:frame];\n    [self updateContentSize];\n    [self relayoutVisiblePages];\n}\n\n#pragma mark - Delegate Sender\n- (void)delegateDidScrollToPageAtIndex:(NSUInteger)index animated:(BOOL)animated {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:didScrollToPageAtIndex:animated:)]) {\n        [_delegate swipePageView:self didScrollToPageAtIndex:index animated:animated];\n    }\n}\n\n- (void)delegateWillScrollToPageAtIndex:(NSUInteger)index animated:(BOOL)animated {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:willScrollToPageAtIndex:animated:)]) {\n        [_delegate swipePageView:self willScrollToPageAtIndex:index animated:animated];\n    }\n}\n\n- (void)delegateDidCancelScrollFromPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:didCancelScrollFromPageAtIndex:)]) {\n        [_delegate swipePageView:self didCancelScrollFromPageAtIndex:index];\n    }\n}\n\n- (CGFloat)delegateScaleOfSmallViewMode {\n    if (_delegate && [_delegate respondsToSelector:@selector(scaleOfSmallViewModeForSwipePageView:)]) {\n        return [_delegate scaleOfSmallViewModeForSwipePageView:self];\n    }\n    return 0.6; // default is 60%\n}\n\n- (NSUInteger)delegateWillSelectPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:willSelectPageAtIndex:)]) {\n        return [_delegate swipePageView:self willSelectPageAtIndex:index];\n    }\n    return index;\n}\n\n- (void)delegateDidSelectPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:didSelectPageAtIndex:)]) {\n        [_delegate swipePageView:self didSelectPageAtIndex:index];\n    }\n}\n\n- (NSUInteger)delegateWillDeselectPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:willDeselectPageAtIndex:)]) {\n        [_delegate swipePageView:self willDeselectPageAtIndex:index];\n    }\n    return index;\n}\n\n- (void)delegateDidDeselectPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:didDeselectPageAtIndex:)]) {\n        [_delegate swipePageView:self didDeselectPageAtIndex:index];\n    }\n}\n\n// TODO: Action Menu Support\n- (BOOL)delegateShouldShowMenuForPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:shouldShowMenuForPageAtIndex:)]) {\n        return [_delegate swipePageView:self shouldShowMenuForPageAtIndex:index];\n    }\n    return NO;\n}\n\n- (BOOL)delegateCanPerformAction:(SEL)action forPageAtIndex:(NSUInteger)index withSender:(id)sender {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:canPerformAction:forPageAtIndex:withSender:)]) {\n        return [_delegate swipePageView:self canPerformAction:action forPageAtIndex:index withSender:sender];\n    }\n    return NO;\n}\n\n- (void)delegatePerformAction:(SEL)action forPageAtIndex:(NSUInteger)index withSender:(id)sender {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:performAction:forPageAtIndex:withSender:)]) {\n        [_delegate swipePageView:self performAction:action forPageAtIndex:index withSender:sender];\n    }\n}\n\n// TODO: Editing Page View Support\n- (void)delegateWillBeginEditingPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:willBeginEditingPageAtIndex:)]) {\n        [_delegate swipePageView:self willBeginEditingPageAtIndex:index];\n    }\n}\n\n- (void)delegateDidEndEditingPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:didEndEditingPageAtIndex:)]) {\n        [_delegate swipePageView:self didEndEditingPageAtIndex:index];\n    }\n}\n\n- (void)delegateEditingStyleForPageAtIndex:(NSUInteger)index {\n    if (_delegate && [_delegate respondsToSelector:@selector(swipePageView:editingStyleForPageAtIndex:)]) {\n        [_delegate swipePageView:self editingStyleForPageAtIndex:index];\n    }\n}\n\n#pragma mark - Datasource Sender\n// Required Datasource\n- (NSUInteger)dataSourceLoadNumberOfPages {\n    NSUInteger pages = [_dataSource numberOfPagesInSwipePageView:self];\n    if (_cachedNumberOfPages == pages) {\n        return pages;\n    }\n    _cachedNumberOfPages = pages;\n    [self updateContentSize];\n    return pages;\n}\n\n- (NBSwipePageViewSheet *)dataSourceSheetForPageAtIndex:(NSUInteger)index {\n    NBSwipePageViewSheet *sheet = [_dataSource swipePageView:self sheetForPageAtIndex:index];\n    NSAssert(sheet != nil, @\"The sheet for page at index: %d must not be nil\", index);\n    return sheet;\n}\n\n// Option Datasource\n// TODO: Editing page views\n- (BOOL)dataSourceCanEditPageAtIndex:(NSUInteger)index {\n    if (_dataSource && [_dataSource respondsToSelector:@selector(swipePageView:canEditPageAtIndex:)]) {\n        return [_dataSource swipePageView:self canEditPageAtIndex:index];\n    }\n    return NO;\n}\n\n- (void)dataSourceCommitEditingStyle:(NBSwipePageViewSheetEditingStyle)editingStyle forPagetAtIndex:(NSUInteger)index {\n    if (_dataSource && [_dataSource respondsToSelector:@selector(swipePageView:commitEditingStyle:forPagetAtIndex:)]) {\n        [_dataSource swipePageView:self commitEditingStyle:editingStyle forPagetAtIndex:index];\n    }\n}\n\n// TODO: Reording page views\n- (BOOL)dataSourceCanMovePageAtIndex:(NSUInteger)index {\n    if (_dataSource && [_dataSource respondsToSelector:@selector(swipePageView:canMovePageAtIndex:)]) {\n        return [_dataSource swipePageView:self canMovePageAtIndex:index];\n    }\n    return NO;\n}\n\n- (void)dataSourceMovePageAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex {\n    if (_dataSource && [_dataSource respondsToSelector:@selector(swipePageView:movePageAtIndex:toIndex:)]) {\n        [_dataSource swipePageView:self movePageAtIndex:fromIndex toIndex:toIndex];\n    }\n}\n\n#pragma mark - Private Logic Methods\n- (void)updateContentSize {\n    _scrollView.contentSize = CGSizeMake((CGFloat)_cachedNumberOfPages * _scrollView.bounds.size.width, _scrollView.bounds.size.height);\n    \n    if (_pageTailView) {\n        CGRect frame = _pageTailView.frame;\n        frame.origin.x = _scrollView.contentSize.width + self.bounds.size.width - CGRectGetMaxX(_scrollView.frame);\n        _pageTailView.frame = frame;\n    }\n    if (_pageHeaderView) {\n        CGRect frame = _pageHeaderView.frame;\n        frame.origin.x = -frame.size.width - CGRectGetMinX(_scrollView.frame);\n        _pageHeaderView.frame = frame;\n    }\n}\n\n- (void)resizeScrollView {\n    CGRect frame = _scrollView.frame;\n    CGFloat width = self.bounds.size.width * _scaleScrollView.width;\n    width += (self.bounds.size.width - width) * 0.25f;\n    frame.size.width = ceilf(width);\n    frame.size.height = ceilf(self.bounds.size.height * _scaleScrollView.height);\n    frame.origin.x = floorf((self.bounds.size.width - frame.size.width) * 0.5);\n    frame.origin.y = floorf((self.bounds.size.height - frame.size.height) * 0.5);\n    _scrollView.frame = frame;\n    [self updateContentSize];\n    [self relayoutVisiblePages];\n}\n\n- (void)setFrameForPage:(NBSwipePageViewSheet *)page atIndex:(NSInteger)index {\n    page.transform = CGAffineTransformMakeScale(_cachedScaleRate, _cachedScaleRate);\n\tCGFloat contentOffset = (CGFloat)index * _scrollView.frame.size.width;\n\tCGFloat margin = floorf((_scrollView.frame.size.width - page.frame.size.width) * 0.5f); \n\tCGRect frame = page.frame;\n\tframe.origin.x = floorf(contentOffset + margin);\n\tpage.frame = frame;\n    page.margin = margin;\n}\n\n- (void)relayoutVisiblePages {\n    for (NSUInteger i = 0; i < [_visiblePages count]; i++) {\n        NBSwipePageViewSheet *sheet = _visiblePages[i];\n        NSUInteger index = _visibleRange.location + i;\n        if (index >= _cachedNumberOfPages) {\n            continue;\n        }\n        [self setFrameForPage:sheet atIndex:index];\n    }\n}\n\n- (void)shiftPage:(UIView*)page withOffset:(CGFloat)offset {\n    CGRect frame = page.frame;\n    frame.origin.x += offset;\n    page.frame = frame;\n}\n\n- (NBSwipePageViewSheet *)loadPageAtIndex:(NSInteger)index insertIntoVisibleIndex:(NSInteger)visibleIndex {\n\tNBSwipePageViewSheet *visiblePage = [self dataSourceSheetForPageAtIndex:index];\n\t\n\t// add the page to the visible pages array\n\t[_visiblePages insertObject:visiblePage atIndex:visibleIndex];\n    \n    return visiblePage;\n}\n\n- (CGPoint)contentOffsetOfIndex:(NSUInteger)index {\n    return CGPointMake(_scrollView.bounds.size.width * (CGFloat)index, 0.0f);\n}\n\n- (NSUInteger)pageIndexOfCurrentOffset {\n    CGFloat pageWidth = _scrollView.bounds.size.width;\n    return floor((_scrollView.contentOffset.x - pageWidth * 0.5f) / pageWidth) + 1.0f;\n}\n\n- (void)preparePage:(NBSwipePageViewSheet *)page forMode:(NBSwipePageViewMode)mode {\n    // When a page is presented in NBSwipePageViewMode mode, it is scaled up and is moved to a different superview. \n    // As it captures the full screen, it may be cropped to fit inside its new superview's frame. \n    // So when moving it back to NBSwipePageViewMode, we restore the page's proportions to prepare it to Deck mode.  \n\tif (mode == NBSwipePageViewModePageSize && \n        CGAffineTransformEqualToTransform(page.transform, CGAffineTransformIdentity)) {\n        // TODO: \n//        page.frame = page.identityFrame;\n\t}\n}\n\n// add a page to the scroll view at a given index. No adjustments are made to existing pages offsets. \n- (void)addPageToScrollView:(NBSwipePageViewSheet *)page atIndex:(NSInteger)index {\n    // inserting a page into the scroll view is in HGPageScrollViewModeDeck by definition (the scroll is the \"deck\")\n    [self preparePage:page forMode:NBSwipePageViewModePageSize];\n    \n\t// configure the page frame\n    [self setFrameForPage:page atIndex:index];\n    \n    // add the page to the scroller\n\t[_scrollView insertSubview:page atIndex:0];\n}\n\n- (void)addToReusablePages:(NBSwipePageViewSheet *)page {\n    NSMutableSet *set = _reusablePages[page.reuseIdentifier];\n    if (set) {\n        // if already have one reusable page, do not add another one.\n        if ([set count] == 0) {\n            [set addObject:page];\n        }\n    } else {\n        set = [NSMutableSet setWithObject:page];\n        _reusablePages[page.reuseIdentifier] = set;\n    }\n}\n\n// Update Visible Pages\n- (void)updateVisiblePages:(BOOL)force {\n    NSRange lastVisibleRange = _visibleRange;\n    [self updateVisibleRange:[self pageIndexOfCurrentOffset]];\n    \n    if (NSEqualRanges(lastVisibleRange, _visibleRange) && !force) {\n        return;\n    }\n    \n    BOOL initVisiblePages = ([_visiblePages count] == 0);\n    if (!initVisiblePages) {\n        NSUInteger maxRange = NSMaxRange(lastVisibleRange);\n        for (NSUInteger i = maxRange - 1; i < maxRange && i >= lastVisibleRange.location; i--) {\n            if (!NSLocationInRange(i, _visibleRange)) {\n                NSUInteger ii = i - lastVisibleRange.location;\n                NBSwipePageViewSheet *page = _visiblePages[ii];\n                [page removeFromSuperview];\n                [self addToReusablePages:page];\n                [_visiblePages removeObjectAtIndex:ii];\n            }\n        }\n    }\n    for (NSUInteger i = _visibleRange.location; i < NSMaxRange(_visibleRange); i++) {\n        if (initVisiblePages || !NSLocationInRange(i, lastVisibleRange)) {\n            NBSwipePageViewSheet *page = [self loadPageAtIndex:i insertIntoVisibleIndex:i - _visibleRange.location];\n            // add the page to the scroll view (to make it actually visible)\n            [self addPageToScrollView:page atIndex:i];\n        }\n    }\n}\n\n- (void)updateScrolledPageIndex:(NSUInteger)index animated:(BOOL)animated {\n    NBSwipePageViewSheet *page = [self swipePageViewSheetAtIndex:index];\n    if (page) {\n        // notify delegate\n        [self delegateWillScrollToPageAtIndex:index animated:animated];   // TODO:\n                \n        // set the page selector (page control)\n        _currentPageIndex = index;\n        \n        // set selected page\n        _currentPage = page;\n        \n        //\tNSLog(@\"selectedPage: 0x%x (index %d)\", page, index );\n        \n        if (_scrollView.dragging || _scrollView.decelerating) {\n            _isPendingScrolledPageUpdateNotification = YES;\n        } else {\n            _isPendingScrolledPageUpdateNotification = NO;\n            [self delegateDidScrollToPageAtIndex:_currentPageIndex animated:animated];\n        }\n    }\n}\n\n- (NSUInteger)indexForVisiblePage:(NBSwipePageViewSheet *)page {\n\tNSUInteger index = [_visiblePages indexOfObject:page];\n\tif (index != NSNotFound) {\n        return _visibleRange.location + index;\n    }\n    return NSNotFound;\n}\n\n#pragma mark - Set Views\n- (void)setBackgroundView:(UIView *)backgroundView {\n    if ([backgroundView isEqual:_backgroundView]) {\n        return;\n    }\n    if (_backgroundView) {\n        [_backgroundView removeFromSuperview];\n    }\n    _backgroundView = backgroundView;\n    if (backgroundView) {\n        backgroundView.frame = self.bounds;\n        backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;   // should always autoresize background view\n        [self insertSubview:backgroundView atIndex:0];\n    }\n}\n\n- (void)setPageHeaderView:(UIView *)pageHeaderView {\n    if ([pageHeaderView isEqual:_pageHeaderView]) {\n        return;\n    }\n    if (_pageHeaderView) {\n        [_pageHeaderView removeFromSuperview];\n    }\n    _pageHeaderView = pageHeaderView;\n    if (pageHeaderView) {\n        [_scrollView addSubview:pageHeaderView];\n    }\n}\n\n- (void)setPageTailView:(UIView *)pageTailView {\n    if ([pageTailView isEqual:_pageTailView]) {\n        return;\n    }\n    if (_pageTailView) {\n        [_pageTailView removeFromSuperview];\n    }\n    _pageTailView = pageTailView;\n    if (pageTailView) {\n        [_scrollView addSubview:pageTailView];\n    }\n}\n\n- (void)setPageTitleView:(UIView *)pageTitleView {\n    if ([pageTitleView isEqual:_pageTitleView]) {\n        return;\n    }\n    if (_pageTitleView) {\n        [_pageTitleView removeFromSuperview];\n    }\n    _pageTitleView = pageTitleView;\n    if (pageTitleView) {\n        [self addSubview:pageTitleView];\n    }\n}\n\n#pragma mark - Set Propertys\n- (void)setPageViewMode:(NBSwipePageViewMode)pageViewMode {\n    [self setPageViewMode:pageViewMode animated:NO];\n}\n\n#pragma mark - Public Methods\n- (NBSwipePageViewSheet *)dequeueReusableCellWithIdentifier:(NSString *)reuseIdentifier {\n    NSMutableSet *reusableSet = _reusablePages[reuseIdentifier];\n    NBSwipePageViewSheet *reusableSheet = [reusableSet anyObject];\n    if (reusableSheet) {\n        [reusableSheet prepareForReuse];\n        [reusableSet removeObject:reusableSheet];\n        return reusableSheet;\n    }\n    return nil;\n}\n\n- (void)updateVisibleRange:(NSUInteger)currentIndex {\n    if (currentIndex >= NSNotFound || currentIndex == 0) {\n        _currentPageIndex = 0;\n        _visibleRange.location = 0;\n        _visibleRange.length = MIN(kMaxVisiblePageLength - 1, _cachedNumberOfPages);\n    } else if (currentIndex >= _cachedNumberOfPages) {\n        _currentPageIndex = _cachedNumberOfPages - 1;\n        _visibleRange.location = MIN(_currentPageIndex - 1, _cachedNumberOfPages - 1);\n        _visibleRange.length = MIN(kMaxVisiblePageLength - 1, _cachedNumberOfPages);\n    } else {\n        _visibleRange.location = currentIndex - 1;\n        _visibleRange.length = MIN(MIN(kMaxVisiblePageLength, _cachedNumberOfPages), _cachedNumberOfPages - _visibleRange.location);\n    }\n}\n\n- (void)setScaleScrollView:(CGSize)scaleScrollView {\n    if (!CGSizeEqualToSize(scaleScrollView, _scaleScrollView)) {\n        _scaleScrollView = scaleScrollView;\n        [self resizeScrollView];\n    }\n}\n\n- (void)reloadData {\n    [_reusablePages removeAllObjects];\n    [_visiblePages removeAllObjects];\n    [[_scrollView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n        *stop = NO;\n        if ([obj isEqual:_pageTailView] || [obj isEqual:_pageHeaderView]) {\n            return ;\n        }\n        [obj removeFromSuperview];\n    }];\n\n    if (_pageViewMode == NBSwipePageViewModePageSize) {\n        _cachedScaleRate = [self delegateScaleOfSmallViewMode];\n    } else {\n        _cachedScaleRate = 1.0f;\n    }\n    [self resizeScrollView];\n\n    [self dataSourceLoadNumberOfPages];\n    _selectedPageIndex = NSNotFound;\n    if (_cachedNumberOfPages == 0 || _cachedNumberOfPages >= NSNotFound) {\n        _currentPage = nil;\n        _currentPageIndex = NSNotFound;\n        return;\n    }\n    \n    // this will load any additional views which become visible  \n    [self updateVisiblePages:YES];\n    _currentPage = [self swipePageViewSheetAtIndex:_currentPageIndex];\n    \n    // reloading the data implicitely resets the viewMode to UIPageScrollViewModeDeck.\n    // here we restore the view mode in case this is not the first time reloadData is called (i.e. if there if a _selectedPage).   \n//    if (_selectedPage && _viewMode==HGPageScrollViewModePage) { \n//        _viewMode = HGPageScrollViewModeDeck;\n//        [self setViewMode:HGPageScrollViewModePage animated:NO];\n//    }\n    if (_pageViewMode == NBSwipePageViewModePageSize && _visibleViewEffectBlock) {\n        [_visiblePages enumerateObjectsUsingBlock:_visibleViewEffectBlock];\n    }\n}\n\n- (void)scrollToPageAtIndex:(NSUInteger)index animated:(BOOL)animated {\n    _isAnimating = animated;\n    [_scrollView setContentOffset:[self contentOffsetOfIndex:index] animated:animated];\n    if (!animated) {\n        // do not call this method when animated,\n        // because it will be called in UIScrollViewDelegate.\n        [self updateScrolledPageIndex:index animated:animated];\n    }\n}\n\n- (NBSwipePageViewSheet *)swipePageViewSheetAtIndex:(NSUInteger)index {\n    if (index >= _cachedNumberOfPages) {\n        // Out of bounds\n        return nil;\n    }\n    if (NSLocationInRange(index, _visibleRange)) {\n        return _visiblePages[index - _visibleRange.location];\n    }\n    return [self dataSourceSheetForPageAtIndex:index];\n}\n\n- (void)setPageViewMode:(NBSwipePageViewMode)pageViewMode animated:(BOOL)animated {\n    _pageViewMode = pageViewMode;\n    if (pageViewMode == NBSwipePageViewModeFullSize) {\n        if (_touchView) {\n            [_touchView removeFromSuperview];\n            _touchView = nil;\n        }\n    } else {\n        if (!_touchView) {\n            _touchView = [[NBSwipePageTouchView alloc] initWithFrame:self.bounds];\n            _touchView.touchHandlerView = _scrollView;\n            _touchView.autoresizingMask = _scrollView.autoresizingMask;\n            [self addSubview:_touchView];\n        }\n    }\n    // TODO: add animated support\n}\n\n- (BOOL)selectPageAtIndex:(NSUInteger)index animated:(BOOL)animated scrollToMiddle:(BOOL)scrollToMiddle {\n    if (![self deselectPageAtIndex:_selectedPageIndex animated:animated]) {\n        return NO;\n    }\n    NSUInteger shouldSelectIndex = [self delegateWillSelectPageAtIndex:index];\n    if (shouldSelectIndex >= NSNotFound) {\n        return NO;\n    } else if (shouldSelectIndex != _currentPageIndex && scrollToMiddle) {\n        [self delegateDidSelectPageAtIndex:shouldSelectIndex];  // should be called before currentIndex changed by scrollToPageAtIndex:\n        [self scrollToPageAtIndex:shouldSelectIndex animated:animated];\n    } else {\n        [self delegateDidSelectPageAtIndex:shouldSelectIndex];\n    }\n    _selectedPageIndex = shouldSelectIndex;\n    return YES;\n}\n\n- (BOOL)deselectPageAtIndex:(NSUInteger)index animated:(BOOL)animated {\n    if (index >= NSNotFound) {\n        return YES;\n    }\n    NSUInteger shouldDeselectIndex = [self delegateWillDeselectPageAtIndex:_selectedPageIndex];\n    if (shouldDeselectIndex >= NSNotFound) {\n        return NO;\n    }\n    [self delegateDidDeselectPageAtIndex:_selectedPageIndex];\n    _selectedPageIndex = NSNotFound;\n    return YES;\n}\n\n// TODO: Edit the page view\n- (void)beginUpdates {\n    \n}\n\n- (void)endUpdates {\n    \n}\n\n- (void)insertPagesAtIndexes:(NSIndexSet *)indexes withPageAnimation:(NBSwipePageViewPageAnimation)animated {\n    \n}\n\n- (void)deletePagesAtIndexes:(NSIndexSet *)indexes withPageAnimation:(NBSwipePageViewPageAnimation)animated {\n    \n}\n\n- (void)movePageAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex {\n    \n}\n\n#pragma mark - UIScrollViewDelegate\n\n- (void)scrollViewDidScroll:(UIScrollView *)scrollView {\n    [self updateVisiblePages:NO];\n    \n    if (_pageViewMode == NBSwipePageViewModePageSize && _visibleViewEffectBlock) {\n        [_visiblePages enumerateObjectsUsingBlock:_visibleViewEffectBlock];\n    }\n    \n    if (_delegate && [_delegate respondsToSelector:@selector(scrollViewDidScroll:)]) {\n        [_delegate scrollViewDidScroll:scrollView];\n    }\n}\n\n- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {\n    _isAnimating = NO;\n    [self updateScrolledPageIndex:[self pageIndexOfCurrentOffset] animated:YES];\n    if (_delegate && [_delegate respondsToSelector:@selector(scrollViewDidEndScrollingAnimation:)]) {\n        [_delegate scrollViewDidEndScrollingAnimation:scrollView];\n    }\n}\n\n- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {\n    if (!decelerate) {\n        [self updateScrolledPageIndex:[self pageIndexOfCurrentOffset] animated:NO];\n        if (_isPendingScrolledPageUpdateNotification) {\n            _isPendingScrolledPageUpdateNotification = NO;\n            [self delegateDidScrollToPageAtIndex:_currentPageIndex animated:NO];\n        }\n    }\n    if (_delegate && [_delegate respondsToSelector:@selector(scrollViewDidEndDragging:willDecelerate:)]) {\n        [_delegate scrollViewDidEndDragging:scrollView willDecelerate:decelerate];\n    }\n}\n\n- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {\n    [self updateScrolledPageIndex:[self pageIndexOfCurrentOffset] animated:YES];\n    if (_isPendingScrolledPageUpdateNotification) {\n        _isPendingScrolledPageUpdateNotification = NO;\n        [self delegateDidScrollToPageAtIndex:_currentPageIndex animated:YES];\n    }\n    if (_delegate && [_delegate respondsToSelector:@selector(scrollViewDidEndDecelerating:)]) {\n        [_delegate scrollViewDidEndDecelerating:scrollView];\n    }\n}\n\n- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {\n    if (_delegate && [_delegate respondsToSelector:@selector(scrollViewWillBeginDecelerating:)]) {\n        [_delegate scrollViewWillBeginDecelerating:scrollView];\n    }\n}\n\n- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {\n    if (_delegate && [_delegate respondsToSelector:@selector(scrollViewWillBeginDragging:)]) {\n        [_delegate scrollViewWillBeginDragging:scrollView];\n    }\n}\n\n- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {\n    if (_delegate && [_delegate respondsToSelector:@selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:)]) {\n        [_delegate scrollViewWillEndDragging:scrollView withVelocity:velocity targetContentOffset:targetContentOffset];\n    }\n}\n\n#pragma make - Get or Set some propeties of UIScrollView\n- (CGPoint)contentOffset {\n    return _scrollView.contentOffset;\n}\n\n- (CGSize)contentSize {\n    return _scrollView.contentSize;\n}\n\n- (BOOL)dragging {\n    return _scrollView.dragging;\n}\n\n- (BOOL)tracking {\n    return _scrollView.tracking;\n}\n\n- (BOOL)decelerating {\n    return _scrollView.decelerating;\n}\n\n- (UIEdgeInsets)contentInset {\n    return _scrollView.contentInset;\n}\n\n- (BOOL)pagingEnabled {\n    return _scrollView.pagingEnabled;\n}\n\n- (BOOL)scrollEnabled {\n    return _scrollView.scrollEnabled;\n}\n\n- (BOOL)delaysContentTouches {\n    return _scrollView.delaysContentTouches;\n}\n\n- (void)setContentInset:(UIEdgeInsets)contentInset {\n    _scrollView.contentInset = contentInset;\n}\n\n- (void)setContentOffset:(CGPoint)contentOffset {\n    _scrollView.contentOffset = contentOffset;\n}\n\n- (void)setContentSize:(CGSize)contentSize {\n    _scrollView.contentSize = contentSize;\n}\n\n- (void)setPagingEnabled:(BOOL)pagingEnabled {\n    _scrollView.pagingEnabled = pagingEnabled;\n}\n\n- (void)setScrollEnabled:(BOOL)scrollEnabled {\n    _scrollView.scrollEnabled = scrollEnabled;\n}\n\n- (void)setDelaysContentTouches:(BOOL)delaysContentTouches {\n    _scrollView.delaysContentTouches = delaysContentTouches;\n}\n\n- (NSArray *)visiblePages {\n    return [NSArray arrayWithArray:_visiblePages];\n}\n\n#pragma mark -\n#pragma mark Handling Touches\n\n- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {\n\tif (_pageViewMode == NBSwipePageViewModePageSize && !_scrollView.decelerating && !_scrollView.dragging && !_isAnimating) {\n\t\treturn YES;\t\n\t}\n\treturn NO;\t\n}\n\n- (void)tapGestureHandler:(UITapGestureRecognizer *)recognizer  {\n    if (_currentPageIndex >= NSNotFound) {\n        return;\n    }\n    if (recognizer.state == UIGestureRecognizerStateBegan) {\n        [self deselectPageAtIndex:_selectedPageIndex animated:YES];\n    } else if (recognizer.state == UIGestureRecognizerStateRecognized) {\n        for (NBSwipePageViewSheet *page in _visiblePages) {\n            if ([page pointInside:[recognizer locationInView:page] withEvent:nil]) {\n                [self selectPageAtIndex:[self indexForVisiblePage:page] animated:YES scrollToMiddle:YES];\n                return;\n            }\n        }\n    }\n}\n\n@end\n"
  },
  {
    "path": "Pods/NBSwipePageView/NBSwipePageView/NBSwipePageViewSheet.h",
    "content": "//\n//  NBSwipePageSheetView.h\n//  NBSwipePageView\n//\n//  Created by 徐 哲 on 4/25/12.\n//  Copyright (c) 2012 ラクラクテクノロジーズ株式会社 XUZHE.COM. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\ntypedef enum {\n    NBSwipePageViewSheetEditingStyleNone,\n    NBSwipePageViewSheetEditingStyleDelete,\n    NBSwipePageViewSheetEditingStyleInsert\n} NBSwipePageViewSheetEditingStyle;\n\n@interface NBSwipePageViewSheet : UIView\n\n@property (readonly, strong, nonatomic) UIView *contentView;\n@property (readonly, strong, nonatomic) NSString *reuseIdentifier;\n@property (strong, nonatomic) UIView *backgroundView;\n@property (assign, nonatomic) CGFloat margin;\n\n- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier;\n- (void)prepareForReuse;\n\n@end\n"
  },
  {
    "path": "Pods/NBSwipePageView/NBSwipePageView/NBSwipePageViewSheet.m",
    "content": "//\n//  NBSwipePageSheetView.m\n//  NBSwipePageView\n//\n//  Created by 徐 哲 on 4/25/12.\n//  Copyright (c) 2012 ラクラクテクノロジーズ株式会社 XUZHE.COM. All rights reserved.\n//\n\n#import \"NBSwipePageViewSheet.h\"\n\n@implementation NBSwipePageViewSheet\n@synthesize contentView = _contentView;\n@synthesize reuseIdentifier = _reuseIdentifier;\n@synthesize backgroundView = _backgroundView;\n@synthesize margin = _margin;\n\n- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {\n    self = [super initWithFrame:frame];\n    if (self) {\n        self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n        \n        _reuseIdentifier = reuseIdentifier;\n        _contentView = [[UIView alloc] initWithFrame:self.bounds];\n        _contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n        _contentView.backgroundColor = [UIColor clearColor];    // set default color to clear color\n        [self addSubview:_contentView];\n    }\n    return self;\n}\n\n- (void)setBackgroundView:(UIView *)backgroundView {\n    if (_backgroundView) {\n        [_backgroundView removeFromSuperview];\n    }\n    _backgroundView = backgroundView;\n    if (_backgroundView) {\n        [self insertSubview:_backgroundView atIndex:0];\n    }\n}\n\n/*\n// Only override drawRect: if you perform custom drawing.\n// An empty implementation adversely affects performance during animation.\n- (void)drawRect:(CGRect)rect\n{\n    // Drawing code\n}\n*/\n\n- (void)prepareForReuse {\n    _margin = 0.0f;\n    self.transform = CGAffineTransformIdentity;\n}\n\n@end\n"
  },
  {
    "path": "Pods/NBSwipePageView/README.md",
    "content": "# About NBSwipePageView\n\nThis is the same page view using in [iWeekly](http://itunes.apple.com/cn/app/iweekly-zhou-mo-hua-bao/id453405026) for the photo gallery view.\n\nThere are a lot of _TODOs_ in the project, since it's not finished yet. Although the basic functions are OK to use, things like re-order, add or delete pages with animation, etc still need more work.\n\nBefore I have time to finishe the project, I am not going to give any example to show how to use the project.\n\nBut as you can see, the project is very similar to UITableView, so if you do understand how to use UITableView, I don't think it's going to be too hard in using the project.\n\n===============\n"
  },
  {
    "path": "Pods/Pods.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t01149FA585A714569093657B85C1A350 /* NSSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 77DE1165EA844BC34C8346F58A8F0A5A /* NSSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t03592DBD830EF65C1AE796A0697F46E1 /* NSMutableSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B6823A4FF3E238DF1137CACBF4C46821 /* NSMutableSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0692E35064349B6FA8C1EFD50B7B1F45 /* A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = BBAFE8B59E5658A456D1604C4787586A /* A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0A288C4D0ED296320F86966D45E8D5E9 /* A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8BBC3B21EF93C94C0503F37C7C203B /* A2DynamicDelegate.m */; };\n\t\t0B1447334EF3FCD08E783F72251FC1EB /* NBSwipePageViewSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D68729D6462BB5D59BABD3601B0FDAB1 /* NBSwipePageViewSheet.m */; settings = {COMPILER_FLAGS = \"-DOS_OBJECT_USE_OBJC=0\"; }; };\n\t\t0F0550B889810895B32BCA065DD6CFC4 /* NSObject+BKAssociatedObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 46EFDC605BDEB95E1A9B82AEF274BD22 /* NSObject+BKAssociatedObjects.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t0F4EF1312B94E272652DA22CCDF8E52D /* NBSwipePageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5668070ABC17B99F0C429987153668DD /* NBSwipePageView.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t12F7B27FB2422AC6413E77B7F98812C4 /* UIWebView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6CCC50142DC73264F3B2564675B4D /* UIWebView+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t149B9A4BDC7FB1FEDE01059764F1D584 /* NSMutableIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 614B88C7540695BA460B2D36A1B05409 /* NSMutableIndexSet+BlocksKit.m */; };\n\t\t14BAF7AE2D75E18559739D71CFF10C84 /* NSMutableOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C5B6808ACA80A0065D2603DE05E203C /* NSMutableOrderedSet+BlocksKit.m */; };\n\t\t1BE7CD118C7601DDD1629547E938ED5E /* NSMutableArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 43F3926287AD7C1C9985FAB1B0D59DB8 /* NSMutableArray+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t1FACCDACF70A7AF5AAED0F35D9AC0642 /* BKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC4BA1E19DC4B493F408D635ABBF62B /* BKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t213BDA0BFDC7FA8B00CD8395940400E2 /* NSOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = C5D6B3E5DEC02F3C9DE27DD8628A08DC /* NSOrderedSet+BlocksKit.m */; };\n\t\t28A0BEDF1DB5E178DEAF1D03F718557B /* NSArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EEFAAEE862815EC5E9B4F1DCBA6F17FE /* NSArray+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t2CE50403797DDF662DAE1DBDEF30A901 /* UIGestureRecognizer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 740B1526DF32677371C7A2DF105FAE4C /* UIGestureRecognizer+BlocksKit.m */; };\n\t\t3221D2FE805E7A2E298CB3B9CC4E6AF0 /* A2BlockInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = DB66189290187545EEDE2D7F1AE90FB7 /* A2BlockInvocation.m */; };\n\t\t33C43B6C020C6A9CC4EE5C22650C550E /* MFMessageComposeViewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 634D4C0636DCCAFFBD36469460668E7E /* MFMessageComposeViewController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t37A05672C67666332CF82130E9A461C2 /* MFMailComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C50D73F1B981F3B038DF62C2F60A37C /* MFMailComposeViewController+BlocksKit.m */; };\n\t\t3CF5DE3EC202C9678B0120CB3CC93FE3 /* NSIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA4B445912F0749A52EE63D4E05B6D8 /* NSIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t3DF2307D736F5A334CC5392A06B142C0 /* NSMutableIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 1252D073D9C58FC751C660D1703BEB3E /* NSMutableIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t423CD981F80732AA6C075F7F633CFBBD /* NSURLConnection+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CBCCDF78C46DB5F52421D85CFB809EF /* NSURLConnection+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t455F71D95890455473B3AF068D2003D1 /* UIPopoverController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E033364536F067BF46B9EC6E167D278 /* UIPopoverController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t484776F8B4CF9A89AA18C6874E246DF6 /* NSObject+A2BlockDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F00475220127F6FF8443D9DB465FC35 /* NSObject+A2BlockDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5467BA80FE76E5928DBC92FCA8F319DD /* UIAlertView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 33D000060EBEA0877D9D3D4D8C13A946 /* UIAlertView+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t58F4C1C349633CE28F242E5FC8518636 /* NSTimer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = E7722EACAD43F5A9B234A80B32CB11C8 /* NSTimer+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t61898DE2259DB9ECC1F23C538FCE7BBB /* UIImagePickerController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = FC58DFFAE0793B2B3045B4732E2CD03E /* UIImagePickerController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t6A242E93B8569A42628B0F8B369273CA /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22506F41FE03B0B7B4ECC1B0E4929BE1 /* MessageUI.framework */; };\n\t\t6DCBF5A3569BA772FBAB3379A00464D2 /* UIBarButtonItem+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AEB0CB1AE9B06F4C7C8CC1B15C6B7B1 /* UIBarButtonItem+BlocksKit.m */; };\n\t\t6F2746610AB8BBFA162997F6AED950F7 /* NSTimer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DDB454F9D30684567C7FF47639F70CB /* NSTimer+BlocksKit.m */; };\n\t\t6F6DD1FA269EB37E6CC9722C59AFBA5B /* NSArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 10DF349A029A74E7E70830C83EEFF691 /* NSArray+BlocksKit.m */; };\n\t\t6FE51449ABAA54EF33F44CE810BAD905 /* UITextField+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 7988F167AF2CB0EF3EDDE88B91F9FD6A /* UITextField+BlocksKit.m */; };\n\t\t73B9779AEDACEB09223A4474DCE9F330 /* NBSwipePageView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 34A1A8EBB6B2BE8DD6FEEF00D06054E4 /* NBSwipePageView-dummy.m */; };\n\t\t77515111C9AFE11AB1287761150614F5 /* UITextField+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 881990B0A7EDA7C9A0FFFA8211B4F700 /* UITextField+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t79588DF8F673302C22F3C81278A0B98E /* NSObject+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C50D0F868E786D1E086980E0BC9F1AC /* NSObject+A2BlockDelegate.m */; };\n\t\t7D2D914EEDBCFF0F225F680F75D5694E /* NSObject+BKAssociatedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = C01BD2B1CC9309D65230900534DF7C40 /* NSObject+BKAssociatedObjects.m */; };\n\t\t7E8DF508233A1A7A663933939A6D5FE8 /* MFMessageComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 11F45121D62B3EEBDB4A186317A573F5 /* MFMessageComposeViewController+BlocksKit.m */; };\n\t\t80D7B80A26162132A65EE9167AEAE94F /* UIControl+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 695220B18921774E4B9C4485DFE2ECEB /* UIControl+BlocksKit.m */; };\n\t\t8517BE33C254EE906D831579DD8C72B3 /* A2BlockInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B042EB2E64EB498398AA91AA1EC6B7 /* A2BlockInvocation.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t992944F68F8CC38008B2C611A0107FDE /* UIView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 6333B315B5444FC7ADE1236E2FD2BACF /* UIView+BlocksKit.m */; };\n\t\t9C639C4D43608486642208566DF05AF5 /* NSObject+BKBlockObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = BE2997B16159B7B5802CEB7CCA4F21BA /* NSObject+BKBlockObservation.m */; };\n\t\t9F9CFBD464085524F455C4D19211E69E /* NSMutableDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C10BF9320F1F503BFC80200239C3D561 /* NSMutableDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9FADA4523CE1BFD6E588D400285BAC0E /* NSURLConnection+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 199655B8F3ACCD00C27AECE62B405726 /* NSURLConnection+BlocksKit.m */; };\n\t\tA026405E495CA2EFF557A70D1515A689 /* NSOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 785F482D4C83DF5936253BF9509A20E9 /* NSOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA02CE14E5350ABACF361F7EB4696AA42 /* NBSwipePageViewSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 32142D64333FD6C119110D9B0E9EB867 /* NBSwipePageViewSheet.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA1968C04873813D7CEB076FDFCBC479C /* UIControl+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FB5DA3DA29B7F25193DE7E4F59EB59F /* UIControl+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA229FCF9FEBBF16977B33AB2FEF23830 /* UIBarButtonItem+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 364BD1494421E8B900DB4DA2A40A600F /* UIBarButtonItem+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA2FC6CF3F13C4799D04AC89ADD403AED /* NSMutableSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = A77A230DD6AF310C41E9C858AAE6F935 /* NSMutableSet+BlocksKit.m */; };\n\t\tA5CA4DD465154E16BF094796B56E7E52 /* NSMutableDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 309914CD0767C7A8A1C8506412C735E0 /* NSMutableDictionary+BlocksKit.m */; };\n\t\tA5DBFF76EDEC1BCDA0351DCE8407ACA9 /* NSDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 85724216A6B67A7836F8691210733738 /* NSDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB0B0BE27896A5E10D51303AB299BA5FF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04E16E7749E7745FBA9CD27032FD363F /* Foundation.framework */; };\n\t\tB25F8085B440D68735024862A5F6AD9F /* UIGestureRecognizer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 484C959134D86C5B50B0B97A88AAE812 /* UIGestureRecognizer+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB6947A884743188A3E6C81EA172D4DCE /* NSInvocation+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 311AC030AF157B5858A0858B3867F546 /* NSInvocation+BlocksKit.m */; };\n\t\tB74B90AB5E2F98B82040E5B791B1E513 /* NSMutableArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D85C27D9CC6618BD9D712896EE1FE19 /* NSMutableArray+BlocksKit.m */; };\n\t\tBE2BE12ECE566C14238DD7845DEDD84B /* BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4893F44277A4C37383B3D17C95B83FCD /* BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tC237814AF824CAE9A479AD0F4DB151AA /* NSCache+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 637FD4034E4411441D61D4D6183AE090 /* NSCache+BlocksKit.m */; };\n\t\tC2874BD5AC24AB6CF628418E5C251A22 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04E16E7749E7745FBA9CD27032FD363F /* Foundation.framework */; };\n\t\tC2BFF405BE0AEE5C66C90E6FD8B10415 /* BlocksKit+UIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B528444B31C485419EDB3ED4A45C4C0E /* BlocksKit+UIKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tC7C6F46E66572803459747BD9121EB20 /* UIActionSheet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = F0E6B57E0BE3118912DF7A17CEAFBC55 /* UIActionSheet+BlocksKit.m */; };\n\t\tC7E0B31A7916AABF23A79CB06E1F5272 /* NSObject+BKBlockObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = 97A6FD59B94F19837F47228762F60765 /* NSObject+BKBlockObservation.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tC9B6328F023FF633ABA6879D50FC90DE /* NSInvocation+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A58BA0A4C3DFDB1C8868C9C470884B0 /* NSInvocation+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tCB21742066F67241062931F6F568D071 /* UIImagePickerController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = BA03FA5E90293A8A242661B033CE510B /* UIImagePickerController+BlocksKit.m */; };\n\t\tCC7E36A547AEE6456442AF7F5C60E2F9 /* NSMutableOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C789E1C7C1C97EC081F026883D17433D /* NSMutableOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD53F7D2E487057DC8EDA59A6DD54FF7A /* NSSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CAD913AE197086CEEE294B9F5502653 /* NSSet+BlocksKit.m */; };\n\t\tD6017E171F626B176414E066B800C1AF /* NSObject+BKBlockExecution.m in Sources */ = {isa = PBXBuildFile; fileRef = 33BC212BC63A8F33CB9874D61425C2A6 /* NSObject+BKBlockExecution.m */; };\n\t\tD7AFF4F4AA1900F1FDD8CCC28367CD1C /* BlocksKit+MessageUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 21F951F391EDAD89F86B953947D86B2F /* BlocksKit+MessageUI.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD9D88ED515332296D0EE0C7129EDAAA0 /* NSCache+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E4F4971BCDCF11039D997201D02D1D /* NSCache+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDB21A546C83305719CD699E00E36AA3F /* BlocksKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 13383F03F54652A8599B82F086D0331C /* BlocksKit-dummy.m */; };\n\t\tDD97B6AC8570C045E8327C7E8118E0A4 /* NBSwipePageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5821F4D4451349CFC8D88517CA3DF30C /* NBSwipePageView.m */; settings = {COMPILER_FLAGS = \"-DOS_OBJECT_USE_OBJC=0\"; }; };\n\t\tE09FAE444FA9AAC6F1F0295F5092A2FC /* UIWebView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 79ADF0B4DB0DE9BCBB8A4498A6DDA10D /* UIWebView+BlocksKit.m */; };\n\t\tE0C060F23AA82483327B74CCD9B72676 /* Pods-testPasterImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB4C3670351DE9A3F9CFABDB83B1EA8 /* Pods-testPasterImage-dummy.m */; };\n\t\tE32DDF26286A2F7F77F8B90754373696 /* UIActionSheet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 0440BC37D29AEF8B3F714A656300E905 /* UIActionSheet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tEC783E9B9EA9DDFC778E4AA0D5065097 /* NSObject+A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 143CCC414A02F0DD2FCC137AF1BC9187 /* NSObject+A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tEE57724381B2462C7604C9DB685E5A0F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04E16E7749E7745FBA9CD27032FD363F /* Foundation.framework */; };\n\t\tEF87B1AB7825C0B9244F364CEAC1EF31 /* MFMailComposeViewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B46E021A91570EABA92EE2A75C32BE12 /* MFMailComposeViewController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tF09A8E1234A6B7D95122D5DAEA3870FF /* NSObject+A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 937C6B15BB3B289271417E4A31D2CC56 /* NSObject+A2DynamicDelegate.m */; };\n\t\tF222764F0ED41EF907EE5D439DA182A1 /* UIAlertView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 9910D6958916F2D04CC043A0E4984AFD /* UIAlertView+BlocksKit.m */; };\n\t\tF3040EE21525146A4AABD68CFF758D23 /* NSDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B22BB841E22A6C72E1D7FBF093387257 /* NSDictionary+BlocksKit.m */; };\n\t\tF5C8F609901D5C71DC95528248D1D0F3 /* UIPopoverController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 407D6DC4ACE2CC84080DB3E3C8CA73A5 /* UIPopoverController+BlocksKit.m */; };\n\t\tF60CAF477B4F4573C02F675C42DFFD2D /* UIView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = F3E890DE7A3601C854CC8D25DDAED06D /* UIView+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tF6516207095BAB4A00C52187CFAD097B /* NSObject+BKBlockExecution.h in Headers */ = {isa = PBXBuildFile; fileRef = B510783B568A6D55FCAAFE7A8BBB35EC /* NSObject+BKBlockExecution.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tF67325523D6DDBF4AF0C19A02ED3FDBD /* NSIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EF4CE8CFA59BBEAF766F3A03296E09C /* NSIndexSet+BlocksKit.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t371ED08071AFFDADE018659914EF5E2E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA1A7295DF2A99609DA0EEBF5E83233D;\n\t\t\tremoteInfo = BlocksKit;\n\t\t};\n\t\tCA315BBEDAB8A2B4955C90AD54907F2F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9C6466D79F40B07C4D15FDE68159545C;\n\t\t\tremoteInfo = NBSwipePageView;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t012283CDA7885A24CB83F6722C2C21AB /* Pods-testPasterImage-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-testPasterImage-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\t0440BC37D29AEF8B3F714A656300E905 /* UIActionSheet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIActionSheet+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIActionSheet+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t04E16E7749E7745FBA9CD27032FD363F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };\n\t\t0F00475220127F6FF8443D9DB465FC35 /* NSObject+A2BlockDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSObject+A2BlockDelegate.h\"; path = \"BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h\"; sourceTree = \"<group>\"; };\n\t\t0FC4BA1E19DC4B493F408D635ABBF62B /* BKMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BKMacros.h; path = BlocksKit/Core/BKMacros.h; sourceTree = \"<group>\"; };\n\t\t10DF349A029A74E7E70830C83EEFF691 /* NSArray+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSArray+BlocksKit.m\"; path = \"BlocksKit/Core/NSArray+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t1169513FD91CD57AB8AC5BB9E020DDB3 /* NBSwipePageView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NBSwipePageView.xcconfig; sourceTree = \"<group>\"; };\n\t\t11F45121D62B3EEBDB4A186317A573F5 /* MFMessageComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"MFMessageComposeViewController+BlocksKit.m\"; path = \"BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t1252D073D9C58FC751C660D1703BEB3E /* NSMutableIndexSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSMutableIndexSet+BlocksKit.h\"; path = \"BlocksKit/Core/NSMutableIndexSet+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t13383F03F54652A8599B82F086D0331C /* BlocksKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"BlocksKit-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t143CCC414A02F0DD2FCC137AF1BC9187 /* NSObject+A2DynamicDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSObject+A2DynamicDelegate.h\"; path = \"BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h\"; sourceTree = \"<group>\"; };\n\t\t199655B8F3ACCD00C27AECE62B405726 /* NSURLConnection+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSURLConnection+BlocksKit.m\"; path = \"BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t21F951F391EDAD89F86B953947D86B2F /* BlocksKit+MessageUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"BlocksKit+MessageUI.h\"; path = \"BlocksKit/BlocksKit+MessageUI.h\"; sourceTree = \"<group>\"; };\n\t\t22506F41FE03B0B7B4ECC1B0E4929BE1 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/MessageUI.framework; sourceTree = DEVELOPER_DIR; };\n\t\t29C868A366BA357EA2ECCFFE176E0BBF /* Pods-testPasterImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-testPasterImage.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2AEB0CB1AE9B06F4C7C8CC1B15C6B7B1 /* UIBarButtonItem+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIBarButtonItem+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIBarButtonItem+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t2C50D0F868E786D1E086980E0BC9F1AC /* NSObject+A2BlockDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSObject+A2BlockDelegate.m\"; path = \"BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.m\"; sourceTree = \"<group>\"; };\n\t\t2DDB454F9D30684567C7FF47639F70CB /* NSTimer+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSTimer+BlocksKit.m\"; path = \"BlocksKit/Core/NSTimer+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t2EF4CE8CFA59BBEAF766F3A03296E09C /* NSIndexSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSIndexSet+BlocksKit.m\"; path = \"BlocksKit/Core/NSIndexSet+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t309914CD0767C7A8A1C8506412C735E0 /* NSMutableDictionary+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSMutableDictionary+BlocksKit.m\"; path = \"BlocksKit/Core/NSMutableDictionary+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t311AC030AF157B5858A0858B3867F546 /* NSInvocation+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSInvocation+BlocksKit.m\"; path = \"BlocksKit/Core/NSInvocation+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t32142D64333FD6C119110D9B0E9EB867 /* NBSwipePageViewSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBSwipePageViewSheet.h; path = NBSwipePageView/NBSwipePageViewSheet.h; sourceTree = \"<group>\"; };\n\t\t33BC212BC63A8F33CB9874D61425C2A6 /* NSObject+BKBlockExecution.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSObject+BKBlockExecution.m\"; path = \"BlocksKit/Core/NSObject+BKBlockExecution.m\"; sourceTree = \"<group>\"; };\n\t\t33D000060EBEA0877D9D3D4D8C13A946 /* UIAlertView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIAlertView+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIAlertView+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t34A1A8EBB6B2BE8DD6FEEF00D06054E4 /* NBSwipePageView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"NBSwipePageView-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t364BD1494421E8B900DB4DA2A40A600F /* UIBarButtonItem+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIBarButtonItem+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t3A58BA0A4C3DFDB1C8868C9C470884B0 /* NSInvocation+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSInvocation+BlocksKit.h\"; path = \"BlocksKit/Core/NSInvocation+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t3C50D73F1B981F3B038DF62C2F60A37C /* MFMailComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"MFMailComposeViewController+BlocksKit.m\"; path = \"BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t407D6DC4ACE2CC84080DB3E3C8CA73A5 /* UIPopoverController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIPopoverController+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIPopoverController+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t41D6CCC50142DC73264F3B2564675B4D /* UIWebView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIWebView+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIWebView+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t43F3926287AD7C1C9985FAB1B0D59DB8 /* NSMutableArray+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSMutableArray+BlocksKit.h\"; path = \"BlocksKit/Core/NSMutableArray+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t46EFDC605BDEB95E1A9B82AEF274BD22 /* NSObject+BKAssociatedObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSObject+BKAssociatedObjects.h\"; path = \"BlocksKit/Core/NSObject+BKAssociatedObjects.h\"; sourceTree = \"<group>\"; };\n\t\t484C959134D86C5B50B0B97A88AAE812 /* UIGestureRecognizer+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIGestureRecognizer+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t4893F44277A4C37383B3D17C95B83FCD /* BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BlocksKit.h; path = BlocksKit/BlocksKit.h; sourceTree = \"<group>\"; };\n\t\t5668070ABC17B99F0C429987153668DD /* NBSwipePageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBSwipePageView.h; path = NBSwipePageView/NBSwipePageView.h; sourceTree = \"<group>\"; };\n\t\t5821F4D4451349CFC8D88517CA3DF30C /* NBSwipePageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBSwipePageView.m; path = NBSwipePageView/NBSwipePageView.m; sourceTree = \"<group>\"; };\n\t\t5C5B6808ACA80A0065D2603DE05E203C /* NSMutableOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSMutableOrderedSet+BlocksKit.m\"; path = \"BlocksKit/Core/NSMutableOrderedSet+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t5D85C27D9CC6618BD9D712896EE1FE19 /* NSMutableArray+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSMutableArray+BlocksKit.m\"; path = \"BlocksKit/Core/NSMutableArray+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t5D8BBC3B21EF93C94C0503F37C7C203B /* A2DynamicDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = A2DynamicDelegate.m; path = BlocksKit/DynamicDelegate/A2DynamicDelegate.m; sourceTree = \"<group>\"; };\n\t\t5E033364536F067BF46B9EC6E167D278 /* UIPopoverController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIPopoverController+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIPopoverController+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t614B88C7540695BA460B2D36A1B05409 /* NSMutableIndexSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSMutableIndexSet+BlocksKit.m\"; path = \"BlocksKit/Core/NSMutableIndexSet+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t6333B315B5444FC7ADE1236E2FD2BACF /* UIView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIView+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIView+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t634D4C0636DCCAFFBD36469460668E7E /* MFMessageComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"MFMessageComposeViewController+BlocksKit.h\"; path = \"BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t637FD4034E4411441D61D4D6183AE090 /* NSCache+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSCache+BlocksKit.m\"; path = \"BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t695220B18921774E4B9C4485DFE2ECEB /* UIControl+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIControl+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIControl+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t6CBCCDF78C46DB5F52421D85CFB809EF /* NSURLConnection+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSURLConnection+BlocksKit.h\"; path = \"BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t740B1526DF32677371C7A2DF105FAE4C /* UIGestureRecognizer+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIGestureRecognizer+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t745574CB3EE981C509D1E2696FFE092F /* libNBSwipePageView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libNBSwipePageView.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t77DE1165EA844BC34C8346F58A8F0A5A /* NSSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSSet+BlocksKit.h\"; path = \"BlocksKit/Core/NSSet+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t785F482D4C83DF5936253BF9509A20E9 /* NSOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSOrderedSet+BlocksKit.h\"; path = \"BlocksKit/Core/NSOrderedSet+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t7988F167AF2CB0EF3EDDE88B91F9FD6A /* UITextField+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UITextField+BlocksKit.m\"; path = \"BlocksKit/UIKit/UITextField+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t79ADF0B4DB0DE9BCBB8A4498A6DDA10D /* UIWebView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIWebView+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIWebView+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t85724216A6B67A7836F8691210733738 /* NSDictionary+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSDictionary+BlocksKit.h\"; path = \"BlocksKit/Core/NSDictionary+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t881990B0A7EDA7C9A0FFFA8211B4F700 /* UITextField+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UITextField+BlocksKit.h\"; path = \"BlocksKit/UIKit/UITextField+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t8CAD913AE197086CEEE294B9F5502653 /* NSSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSSet+BlocksKit.m\"; path = \"BlocksKit/Core/NSSet+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t937C6B15BB3B289271417E4A31D2CC56 /* NSObject+A2DynamicDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSObject+A2DynamicDelegate.m\"; path = \"BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.m\"; sourceTree = \"<group>\"; };\n\t\t93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t940DBD94A05688547906B48F4FBF5CAF /* Pods-testPasterImage-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-testPasterImage-resources.sh\"; sourceTree = \"<group>\"; };\n\t\t97A6FD59B94F19837F47228762F60765 /* NSObject+BKBlockObservation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSObject+BKBlockObservation.h\"; path = \"BlocksKit/Core/NSObject+BKBlockObservation.h\"; sourceTree = \"<group>\"; };\n\t\t9910D6958916F2D04CC043A0E4984AFD /* UIAlertView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIAlertView+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIAlertView+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\t9FA4B445912F0749A52EE63D4E05B6D8 /* NSIndexSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSIndexSet+BlocksKit.h\"; path = \"BlocksKit/Core/NSIndexSet+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\t9FB5DA3DA29B7F25193DE7E4F59EB59F /* UIControl+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIControl+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIControl+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tA08A8DB765006DD2C2B3B2C680FCF822 /* BlocksKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BlocksKit.xcconfig; sourceTree = \"<group>\"; };\n\t\tA20A06929A4BC668B1088FBFA4C78044 /* BlocksKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"BlocksKit-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tA77A230DD6AF310C41E9C858AAE6F935 /* NSMutableSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSMutableSet+BlocksKit.m\"; path = \"BlocksKit/Core/NSMutableSet+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\tA855DC09868C0AF098946E945FF59AE8 /* libBlocksKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBlocksKit.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB22BB841E22A6C72E1D7FBF093387257 /* NSDictionary+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSDictionary+BlocksKit.m\"; path = \"BlocksKit/Core/NSDictionary+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\tB46E021A91570EABA92EE2A75C32BE12 /* MFMailComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"MFMailComposeViewController+BlocksKit.h\"; path = \"BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tB510783B568A6D55FCAAFE7A8BBB35EC /* NSObject+BKBlockExecution.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSObject+BKBlockExecution.h\"; path = \"BlocksKit/Core/NSObject+BKBlockExecution.h\"; sourceTree = \"<group>\"; };\n\t\tB528444B31C485419EDB3ED4A45C4C0E /* BlocksKit+UIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"BlocksKit+UIKit.h\"; path = \"BlocksKit/BlocksKit+UIKit.h\"; sourceTree = \"<group>\"; };\n\t\tB6823A4FF3E238DF1137CACBF4C46821 /* NSMutableSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSMutableSet+BlocksKit.h\"; path = \"BlocksKit/Core/NSMutableSet+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tBA03FA5E90293A8A242661B033CE510B /* UIImagePickerController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIImagePickerController+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIImagePickerController+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\tBBAFE8B59E5658A456D1604C4787586A /* A2DynamicDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = A2DynamicDelegate.h; path = BlocksKit/DynamicDelegate/A2DynamicDelegate.h; sourceTree = \"<group>\"; };\n\t\tBE2997B16159B7B5802CEB7CCA4F21BA /* NSObject+BKBlockObservation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSObject+BKBlockObservation.m\"; path = \"BlocksKit/Core/NSObject+BKBlockObservation.m\"; sourceTree = \"<group>\"; };\n\t\tC01BD2B1CC9309D65230900534DF7C40 /* NSObject+BKAssociatedObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSObject+BKAssociatedObjects.m\"; path = \"BlocksKit/Core/NSObject+BKAssociatedObjects.m\"; sourceTree = \"<group>\"; };\n\t\tC10BF9320F1F503BFC80200239C3D561 /* NSMutableDictionary+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSMutableDictionary+BlocksKit.h\"; path = \"BlocksKit/Core/NSMutableDictionary+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tC4AF27C25935F8F90BBC88CD0DAA19C3 /* Pods-testPasterImage-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-testPasterImage-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\tC5D6B3E5DEC02F3C9DE27DD8628A08DC /* NSOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSOrderedSet+BlocksKit.m\"; path = \"BlocksKit/Core/NSOrderedSet+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\tC71C3F131A855C7CD9143B43D775A182 /* Pods-testPasterImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-testPasterImage.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC789E1C7C1C97EC081F026883D17433D /* NSMutableOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSMutableOrderedSet+BlocksKit.h\"; path = \"BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tC9E4F4971BCDCF11039D997201D02D1D /* NSCache+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSCache+BlocksKit.h\"; path = \"BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tD574531AE45C3322A21EEB8628986242 /* Pods-testPasterImage-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-testPasterImage-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\tD68729D6462BB5D59BABD3601B0FDAB1 /* NBSwipePageViewSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBSwipePageViewSheet.m; path = NBSwipePageView/NBSwipePageViewSheet.m; sourceTree = \"<group>\"; };\n\t\tDAB4C3670351DE9A3F9CFABDB83B1EA8 /* Pods-testPasterImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-testPasterImage-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tDB66189290187545EEDE2D7F1AE90FB7 /* A2BlockInvocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = A2BlockInvocation.m; path = BlocksKit/DynamicDelegate/A2BlockInvocation.m; sourceTree = \"<group>\"; };\n\t\tE2B042EB2E64EB498398AA91AA1EC6B7 /* A2BlockInvocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = A2BlockInvocation.h; path = BlocksKit/DynamicDelegate/A2BlockInvocation.h; sourceTree = \"<group>\"; };\n\t\tE4F9ABD6A796F565BA3FE9C92C648F98 /* NBSwipePageView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"NBSwipePageView-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tE7722EACAD43F5A9B234A80B32CB11C8 /* NSTimer+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSTimer+BlocksKit.h\"; path = \"BlocksKit/Core/NSTimer+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tE7F011EB4C9F94875BC0C31D693729FE /* libPods-testPasterImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-testPasterImage.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEEFAAEE862815EC5E9B4F1DCBA6F17FE /* NSArray+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSArray+BlocksKit.h\"; path = \"BlocksKit/Core/NSArray+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tF0E6B57E0BE3118912DF7A17CEAFBC55 /* UIActionSheet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"UIActionSheet+BlocksKit.m\"; path = \"BlocksKit/UIKit/UIActionSheet+BlocksKit.m\"; sourceTree = \"<group>\"; };\n\t\tF3E890DE7A3601C854CC8D25DDAED06D /* UIView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIView+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIView+BlocksKit.h\"; sourceTree = \"<group>\"; };\n\t\tFC58DFFAE0793B2B3045B4732E2CD03E /* UIImagePickerController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"UIImagePickerController+BlocksKit.h\"; path = \"BlocksKit/UIKit/UIImagePickerController+BlocksKit.h\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t87D63FC8B5A5501852974C5E1F3328A6 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC2874BD5AC24AB6CF628418E5C251A22 /* Foundation.framework in Frameworks */,\n\t\t\t\t6A242E93B8569A42628B0F8B369273CA /* MessageUI.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8B550906D4EEAFEF38AACE8AD606D2D9 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB0B0BE27896A5E10D51303AB299BA5FF /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF4195BEBE6C06638A02A058FF98AB60E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEE57724381B2462C7604C9DB685E5A0F /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t093D43DE6B698080B8BB8193E7BF0D35 /* BlocksKit */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA61995544C61F7AE8945ACCFAD4CC9B0 /* Core */,\n\t\t\t\t4A56F381179B4028D52F5C10EACF9B04 /* DynamicDelegate */,\n\t\t\t\tCC333F97E94301B7BED7C872F3A6BB41 /* MessageUI */,\n\t\t\t\tEA235F8A517EEBF391EF796EECC81405 /* Support Files */,\n\t\t\t\t5CC37690864A96B8082CF9D4A626D531 /* UIKit */,\n\t\t\t);\n\t\t\tpath = BlocksKit;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0AF8CF74B0922138036D97199BCF293D /* iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t04E16E7749E7745FBA9CD27032FD363F /* Foundation.framework */,\n\t\t\t\t22506F41FE03B0B7B4ECC1B0E4929BE1 /* MessageUI.framework */,\n\t\t\t);\n\t\t\tname = iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1129A49CEBFD30BE6B62FA28D7F4059E /* NBSwipePageView */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5668070ABC17B99F0C429987153668DD /* NBSwipePageView.h */,\n\t\t\t\t5821F4D4451349CFC8D88517CA3DF30C /* NBSwipePageView.m */,\n\t\t\t\t32142D64333FD6C119110D9B0E9EB867 /* NBSwipePageViewSheet.h */,\n\t\t\t\tD68729D6462BB5D59BABD3601B0FDAB1 /* NBSwipePageViewSheet.m */,\n\t\t\t\tE4270B0AD4C62C0E70D034DF108FC1BB /* Support Files */,\n\t\t\t);\n\t\t\tpath = NBSwipePageView;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0AF8CF74B0922138036D97199BCF293D /* iOS */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4A56F381179B4028D52F5C10EACF9B04 /* DynamicDelegate */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE2B042EB2E64EB498398AA91AA1EC6B7 /* A2BlockInvocation.h */,\n\t\t\t\tDB66189290187545EEDE2D7F1AE90FB7 /* A2BlockInvocation.m */,\n\t\t\t\tBBAFE8B59E5658A456D1604C4787586A /* A2DynamicDelegate.h */,\n\t\t\t\t5D8BBC3B21EF93C94C0503F37C7C203B /* A2DynamicDelegate.m */,\n\t\t\t\tC9E4F4971BCDCF11039D997201D02D1D /* NSCache+BlocksKit.h */,\n\t\t\t\t637FD4034E4411441D61D4D6183AE090 /* NSCache+BlocksKit.m */,\n\t\t\t\t0F00475220127F6FF8443D9DB465FC35 /* NSObject+A2BlockDelegate.h */,\n\t\t\t\t2C50D0F868E786D1E086980E0BC9F1AC /* NSObject+A2BlockDelegate.m */,\n\t\t\t\t143CCC414A02F0DD2FCC137AF1BC9187 /* NSObject+A2DynamicDelegate.h */,\n\t\t\t\t937C6B15BB3B289271417E4A31D2CC56 /* NSObject+A2DynamicDelegate.m */,\n\t\t\t\t6CBCCDF78C46DB5F52421D85CFB809EF /* NSURLConnection+BlocksKit.h */,\n\t\t\t\t199655B8F3ACCD00C27AECE62B405726 /* NSURLConnection+BlocksKit.m */,\n\t\t\t);\n\t\t\tname = DynamicDelegate;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5BCA2EACE5018207A51B743600AE4CC9 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t093D43DE6B698080B8BB8193E7BF0D35 /* BlocksKit */,\n\t\t\t\t1129A49CEBFD30BE6B62FA28D7F4059E /* NBSwipePageView */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CC37690864A96B8082CF9D4A626D531 /* UIKit */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB528444B31C485419EDB3ED4A45C4C0E /* BlocksKit+UIKit.h */,\n\t\t\t\t0440BC37D29AEF8B3F714A656300E905 /* UIActionSheet+BlocksKit.h */,\n\t\t\t\tF0E6B57E0BE3118912DF7A17CEAFBC55 /* UIActionSheet+BlocksKit.m */,\n\t\t\t\t33D000060EBEA0877D9D3D4D8C13A946 /* UIAlertView+BlocksKit.h */,\n\t\t\t\t9910D6958916F2D04CC043A0E4984AFD /* UIAlertView+BlocksKit.m */,\n\t\t\t\t364BD1494421E8B900DB4DA2A40A600F /* UIBarButtonItem+BlocksKit.h */,\n\t\t\t\t2AEB0CB1AE9B06F4C7C8CC1B15C6B7B1 /* UIBarButtonItem+BlocksKit.m */,\n\t\t\t\t9FB5DA3DA29B7F25193DE7E4F59EB59F /* UIControl+BlocksKit.h */,\n\t\t\t\t695220B18921774E4B9C4485DFE2ECEB /* UIControl+BlocksKit.m */,\n\t\t\t\t484C959134D86C5B50B0B97A88AAE812 /* UIGestureRecognizer+BlocksKit.h */,\n\t\t\t\t740B1526DF32677371C7A2DF105FAE4C /* UIGestureRecognizer+BlocksKit.m */,\n\t\t\t\tFC58DFFAE0793B2B3045B4732E2CD03E /* UIImagePickerController+BlocksKit.h */,\n\t\t\t\tBA03FA5E90293A8A242661B033CE510B /* UIImagePickerController+BlocksKit.m */,\n\t\t\t\t5E033364536F067BF46B9EC6E167D278 /* UIPopoverController+BlocksKit.h */,\n\t\t\t\t407D6DC4ACE2CC84080DB3E3C8CA73A5 /* UIPopoverController+BlocksKit.m */,\n\t\t\t\t881990B0A7EDA7C9A0FFFA8211B4F700 /* UITextField+BlocksKit.h */,\n\t\t\t\t7988F167AF2CB0EF3EDDE88B91F9FD6A /* UITextField+BlocksKit.m */,\n\t\t\t\tF3E890DE7A3601C854CC8D25DDAED06D /* UIView+BlocksKit.h */,\n\t\t\t\t6333B315B5444FC7ADE1236E2FD2BACF /* UIView+BlocksKit.m */,\n\t\t\t\t41D6CCC50142DC73264F3B2564675B4D /* UIWebView+BlocksKit.h */,\n\t\t\t\t79ADF0B4DB0DE9BCBB8A4498A6DDA10D /* UIWebView+BlocksKit.m */,\n\t\t\t);\n\t\t\tname = UIKit;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t776E2A08A21AF1309108AF65E833B8E1 /* Pods-testPasterImage */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC4AF27C25935F8F90BBC88CD0DAA19C3 /* Pods-testPasterImage-acknowledgements.markdown */,\n\t\t\t\t012283CDA7885A24CB83F6722C2C21AB /* Pods-testPasterImage-acknowledgements.plist */,\n\t\t\t\tDAB4C3670351DE9A3F9CFABDB83B1EA8 /* Pods-testPasterImage-dummy.m */,\n\t\t\t\tD574531AE45C3322A21EEB8628986242 /* Pods-testPasterImage-frameworks.sh */,\n\t\t\t\t940DBD94A05688547906B48F4FBF5CAF /* Pods-testPasterImage-resources.sh */,\n\t\t\t\tC71C3F131A855C7CD9143B43D775A182 /* Pods-testPasterImage.debug.xcconfig */,\n\t\t\t\t29C868A366BA357EA2ECCFFE176E0BBF /* Pods-testPasterImage.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-testPasterImage\";\n\t\t\tpath = \"Target Support Files/Pods-testPasterImage\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7DB346D0F39D3F0E887471402A8071AB = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */,\n\t\t\t\t433CD3331B6C3787F473C941B61FC68F /* Frameworks */,\n\t\t\t\t5BCA2EACE5018207A51B743600AE4CC9 /* Pods */,\n\t\t\t\t9A5CCE0B8EE1965591F137FAB3A255A2 /* Products */,\n\t\t\t\tFD79ADB775FA1C18313058307DBD5B48 /* Targets Support Files */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9A5CCE0B8EE1965591F137FAB3A255A2 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA855DC09868C0AF098946E945FF59AE8 /* libBlocksKit.a */,\n\t\t\t\t745574CB3EE981C509D1E2696FFE092F /* libNBSwipePageView.a */,\n\t\t\t\tE7F011EB4C9F94875BC0C31D693729FE /* libPods-testPasterImage.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA61995544C61F7AE8945ACCFAD4CC9B0 /* Core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0FC4BA1E19DC4B493F408D635ABBF62B /* BKMacros.h */,\n\t\t\t\t4893F44277A4C37383B3D17C95B83FCD /* BlocksKit.h */,\n\t\t\t\tEEFAAEE862815EC5E9B4F1DCBA6F17FE /* NSArray+BlocksKit.h */,\n\t\t\t\t10DF349A029A74E7E70830C83EEFF691 /* NSArray+BlocksKit.m */,\n\t\t\t\t85724216A6B67A7836F8691210733738 /* NSDictionary+BlocksKit.h */,\n\t\t\t\tB22BB841E22A6C72E1D7FBF093387257 /* NSDictionary+BlocksKit.m */,\n\t\t\t\t9FA4B445912F0749A52EE63D4E05B6D8 /* NSIndexSet+BlocksKit.h */,\n\t\t\t\t2EF4CE8CFA59BBEAF766F3A03296E09C /* NSIndexSet+BlocksKit.m */,\n\t\t\t\t3A58BA0A4C3DFDB1C8868C9C470884B0 /* NSInvocation+BlocksKit.h */,\n\t\t\t\t311AC030AF157B5858A0858B3867F546 /* NSInvocation+BlocksKit.m */,\n\t\t\t\t43F3926287AD7C1C9985FAB1B0D59DB8 /* NSMutableArray+BlocksKit.h */,\n\t\t\t\t5D85C27D9CC6618BD9D712896EE1FE19 /* NSMutableArray+BlocksKit.m */,\n\t\t\t\tC10BF9320F1F503BFC80200239C3D561 /* NSMutableDictionary+BlocksKit.h */,\n\t\t\t\t309914CD0767C7A8A1C8506412C735E0 /* NSMutableDictionary+BlocksKit.m */,\n\t\t\t\t1252D073D9C58FC751C660D1703BEB3E /* NSMutableIndexSet+BlocksKit.h */,\n\t\t\t\t614B88C7540695BA460B2D36A1B05409 /* NSMutableIndexSet+BlocksKit.m */,\n\t\t\t\tC789E1C7C1C97EC081F026883D17433D /* NSMutableOrderedSet+BlocksKit.h */,\n\t\t\t\t5C5B6808ACA80A0065D2603DE05E203C /* NSMutableOrderedSet+BlocksKit.m */,\n\t\t\t\tB6823A4FF3E238DF1137CACBF4C46821 /* NSMutableSet+BlocksKit.h */,\n\t\t\t\tA77A230DD6AF310C41E9C858AAE6F935 /* NSMutableSet+BlocksKit.m */,\n\t\t\t\t46EFDC605BDEB95E1A9B82AEF274BD22 /* NSObject+BKAssociatedObjects.h */,\n\t\t\t\tC01BD2B1CC9309D65230900534DF7C40 /* NSObject+BKAssociatedObjects.m */,\n\t\t\t\tB510783B568A6D55FCAAFE7A8BBB35EC /* NSObject+BKBlockExecution.h */,\n\t\t\t\t33BC212BC63A8F33CB9874D61425C2A6 /* NSObject+BKBlockExecution.m */,\n\t\t\t\t97A6FD59B94F19837F47228762F60765 /* NSObject+BKBlockObservation.h */,\n\t\t\t\tBE2997B16159B7B5802CEB7CCA4F21BA /* NSObject+BKBlockObservation.m */,\n\t\t\t\t785F482D4C83DF5936253BF9509A20E9 /* NSOrderedSet+BlocksKit.h */,\n\t\t\t\tC5D6B3E5DEC02F3C9DE27DD8628A08DC /* NSOrderedSet+BlocksKit.m */,\n\t\t\t\t77DE1165EA844BC34C8346F58A8F0A5A /* NSSet+BlocksKit.h */,\n\t\t\t\t8CAD913AE197086CEEE294B9F5502653 /* NSSet+BlocksKit.m */,\n\t\t\t\tE7722EACAD43F5A9B234A80B32CB11C8 /* NSTimer+BlocksKit.h */,\n\t\t\t\t2DDB454F9D30684567C7FF47639F70CB /* NSTimer+BlocksKit.m */,\n\t\t\t);\n\t\t\tname = Core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCC333F97E94301B7BED7C872F3A6BB41 /* MessageUI */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t21F951F391EDAD89F86B953947D86B2F /* BlocksKit+MessageUI.h */,\n\t\t\t\tB46E021A91570EABA92EE2A75C32BE12 /* MFMailComposeViewController+BlocksKit.h */,\n\t\t\t\t3C50D73F1B981F3B038DF62C2F60A37C /* MFMailComposeViewController+BlocksKit.m */,\n\t\t\t\t634D4C0636DCCAFFBD36469460668E7E /* MFMessageComposeViewController+BlocksKit.h */,\n\t\t\t\t11F45121D62B3EEBDB4A186317A573F5 /* MFMessageComposeViewController+BlocksKit.m */,\n\t\t\t);\n\t\t\tname = MessageUI;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE4270B0AD4C62C0E70D034DF108FC1BB /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1169513FD91CD57AB8AC5BB9E020DDB3 /* NBSwipePageView.xcconfig */,\n\t\t\t\t34A1A8EBB6B2BE8DD6FEEF00D06054E4 /* NBSwipePageView-dummy.m */,\n\t\t\t\tE4F9ABD6A796F565BA3FE9C92C648F98 /* NBSwipePageView-prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/NBSwipePageView\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEA235F8A517EEBF391EF796EECC81405 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA08A8DB765006DD2C2B3B2C680FCF822 /* BlocksKit.xcconfig */,\n\t\t\t\t13383F03F54652A8599B82F086D0331C /* BlocksKit-dummy.m */,\n\t\t\t\tA20A06929A4BC668B1088FBFA4C78044 /* BlocksKit-prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/BlocksKit\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFD79ADB775FA1C18313058307DBD5B48 /* Targets Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t776E2A08A21AF1309108AF65E833B8E1 /* Pods-testPasterImage */,\n\t\t\t);\n\t\t\tname = \"Targets Support Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t3CD240D680E588C3F917736F4D3360EA /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0F4EF1312B94E272652DA22CCDF8E52D /* NBSwipePageView.h in Headers */,\n\t\t\t\tA02CE14E5350ABACF361F7EB4696AA42 /* NBSwipePageViewSheet.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9F9FD509AAD735AC4AB664BAA7649312 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8517BE33C254EE906D831579DD8C72B3 /* A2BlockInvocation.h in Headers */,\n\t\t\t\t0692E35064349B6FA8C1EFD50B7B1F45 /* A2DynamicDelegate.h in Headers */,\n\t\t\t\t1FACCDACF70A7AF5AAED0F35D9AC0642 /* BKMacros.h in Headers */,\n\t\t\t\tD7AFF4F4AA1900F1FDD8CCC28367CD1C /* BlocksKit+MessageUI.h in Headers */,\n\t\t\t\tC2BFF405BE0AEE5C66C90E6FD8B10415 /* BlocksKit+UIKit.h in Headers */,\n\t\t\t\tBE2BE12ECE566C14238DD7845DEDD84B /* BlocksKit.h in Headers */,\n\t\t\t\tEF87B1AB7825C0B9244F364CEAC1EF31 /* MFMailComposeViewController+BlocksKit.h in Headers */,\n\t\t\t\t33C43B6C020C6A9CC4EE5C22650C550E /* MFMessageComposeViewController+BlocksKit.h in Headers */,\n\t\t\t\t28A0BEDF1DB5E178DEAF1D03F718557B /* NSArray+BlocksKit.h in Headers */,\n\t\t\t\tD9D88ED515332296D0EE0C7129EDAAA0 /* NSCache+BlocksKit.h in Headers */,\n\t\t\t\tA5DBFF76EDEC1BCDA0351DCE8407ACA9 /* NSDictionary+BlocksKit.h in Headers */,\n\t\t\t\t3CF5DE3EC202C9678B0120CB3CC93FE3 /* NSIndexSet+BlocksKit.h in Headers */,\n\t\t\t\tC9B6328F023FF633ABA6879D50FC90DE /* NSInvocation+BlocksKit.h in Headers */,\n\t\t\t\t1BE7CD118C7601DDD1629547E938ED5E /* NSMutableArray+BlocksKit.h in Headers */,\n\t\t\t\t9F9CFBD464085524F455C4D19211E69E /* NSMutableDictionary+BlocksKit.h in Headers */,\n\t\t\t\t3DF2307D736F5A334CC5392A06B142C0 /* NSMutableIndexSet+BlocksKit.h in Headers */,\n\t\t\t\tCC7E36A547AEE6456442AF7F5C60E2F9 /* NSMutableOrderedSet+BlocksKit.h in Headers */,\n\t\t\t\t03592DBD830EF65C1AE796A0697F46E1 /* NSMutableSet+BlocksKit.h in Headers */,\n\t\t\t\t484776F8B4CF9A89AA18C6874E246DF6 /* NSObject+A2BlockDelegate.h in Headers */,\n\t\t\t\tEC783E9B9EA9DDFC778E4AA0D5065097 /* NSObject+A2DynamicDelegate.h in Headers */,\n\t\t\t\t0F0550B889810895B32BCA065DD6CFC4 /* NSObject+BKAssociatedObjects.h in Headers */,\n\t\t\t\tF6516207095BAB4A00C52187CFAD097B /* NSObject+BKBlockExecution.h in Headers */,\n\t\t\t\tC7E0B31A7916AABF23A79CB06E1F5272 /* NSObject+BKBlockObservation.h in Headers */,\n\t\t\t\tA026405E495CA2EFF557A70D1515A689 /* NSOrderedSet+BlocksKit.h in Headers */,\n\t\t\t\t01149FA585A714569093657B85C1A350 /* NSSet+BlocksKit.h in Headers */,\n\t\t\t\t58F4C1C349633CE28F242E5FC8518636 /* NSTimer+BlocksKit.h in Headers */,\n\t\t\t\t423CD981F80732AA6C075F7F633CFBBD /* NSURLConnection+BlocksKit.h in Headers */,\n\t\t\t\tE32DDF26286A2F7F77F8B90754373696 /* UIActionSheet+BlocksKit.h in Headers */,\n\t\t\t\t5467BA80FE76E5928DBC92FCA8F319DD /* UIAlertView+BlocksKit.h in Headers */,\n\t\t\t\tA229FCF9FEBBF16977B33AB2FEF23830 /* UIBarButtonItem+BlocksKit.h in Headers */,\n\t\t\t\tA1968C04873813D7CEB076FDFCBC479C /* UIControl+BlocksKit.h in Headers */,\n\t\t\t\tB25F8085B440D68735024862A5F6AD9F /* UIGestureRecognizer+BlocksKit.h in Headers */,\n\t\t\t\t61898DE2259DB9ECC1F23C538FCE7BBB /* UIImagePickerController+BlocksKit.h in Headers */,\n\t\t\t\t455F71D95890455473B3AF068D2003D1 /* UIPopoverController+BlocksKit.h in Headers */,\n\t\t\t\t77515111C9AFE11AB1287761150614F5 /* UITextField+BlocksKit.h in Headers */,\n\t\t\t\tF60CAF477B4F4573C02F675C42DFFD2D /* UIView+BlocksKit.h in Headers */,\n\t\t\t\t12F7B27FB2422AC6413E77B7F98812C4 /* UIWebView+BlocksKit.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t9C6466D79F40B07C4D15FDE68159545C /* NBSwipePageView */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 57A1A18A9407B891DD205E45A6595818 /* Build configuration list for PBXNativeTarget \"NBSwipePageView\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t87C3337015A4C26A323FC00B5507A546 /* Sources */,\n\t\t\t\t8B550906D4EEAFEF38AACE8AD606D2D9 /* Frameworks */,\n\t\t\t\t3CD240D680E588C3F917736F4D3360EA /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = NBSwipePageView;\n\t\t\tproductName = NBSwipePageView;\n\t\t\tproductReference = 745574CB3EE981C509D1E2696FFE092F /* libNBSwipePageView.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tA09705FA24834CF6EA77A258F75D7570 /* Pods-testPasterImage */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7F016A1D594379C3949F8A97016F718C /* Build configuration list for PBXNativeTarget \"Pods-testPasterImage\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD6D2657C23DD722242EF7C5929886B32 /* Sources */,\n\t\t\t\tF4195BEBE6C06638A02A058FF98AB60E /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tEA096BEBB65B906AEBDAF732DDE3066B /* PBXTargetDependency */,\n\t\t\t\tB22F90C5C007A968BD34DB33162D548B /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-testPasterImage\";\n\t\t\tproductName = \"Pods-testPasterImage\";\n\t\t\tproductReference = E7F011EB4C9F94875BC0C31D693729FE /* libPods-testPasterImage.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tDA1A7295DF2A99609DA0EEBF5E83233D /* BlocksKit */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7B67B960A5D1DDC3FB6CC2E37DBBFD9F /* Build configuration list for PBXNativeTarget \"BlocksKit\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5913D2DD4D386875C7FDF1DB4A94AC99 /* Sources */,\n\t\t\t\t87D63FC8B5A5501852974C5E1F3328A6 /* Frameworks */,\n\t\t\t\t9F9FD509AAD735AC4AB664BAA7649312 /* Headers */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = BlocksKit;\n\t\t\tproductName = BlocksKit;\n\t\t\tproductReference = A855DC09868C0AF098946E945FF59AE8 /* libBlocksKit.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tD41D8CD98F00B204E9800998ECF8427E /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0730;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t};\n\t\t\tbuildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject \"Pods\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 7DB346D0F39D3F0E887471402A8071AB;\n\t\t\tproductRefGroup = 9A5CCE0B8EE1965591F137FAB3A255A2 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tDA1A7295DF2A99609DA0EEBF5E83233D /* BlocksKit */,\n\t\t\t\t9C6466D79F40B07C4D15FDE68159545C /* NBSwipePageView */,\n\t\t\t\tA09705FA24834CF6EA77A258F75D7570 /* Pods-testPasterImage */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t5913D2DD4D386875C7FDF1DB4A94AC99 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3221D2FE805E7A2E298CB3B9CC4E6AF0 /* A2BlockInvocation.m in Sources */,\n\t\t\t\t0A288C4D0ED296320F86966D45E8D5E9 /* A2DynamicDelegate.m in Sources */,\n\t\t\t\tDB21A546C83305719CD699E00E36AA3F /* BlocksKit-dummy.m in Sources */,\n\t\t\t\t37A05672C67666332CF82130E9A461C2 /* MFMailComposeViewController+BlocksKit.m in Sources */,\n\t\t\t\t7E8DF508233A1A7A663933939A6D5FE8 /* MFMessageComposeViewController+BlocksKit.m in Sources */,\n\t\t\t\t6F6DD1FA269EB37E6CC9722C59AFBA5B /* NSArray+BlocksKit.m in Sources */,\n\t\t\t\tC237814AF824CAE9A479AD0F4DB151AA /* NSCache+BlocksKit.m in Sources */,\n\t\t\t\tF3040EE21525146A4AABD68CFF758D23 /* NSDictionary+BlocksKit.m in Sources */,\n\t\t\t\tF67325523D6DDBF4AF0C19A02ED3FDBD /* NSIndexSet+BlocksKit.m in Sources */,\n\t\t\t\tB6947A884743188A3E6C81EA172D4DCE /* NSInvocation+BlocksKit.m in Sources */,\n\t\t\t\tB74B90AB5E2F98B82040E5B791B1E513 /* NSMutableArray+BlocksKit.m in Sources */,\n\t\t\t\tA5CA4DD465154E16BF094796B56E7E52 /* NSMutableDictionary+BlocksKit.m in Sources */,\n\t\t\t\t149B9A4BDC7FB1FEDE01059764F1D584 /* NSMutableIndexSet+BlocksKit.m in Sources */,\n\t\t\t\t14BAF7AE2D75E18559739D71CFF10C84 /* NSMutableOrderedSet+BlocksKit.m in Sources */,\n\t\t\t\tA2FC6CF3F13C4799D04AC89ADD403AED /* NSMutableSet+BlocksKit.m in Sources */,\n\t\t\t\t79588DF8F673302C22F3C81278A0B98E /* NSObject+A2BlockDelegate.m in Sources */,\n\t\t\t\tF09A8E1234A6B7D95122D5DAEA3870FF /* NSObject+A2DynamicDelegate.m in Sources */,\n\t\t\t\t7D2D914EEDBCFF0F225F680F75D5694E /* NSObject+BKAssociatedObjects.m in Sources */,\n\t\t\t\tD6017E171F626B176414E066B800C1AF /* NSObject+BKBlockExecution.m in Sources */,\n\t\t\t\t9C639C4D43608486642208566DF05AF5 /* NSObject+BKBlockObservation.m in Sources */,\n\t\t\t\t213BDA0BFDC7FA8B00CD8395940400E2 /* NSOrderedSet+BlocksKit.m in Sources */,\n\t\t\t\tD53F7D2E487057DC8EDA59A6DD54FF7A /* NSSet+BlocksKit.m in Sources */,\n\t\t\t\t6F2746610AB8BBFA162997F6AED950F7 /* NSTimer+BlocksKit.m in Sources */,\n\t\t\t\t9FADA4523CE1BFD6E588D400285BAC0E /* NSURLConnection+BlocksKit.m in Sources */,\n\t\t\t\tC7C6F46E66572803459747BD9121EB20 /* UIActionSheet+BlocksKit.m in Sources */,\n\t\t\t\tF222764F0ED41EF907EE5D439DA182A1 /* UIAlertView+BlocksKit.m in Sources */,\n\t\t\t\t6DCBF5A3569BA772FBAB3379A00464D2 /* UIBarButtonItem+BlocksKit.m in Sources */,\n\t\t\t\t80D7B80A26162132A65EE9167AEAE94F /* UIControl+BlocksKit.m in Sources */,\n\t\t\t\t2CE50403797DDF662DAE1DBDEF30A901 /* UIGestureRecognizer+BlocksKit.m in Sources */,\n\t\t\t\tCB21742066F67241062931F6F568D071 /* UIImagePickerController+BlocksKit.m in Sources */,\n\t\t\t\tF5C8F609901D5C71DC95528248D1D0F3 /* UIPopoverController+BlocksKit.m in Sources */,\n\t\t\t\t6FE51449ABAA54EF33F44CE810BAD905 /* UITextField+BlocksKit.m in Sources */,\n\t\t\t\t992944F68F8CC38008B2C611A0107FDE /* UIView+BlocksKit.m in Sources */,\n\t\t\t\tE09FAE444FA9AAC6F1F0295F5092A2FC /* UIWebView+BlocksKit.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t87C3337015A4C26A323FC00B5507A546 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t73B9779AEDACEB09223A4474DCE9F330 /* NBSwipePageView-dummy.m in Sources */,\n\t\t\t\tDD97B6AC8570C045E8327C7E8118E0A4 /* NBSwipePageView.m in Sources */,\n\t\t\t\t0B1447334EF3FCD08E783F72251FC1EB /* NBSwipePageViewSheet.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD6D2657C23DD722242EF7C5929886B32 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE0C060F23AA82483327B74CCD9B72676 /* Pods-testPasterImage-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tB22F90C5C007A968BD34DB33162D548B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = NBSwipePageView;\n\t\t\ttarget = 9C6466D79F40B07C4D15FDE68159545C /* NBSwipePageView */;\n\t\t\ttargetProxy = CA315BBEDAB8A2B4955C90AD54907F2F /* PBXContainerItemProxy */;\n\t\t};\n\t\tEA096BEBB65B906AEBDAF732DDE3066B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = BlocksKit;\n\t\t\ttarget = DA1A7295DF2A99609DA0EEBF5E83233D /* BlocksKit */;\n\t\t\ttargetProxy = 371ED08071AFFDADE018659914EF5E2E /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t084FC4A07EC34209662C66F29F7681AD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A08A8DB765006DD2C2B3B2C680FCF822 /* BlocksKit.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/BlocksKit/BlocksKit-prefix.pch\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 6.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t185A114B40621806837E96546C23AFB0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1169513FD91CD57AB8AC5BB9E020DDB3 /* NBSwipePageView.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/NBSwipePageView/NBSwipePageView-prefix.pch\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t3911AA788B81DA714CBD18F5C8147B44 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1169513FD91CD57AB8AC5BB9E020DDB3 /* NBSwipePageView.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/NBSwipePageView/NBSwipePageView-prefix.pch\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 5.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t47BEF9D903506B003EA5C2B249729489 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"POD_CONFIGURATION_DEBUG=1\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSYMROOT = \"${SRCROOT}/../build\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t7B1E53CA582D1E63E46755F6803BCCFC /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C71C3F131A855C7CD9143B43D775A182 /* Pods-testPasterImage.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t80EE96C354F26F909C6EBE5E162235BD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A08A8DB765006DD2C2B3B2C680FCF822 /* BlocksKit.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/BlocksKit/BlocksKit-prefix.pch\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 6.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tA58654E010E1195BCD6574D6A5F2A9A1 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 29C868A366BA357EA2ECCFFE176E0BBF /* Pods-testPasterImage.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tAAF678CED40D3499169D10F63CA0719E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"POD_CONFIGURATION_RELEASE=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSYMROOT = \"${SRCROOT}/../build\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject \"Pods\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t47BEF9D903506B003EA5C2B249729489 /* Debug */,\n\t\t\t\tAAF678CED40D3499169D10F63CA0719E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t57A1A18A9407B891DD205E45A6595818 /* Build configuration list for PBXNativeTarget \"NBSwipePageView\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t3911AA788B81DA714CBD18F5C8147B44 /* Debug */,\n\t\t\t\t185A114B40621806837E96546C23AFB0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7B67B960A5D1DDC3FB6CC2E37DBBFD9F /* Build configuration list for PBXNativeTarget \"BlocksKit\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t80EE96C354F26F909C6EBE5E162235BD /* Debug */,\n\t\t\t\t084FC4A07EC34209662C66F29F7681AD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7F016A1D594379C3949F8A97016F718C /* Build configuration list for PBXNativeTarget \"Pods-testPasterImage\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t7B1E53CA582D1E63E46755F6803BCCFC /* Debug */,\n\t\t\t\tA58654E010E1195BCD6574D6A5F2A9A1 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */;\n}\n"
  },
  {
    "path": "Pods/Pods.xcodeproj/xcuserdata/vipstore.xcuserdatad/xcschemes/BlocksKit.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 = 'DA1A7295DF2A99609DA0EEBF5E83233D'\n               BlueprintName = 'BlocksKit'\n               ReferencedContainer = 'container:Pods.xcodeproj'\n               BuildableName = 'libBlocksKit.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": "Pods/Pods.xcodeproj/xcuserdata/vipstore.xcuserdatad/xcschemes/NBSwipePageView.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 = '9C6466D79F40B07C4D15FDE68159545C'\n               BlueprintName = 'NBSwipePageView'\n               ReferencedContainer = 'container:Pods.xcodeproj'\n               BuildableName = 'libNBSwipePageView.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": "Pods/Pods.xcodeproj/xcuserdata/vipstore.xcuserdatad/xcschemes/Pods-testPasterImage.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 = 'A09705FA24834CF6EA77A258F75D7570'\n               BlueprintName = 'Pods-testPasterImage'\n               ReferencedContainer = 'container:Pods.xcodeproj'\n               BuildableName = 'libPods-testPasterImage.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": "Pods/Pods.xcodeproj/xcuserdata/vipstore.xcuserdatad/xcschemes/xcschememanagement.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>SchemeUserState</key>\n\t<dict>\n\t\t<key>BlocksKit.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>isShown</key>\n\t\t\t<false/>\n\t\t</dict>\n\t\t<key>NBSwipePageView.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>isShown</key>\n\t\t\t<false/>\n\t\t</dict>\n\t\t<key>Pods-testPasterImage.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>isShown</key>\n\t\t\t<false/>\n\t\t</dict>\n\t</dict>\n\t<key>SuppressBuildableAutocreation</key>\n\t<dict>\n\t\t<key>9C6466D79F40B07C4D15FDE68159545C</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>A09705FA24834CF6EA77A258F75D7570</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>DA1A7295DF2A99609DA0EEBF5E83233D</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Pods.xcodeproj/xcuserdata/wangyingbo.xcuserdatad/xcschemes/BlocksKit.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 = \"DA1A7295DF2A99609DA0EEBF5E83233D\"\n               BuildableName = \"libBlocksKit.a\"\n               BlueprintName = \"BlocksKit\"\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 = \"DA1A7295DF2A99609DA0EEBF5E83233D\"\n            BuildableName = \"libBlocksKit.a\"\n            BlueprintName = \"BlocksKit\"\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      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"DA1A7295DF2A99609DA0EEBF5E83233D\"\n            BuildableName = \"libBlocksKit.a\"\n            BlueprintName = \"BlocksKit\"\n            ReferencedContainer = \"container:Pods.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Pods/Pods.xcodeproj/xcuserdata/wangyingbo.xcuserdatad/xcschemes/NBSwipePageView.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 = \"9C6466D79F40B07C4D15FDE68159545C\"\n               BuildableName = \"libNBSwipePageView.a\"\n               BlueprintName = \"NBSwipePageView\"\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 = \"9C6466D79F40B07C4D15FDE68159545C\"\n            BuildableName = \"libNBSwipePageView.a\"\n            BlueprintName = \"NBSwipePageView\"\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      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9C6466D79F40B07C4D15FDE68159545C\"\n            BuildableName = \"libNBSwipePageView.a\"\n            BlueprintName = \"NBSwipePageView\"\n            ReferencedContainer = \"container:Pods.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Pods/Pods.xcodeproj/xcuserdata/wangyingbo.xcuserdatad/xcschemes/Pods-testPasterImage.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 = \"A09705FA24834CF6EA77A258F75D7570\"\n               BuildableName = \"libPods-testPasterImage.a\"\n               BlueprintName = \"Pods-testPasterImage\"\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 = \"A09705FA24834CF6EA77A258F75D7570\"\n            BuildableName = \"libPods-testPasterImage.a\"\n            BlueprintName = \"Pods-testPasterImage\"\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      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"A09705FA24834CF6EA77A258F75D7570\"\n            BuildableName = \"libPods-testPasterImage.a\"\n            BlueprintName = \"Pods-testPasterImage\"\n            ReferencedContainer = \"container:Pods.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Pods/Pods.xcodeproj/xcuserdata/wangyingbo.xcuserdatad/xcschemes/xcschememanagement.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>SchemeUserState</key>\n\t<dict>\n\t\t<key>BlocksKit.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>1</integer>\n\t\t</dict>\n\t\t<key>NBSwipePageView.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>2</integer>\n\t\t</dict>\n\t\t<key>Pods-testPasterImage.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>3</integer>\n\t\t</dict>\n\t</dict>\n\t<key>SuppressBuildableAutocreation</key>\n\t<dict>\n\t\t<key>9C6466D79F40B07C4D15FDE68159545C</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>A09705FA24834CF6EA77A258F75D7570</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>DA1A7295DF2A99609DA0EEBF5E83233D</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Pods/Target Support Files/BlocksKit/BlocksKit-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_BlocksKit : NSObject\n@end\n@implementation PodsDummy_BlocksKit\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/BlocksKit/BlocksKit-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/BlocksKit/BlocksKit.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/BlocksKit\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/BlocksKit\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/BlocksKit\" \"${PODS_ROOT}/Headers/Public/NBSwipePageView\"\nOTHER_LDFLAGS = -framework \"MessageUI\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\n"
  },
  {
    "path": "Pods/Target Support Files/NBSwipePageView/NBSwipePageView-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_NBSwipePageView : NSObject\n@end\n@implementation PodsDummy_NBSwipePageView\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/NBSwipePageView/NBSwipePageView-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "Pods/Target Support Files/NBSwipePageView/NBSwipePageView.xcconfig",
    "content": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/NBSwipePageView\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/NBSwipePageView\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/BlocksKit\" \"${PODS_ROOT}/Headers/Public/NBSwipePageView\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## BlocksKit\n\n//\n//  LICENSE\n//  BlocksKit\n//\n\nCopyright (c) 2011-2014 Zachary Waldowski, Alexsander Akers, and the BlocksKit Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage-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>//\n//  LICENSE\n//  BlocksKit\n//\n\nCopyright (c) 2011-2014 Zachary Waldowski, Alexsander Akers, and the BlocksKit Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>BlocksKit</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 - https://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": "Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_testPasterImage : NSObject\n@end\n@implementation PodsDummy_Pods_testPasterImage\n@end\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage-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=\"${TARGET_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} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \\\"$1\\\"\"\n    /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --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": "Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage-resources.sh",
    "content": "#!/bin/sh\nset -e\n\nmkdir -p \"${TARGET_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\ncase \"${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    ;;\nesac\n\nrealpath() {\n  DIRECTORY=\"$(cd \"${1%/*}\" && pwd)\"\n  FILENAME=\"${1##*/}\"\n  echo \"$DIRECTORY/$FILENAME\"\n}\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\"\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\"\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      rsync -av \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\"\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\"\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\"\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=$(realpath \"$RESOURCE_PATH\")\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\"\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_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  # 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 \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage.debug.xcconfig",
    "content": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/BlocksKit\" \"${PODS_ROOT}/Headers/Public/NBSwipePageView\"\nLIBRARY_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/BlocksKit\" \"$PODS_CONFIGURATION_BUILD_DIR/NBSwipePageView\"\nOTHER_CFLAGS = $(inherited) -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/BlocksKit\" -isystem \"${PODS_ROOT}/Headers/Public/NBSwipePageView\"\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"BlocksKit\" -l\"NBSwipePageView\" -framework \"MessageUI\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage.release.xcconfig",
    "content": "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/BlocksKit\" \"${PODS_ROOT}/Headers/Public/NBSwipePageView\"\nLIBRARY_SEARCH_PATHS = $(inherited) \"$PODS_CONFIGURATION_BUILD_DIR/BlocksKit\" \"$PODS_CONFIGURATION_BUILD_DIR/NBSwipePageView\"\nOTHER_CFLAGS = $(inherited) -isystem \"${PODS_ROOT}/Headers/Public\" -isystem \"${PODS_ROOT}/Headers/Public/BlocksKit\" -isystem \"${PODS_ROOT}/Headers/Public/NBSwipePageView\"\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"BlocksKit\" -l\"NBSwipePageView\" -framework \"MessageUI\"\nPODS_BUILD_DIR = $BUILD_DIR\nPODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_ROOT = ${SRCROOT}/Pods\n"
  },
  {
    "path": "README.md",
    "content": "# YBPasterImage\n### ***给图片添加滤镜和贴纸，支持14种滤镜效果***\n\n\n### 一、介绍\n##### 这是一个关于在图片上添加贴纸的demo，动图里演示了操作方法。\n\n>+ 项目里要求，要实现下面三种功能：\n>+ 对图片添加滤镜；\n>+ 对图片添加标签；\n>+ 对图片添加贴纸。\n\n### 二、怎么给图片添加标签可参考我的另外一个[项目](https://github.com/wangyingbo/YBTagViewLib)，效果图如下：\n\n动图\n\n[![gif图](https://raw.githubusercontent.com/wangyingbo/YBTagViewLib/master/gif.gif)](https://github.com/wangyingbo/YBTagViewLib/archive/master.zip)\n\n\n### 三、给图片添加滤镜和贴纸的效果图如下:\n\n动图\n\n![gif图](https://raw.githubusercontent.com/wangyingbo/YBPasterImage/master/gif.gif)\n\n### 四、项目下载地址\n[项目](https://github.com/wangyingbo/YBPasterImage/archive/master.zip)"
  },
  {
    "path": "files/README发帖专用.md",
    "content": "# YBPasterImage\n## ***给图片添加滤镜和贴纸，支持14种滤镜效果***\n\n####修复了一些已知的bug，重新发帖上传，欢迎大家提意见。\n\n###项目地址[DEMO](https://github.com/wangyingbo/YBPasterImage)，欢迎fork，欢迎start\n\n\n### 一、介绍\n##### 这是一个关于在图片上添加贴纸的demo，动图里演示了操作方法。\n\n>+ 项目里要求，要实现下面三种功能：\n>+ 对图片添加滤镜；\n>+ 对图片添加标签；\n>+ 对图片添加贴纸。\n\n### 二、怎么给图片添加标签可参考我的另外一个[项目](https://github.com/wangyingbo/YBTagViewLib)，欢迎fork，欢迎start。效果图如下(点击动图下载)：\n\n动图\n\n[![gif图](https://raw.githubusercontent.com/wangyingbo/YBTagViewLib/master/gif.gif)](https://github.com/wangyingbo/YBTagViewLib/archive/master.zip)\n\n\n### 三、给图片添加滤镜和贴纸的效果图如下:\n\n动图\n\n![gif图](https://raw.githubusercontent.com/wangyingbo/YBPasterImage/master/gif.gif)\n\n### 四、最后，欢迎fork，欢迎start，多提Issues给出意见\n项目地址：https://github.com/wangyingbo/YBPasterImage\n\n\n\n\n\n"
  },
  {
    "path": "testPasterImage/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. 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\n@end\n\n"
  },
  {
    "path": "testPasterImage/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    \n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Assets.xcassets/1.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"1.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/2.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"2.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/3.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"3.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/4.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"4.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/5.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"5.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.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  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/bt_paster_delete.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"删除.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"删除@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"删除@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/bt_paster_transform.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"大小.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"大小@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"大小@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/dogs.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"dogs.jpeg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/gao4.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"gao4.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Assets.xcassets/gaoyuanyuan.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"gaoyuanyuan.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "testPasterImage/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10116\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\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=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "testPasterImage/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11762\" systemVersion=\"16C67\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"QgQ-O1-Xhd\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11757\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"iTx-v9-NlA\">\n                                <rect key=\"frame\" x=\"156.5\" y=\"557\" width=\"62\" height=\"30\"/>\n                                <state key=\"normal\" title=\"处理图片\"/>\n                                <connections>\n                                    <action selector=\"addPasterImage:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"rHw-dT-HI9\"/>\n                                </connections>\n                            </button>\n                            <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"gao4\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"G2w-9U-4Gb\">\n                                <rect key=\"frame\" x=\"37.5\" y=\"123.5\" width=\"300\" height=\"300\"/>\n                                <color key=\"backgroundColor\" red=\"0.95686274510000002\" green=\"0.52787255639999997\" blue=\"0.70310303190000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"300\" id=\"tp5-ba-KRy\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"300\" id=\"yrU-En-tfa\"/>\n                                </constraints>\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"wfy-db-euE\" firstAttribute=\"top\" secondItem=\"iTx-v9-NlA\" secondAttribute=\"bottom\" constant=\"80\" id=\"gCh-q0-JgD\"/>\n                            <constraint firstItem=\"iTx-v9-NlA\" firstAttribute=\"centerX\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerX\" id=\"oMf-c3-fEU\"/>\n                            <constraint firstItem=\"G2w-9U-4Gb\" firstAttribute=\"centerX\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerX\" id=\"qcx-fr-gke\"/>\n                            <constraint firstItem=\"G2w-9U-4Gb\" firstAttribute=\"centerY\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerY\" constant=\"-60\" id=\"zhG-sW-bYP\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" id=\"SqV-lq-M6j\"/>\n                    <connections>\n                        <outlet property=\"imageView\" destination=\"G2w-9U-4Gb\" id=\"l5p-ky-0Wh\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1150\" y=\"348\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"ND0-1x-jwS\">\n            <objects>\n                <navigationController automaticallyAdjustsScrollViewInsets=\"NO\" id=\"QgQ-O1-Xhd\" sceneMemberID=\"viewController\">\n                    <toolbarItems/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"UvZ-ui-KyS\">\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=\"BYZ-38-t0r\" kind=\"relationship\" relationship=\"rootViewController\" id=\"ETf-Lr-iLW\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"033-7q-yp3\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"338\" y=\"348\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"gao4\" width=\"426\" height=\"426\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "testPasterImage/Categories/UIImage+AddFunction.h",
    "content": "//  UIImage+AddFunction.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface UIImage (AddFunction)\n\n+ (UIImage *)squareImageFromImage:(UIImage *)image\n                     scaledToSize:(CGFloat)newSize ;\n\n+ (UIImage *)getImageFromView:(UIView *)theView ;\n\n@end"
  },
  {
    "path": "testPasterImage/Categories/UIImage+AddFunction.m",
    "content": "//  UIImage+AddFunction.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"UIImage+AddFunction.h\"\n\n@implementation UIImage (AddFunction)\n\n//裁剪正方\n/**\n *  剪切图片为正方形\n *\n *  @param image   原始图片比如size大小为(400x200)pixels\n *  @param newSize 正方形的size比如400pixels\n *\n *  @return 返回正方形图片(400x400)pixels\n */\n+ (UIImage *)squareImageFromImage:(UIImage *)image scaledToSize:(CGFloat)newSize\n{\n    CGAffineTransform scaleTransform;\n    CGPoint origin;\n    \n    if (image.size.width > image.size.height)\n    {\n        //image原始高度为200，缩放image的高度为400pixels，所以缩放比率为2\n        CGFloat scaleRatio = newSize / image.size.height;\n        scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);\n        //设置绘制原始图片的画笔坐标为CGPoint(-100, 0)pixels\n        origin = CGPointMake(-(image.size.width - image.size.height) / 2.0f, 0);\n    }\n    else\n    {\n        CGFloat scaleRatio = newSize / image.size.width;\n        scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);\n        \n        origin = CGPointMake(0, -(image.size.height - image.size.width) / 2.0f);\n    }\n    \n    CGSize size = CGSizeMake(newSize, newSize);\n    //创建画板为(400x400)pixels\n    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])\n    {\n        UIGraphicsBeginImageContextWithOptions(size, YES, 1);\n    }\n    else\n    {\n        UIGraphicsBeginImageContext(size);\n    }\n    \n    CGContextRef context = UIGraphicsGetCurrentContext();\n    //将image原始图片(400x200)pixels缩放为(800x400)pixels\n    CGContextConcatCTM(context, scaleTransform);\n    //origin也会从原始(-100, 0)缩放到(-200, 0)\n    [image drawAtPoint:origin];\n    \n    //获取缩放后剪切的image图片\n    image = UIGraphicsGetImageFromCurrentImageContext();\n    \n    UIGraphicsEndImageContext();\n    \n    return image;\n}\n\n// 将UIView转成UIImage\n+ (UIImage *)getImageFromView:(UIView *)theView\n{\n    CGSize orgSize = theView.bounds.size ;\n    UIGraphicsBeginImageContextWithOptions(orgSize, NO, 1);\n    [theView.layer renderInContext:UIGraphicsGetCurrentContext()]   ;\n    UIImage *image = UIGraphicsGetImageFromCurrentImageContext()    ;\n    UIGraphicsEndImageContext() ;\n    \n    return image ;\n}\n\n@end\n\n"
  },
  {
    "path": "testPasterImage/Categories/UIViewController+Example.h",
    "content": "//\n//  UIViewController+Example.h\n//  Kergou\n//\n//  Created by 王迎博 on 16/4/28.\n//  Copyright © 2016年 张帅. All rights reserved.\n//\n#import <UIKit/UIKit.h>\n\n@interface UIViewController (Example)\n@property (copy, nonatomic) NSString *method;\n@end\n"
  },
  {
    "path": "testPasterImage/Categories/UIViewController+Example.m",
    "content": "//\n//  UIViewController+Example.m\n//  Kergou\n//\n//  Created by 王迎博 on 16/4/28.\n//  Copyright © 2016年 张帅. All rights reserved.\n//\n\n#import \"UIViewController+Example.h\"\n#import <objc/runtime.h>\n\n@implementation UIViewController (Example)\n\n#pragma mark - swizzle\n+ (void)load\n{\n    Method method1 = class_getInstanceMethod([self class], NSSelectorFromString(@\"dealloc\"));\n    Method method2 = class_getInstanceMethod([self class], @selector(deallocSwizzle));\n    method_exchangeImplementations(method1, method2);\n}\n\n- (void)deallocSwizzle\n{\n    NSLog(@\"%@被销毁了\", self);\n    \n    [self deallocSwizzle];\n}\n\nstatic char MethodKey;\n- (void)setMethod:(NSString *)method\n{\n    objc_setAssociatedObject(self, &MethodKey, method, OBJC_ASSOCIATION_COPY_NONATOMIC);\n}\n\n- (NSString *)method\n{\n    return objc_getAssociatedObject(self, &MethodKey);\n}\n@end\n"
  },
  {
    "path": "testPasterImage/Categories/UIViewController+Extension.h",
    "content": "//\n//  UIViewController+Extension.h\n//  Kergou\n//\n//  Created by 王迎博 on 16/4/28.\n//  Copyright © 2016年 张帅. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n/**定义左边按钮block*/\ntypedef void(^backButtonBlock)(UIButton *BackButton);\n/**定义右边按钮block*/\ntypedef void(^rightButtonBlock)(UIButton *rightButton);\n\n/**定义左边按钮点击事件block*/\ntypedef void(^leftBtnTargetBlock)(NSString *string);\n/**定义右边按钮点击事件block*/\ntypedef void(^rightBtnTargetBlock)(NSString *string);\n\n\n@interface UIViewController (Extension)\n\n@property (nonatomic, copy)   NSString *name;  //视图名字\n@property (nonatomic, assign) BOOL  hasChildViewController;//是否有子视图\n@property (nonatomic, strong) UIImage *backgroundImage;   //背景图片\n\n/**右边按钮点击事件block*/\n@property (nonatomic, copy) rightBtnTargetBlock rightBtnBlock;\n/**左边按钮点击事件block*/\n@property (nonatomic, copy) leftBtnTargetBlock leftBtnBlock;\n\n\n/**\n *  添加左边返回按钮\n *\n *  @param buttonW        返回按钮宽\n *  @param buttonH        返回按钮高\n *  @param title          返回按钮的title\n *  @param titleColor     字体颜色\n *  @param buttonImage    北京图片\n *  @param negativeSpacer 间隔距离\n *  @param block          回调block\n */\n- (void)initBackButtonWithButtonW:(CGFloat)buttonW\n                          buttonH:(CGFloat)buttonH\n                            title:(NSString *)title\n                       titleColor:(UIColor *)titleColor\n                      buttonImage:(UIImage *)buttonImage\n                   negativeSpacer:(CGFloat)negativeSpacer\n                       touchBlock:(backButtonBlock)block;\n\n\n\n/**\n *  添加右边返回按钮\n *\n *  @param buttonW    右边按钮宽\n *  @param buttonH    右边按钮高\n *  @param title      右边按钮的title\n *  @param titleColor 字体颜色\n *  @param block      回调block\n */\n- (void)initRightButtonWithButtonW:(CGFloat)buttonW\n                           buttonH:(CGFloat)buttonH\n                             title:(NSString *)title\n                        titleColor:(UIColor *)titleColor\n                        touchBlock:(rightButtonBlock)block;\n\n\n\n/**\n *  触摸屏幕隐藏键盘\n */\n- (void)setUpForDismissKeyboard:(UIView *)selfView;\n\n\n\n\n@end\n"
  },
  {
    "path": "testPasterImage/Categories/UIViewController+Extension.m",
    "content": "//\n//  UIViewController+Extension.m\n//  Kergou\n//\n//  Created by 王迎博 on 16/4/28.\n//  Copyright © 2016年 张帅. All rights reserved.\n//\n\n#import \"UIViewController+Extension.h\"\n#import <objc/runtime.h>\n\nstatic const void *kName = \"name\";\nstatic const void *kHasChildViewController = @\"hasChildViewController\";\nstatic const void *kBackgroundImage = @\"backgroundImage\";\n\nstatic const void *leftBlock = &leftBlock;\nstatic const void *rightBlock = &rightBlock;\n\n\n@implementation UIViewController (Extension)\n@dynamic leftBtnBlock;\n@dynamic rightBtnBlock;\n\n#pragma mark - 左边按钮点击事件block绑定\n- (leftBtnTargetBlock)leftBtnBlock\n{\n    return objc_getAssociatedObject(self, leftBlock);\n}\n\n- (void)setLeftBtnBlock:(leftBtnTargetBlock)leftBtnBlock\n{\n    objc_setAssociatedObject(self, leftBlock, leftBtnBlock, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n#pragma mark - 右边按钮点击事件block绑定\n- (rightBtnTargetBlock)rightBtnBlock\n{\n    return objc_getAssociatedObject(self, rightBlock);\n}\n\n- (void)setRightBtnBlock:(rightBtnTargetBlock)rightBtnBlock\n{\n    objc_setAssociatedObject(self, rightBlock, rightBtnBlock, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n#pragma mark - 字符串类型的动态绑定\n- (NSString *)name\n{\n    return objc_getAssociatedObject(self, kName);\n}\n\n- (void)setName:(NSString *)name\n{\n    objc_setAssociatedObject(self, kName, name, OBJC_ASSOCIATION_COPY_NONATOMIC);\n}\n\n#pragma mark - BOOL类型的动态绑定\n- (BOOL)hasChildViewController\n{\n    return [objc_getAssociatedObject(self, kHasChildViewController) boolValue];\n}\n\n- (void)setHasChildViewController:(BOOL)hasChildViewController\n{\n    objc_setAssociatedObject(self, kHasChildViewController, [NSNumber numberWithBool:hasChildViewController], OBJC_ASSOCIATION_ASSIGN);\n}\n\n#pragma mark - 类类型的动态绑定\n- (UIImage *)backgroundImage\n{\n    return objc_getAssociatedObject(self, kBackgroundImage);\n}\n\n- (void)setBackgroundImage:(UIImage *)backgroundImage\n{\n    objc_setAssociatedObject(self, kBackgroundImage, backgroundImage, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n\n\n//***************************************************************\n\n\n\n\n\n/**\n *  添加左边返回按钮\n *\n *  @param buttonW        返回按钮宽\n *  @param buttonH        返回按钮高\n *  @param title          返回按钮的title\n *  @param titleColor     字体颜色\n *  @param buttonImage    北京图片\n *  @param negativeSpacer 间隔距离\n *  @param block          回调block\n */\n- (void)initBackButtonWithButtonW:(CGFloat)buttonW\n                          buttonH:(CGFloat)buttonH\n                            title:(NSString *)title\n                       titleColor:(UIColor *)titleColor\n                      buttonImage:(UIImage *)buttonImage\n                   negativeSpacer:(CGFloat)negativeSpacer\n                       touchBlock:(backButtonBlock)block\n{\n    [self.navigationItem.backBarButtonItem setTitle:@\"\"];\n    [self.navigationItem setHidesBackButton:YES];\n    self.navigationController.navigationBar.backgroundColor = [UIColor grayColor];\n    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];\n    \n    if (title.length != 0) {\n        [backBtn setTitle:title forState:UIControlStateNormal];\n    }else\n    {\n        if (buttonImage) {\n            [backBtn setImage:buttonImage forState:UIControlStateNormal];\n        }else\n        {\n            [backBtn setImage:[UIImage imageNamed:@\"zuojiantou.png\"] forState:UIControlStateNormal];\n        }\n    }\n    \n    if (titleColor) {\n        [backBtn setTitleColor:titleColor forState:UIControlStateNormal];\n    }else\n    {\n        [backBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];\n    }\n    \n    if (buttonH!=0 && buttonW!=0) {\n        backBtn.frame = CGRectMake(0,0, buttonW, buttonH);\n    }else\n    {\n        backBtn.frame = CGRectMake(0,0, 40, 20);\n    }\n    \n    [backBtn addTarget:self action:@selector(backButtonClick:) forControlEvents:UIControlEventTouchUpInside];\n    \n    UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithCustomView:backBtn];\n    if (negativeSpacer!=0) {\n        //设置返回按钮到手机左边框的距离\n        UIBarButtonItem *negativeSpa = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];\n        negativeSpa.width = -negativeSpacer;\n        self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:negativeSpa, barBtn ,nil];\n    }else\n    {\n        self.navigationItem.leftBarButtonItem = barBtn;\n    }\n    \n    block(backBtn);\n}\n\n/**\n *  左按钮点击方法\n */\n- (void)backButtonClick:(UIButton *)backButton\n{\n    self.leftBtnBlock(@\"左按钮\");\n}\n\n\n\n\n\n/**\n *  添加右边返回按钮\n *\n *  @param buttonW    右边按钮宽\n *  @param buttonH    右边按钮高\n *  @param title      右边按钮的title\n *  @param titleColor 字体颜色\n *  @param block      回调block\n */\n- (void)initRightButtonWithButtonW:(CGFloat)buttonW\n                           buttonH:(CGFloat)buttonH\n                             title:(NSString *)title\n                        titleColor:(UIColor *)titleColor\n                        touchBlock:(rightButtonBlock)block\n{\n    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom];\n    \n    if (buttonW!=0 && buttonH!=0) {\n        \n        rightButton.frame = CGRectMake(0,0, buttonW, buttonH);\n    }else\n    {\n        rightButton.frame = CGRectMake(0,0, 40, 30);\n    }\n    \n    if (title.length!=0) {\n        [rightButton setTitle:title forState:UIControlStateNormal];\n    }else\n    {\n        [rightButton setTitle:@\"取消\" forState:UIControlStateNormal];\n    }\n    \n    if (titleColor) {\n        [rightButton setTitleColor:titleColor forState:UIControlStateNormal];\n    }else\n    {\n        [rightButton setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];\n    }\n    \n    [rightButton addTarget:self action:@selector(rightButtonClick:) forControlEvents:UIControlEventTouchUpInside];\n    \n    UIBarButtonItem *rightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];\n    self.navigationItem.rightBarButtonItem = rightButtonItem;\n    \n    block(rightButton);\n}\n\n/**\n *  右键点击方法\n */\n- (void)rightButtonClick:(UIButton *)rightButton\n{\n    self.rightBtnBlock(@\"右按钮\");\n}\n\n\n\n\n\n/**\n *  触摸屏幕隐藏键盘\n */\n- (void)setUpForDismissKeyboard:(UIView *)selfView\n{\n    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];\n    UITapGestureRecognizer *singleTapGR =\n    [[UITapGestureRecognizer alloc] initWithTarget:self\n                                            action:@selector(tapAnywhereToDismissKeyboard:)];\n    NSOperationQueue *mainQuene =[NSOperationQueue mainQueue];\n    [nc addObserverForName:UIKeyboardWillShowNotification\n                    object:nil\n                     queue:mainQuene\n                usingBlock:^(NSNotification *note){\n                    [selfView addGestureRecognizer:singleTapGR];\n                }];\n    [nc addObserverForName:UIKeyboardWillHideNotification\n                    object:nil\n                     queue:mainQuene\n                usingBlock:^(NSNotification *note){\n                    [selfView removeGestureRecognizer:singleTapGR];\n                }];\n}\n\n/**\n *  触摸屏幕隐藏键盘的事件\n */\n- (void)tapAnywhereToDismissKeyboard:(UIGestureRecognizer *)gestureRecognizer {\n    //此method会将self.view里所有的subview的first responder都resign掉\n    [self.view endEditing:YES];\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Categories/UIViewController+Swizzling.h",
    "content": "//\n//  UIViewController+Swizzling.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/10/19.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <objc/runtime.h>\n\n@interface UIViewController (Swizzling)\n@end\n"
  },
  {
    "path": "testPasterImage/Categories/UIViewController+Swizzling.m",
    "content": "//\n//  UIViewController+Swizzling.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/10/19.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"UIViewController+Swizzling.h\"\n\n@implementation UIViewController (Swizzling)\n+ (void)load {\n    \n    //我们只有在开发的时候才需要查看哪个viewController将出现\n    //所以在release模式下就没必要进行方法的交换\n#ifdef DEBUG\n    \n    //原本的viewWillAppear方法\n    Method viewWillAppear = class_getInstanceMethod(self, @selector(viewWillAppear:));\n    \n    //需要替换成 能够输出日志的viewWillAppear\n    Method logViewWillAppear = class_getInstanceMethod(self, @selector(logViewWillAppear:));\n    \n    //两方法进行交换\n    method_exchangeImplementations(viewWillAppear, logViewWillAppear);\n    \n#endif\n    \n}\n\n- (void)logViewWillAppear:(BOOL)animated {\n    \n    NSString *className = NSStringFromClass([self class]);\n    \n    //在这里，你可以进行过滤操作，指定哪些viewController需要打印，哪些不需要打印\n    if ([className hasPrefix:@\"UI\"] == NO) {\n        NSLog(@\"%@ will appear\",className);\n    }\n    \n    \n    //下面方法的调用，其实是调用viewWillAppear\n    [self logViewWillAppear:animated];\n}\n\n\n@end\n"
  },
  {
    "path": "testPasterImage/Controllers/ViewController.h",
    "content": "//\n//  ViewController.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n\n\n@interface ViewController : UIViewController\n\n\n@end\n\n"
  },
  {
    "path": "testPasterImage/Controllers/ViewController.m",
    "content": "//\n//  ViewController.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"ViewController.h\"\n#import \"YBPasterImageVC.h\"\n#import \"UIViewController+Swizzling.h\"\n\n\n@interface ViewController ()\n\n@property (weak, nonatomic) IBOutlet UIImageView *imageView;\n\n@end\n\n@implementation ViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    \n    [self.navigationController setNavigationBarHidden:YES] ;\n    [[UIApplication sharedApplication] setStatusBarHidden:YES] ;\n}\n\n\n/**\n *  跳转到下页\n */\n- (IBAction)addPasterImage:(UIButton *)sender\n{\n    YBPasterImageVC *pasterVC = [[YBPasterImageVC alloc]init];\n    pasterVC.originalImage = [UIImage imageNamed:@\"gao4\"];\n    \n    pasterVC.block = ^(UIImage *editedImage){\n        self.imageView.image = editedImage;\n    };\n    \n    [self.navigationController pushViewController:pasterVC animated:YES];\n    \n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Controllers/YBBaseViewController.h",
    "content": "//\n//  YBBaseViewController.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/10/19.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface YBBaseViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "testPasterImage/Controllers/YBBaseViewController.m",
    "content": "//\n//  YBBaseViewController.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/10/19.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"YBBaseViewController.h\"\n\n@interface YBBaseViewController ()\n\n@end\n\n@implementation YBBaseViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    // Do any additional setup after loading the view.\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    [super viewWillAppear:animated];\n    NSString *className = NSStringFromClass([self class]);\n    NSLog(@\"%@ will appear\", className);\n}\n\n/*\n#pragma mark - Navigation\n\n// In a storyboard-based application, you will often want to do a little preparation before navigation\n- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {\n    // Get the new view controller using [segue destinationViewController].\n    // Pass the selected object to the new view controller.\n}\n*/\n\n@end\n"
  },
  {
    "path": "testPasterImage/Controllers/YBPasterImageVC.h",
    "content": "//\n//  YBPasterImageVC.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n#define YBWeak(selfName,weakSelf) __weak __typeof(selfName *)weakSelf = self\n#define WS(weakSelf)  __weak __typeof(&*self)weakSelf = self\n/**传给上个页面图片的block*/\ntypedef void(^PasterBlock)(UIImage *image);\n\n\n@interface YBPasterImageVC : UIViewController\n/**传数据的block*/\n@property (nonatomic, copy) PasterBlock block;\n/**从上页带回来的原始image*/\n@property (nonatomic, strong) UIImage *originalImage;\n\n\n/**\n *  初始化一个对象\n *\n *  @param name 名字\n *\n *  @return 自己\n */\n- (instancetype)initWithName:(NSString *)name;\n\n\n/**尽量不使用以下形式：\n @interface B : UIViewController\n @property (strong) NSString* name;\n @end\n //然后使用的时候这个样子：\n B* vc = [B new];\n vc.name = @\"xx\";\n [self.navigationController push:vc];\n */\n\n@end\n"
  },
  {
    "path": "testPasterImage/Controllers/YBPasterImageVC.m",
    "content": "//\n//  YBPasterImageVC.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"YBPasterImageVC.h\"\n#import \"UIViewController+Extension.h\"\n#import \"YBPasterScrollView.h\"\n#import \"YBPasterView.h\"\n#import \"UIImage+AddFunction.h\"\n#import \"YBCustomButton.h\"\n#import \"BlocksKit.h\"\n#import \"BlocksKit+UIKit.h\"\n#import \"YBFilterScrollView.h\"\n#import \"UIViewController+Example.h\"\n#import \"UIViewController+Swizzling.h\"\n\n\n/**\n *  \"滤镜\"，“标签”，“贴纸”\n */\ntypedef NS_ENUM(NSInteger, YBImageDecoration) {\n    /*** 滤镜*/\n    YBImageFilter = 0,\n    /*** 标签*/\n    YBImageTag,\n    /*** 贴纸*/\n    YBImagePaster,\n};\n\n#define FULL_SCREEN_H [UIScreen mainScreen].bounds.size.height\n#define FULL_SCREEN_W [UIScreen mainScreen].bounds.size.width\n/**底部的scrollView的高*/\nconst CGFloat pasterScrollView_H = 120;\n/**空白的距离间隔*/\nextern CGFloat inset_space;\n/**默认的图片上的贴纸大小*/\nstatic const CGFloat defaultPasterViewW_H = 120;\n/**底部按钮的高度*/\nstatic CGFloat bottomButtonH = 44;\n\n@interface YBPasterImageVC ()<YBPasterScrollViewDelegate, YBFilterScrollViewDelegate, YBPasterViewDelegate>\n{\n    NSInteger defaultIndex;\n    NSString* _name;\n}\n/**上部的图片imageView*/\n@property (nonatomic, strong) UIImageView *pasterImageView;\n/**多个贴纸样式的scrollView*/\n@property (nonatomic, strong) YBPasterScrollView *pasterScrollView;\n/**装多个滤镜样式的scrollView*/\n@property (nonatomic, strong) YBFilterScrollView *filterScrollView;\n/**图片数组*/\n@property (nonatomic, copy) NSArray *imageArray;\n/**可变的装多个贴纸标签的数组*/\n@property (nonatomic, strong) NSMutableArray *pasterViewMutArr;\n/**贴纸*/\n@property (nonatomic, strong) YBPasterView *pasterView;\n/**底部的公共的按钮*/\n@property (nonatomic, strong) YBCustomButton *bottomButton;\n/**底部滑动的红色的线*/\n@property (nonatomic, strong) UIView *lineView;\n\n@end\n\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wunused-variable\" //消除没有用到的变量产生的警告\n\n@implementation YBPasterImageVC\n\n\n/**\n *  初始化一个对象\n *\n *  @param name 名字\n *\n *  @return 自己\n */\n- (instancetype)initWithName:(NSString *)name {\n    self = [super init];\n    if(!self) return self;\n    _name = name;\n    return self;\n}\n\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    \n    //设置一些通用属性\n    [self setGeneralPropetory];\n    \n    //添加右键\n    [self setRightButton];\n    \n    //设置UI\n    [self setupUI];\n    \n}\n\n/**\n *  设置一些通用属性\n */\n- (void)setGeneralPropetory\n{\n    self.view.backgroundColor = [UIColor whiteColor];\n    self.automaticallyAdjustsScrollViewInsets = NO;\n    [self.navigationController setNavigationBarHidden:NO];\n    [[UIApplication sharedApplication] setStatusBarHidden:YES];\n}\n\n/**\n *  懒加载-装多张贴纸的可变数组\n */\n- (NSMutableArray *)pasterViewMutArr\n{\n    if (!_pasterViewMutArr) {\n        _pasterViewMutArr = [NSMutableArray array];\n    }\n    \n    return _pasterViewMutArr;\n}\n\n/**\n *  懒加载-图片数组\n */\n- (NSArray *)imageArray\n{\n    if (!_imageArray) {\n        NSMutableArray *mutArr = [NSMutableArray arrayWithCapacity:0];\n        NSArray *arr = @[@\"1\",@\"2\",@\"3\",@\"4\",@\"5\"];\n        for (NSString *imageName in arr) {\n            UIImage *image = [UIImage imageNamed:imageName];\n            [mutArr addObject:image];\n        }\n        _imageArray = mutArr;\n    }\n    \n    return _imageArray;\n}\n\n/**\n *  懒加载-get方法设置自定义贴纸的scrollView\n */\n- (YBPasterScrollView *)pasterScrollView\n{\n    if (!_pasterScrollView) {\n        _pasterScrollView = [[YBPasterScrollView alloc]initScrollViewWithPasterImageArray:self.imageArray];\n        _pasterScrollView.frame = CGRectMake(0, FULL_SCREEN_H - pasterScrollView_H - bottomButtonH, FULL_SCREEN_W, pasterScrollView_H);\n        _pasterScrollView.backgroundColor = [UIColor lightGrayColor];\n        _pasterScrollView.showsHorizontalScrollIndicator = YES;\n        _pasterScrollView.bounces = YES;\n        _pasterScrollView.contentSize = CGSizeMake(_pasterScrollView.pasterImage_W_H * _pasterScrollView.pasterImageArray.count + inset_space * 6, pasterScrollView_H);\n        _pasterScrollView.pasterDelegate = self;\n    }\n    \n    return _pasterScrollView;\n}\n\n/**\n *  懒加载-get方法设置自定义滤镜的scrollView\n */\n- (YBFilterScrollView *)filterScrollView\n{\n    if (!_filterScrollView) {\n        _filterScrollView = [[YBFilterScrollView alloc]initWithFrame:CGRectMake(0, FULL_SCREEN_H - pasterScrollView_H - bottomButtonH, FULL_SCREEN_W, pasterScrollView_H)];\n        _filterScrollView.backgroundColor = [UIColor lightGrayColor];\n        _filterScrollView.showsHorizontalScrollIndicator = YES;\n        _filterScrollView.bounces = YES;\n        NSArray *titleArray = @[@\"原图\",@\"LOMO\",@\"黑白\",@\"复古\",@\"哥特\",@\"瑞华\",@\"淡雅\",@\"酒红\",@\"青柠\",@\"浪漫\",@\"光晕\",@\"蓝调\",@\"梦幻\",@\"夜色\"];\n        _filterScrollView.titleArray = titleArray;\n        _filterScrollView.filterScrollViewW = pasterScrollView_H;\n        _filterScrollView.insert_space = inset_space*2/3;\n        _filterScrollView.labelH = 30;\n        _filterScrollView.originImage = self.originalImage;\n        _filterScrollView.perButtonW_H = _filterScrollView.filterScrollViewW - 2*_filterScrollView.insert_space - 30;\n        \n        _filterScrollView.contentSize = CGSizeMake(_filterScrollView.perButtonW_H * titleArray.count + _filterScrollView.insert_space * (titleArray.count + 1), pasterScrollView_H);\n        _filterScrollView.filterDelegate = self;\n        [_filterScrollView loadScrollView];\n    }\n    return _filterScrollView;\n}\n\n/**\n *  设置UI\n */\n- (void)setupUI\n{\n    //默认选中“滤镜”位置\n    defaultIndex = 0;\n    \n    UIImageView *pasterImageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, FULL_SCREEN_W - 40, FULL_SCREEN_W - 40)];\n    pasterImageView.image = self.originalImage;\n    pasterImageView.userInteractionEnabled = YES;\n    [self.view addSubview:pasterImageView];\n    self.pasterImageView = pasterImageView;\n    \n    UIView *bottomBackView = [[UIView alloc]initWithFrame:CGRectMake(0, FULL_SCREEN_H - bottomButtonH, FULL_SCREEN_W, bottomButtonH)];\n    bottomBackView.backgroundColor = [UIColor whiteColor];\n    [self.view addSubview:bottomBackView];\n    \n    NSArray *array = @[@\"滤镜\",@\"标签\",@\"贴纸\"];\n    for (int i = 0; i < array.count; i ++)\n    {\n        CGFloat perButtonW = FULL_SCREEN_W/3;\n        YBCustomButton *button = [[YBCustomButton alloc]initWithFrame:CGRectMake(perButtonW * i , 0, perButtonW, bottomButtonH)];\n        [button setTitle:[array objectAtIndex:i] forState:UIControlStateNormal];\n        [button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];\n        [button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];\n        button.titleLabel.font = [UIFont systemFontOfSize:15.0];\n        button.tag = 5000 + i;\n        if (i == defaultIndex) {\n            button.selected = YES;\n            self.bottomButton = button;\n        }\n        [button addTarget:self action:@selector(bottomButtonClick:) forControlEvents:UIControlEventTouchUpInside];\n        [bottomBackView addSubview:button];\n    }\n    \n    CGFloat lineViewW = bottomBackView.frame.size.width/6;\n    CGFloat lineViewX = bottomBackView.frame.size.width/6 - lineViewW/2;\n    UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(lineViewX, bottomButtonH - 3, lineViewW, 3)];\n    lineView.backgroundColor = [UIColor redColor];\n    [bottomBackView addSubview:lineView];\n    self.lineView = lineView;\n    \n    //底部“贴纸”的scrollView\n    [self.view addSubview:self.pasterScrollView];\n    self.pasterScrollView.hidden = YES;\n    self.pasterScrollView.alpha = 0.0;\n    \n    //底部“滤镜”的scrollView\n    [self.view addSubview:self.filterScrollView];\n}\n\n/**\n *  底部“滤镜”、“标签”、“贴纸”的按钮点击方法\n */\n- (void)bottomButtonClick:(YBCustomButton *)sender\n{\n    self.bottomButton.selected  = NO;\n    sender.selected = !sender.selected;\n    self.bottomButton = sender;\n    \n    // 底部的lineView转移位置\n    [self lineViewTransform:sender];\n    \n    // 根据当前的index切换底部的scrollView\n    [self changeDecorateImageWithButtonTag:sender];\n}\n\n/**\n *  根据当前的index切换底部的scrollView\n */\n- (void)changeDecorateImageWithButtonTag:(YBCustomButton *)sender\n{\n    // 当前位置是贴纸\n    if (sender.tag - 5000 == YBImagePaster)\n    {\n        [UIView animateWithDuration:.5 animations:^{\n            self.pasterScrollView.alpha = 1.0;\n            self.pasterScrollView.hidden = NO;\n            \n            if (self.pasterView)\n            {\n                [self.pasterView showBtn];\n            }\n        }];\n    }else\n    {\n        self.pasterScrollView.hidden = YES;\n        self.pasterScrollView.alpha = .0;\n        \n        if (self.pasterView)\n        {\n            [self.pasterView hiddenBtn];\n        }\n    }\n    \n    // 当前位置是滤镜\n    if (sender.tag - 5000 == YBImageFilter)\n    {\n        [UIView animateWithDuration:.5 animations:^{\n            self.filterScrollView.alpha = 1.0;\n            self.filterScrollView.hidden = NO;\n        }];\n    }\n    else\n    {\n        self.filterScrollView.hidden = YES;\n        self.filterScrollView.alpha = .0;\n    }\n}\n\n/**\n *  底部的lineView转移位置\n */\n- (void)lineViewTransform:(YBCustomButton *)sender\n{\n    CGFloat sendW = sender.frame.size.width;\n    NSInteger currentIndex = sender.tag - 5000;\n    CGFloat lineViewH = self.lineView.frame.size.height;\n    CGFloat lineViewX = sendW * currentIndex + sendW / 2 - self.lineView.frame.size.width/2;\n    CGFloat lineViewY = bottomButtonH - lineViewH;\n    CGFloat lineViewW = sendW/2;\n    [UIView animateWithDuration:.5 animations:^{\n        self.lineView.frame = CGRectMake(lineViewX, lineViewY, lineViewW, lineViewH);\n    }];\n}\n\n/**\n *  导航栏的“完成”右键\n */\n- (void)setRightButton\n{\n    [self initRightButtonWithButtonW:50 buttonH:50 title:@\"完成\" titleColor:[UIColor redColor] touchBlock:^(UIButton *rightButton) {\n    }];\n    \n    WS(weakSelf);\n    YBWeak(YBPasterImageVC, weakMy);\n    //按钮的点击事件封装的block\n    weakSelf.rightBtnBlock = ^(NSString *string){\n        \n        [weakSelf.pasterView hiddenBtn];\n        if (weakSelf.block) {\n            \n            if (weakSelf.pasterView != nil) {\n                UIImage *editedImage = [weakSelf doneEdit];\n                weakSelf.block(editedImage);\n            }\n            else\n            {\n                weakSelf.block(weakSelf.pasterImageView.image);\n            }\n            \n            [weakSelf.pasterImageView removeFromSuperview];\n            [weakSelf.filterScrollView removeFromSuperview];\n            [weakSelf.navigationController popViewControllerAnimated:YES];\n        }\n    };\n}\n\n/**\n *  图片合成\n *\n *  @return 返回合成好的图片\n */\n- (UIImage *)doneEdit\n{\n    CGFloat org_width = self.originalImage.size.width ;\n    CGFloat org_heigh = self.originalImage.size.height ;\n    CGFloat rateOfScreen = org_width / org_heigh ;\n    CGFloat inScreenH = self.pasterImageView.frame.size.width / rateOfScreen ;\n    \n    CGRect rect = CGRectZero ;\n    rect.size = CGSizeMake(self.pasterImageView.frame.size.width, inScreenH) ;\n    rect.origin = CGPointMake(0, (self.pasterImageView.frame.size.height - inScreenH) / 2) ;\n    \n    UIImage *imgTemp = [UIImage getImageFromView:self.pasterImageView] ;\n    UIImage *imgCut = [UIImage squareImageFromImage:imgTemp scaledToSize:rect.size.width] ;\n    \n    return imgCut ;\n}\n\n#pragma mark - YBPasterScrollViewDelegate\n- (void)pasterTag:(NSInteger)pasterTag pasterImage:(UIImage *)pasterImage\n{\n    if (self.pasterView) {\n        [self.pasterView removeFromSuperview];\n        self.pasterView = nil;\n    }\n    YBPasterView *pasterView = [[YBPasterView alloc]initWithFrame:CGRectMake(0, 0, defaultPasterViewW_H, defaultPasterViewW_H)];\n    pasterView.center = CGPointMake(self.pasterImageView.frame.size.width/2, self.pasterImageView.frame.size.height/2);\n    pasterView.pasterImage = pasterImage;\n    pasterView.delegate = self;\n    [self.pasterImageView addSubview:pasterView];\n    self.pasterView = pasterView;\n    \n    //[self.pasterViewMutArr addObject:pasterView];\n    //NSLog(@\"%lu\",(unsigned long)self.pasterViewMutArr.count);\n    \n}\n\n#pragma mark - YBFilterScrollViewDelegate\n- (void)filterImage:(UIImage *)editedImage\n{\n    self.pasterImageView.image = editedImage;\n}\n\n/**\n *  测试有返回值的代理\n */\n- (NSString *)deliverStr:(NSString *)originalStr\n{\n    NSString *string;\n    string = originalStr;\n    return string;\n}\n\n#pragma mark - YBPasterViewDelegate\n- (void)deleteThePaster\n{\n    self.pasterScrollView.defaultButton.selected = NO;\n    self.pasterScrollView.defaultButton.layer.borderColor = [UIColor clearColor].CGColor;\n    self.pasterScrollView.defaultButton.layer.borderWidth = 0.1;\n    \n    self.pasterView = nil;\n    \n}\n\n#pragma clang diagnostic pop\n\n\n@end\n"
  },
  {
    "path": "testPasterImage/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>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</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</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>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</dict>\n</plist>\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/ColorMatrix.h",
    "content": "//\n//  RootViewController.h\n//  pictureProcess\n//\n//  Created by Ibokan on 12-9-7.\n//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.\n//\n\n// 1、LOMO\nconst float colormatrix_lomo[] = {\n    1.7f,  0.1f, 0.1f, 0, -73.1f,\n    0,  1.7f, 0.1f, 0, -73.1f,\n    0,  0.1f, 1.6f, 0, -73.1f,\n    0,  0, 0, 1.0f, 0 };\n\n// 2、黑白\nconst float colormatrix_heibai[] = {\n    0.8f,  1.6f, 0.2f, 0, -163.9f,\n    0.8f,  1.6f, 0.2f, 0, -163.9f,\n    0.8f,  1.6f, 0.2f, 0, -163.9f,\n    0,  0, 0, 1.0f, 0 };\n// 3、复古\nconst float colormatrix_huajiu[] = { \n    0.2f,0.5f, 0.1f, 0, 40.8f,\n    0.2f, 0.5f, 0.1f, 0, 40.8f, \n    0.2f,0.5f, 0.1f, 0, 40.8f, \n    0, 0, 0, 1, 0 };\n\n// 4、哥特\nconst float colormatrix_gete[] = { \n    1.9f,-0.3f, -0.2f, 0,-87.0f,\n    -0.2f, 1.7f, -0.1f, 0, -87.0f, \n    -0.1f,-0.6f, 2.0f, 0, -87.0f, \n    0, 0, 0, 1.0f, 0 };\n\n// 5、锐化\nconst float colormatrix_ruise[] = { \n    4.8f,-1.0f, -0.1f, 0,-388.4f,\n    -0.5f,4.4f, -0.1f, 0,-388.4f, \n    -0.5f,-1.0f, 5.2f, 0,-388.4f,\n    0, 0, 0, 1.0f, 0 };\n\n\n// 6、淡雅\nconst float colormatrix_danya[] = { \n    0.6f,0.3f, 0.1f, 0,73.3f,\n    0.2f,0.7f, 0.1f, 0,73.3f, \n    0.2f,0.3f, 0.4f, 0,73.3f,\n    0, 0, 0, 1.0f, 0 };\n\n// 7、酒红\nconst float colormatrix_jiuhong[] = { \n    1.2f,0.0f, 0.0f, 0.0f,0.0f,\n    0.0f,0.9f, 0.0f, 0.0f,0.0f, \n    0.0f,0.0f, 0.8f, 0.0f,0.0f,\n    0, 0, 0, 1.0f, 0 };\n\n// 8、清宁\nconst float colormatrix_qingning[] = { \n    0.9f, 0, 0, 0, 0, \n    0, 1.1f,0, 0, 0, \n    0, 0, 0.9f, 0, 0, \n    0, 0, 0, 1.0f, 0 };\n\n// 9、浪漫\nconst float colormatrix_langman[] = { \n    0.9f, 0, 0, 0, 63.0f, \n    0, 0.9f,0, 0, 63.0f, \n    0, 0, 0.9f, 0, 63.0f, \n    0, 0, 0, 1.0f, 0 };\n\n// 10、光晕\nconst float colormatrix_guangyun[] = { \n    0.9f, 0, 0,  0, 64.9f,\n    0, 0.9f,0,  0, 64.9f,\n    0, 0, 0.9f,  0, 64.9f,\n    0, 0, 0, 1.0f, 0 };\n\n// 11、蓝调\nconst float colormatrix_landiao[] = {\n    2.1f, -1.4f, 0.6f, 0.0f, -31.0f, \n    -0.3f, 2.0f, -0.3f, 0.0f, -31.0f,\n    -1.1f, -0.2f, 2.6f, 0.0f, -31.0f, \n    0.0f, 0.0f, 0.0f, 1.0f, 0.0f\n};\n\n// 12、梦幻\nconst float colormatrix_menghuan[] = {\n    0.8f, 0.3f, 0.1f, 0.0f, 46.5f, \n    0.1f, 0.9f, 0.0f, 0.0f, 46.5f, \n    0.1f, 0.3f, 0.7f, 0.0f, 46.5f, \n    0.0f, 0.0f, 0.0f, 1.0f, 0.0f\n};\n\n// 13、夜色\nconst float colormatrix_yese[] = {\n    1.0f, 0.0f, 0.0f, 0.0f, -66.6f,\n    0.0f, 1.1f, 0.0f, 0.0f, -66.6f, \n    0.0f, 0.0f, 1.0f, 0.0f, -66.6f, \n    0.0f, 0.0f, 0.0f, 1.0f, 0.0f\n};\n\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/ImageUtil.h",
    "content": "//\n//  RootViewController.h\n//  pictureProcess\n//\n//  Created by Ibokan on 12-9-7.\n//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <OpenGLES/ES1/gl.h>\n#import <OpenGLES/ES1/glext.h>\n#import <UIKit/UIKit.h>\n@interface ImageUtil : NSObject \n\n+ (UIImage *)imageWithImage:(UIImage*)inImage withColorMatrix:(const float*)f;\n\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/ImageUtil.m",
    "content": "//\n//  RootViewController.h\n//  pictureProcess\n//\n//  Created by Ibokan on 12-9-7.\n//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.\n//\n\n#import \"ImageUtil.h\"\n\n@implementation ImageUtil\n\nstatic CGContextRef CreateRGBABitmapContext (CGImageRef inImage)// 返回一个使用RGBA通道的位图上下文 \n{\n\tCGContextRef context = NULL; \n\tCGColorSpaceRef colorSpace; \n\tvoid *bitmapData; //内存空间的指针，该内存空间的大小等于图像使用RGB通道所占用的字节数。\n\tunsigned long bitmapByteCount;\n\tunsigned long bitmapBytesPerRow;\n    \n\tsize_t pixelsWide = CGImageGetWidth(inImage); //获取横向的像素点的个数\n\tsize_t pixelsHigh = CGImageGetHeight(inImage); //纵向\n    \n\tbitmapBytesPerRow\t= (pixelsWide * 4); //每一行的像素点占用的字节数，每个像素点的ARGB四个通道各占8个bit(0-255)的空间\n\tbitmapByteCount\t= (bitmapBytesPerRow * pixelsHigh); //计算整张图占用的字节数\n    \n\tcolorSpace = CGColorSpaceCreateDeviceRGB();//创建依赖于设备的RGB通道\n\t\n\tbitmapData = malloc(bitmapByteCount); //分配足够容纳图片字节数的内存空间\n    \n\tcontext = CGBitmapContextCreate (bitmapData, pixelsWide, pixelsHigh, 8, bitmapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);\n    //创建CoreGraphic的图形上下文，该上下文描述了bitmaData指向的内存空间需要绘制的图像的一些绘制参数\n    \n\tCGColorSpaceRelease( colorSpace ); \n    //Core Foundation中通过含有Create、Alloc的方法名字创建的指针，需要使用CFRelease()函数释放\n    \n\treturn context;\n}\n\nstatic unsigned char *RequestImagePixelData(UIImage *inImage) \n// 返回一个指针，该指针指向一个数组，数组中的每四个元素都是图像上的一个像素点的RGBA的数值(0-255)，用无符号的char是因为它正好的取值范围就是0-255\n{\n\tCGImageRef img = [inImage CGImage]; \n\tCGSize size = [inImage size];\n    \n\tCGContextRef cgctx = CreateRGBABitmapContext(img); //使用上面的函数创建上下文\n\t\n\tCGRect rect = {{0,0},{size.width, size.height}};\n    \n\tCGContextDrawImage(cgctx, rect, img); //将目标图像绘制到指定的上下文，实际为上下文内的bitmapData。\n\tunsigned char *data = CGBitmapContextGetData (cgctx); \n    \n\tCGContextRelease(cgctx);//释放上面的函数创建的上下文\n\treturn data;\n}\n\nstatic void changeRGBA(int *red,int *green,int *blue,int *alpha, const float* f)//修改RGB的值\n{\n    int redV = *red;\n    int greenV = *green;\n    int blueV = *blue;\n    int alphaV = *alpha;\n    \n    *red = f[0] * redV + f[1] * greenV + f[2] * blueV + f[3] * alphaV + f[4];\n    *green = f[0+5] * redV + f[1+5] * greenV + f[2+5] * blueV + f[3+5] * alphaV + f[4+5];\n    *blue = f[0+5*2] * redV + f[1+5*2] * greenV + f[2+5*2] * blueV + f[3+5*2] * alphaV + f[4+5*2];\n    *alpha = f[0+5*3] * redV + f[1+5*3] * greenV + f[2+5*3] * blueV + f[3+5*3] * alphaV + f[4+5*3];\n    \n    if (*red > 255) \n    {\n        *red = 255;\n    }\n    if(*red < 0)\n    {\n        *red = 0;\n    }\n    if (*green > 255) \n    {\n        *green = 255;\n    }\n    if (*green < 0) \n    {\n        *green = 0;\n    }\n    if (*blue > 255) \n    {\n        *blue = 255;\n    }\n    if (*blue < 0) \n    {\n        *blue = 0;\n    }\n    if (*alpha > 255) \n    {\n        *alpha = 255;\n    }\n    if (*alpha < 0) \n    {\n        *alpha = 0;\n    }\n}\n\n+ (UIImage*)imageWithImage:(UIImage*)inImage withColorMatrix:(const float*) f\n{\n\tunsigned char *imgPixel = RequestImagePixelData(inImage);\n\tCGImageRef inImageRef = [inImage CGImage];\n\tsize_t w = CGImageGetWidth(inImageRef);\n\tsize_t h = CGImageGetHeight(inImageRef);\n\t\n\tint wOff = 0;\n\tint pixOff = 0;\n\t\n    \n\tfor(GLuint y = 0;y< h;y++)//双层循环按照长宽的像素个数迭代每个像素点\n\t{\n\t\tpixOff = wOff;\n\t\t\n\t\tfor (GLuint x = 0; x<w; x++) \n\t\t{\n\t\t\tint red = (unsigned char)imgPixel[pixOff];\n\t\t\tint green = (unsigned char)imgPixel[pixOff+1];\n\t\t\tint blue = (unsigned char)imgPixel[pixOff+2];\n            int alpha = (unsigned char)imgPixel[pixOff+3];\n            changeRGBA(&red, &green, &blue, &alpha, f);\n            \n            //回写数据\n\t\t\timgPixel[pixOff] = red;\n\t\t\timgPixel[pixOff+1] = green;\n\t\t\timgPixel[pixOff+2] = blue;\n            imgPixel[pixOff+3] = alpha;\n            \n           \n\t\t\tpixOff += 4; //将数组的索引指向下四个元素\n\t\t}\n        \n\t\twOff += w * 4;\n\t}\n    \n\tNSInteger dataLength = w * h * 4;\n    \n    //下面的代码创建要输出的图像的相关参数\n\tCGDataProviderRef provider = CGDataProviderCreateWithData(NULL, imgPixel, dataLength, NULL);\n\n\tint bitsPerComponent = 8;\n\tint bitsPerPixel = 32;\n\tunsigned long bytesPerRow = 4 * w;\n\tCGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();\n\tCGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;\n\tCGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;\n\t\n\tCGImageRef imageRef = CGImageCreate(w, h, bitsPerComponent, bitsPerPixel, bytesPerRow,colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);//创建要输出的图像\n\t\n\tUIImage *myImage = [UIImage imageWithCGImage:imageRef];\n\t\n\tCFRelease(imageRef);\n\tCGColorSpaceRelease(colorSpaceRef);\n\tCGDataProviderRelease(provider);\n\treturn myImage;\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/entries",
    "content": "12\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/format",
    "content": "12\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/06/062d14b8b3d1573c2d8c9d30257fd9b0b84bd59c.svn-base",
    "content": "// UIImage+RoundedCorner.m\n// Created by Trevor Harmon on 9/20/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n#import \"UIImage+RoundedCorner.h\"\n#import \"UIImage+Alpha.h\"\n\n\n@implementation UIImage (RoundedCorner)\n\n// Creates a copy of this image with rounded corners\n// If borderSize is non-zero, a transparent border of the given size will also be added\n// Original author: Björn Sållarp. Used with permission. See: http://blog.sallarp.com/iphone-uiimage-round-corners/\n- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize {\n    // If the image does not have an alpha layer, add one\n    UIImage *image = [self imageWithAlpha];\n    \n    // Build a context that's the same dimensions as the new size\n    CGContextRef context = CGBitmapContextCreate(NULL,\n                                                 image.size.width,\n                                                 image.size.height,\n                                                 CGImageGetBitsPerComponent(image.CGImage),\n                                                 0,\n                                                 CGImageGetColorSpace(image.CGImage),\n                                                 CGImageGetBitmapInfo(image.CGImage));\n\n    // Create a clipping path with rounded corners\n    CGContextBeginPath(context);\n    [self addRoundedRectToPath:CGRectMake(borderSize, borderSize, image.size.width - borderSize * 2, image.size.height - borderSize * 2)\n                       context:context\n                     ovalWidth:cornerSize\n                    ovalHeight:cornerSize];\n    CGContextClosePath(context);\n    CGContextClip(context);\n\n    // Draw the image to the context; the clipping path will make anything outside the rounded rect transparent\n    CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage);\n    \n    // Create a CGImage from the context\n    CGImageRef clippedImage = CGBitmapContextCreateImage(context);\n    CGContextRelease(context);\n    \n    // Create a UIImage from the CGImage\n    UIImage *roundedImage = [UIImage imageWithCGImage:clippedImage];\n    CGImageRelease(clippedImage);\n    \n    return roundedImage;\n}\n\n#pragma mark -\n#pragma mark Private helper methods\n\n// Adds a rectangular path to the given context and rounds its corners by the given extents\n// Original author: Björn Sållarp. Used with permission. See: http://blog.sallarp.com/iphone-uiimage-round-corners/\n- (void)addRoundedRectToPath:(CGRect)rect context:(CGContextRef)context ovalWidth:(CGFloat)ovalWidth ovalHeight:(CGFloat)ovalHeight {\n    if (ovalWidth == 0 || ovalHeight == 0) {\n        CGContextAddRect(context, rect);\n        return;\n    }\n    CGContextSaveGState(context);\n    CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect));\n    CGContextScaleCTM(context, ovalWidth, ovalHeight);\n    CGFloat fw = CGRectGetWidth(rect) / ovalWidth;\n    CGFloat fh = CGRectGetHeight(rect) / ovalHeight;\n    CGContextMoveToPoint(context, fw, fh/2);\n    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);\n    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);\n    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);\n    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1);\n    CGContextClosePath(context);\n    CGContextRestoreGState(context);\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/39/3944926a8fe582382d834a9fecb902c171a9a76e.svn-base",
    "content": "// UIImage+Resize.h\n// Created by Trevor Harmon on 8/5/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n// Extends the UIImage class to support resizing/cropping\n@interface UIImage (Resize)\n- (UIImage *)croppedImage:(CGRect)bounds;\n- (UIImage *)thumbnailImage:(NSInteger)thumbnailSize\n          transparentBorder:(NSUInteger)borderSize\n               cornerRadius:(NSUInteger)cornerRadius\n       interpolationQuality:(CGInterpolationQuality)quality;\n- (UIImage *)resizedImage:(CGSize)newSize\n     interpolationQuality:(CGInterpolationQuality)quality;\n- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode\n                                  bounds:(CGSize)bounds\n                    interpolationQuality:(CGInterpolationQuality)quality;\n\n- (UIImage *)resizedImage:(CGSize)newSize\n                transform:(CGAffineTransform)transform\n           drawTransposed:(BOOL)transpose\n     interpolationQuality:(CGInterpolationQuality)quality;\n- (CGAffineTransform)transformForOrientation:(CGSize)newSize;\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/43/43a6e58f03ebdbe417f3c5028d4dc1b936e030b4.svn-base",
    "content": "// UIImage+Alpha.h\n// Created by Trevor Harmon on 9/20/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n// Helper methods for adding an alpha layer to an image\n@interface UIImage (Alpha)\n- (BOOL)hasAlpha;\n- (UIImage *)imageWithAlpha;\n- (UIImage *)transparentBorderImage:(NSUInteger)borderSize;\n- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size;\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/5d/5deb2d07c4dd4089e7ade0df1f5278a51efb71cf.svn-base",
    "content": "//\n//  UIImage-Extensions.h\n//\n//  Created by Hardy Macia on 7/1/09.\n//  Copyright 2009 Catamount Software. All rights reserved.\n//\n#import <Foundation/Foundation.h>\n\n@interface UIImage (CS_Extensions)\n- (UIImage *)imageAtRect:(CGRect)rect;\n- (UIImage *)imageByScalingProportionallyToMinimumSize:(CGSize)targetSize;\n- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize;\n- (UIImage *)imageByScalingToSize:(CGSize)targetSize;\n- (UIImage *)imageRotatedByRadians:(CGFloat)radians;\n- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees;\n- (UIImage *)imageFlipUpDown;\n- (UIImage *)combineUIImage:(UIImage *)anotherImage;\n- (UIImage *)addText:(UIImage *)img text:(NSString *)text1;\n- (UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2;\n@end;\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/74/7403967df71a9ffaa67500af6a610523742bfd53.svn-base",
    "content": "//\n//  UIImage+SplitImageIntoTwoParts.h\n//  TapRepublic\n//\n//  Created by Terry Lin on 12-5-11.\n//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface UIImage (SplitImageIntoTwoParts)\n+ (NSArray*)splitImageIntoTwoParts:(UIImage*)image;\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/9e/9e08c4f172f233df24ad098fd5059cdaf5ad8268.svn-base",
    "content": "//\n//  UIImage+SplitImageIntoTwoParts.m\n//  TapRepublic\n//\n//  Created by Terry Lin on 12-5-11.\n//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.\n//\n#define SAWTOOTH_COUNT 10\n#define SAWTOOTH_WIDTH_FACTOR 20 \n#import \"UIImage+SplitImageIntoTwoParts.h\"\n\n@implementation UIImage (SplitImageIntoTwoParts)\n\n+(NSArray *)splitImageIntoTwoParts:(UIImage *)image\n{    \n    CGFloat scale = [[UIScreen mainScreen] scale]; \n    NSMutableArray *array = [NSMutableArray arrayWithCapacity:2];\n    CGFloat width,height,widthgap,heightgap;\n    int piceCount = SAWTOOTH_COUNT;\n    width = image.size.width;\n    height = image.size.height;\n    widthgap = width/SAWTOOTH_WIDTH_FACTOR;\n    heightgap = height/piceCount;\n    //    CGRect rect = CGRectMake(0, 0, width, height);\n    CGContextRef context;\n    CGImageRef imageMasked;\n    UIImage *leftImage,*rightImage;\n    \n    //part one\n    UIGraphicsBeginImageContext(CGSizeMake(width*scale, height*scale));\n    context = UIGraphicsGetCurrentContext();\n    CGContextScaleCTM(context, scale, scale);\n    CGContextMoveToPoint(context, 0, 0);\n    int a=-1;\n    for (int i=0; i<piceCount+1; i++) {\n        CGContextAddLineToPoint(context, width/2+(widthgap*a), heightgap*i);\n        a= a*-1;\n    }\n    CGContextAddLineToPoint(context, 0, height);\n    CGContextClosePath(context);\n    CGContextClip(context);\n    [image drawAtPoint:CGPointMake(0, 0)];\n    imageMasked = CGBitmapContextCreateImage(context);\n    leftImage = [UIImage imageWithCGImage:imageMasked scale:scale orientation:UIImageOrientationUp];\n    [array addObject:leftImage];\n    UIGraphicsEndImageContext();\n    \n    //part two\n    UIGraphicsBeginImageContext(CGSizeMake(width*scale, height*scale));\n    context = UIGraphicsGetCurrentContext();\n    CGContextScaleCTM(context, scale, scale);\n    CGContextMoveToPoint(context, width, 0);\n    a=-1;\n    for (int i=0; i<piceCount+1; i++) {\n        CGContextAddLineToPoint(context, width/2+(widthgap*a), heightgap*i);\n        a= a*-1;\n    }\n    CGContextAddLineToPoint(context, width, height);\n    CGContextClosePath(context);\n    CGContextClip(context);\n    [image drawAtPoint:CGPointMake(0, 0)];\n    imageMasked = CGBitmapContextCreateImage(context);\n    rightImage = [UIImage imageWithCGImage:imageMasked scale:scale orientation:UIImageOrientationUp];\n    [array addObject:rightImage];\n    UIGraphicsEndImageContext();\n    \n    \n    return array;\n}\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/a3/a31a6fddf40b76b94df05097d799e55a769d8440.svn-base",
    "content": "// UIImage+RoundedCorner.h\n// Created by Trevor Harmon on 9/20/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n// Extends the UIImage class to support making rounded corners\n@interface UIImage (RoundedCorner)\n- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize;\n- (void)addRoundedRectToPath:(CGRect)rect context:(CGContextRef)context ovalWidth:(CGFloat)ovalWidth ovalHeight:(CGFloat)ovalHeight;\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/be/becc3c813720214cae048c91b03d26dba76ff1ca.svn-base",
    "content": "//\n//  UIImage+Cut.m\n//  MeiJiaLove\n//\n//  Created by Wu.weibin on 13-5-17.\n//  Copyright (c) 2013年 Wu.weibin. All rights reserved.\n//\n\n#import \"UIImage+Cut.h\"\n#import \"UIImage+RoundedCorner.h\"\n@implementation UIImage (Cut)\n\n\n- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize\n{\n    UIImage *newimage;\n    UIImage *image = self;\n    if (nil == image) {\n        newimage = nil;\n    }\n    else{\n        CGSize oldsize = image.size;\n        CGRect rect;\n        if (asize.width/asize.height > oldsize.width/oldsize.height) {\n            rect.size.width = asize.width;\n            rect.size.height = asize.width*oldsize.height/oldsize.width;\n            rect.origin.x = 0;\n            rect.origin.y = (asize.height - rect.size.height)/2;\n        }\n        else{\n            rect.size.width = asize.height*oldsize.width/oldsize.height;\n            rect.size.height = asize.height;\n            rect.origin.x = (asize.width - rect.size.width)/2;\n            rect.origin.y = 0;\n        }\n        UIGraphicsBeginImageContext(asize);\n        CGContextRef context = UIGraphicsGetCurrentContext();\n        CGContextClipToRect(context, CGRectMake(0, 0, asize.width, asize.height));\n        CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);\n        UIRectFill(CGRectMake(0, 0, asize.width, asize.height));//clear background\n        [image drawInRect:rect];\n        newimage = UIGraphicsGetImageFromCurrentImageContext();\n        UIGraphicsEndImageContext();\n    }\n    return newimage;\n}\n- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize roundedCornerImage:(NSInteger)roundedCornerImage borderSize:(NSInteger)borderSize\n{\n    UIImage *image = [self clipImageWithScaleWithsize:asize];\n    return [image roundedCornerImage:roundedCornerImage borderSize:borderSize];\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/c8/c8496f35a02cbd4ef1b2a81af9b5ca802b339a3a.svn-base",
    "content": "//\n//  UIImage-Extensions.m\n//\n//  Created by Hardy Macia on 7/1/09.\n//  Copyright 2009 Catamount Software. All rights reserved.\n//\n\n#import \"UIImage-Extensions.h\"\n\nCGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;};\nCGFloat RadiansToDegrees(CGFloat radians) {return radians * 180/M_PI;};\n\n@implementation UIImage (CS_Extensions)\n\n-(UIImage *)imageAtRect:(CGRect)rect\n{\n\t\n\tCGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], rect);\n\tUIImage* subImage = [UIImage imageWithCGImage:imageRef];\n\tCGImageRelease(imageRef);\n\t\n\treturn subImage;\n\t\n}\n\n- (UIImage *)imageByScalingProportionallyToMinimumSize:(CGSize)targetSize {\n\t\n\tUIImage *sourceImage = self;\n\tUIImage *newImage = nil;\n\t\n\tCGSize imageSize = sourceImage.size;\n\tCGFloat width = imageSize.width;\n\tCGFloat height = imageSize.height;\n\t\n\tCGFloat targetWidth = targetSize.width;\n\tCGFloat targetHeight = targetSize.height;\n\t\n\tCGFloat scaleFactor = 0.0;\n\tCGFloat scaledWidth = targetWidth;\n\tCGFloat scaledHeight = targetHeight;\n\t\n\tCGPoint thumbnailPoint = CGPointMake(0.0,0.0);\n\t\n\tif (CGSizeEqualToSize(imageSize, targetSize) == NO) {\n\t\t\n\t\tCGFloat widthFactor = targetWidth / width;\n\t\tCGFloat heightFactor = targetHeight / height;\n\t\t\n\t\tif (widthFactor > heightFactor)\n\t\t\tscaleFactor = widthFactor;\n\t\telse\n\t\t\tscaleFactor = heightFactor;\n\t\t\n\t\tscaledWidth  = width * scaleFactor;\n\t\tscaledHeight = height * scaleFactor;\n\t\t\n\t\t// center the image\n\t\t\n\t\tif (widthFactor > heightFactor) {\n\t\t\tthumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;\n\t\t} else if (widthFactor < heightFactor) {\n\t\t\tthumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;\n\t\t}\n\t}\n\t\n\t\n\t// this is actually the interesting part:\n\t\n\tUIGraphicsBeginImageContext(targetSize);\n\t\n\tCGRect thumbnailRect = CGRectZero;\n\tthumbnailRect.origin = thumbnailPoint;\n\tthumbnailRect.size.width  = scaledWidth;\n\tthumbnailRect.size.height = scaledHeight;\n\t\n\t[sourceImage drawInRect:thumbnailRect];\n\t\n\tnewImage = UIGraphicsGetImageFromCurrentImageContext();\n\tUIGraphicsEndImageContext();\n\t\n\tif(newImage == nil) DLog(@\"could not scale image\");\n\t\n\t\n\treturn newImage ;\n}\n\n\n- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {\n\t\n\tUIImage *sourceImage = self;\n\tUIImage *newImage = nil;\n\t\n\tCGSize imageSize = sourceImage.size;\n\tCGFloat width = imageSize.width;\n\tCGFloat height = imageSize.height;\n\t\n\tCGFloat targetWidth = targetSize.width;\n\tCGFloat targetHeight = targetSize.height;\n\t\n\tCGFloat scaleFactor = 0.0;\n\tCGFloat scaledWidth = targetWidth;\n\tCGFloat scaledHeight = targetHeight;\n\t\n\tCGPoint thumbnailPoint = CGPointMake(0.0,0.0);\n\t\n\tif (CGSizeEqualToSize(imageSize, targetSize) == NO) {\n\t\t\n\t\tCGFloat widthFactor = targetWidth / width;\n\t\tCGFloat heightFactor = targetHeight / height;\n\t\t\n\t\tif (widthFactor < heightFactor)\n\t\t\tscaleFactor = widthFactor;\n\t\telse\n\t\t\tscaleFactor = heightFactor;\n\t\t\n\t\tscaledWidth  = width * scaleFactor;\n\t\tscaledHeight = height * scaleFactor;\n\t\t\n\t\t// center the image\n\t\t\n\t\tif (widthFactor < heightFactor) {\n\t\t\tthumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;\n\t\t} else if (widthFactor > heightFactor) {\n\t\t\tthumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;\n\t\t}\n\t}\n\t\n\t\n\t// this is actually the interesting part:\n\t\n\tUIGraphicsBeginImageContext(targetSize);\n\t\n\tCGRect thumbnailRect = CGRectZero;\n\tthumbnailRect.origin = thumbnailPoint;\n\tthumbnailRect.size.width  = scaledWidth;\n\tthumbnailRect.size.height = scaledHeight;\n\t\n\t//NSLog(@\"thumbmail rect: %@\", NSStringFromCGRect(thumbnailRect));\n\t[sourceImage drawInRect:thumbnailRect];\n\t\n\tnewImage = UIGraphicsGetImageFromCurrentImageContext();\n\tUIGraphicsEndImageContext();\n\t\n\tif(newImage == nil) DLog(@\"could not scale image\");\n\t\n\t\n\treturn newImage ;\n}\n\n\n- (UIImage *)imageByScalingToSize:(CGSize)targetSize {\n\t\n\tUIImage *sourceImage = self;\n\tUIImage *newImage = nil;\n\t\n\t//   CGSize imageSize = sourceImage.size;\n\t//   CGFloat width = imageSize.width;\n\t//   CGFloat height = imageSize.height;\n\t\n\tCGFloat targetWidth = targetSize.width;\n\tCGFloat targetHeight = targetSize.height;\n\t\n\t//   CGFloat scaleFactor = 0.0;\n\tCGFloat scaledWidth = targetWidth;\n\tCGFloat scaledHeight = targetHeight;\n\t\n\tCGPoint thumbnailPoint = CGPointMake(0.0,0.0);\n\t\n\t// this is actually the interesting part:\n\t\n\tUIGraphicsBeginImageContext(targetSize);\n\t\n\tCGRect thumbnailRect = CGRectZero;\n\tthumbnailRect.origin = thumbnailPoint;\n\tthumbnailRect.size.width  = scaledWidth;\n\tthumbnailRect.size.height = scaledHeight;\n\t\n\t[sourceImage drawInRect:thumbnailRect];\n\t\n\tnewImage = UIGraphicsGetImageFromCurrentImageContext();\n\tUIGraphicsEndImageContext();\n\t\n\tif(newImage == nil) DLog(@\"could not scale image\");\n\t\n\t\n\treturn newImage ;\n}\n\n\n- (UIImage *)imageRotatedByRadians:(CGFloat)radians\n{\n\treturn [self imageRotatedByDegrees:RadiansToDegrees(radians)];\n}\n\n- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees\n{   \n\t// calculate the size of the rotated view's containing box for our drawing space\n\tUIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)];\n\tCGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees));\n\trotatedViewBox.transform = t;\n\tCGSize rotatedSize = rotatedViewBox.frame.size;\n\t[rotatedViewBox release];\n\t\n\t// Create the bitmap context\n\tUIGraphicsBeginImageContext(rotatedSize);\n\tCGContextRef bitmap = UIGraphicsGetCurrentContext();\n\t\n\t// Move the origin to the middle of the image so we will rotate and scale around the center.\n\tCGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);\n\t\n\t//   // Rotate the image context\n\tCGContextRotateCTM(bitmap, DegreesToRadians(degrees));\n\t\n\t// Now, draw the rotated/scaled image into the context\n\tCGContextScaleCTM(bitmap, 1.0, -1.0);\n\tCGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]);\n\t\n\tUIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();\n\tUIGraphicsEndImageContext();\n\treturn newImage;\n\t\n}\n\n-(UIImage *)imageFlipUpDown\n{\n\tUIGraphicsBeginImageContext(self.size);\n\tCGContextRef context = UIGraphicsGetCurrentContext();\n\tCGContextDrawImage(context, CGRectMake(0, 0, self.size.width, self.size.height), self.CGImage);\n\tCGAffineTransform transform = CGAffineTransformIdentity;\n\ttransform = CGAffineTransformMakeTranslation(0.0, self.size.height);\n\ttransform = CGAffineTransformScale(transform, 1.0, -1.0);\n\tCGContextConcatCTM(context, transform);\n\tUIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();\n\tUIGraphicsEndImageContext();\n\treturn imageCopy;\t\n}\n\n-(UIImage *)combineUIImage:(UIImage *)anotherImage\n{\n\tNSInteger width = self.size.width + anotherImage.size.width;\n\tNSInteger height = self.size.height < anotherImage.size.height ? anotherImage.size.height : self.size.height;\n\t\n\tUIGraphicsBeginImageContext(CGSizeMake(width, height));\n\tCGContextRef context = UIGraphicsGetCurrentContext();\n\tCGContextSetFillColorWithColor(context, [[UIColor lightGrayColor] CGColor]);\n\tCGContextFillRect(context, CGRectMake(0, 0, width, height));\n\tNSInteger xPos = 0;\n\tNSInteger yPos = 0;\n\tif (self.size.height < height)\n\t{\n\t\tyPos = (height - self.size.height) / 2;\n\t}\n\tCGContextDrawImage(context, CGRectMake(xPos, yPos, self.size.width, self.size.height), self.CGImage);\n\txPos = self.size.width;\n\tyPos = 0;\n\tif (anotherImage.size.height < height)\n\t{\n\t\tyPos = (height - anotherImage.size.height) / 2;\n\t}\n\tCGContextDrawImage(context, CGRectMake(xPos, yPos, anotherImage.size.width,\n\t\t\t\t\t\t\t\t\t\t   anotherImage.size.height),\n\t\t\t\t\t   anotherImage.CGImage);\n\tUIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();\n\tUIGraphicsEndImageContext();\n\treturn [imageCopy imageFlipUpDown];\n}\n\n-(UIImage *)addText:(UIImage *)img text:(NSString *)text1\n{\n    int w = img.size.width;\n    int h = img.size.height; \n\t\n    //lon = h - lon;\n    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();\n    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);\n    CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);\n    CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1);\n    char* text = (char *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];// \"05/05/09\";\n    CGContextSelectFont(context, \"Arial\", 12, kCGEncodingMacRoman);\n    CGContextSetTextDrawingMode(context, kCGTextFill);\n    CGContextSetRGBFillColor(context, 255, 255, 255, 1);\n\t\n    //rotate text\n\t/*\n    CGContextSetTextMatrix(context, CGAffineTransformMakeRotation( -M_PI/4 ));\n\t */\n    CGContextShowTextAtPoint(context, 4, 4, text, strlen(text));\n    CGImageRef imageMasked = CGBitmapContextCreateImage(context);\n    CGContextRelease(context);\n    CGColorSpaceRelease(colorSpace);\n\tUIImage *newImage = [UIImage imageWithCGImage:imageMasked];\n\tCGImageRelease(imageMasked);\n    return newImage;\n}\n\n- (UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2 {  \n    UIGraphicsBeginImageContext(image1.size);  \n    \n    // Draw image1   \n    [image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];  \n    \n    // Draw image2   \n    [image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];  \n    \n    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();  \n    \n    UIGraphicsEndImageContext();  \n    \n    return  resultingImage;  \n}  \n\n\n@end;"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/d8/d878290233a5ccddb800ee8a4f409b373e187859.svn-base",
    "content": "//\n//  UIImage+Cut.h\n//  MeiJiaLove\n//\n//  Created by Wu.weibin on 13-5-17.\n//  Copyright (c) 2013年 Wu.weibin. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface UIImage (Cut)\n\n- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize;\n- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize roundedCornerImage:(NSInteger)roundedCornerImage borderSize:(NSInteger)borderSize;\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/dc/dc06ddf7d7a2ad296ab0a741fcc7c3bc6d34b0e3.svn-base",
    "content": "// UIImage+Resize.m\n// Created by Trevor Harmon on 8/5/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n#import \"UIImage+Resize.h\"\n#import \"UIImage+RoundedCorner.h\"\n#import \"UIImage+Alpha.h\"\n\n\n@implementation UIImage (Resize)\n\n// Returns a copy of this image that is cropped to the given bounds.\n// The bounds will be adjusted using CGRectIntegral.\n// This method ignores the image's imageOrientation setting.\n- (UIImage *)croppedImage:(CGRect)bounds {\n    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);\n    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];\n    CGImageRelease(imageRef);\n    return croppedImage;\n}\n\n// Returns a copy of this image that is squared to the thumbnail size.\n// If transparentBorder is non-zero, a transparent border of the given size will be added around the edges of the thumbnail. (Adding a transparent border of at least one pixel in size has the side-effect of antialiasing the edges of the image when rotating it using Core Animation.)\n- (UIImage *)thumbnailImage:(NSInteger)thumbnailSize\n          transparentBorder:(NSUInteger)borderSize\n               cornerRadius:(NSUInteger)cornerRadius\n       interpolationQuality:(CGInterpolationQuality)quality {\n    UIImage *resizedImage = [self resizedImageWithContentMode:UIViewContentModeScaleAspectFill\n                                                       bounds:CGSizeMake(thumbnailSize, thumbnailSize)\n                                         interpolationQuality:quality];\n    \n    // Crop out any part of the image that's larger than the thumbnail size\n    // The cropped rect must be centered on the resized image\n    // Round the origin points so that the size isn't altered when CGRectIntegral is later invoked\n    CGRect cropRect = CGRectMake(round((resizedImage.size.width - thumbnailSize) / 2),\n                                 round((resizedImage.size.height - thumbnailSize) / 2),\n                                 thumbnailSize,\n                                 thumbnailSize);\n    UIImage *croppedImage = [resizedImage croppedImage:cropRect];\n    \n    UIImage *transparentBorderImage = borderSize ? [croppedImage transparentBorderImage:borderSize] : croppedImage;\n\n    return [transparentBorderImage roundedCornerImage:cornerRadius borderSize:borderSize];\n}\n\n// Returns a rescaled copy of the image, taking into account its orientation\n// The image will be scaled disproportionately if necessary to fit the bounds specified by the parameter\n- (UIImage *)resizedImage:(CGSize)newSize interpolationQuality:(CGInterpolationQuality)quality {\n    BOOL drawTransposed;\n    \n    switch (self.imageOrientation) {\n        case UIImageOrientationLeft:\n        case UIImageOrientationLeftMirrored:\n        case UIImageOrientationRight:\n        case UIImageOrientationRightMirrored:\n            drawTransposed = YES;\n            break;\n            \n        default:\n            drawTransposed = NO;\n    }\n    \n    return [self resizedImage:newSize\n                    transform:[self transformForOrientation:newSize]\n               drawTransposed:drawTransposed\n         interpolationQuality:quality];\n}\n\n// Resizes the image according to the given content mode, taking into account the image's orientation\n- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode\n                                  bounds:(CGSize)bounds\n                    interpolationQuality:(CGInterpolationQuality)quality {\n    CGFloat horizontalRatio = bounds.width / self.size.width;\n    CGFloat verticalRatio = bounds.height / self.size.height;\n    CGFloat ratio;\n    \n    switch (contentMode) {\n        case UIViewContentModeScaleAspectFill:\n            ratio = MAX(horizontalRatio, verticalRatio);\n            break;\n            \n        case UIViewContentModeScaleAspectFit:\n            ratio = MIN(horizontalRatio, verticalRatio);\n            break;\n            \n        default:\n            [NSException raise:NSInvalidArgumentException format:@\"Unsupported content mode: %d\", contentMode];\n    }\n    \n    CGSize newSize = CGSizeMake(self.size.width * ratio, self.size.height * ratio);\n    \n    return [self resizedImage:newSize interpolationQuality:quality];\n}\n\n#pragma mark -\n#pragma mark Private helper methods\n\n// Returns a copy of the image that has been transformed using the given affine transform and scaled to the new size\n// The new image's orientation will be UIImageOrientationUp, regardless of the current image's orientation\n// If the new size is not integral, it will be rounded up\n- (UIImage *)resizedImage:(CGSize)newSize\n                transform:(CGAffineTransform)transform\n           drawTransposed:(BOOL)transpose\n     interpolationQuality:(CGInterpolationQuality)quality {\n    \n    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));\n    CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width);\n    CGImageRef imageRef = self.CGImage;\n    \n    // Build a context that's the same dimensions as the new size\n    CGContextRef bitmap = CGBitmapContextCreate(NULL,\n                                                newRect.size.width,\n                                                newRect.size.height,\n                                                CGImageGetBitsPerComponent(imageRef),\n                                                0,\n                                                CGImageGetColorSpace(imageRef),\n                                                CGImageGetBitmapInfo(imageRef));\n    \n    // Rotate and/or flip the image if required by its orientation\n    CGContextConcatCTM(bitmap, transform);\n    \n    // Set the quality level to use when rescaling\n    CGContextSetInterpolationQuality(bitmap, quality);\n    \n    // Draw into the context; this scales the image\n    CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef);\n    \n    // Get the resized image from the context and a UIImage\n    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);\n    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];\n    \n    // Clean up\n    CGContextRelease(bitmap);\n    CGImageRelease(newImageRef);\n    \n    return newImage;\n}\n\n// Returns an affine transform that takes into account the image orientation when drawing a scaled image\n- (CGAffineTransform)transformForOrientation:(CGSize)newSize {\n    CGAffineTransform transform = CGAffineTransformIdentity;\n    \n    switch (self.imageOrientation) {\n        case UIImageOrientationDown:           // EXIF = 3\n        case UIImageOrientationDownMirrored:   // EXIF = 4\n            transform = CGAffineTransformTranslate(transform, newSize.width, newSize.height);\n            transform = CGAffineTransformRotate(transform, M_PI);\n            break;\n            \n        case UIImageOrientationLeft:           // EXIF = 6\n        case UIImageOrientationLeftMirrored:   // EXIF = 5\n            transform = CGAffineTransformTranslate(transform, newSize.width, 0);\n            transform = CGAffineTransformRotate(transform, M_PI_2);\n            break;\n            \n        case UIImageOrientationRight:          // EXIF = 8\n        case UIImageOrientationRightMirrored:  // EXIF = 7\n            transform = CGAffineTransformTranslate(transform, 0, newSize.height);\n            transform = CGAffineTransformRotate(transform, -M_PI_2);\n            break;\n            default:\n            break;\n    }\n    \n    switch (self.imageOrientation) {\n        case UIImageOrientationUpMirrored:     // EXIF = 2\n        case UIImageOrientationDownMirrored:   // EXIF = 4\n            transform = CGAffineTransformTranslate(transform, newSize.width, 0);\n            transform = CGAffineTransformScale(transform, -1, 1);\n            break;\n            \n        case UIImageOrientationLeftMirrored:   // EXIF = 5\n        case UIImageOrientationRightMirrored:  // EXIF = 7\n            transform = CGAffineTransformTranslate(transform, newSize.height, 0);\n            transform = CGAffineTransformScale(transform, -1, 1);\n            break;\n            default:\n            break;\n    }\n    \n    return transform;\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/.svn/pristine/ee/ee255ad5f9f4f575fb733f734606d7eb9e0efeac.svn-base",
    "content": "// UIImage+Alpha.m\n// Created by Trevor Harmon on 9/20/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n#import \"UIImage+Alpha.h\"\n\n\n@implementation UIImage (Alpha)\n\n// Returns true if the image has an alpha layer\n- (BOOL)hasAlpha {\n    CGImageAlphaInfo alpha = CGImageGetAlphaInfo(self.CGImage);\n    return (alpha == kCGImageAlphaFirst ||\n            alpha == kCGImageAlphaLast ||\n            alpha == kCGImageAlphaPremultipliedFirst ||\n            alpha == kCGImageAlphaPremultipliedLast);\n}\n\n// Returns a copy of the given image, adding an alpha channel if it doesn't already have one\n- (UIImage *)imageWithAlpha {\n    if ([self hasAlpha]) {\n        return self;\n    }\n    \n    CGImageRef imageRef = self.CGImage;\n    size_t width = CGImageGetWidth(imageRef);\n    size_t height = CGImageGetHeight(imageRef);\n    \n    // The bitsPerComponent and bitmapInfo values are hard-coded to prevent an \"unsupported parameter combination\" error\n    CGContextRef offscreenContext = CGBitmapContextCreate(NULL,\n                                                          width,\n                                                          height,\n                                                          8,\n                                                          0,\n                                                          CGImageGetColorSpace(imageRef),\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(offscreenContext, CGRectMake(0, 0, width, height), imageRef);\n    CGImageRef imageRefWithAlpha = CGBitmapContextCreateImage(offscreenContext);\n    UIImage *imageWithAlpha = [UIImage imageWithCGImage:imageRefWithAlpha];\n    \n    // Clean up\n    CGContextRelease(offscreenContext);\n    CGImageRelease(imageRefWithAlpha);\n    \n    return imageWithAlpha;\n}\n\n// Returns a copy of the image with a transparent border of the given size added around its edges.\n// If the image has no alpha layer, one will be added to it.\n- (UIImage *)transparentBorderImage:(NSUInteger)borderSize {\n    // If the image does not have an alpha layer, add one\n    UIImage *image = [self imageWithAlpha];\n    \n    CGRect newRect = CGRectMake(0, 0, image.size.width + borderSize * 2, image.size.height + borderSize * 2);\n    \n    // Build a context that's the same dimensions as the new size\n    CGContextRef bitmap = CGBitmapContextCreate(NULL,\n                                                newRect.size.width,\n                                                newRect.size.height,\n                                                CGImageGetBitsPerComponent(self.CGImage),\n                                                0,\n                                                CGImageGetColorSpace(self.CGImage),\n                                                CGImageGetBitmapInfo(self.CGImage));\n    \n    // Draw the image in the center of the context, leaving a gap around the edges\n    CGRect imageLocation = CGRectMake(borderSize, borderSize, image.size.width, image.size.height);\n    CGContextDrawImage(bitmap, imageLocation, self.CGImage);\n    CGImageRef borderImageRef = CGBitmapContextCreateImage(bitmap);\n    \n    // Create a mask to make the border transparent, and combine it with the image\n    CGImageRef maskImageRef = [self newBorderMask:borderSize size:newRect.size];\n    CGImageRef transparentBorderImageRef = CGImageCreateWithMask(borderImageRef, maskImageRef);\n    UIImage *transparentBorderImage = [UIImage imageWithCGImage:transparentBorderImageRef];\n    \n    // Clean up\n    CGContextRelease(bitmap);\n    CGImageRelease(borderImageRef);\n    CGImageRelease(maskImageRef);\n    CGImageRelease(transparentBorderImageRef);\n    \n    return transparentBorderImage;\n}\n\n#pragma mark -\n#pragma mark Private helper methods\n\n// Creates a mask that makes the outer edges transparent and everything else opaque\n// The size must include the entire mask (opaque part + transparent border)\n// The caller is responsible for releasing the returned reference by calling CGImageRelease\n- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size {\n    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();\n    \n    // Build a context that's the same dimensions as the new size\n    CGContextRef maskContext = CGBitmapContextCreate(NULL,\n                                                     size.width,\n                                                     size.height,\n                                                     8, // 8-bit grayscale\n                                                     0,\n                                                     colorSpace,\n                                                     kCGBitmapByteOrderDefault | kCGImageAlphaNone);\n    \n    // Start with a mask that's entirely transparent\n    CGContextSetFillColorWithColor(maskContext, [UIColor blackColor].CGColor);\n    CGContextFillRect(maskContext, CGRectMake(0, 0, size.width, size.height));\n    \n    // Make the inner part (within the border) opaque\n    CGContextSetFillColorWithColor(maskContext, [UIColor whiteColor].CGColor);\n    CGContextFillRect(maskContext, CGRectMake(borderSize, borderSize, size.width - borderSize * 2, size.height - borderSize * 2));\n    \n    // Get an image of the context\n    CGImageRef maskImageRef = CGBitmapContextCreateImage(maskContext);\n    \n    // Clean up\n    CGContextRelease(maskContext);\n    CGColorSpaceRelease(colorSpace);\n    \n    return maskImageRef;\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+Alpha.h",
    "content": "// UIImage+Alpha.h\n// Created by Trevor Harmon on 9/20/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n// Helper methods for adding an alpha layer to an image\n#import <UIKit/UIKit.h>\n@interface UIImage (Alpha)\n- (BOOL)hasAlpha;\n- (UIImage *)imageWithAlpha;\n- (UIImage *)transparentBorderImage:(NSUInteger)borderSize;\n- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size;\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+Alpha.m",
    "content": "// UIImage+Alpha.m\n// Created by Trevor Harmon on 9/20/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n#import \"UIImage+Alpha.h\"\n\n\n@implementation UIImage (Alpha)\n\n// Returns true if the image has an alpha layer\n- (BOOL)hasAlpha {\n    CGImageAlphaInfo alpha = CGImageGetAlphaInfo(self.CGImage);\n    return (alpha == kCGImageAlphaFirst ||\n            alpha == kCGImageAlphaLast ||\n            alpha == kCGImageAlphaPremultipliedFirst ||\n            alpha == kCGImageAlphaPremultipliedLast);\n}\n\n// Returns a copy of the given image, adding an alpha channel if it doesn't already have one\n- (UIImage *)imageWithAlpha {\n    if ([self hasAlpha]) {\n        return self;\n    }\n    \n    CGImageRef imageRef = self.CGImage;\n    size_t width = CGImageGetWidth(imageRef);\n    size_t height = CGImageGetHeight(imageRef);\n    \n    // The bitsPerComponent and bitmapInfo values are hard-coded to prevent an \"unsupported parameter combination\" error\n    CGContextRef offscreenContext = CGBitmapContextCreate(NULL,\n                                                          width,\n                                                          height,\n                                                          8,\n                                                          0,\n                                                          CGImageGetColorSpace(imageRef),\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(offscreenContext, CGRectMake(0, 0, width, height), imageRef);\n    CGImageRef imageRefWithAlpha = CGBitmapContextCreateImage(offscreenContext);\n    UIImage *imageWithAlpha = [UIImage imageWithCGImage:imageRefWithAlpha];\n    \n    // Clean up\n    CGContextRelease(offscreenContext);\n    CGImageRelease(imageRefWithAlpha);\n    \n    return imageWithAlpha;\n}\n\n// Returns a copy of the image with a transparent border of the given size added around its edges.\n// If the image has no alpha layer, one will be added to it.\n- (UIImage *)transparentBorderImage:(NSUInteger)borderSize {\n    // If the image does not have an alpha layer, add one\n    UIImage *image = [self imageWithAlpha];\n    \n    CGRect newRect = CGRectMake(0, 0, image.size.width + borderSize * 2, image.size.height + borderSize * 2);\n    \n    // Build a context that's the same dimensions as the new size\n    CGContextRef bitmap = CGBitmapContextCreate(NULL,\n                                                newRect.size.width,\n                                                newRect.size.height,\n                                                CGImageGetBitsPerComponent(self.CGImage),\n                                                0,\n                                                CGImageGetColorSpace(self.CGImage),\n                                                CGImageGetBitmapInfo(self.CGImage));\n    \n    // Draw the image in the center of the context, leaving a gap around the edges\n    CGRect imageLocation = CGRectMake(borderSize, borderSize, image.size.width, image.size.height);\n    CGContextDrawImage(bitmap, imageLocation, self.CGImage);\n    CGImageRef borderImageRef = CGBitmapContextCreateImage(bitmap);\n    \n    // Create a mask to make the border transparent, and combine it with the image\n    CGImageRef maskImageRef = [self newBorderMask:borderSize size:newRect.size];\n    CGImageRef transparentBorderImageRef = CGImageCreateWithMask(borderImageRef, maskImageRef);\n    UIImage *transparentBorderImage = [UIImage imageWithCGImage:transparentBorderImageRef];\n    \n    // Clean up\n    CGContextRelease(bitmap);\n    CGImageRelease(borderImageRef);\n    CGImageRelease(maskImageRef);\n    CGImageRelease(transparentBorderImageRef);\n    \n    return transparentBorderImage;\n}\n\n#pragma mark -\n#pragma mark Private helper methods\n\n// Creates a mask that makes the outer edges transparent and everything else opaque\n// The size must include the entire mask (opaque part + transparent border)\n// The caller is responsible for releasing the returned reference by calling CGImageRelease\n- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size {\n    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();\n    \n    // Build a context that's the same dimensions as the new size\n    CGContextRef maskContext = CGBitmapContextCreate(NULL,\n                                                     size.width,\n                                                     size.height,\n                                                     8, // 8-bit grayscale\n                                                     0,\n                                                     colorSpace,\n                                                     kCGBitmapByteOrderDefault | kCGImageAlphaNone);\n    \n    // Start with a mask that's entirely transparent\n    CGContextSetFillColorWithColor(maskContext, [UIColor blackColor].CGColor);\n    CGContextFillRect(maskContext, CGRectMake(0, 0, size.width, size.height));\n    \n    // Make the inner part (within the border) opaque\n    CGContextSetFillColorWithColor(maskContext, [UIColor whiteColor].CGColor);\n    CGContextFillRect(maskContext, CGRectMake(borderSize, borderSize, size.width - borderSize * 2, size.height - borderSize * 2));\n    \n    // Get an image of the context\n    CGImageRef maskImageRef = CGBitmapContextCreateImage(maskContext);\n    \n    // Clean up\n    CGContextRelease(maskContext);\n    CGColorSpaceRelease(colorSpace);\n    \n    return maskImageRef;\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+Cut.h",
    "content": "//\n//  UIImage+Cut.h\n//  MeiJiaLove\n//\n//  Created by Wu.weibin on 13-5-17.\n//  Copyright (c) 2013年 Wu.weibin. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n@interface UIImage (Cut)\n\n- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize;\n- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize roundedCornerImage:(NSInteger)roundedCornerImage borderSize:(NSInteger)borderSize;\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+Cut.m",
    "content": "//\n//  UIImage+Cut.m\n//  MeiJiaLove\n//\n//  Created by Wu.weibin on 13-5-17.\n//  Copyright (c) 2013年 Wu.weibin. All rights reserved.\n//\n\n#import \"UIImage+Cut.h\"\n#import \"UIImage+RoundedCorner.h\"\n@implementation UIImage (Cut)\n\n\n- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize\n{\n    UIImage *newimage;\n    UIImage *image = self;\n    if (nil == image) {\n        newimage = nil;\n    }\n    else{\n        CGSize oldsize = image.size;\n        CGRect rect;\n        if (asize.width/asize.height > oldsize.width/oldsize.height) {\n            rect.size.width = asize.width;\n            rect.size.height = asize.width*oldsize.height/oldsize.width;\n            rect.origin.x = 0;\n            rect.origin.y = (asize.height - rect.size.height)/2;\n        }\n        else{\n            rect.size.width = asize.height*oldsize.width/oldsize.height;\n            rect.size.height = asize.height;\n            rect.origin.x = (asize.width - rect.size.width)/2;\n            rect.origin.y = 0;\n        }\n        UIGraphicsBeginImageContext(asize);\n        CGContextRef context = UIGraphicsGetCurrentContext();\n        CGContextClipToRect(context, CGRectMake(0, 0, asize.width, asize.height));\n        CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);\n        UIRectFill(CGRectMake(0, 0, asize.width, asize.height));//clear background\n        [image drawInRect:rect];\n        newimage = UIGraphicsGetImageFromCurrentImageContext();\n        UIGraphicsEndImageContext();\n    }\n    return newimage;\n}\n- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize roundedCornerImage:(NSInteger)roundedCornerImage borderSize:(NSInteger)borderSize\n{\n    UIImage *image = [self clipImageWithScaleWithsize:asize];\n    return [image roundedCornerImage:roundedCornerImage borderSize:borderSize];\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+Resize.h",
    "content": "// UIImage+Resize.h\n// Created by Trevor Harmon on 8/5/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n// Extends the UIImage class to support resizing/cropping\n#import <UIKit/UIKit.h>\n@interface UIImage (Resize)\n- (UIImage *)croppedImage:(CGRect)bounds;\n- (UIImage *)thumbnailImage:(NSInteger)thumbnailSize\n          transparentBorder:(NSUInteger)borderSize\n               cornerRadius:(NSUInteger)cornerRadius\n       interpolationQuality:(CGInterpolationQuality)quality;\n- (UIImage *)resizedImage:(CGSize)newSize\n     interpolationQuality:(CGInterpolationQuality)quality;\n- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode\n                                  bounds:(CGSize)bounds\n                    interpolationQuality:(CGInterpolationQuality)quality;\n\n- (UIImage *)resizedImage:(CGSize)newSize\n                transform:(CGAffineTransform)transform\n           drawTransposed:(BOOL)transpose\n     interpolationQuality:(CGInterpolationQuality)quality;\n- (CGAffineTransform)transformForOrientation:(CGSize)newSize;\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+Resize.m",
    "content": "// UIImage+Resize.m\n// Created by Trevor Harmon on 8/5/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n#import \"UIImage+Resize.h\"\n#import \"UIImage+RoundedCorner.h\"\n#import \"UIImage+Alpha.h\"\n\n\n@implementation UIImage (Resize)\n\n// Returns a copy of this image that is cropped to the given bounds.\n// The bounds will be adjusted using CGRectIntegral.\n// This method ignores the image's imageOrientation setting.\n- (UIImage *)croppedImage:(CGRect)bounds {\n    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);\n    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];\n    CGImageRelease(imageRef);\n    return croppedImage;\n}\n\n// Returns a copy of this image that is squared to the thumbnail size.\n// If transparentBorder is non-zero, a transparent border of the given size will be added around the edges of the thumbnail. (Adding a transparent border of at least one pixel in size has the side-effect of antialiasing the edges of the image when rotating it using Core Animation.)\n- (UIImage *)thumbnailImage:(NSInteger)thumbnailSize\n          transparentBorder:(NSUInteger)borderSize\n               cornerRadius:(NSUInteger)cornerRadius\n       interpolationQuality:(CGInterpolationQuality)quality {\n    UIImage *resizedImage = [self resizedImageWithContentMode:UIViewContentModeScaleAspectFill\n                                                       bounds:CGSizeMake(thumbnailSize, thumbnailSize)\n                                         interpolationQuality:quality];\n    \n    // Crop out any part of the image that's larger than the thumbnail size\n    // The cropped rect must be centered on the resized image\n    // Round the origin points so that the size isn't altered when CGRectIntegral is later invoked\n    CGRect cropRect = CGRectMake(round((resizedImage.size.width - thumbnailSize) / 2),\n                                 round((resizedImage.size.height - thumbnailSize) / 2),\n                                 thumbnailSize,\n                                 thumbnailSize);\n    UIImage *croppedImage = [resizedImage croppedImage:cropRect];\n    \n    UIImage *transparentBorderImage = borderSize ? [croppedImage transparentBorderImage:borderSize] : croppedImage;\n\n    return [transparentBorderImage roundedCornerImage:cornerRadius borderSize:borderSize];\n}\n\n// Returns a rescaled copy of the image, taking into account its orientation\n// The image will be scaled disproportionately if necessary to fit the bounds specified by the parameter\n- (UIImage *)resizedImage:(CGSize)newSize interpolationQuality:(CGInterpolationQuality)quality {\n    BOOL drawTransposed;\n    \n    switch (self.imageOrientation) {\n        case UIImageOrientationLeft:\n        case UIImageOrientationLeftMirrored:\n        case UIImageOrientationRight:\n        case UIImageOrientationRightMirrored:\n            drawTransposed = YES;\n            break;\n            \n        default:\n            drawTransposed = NO;\n    }\n    \n    return [self resizedImage:newSize\n                    transform:[self transformForOrientation:newSize]\n               drawTransposed:drawTransposed\n         interpolationQuality:quality];\n}\n\n// Resizes the image according to the given content mode, taking into account the image's orientation\n- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode\n                                  bounds:(CGSize)bounds\n                    interpolationQuality:(CGInterpolationQuality)quality {\n    CGFloat horizontalRatio = bounds.width / self.size.width;\n    CGFloat verticalRatio = bounds.height / self.size.height;\n    CGFloat ratio;\n    \n    switch (contentMode) {\n        case UIViewContentModeScaleAspectFill:\n            ratio = MAX(horizontalRatio, verticalRatio);\n            break;\n            \n        case UIViewContentModeScaleAspectFit:\n            ratio = MIN(horizontalRatio, verticalRatio);\n            break;\n            \n        default:\n            [NSException raise:NSInvalidArgumentException format:@\"Unsupported content mode: %ld\", (long)contentMode];\n    }\n    \n    CGSize newSize = CGSizeMake(self.size.width * ratio, self.size.height * ratio);\n    \n    return [self resizedImage:newSize interpolationQuality:quality];\n}\n\n#pragma mark -\n#pragma mark Private helper methods\n\n// Returns a copy of the image that has been transformed using the given affine transform and scaled to the new size\n// The new image's orientation will be UIImageOrientationUp, regardless of the current image's orientation\n// If the new size is not integral, it will be rounded up\n- (UIImage *)resizedImage:(CGSize)newSize\n                transform:(CGAffineTransform)transform\n           drawTransposed:(BOOL)transpose\n     interpolationQuality:(CGInterpolationQuality)quality {\n    \n    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));\n    CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width);\n    CGImageRef imageRef = self.CGImage;\n    \n    // Build a context that's the same dimensions as the new size\n    CGContextRef bitmap = CGBitmapContextCreate(NULL,\n                                                newRect.size.width,\n                                                newRect.size.height,\n                                                CGImageGetBitsPerComponent(imageRef),\n                                                0,\n                                                CGImageGetColorSpace(imageRef),\n                                                CGImageGetBitmapInfo(imageRef));\n    \n    // Rotate and/or flip the image if required by its orientation\n    CGContextConcatCTM(bitmap, transform);\n    \n    // Set the quality level to use when rescaling\n    CGContextSetInterpolationQuality(bitmap, quality);\n    \n    // Draw into the context; this scales the image\n    CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef);\n    \n    // Get the resized image from the context and a UIImage\n    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);\n    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];\n    \n    // Clean up\n    CGContextRelease(bitmap);\n    CGImageRelease(newImageRef);\n    \n    return newImage;\n}\n\n// Returns an affine transform that takes into account the image orientation when drawing a scaled image\n- (CGAffineTransform)transformForOrientation:(CGSize)newSize {\n    CGAffineTransform transform = CGAffineTransformIdentity;\n    \n    switch (self.imageOrientation) {\n        case UIImageOrientationDown:           // EXIF = 3\n        case UIImageOrientationDownMirrored:   // EXIF = 4\n            transform = CGAffineTransformTranslate(transform, newSize.width, newSize.height);\n            transform = CGAffineTransformRotate(transform, M_PI);\n            break;\n            \n        case UIImageOrientationLeft:           // EXIF = 6\n        case UIImageOrientationLeftMirrored:   // EXIF = 5\n            transform = CGAffineTransformTranslate(transform, newSize.width, 0);\n            transform = CGAffineTransformRotate(transform, M_PI_2);\n            break;\n            \n        case UIImageOrientationRight:          // EXIF = 8\n        case UIImageOrientationRightMirrored:  // EXIF = 7\n            transform = CGAffineTransformTranslate(transform, 0, newSize.height);\n            transform = CGAffineTransformRotate(transform, -M_PI_2);\n            break;\n            default:\n            break;\n    }\n    \n    switch (self.imageOrientation) {\n        case UIImageOrientationUpMirrored:     // EXIF = 2\n        case UIImageOrientationDownMirrored:   // EXIF = 4\n            transform = CGAffineTransformTranslate(transform, newSize.width, 0);\n            transform = CGAffineTransformScale(transform, -1, 1);\n            break;\n            \n        case UIImageOrientationLeftMirrored:   // EXIF = 5\n        case UIImageOrientationRightMirrored:  // EXIF = 7\n            transform = CGAffineTransformTranslate(transform, newSize.height, 0);\n            transform = CGAffineTransformScale(transform, -1, 1);\n            break;\n            default:\n            break;\n    }\n    \n    return transform;\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+RoundedCorner.h",
    "content": "// UIImage+RoundedCorner.h\n// Created by Trevor Harmon on 9/20/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n// Extends the UIImage class to support making rounded corners\n#import <UIKit/UIKit.h>\n@interface UIImage (RoundedCorner)\n- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize;\n- (void)addRoundedRectToPath:(CGRect)rect context:(CGContextRef)context ovalWidth:(CGFloat)ovalWidth ovalHeight:(CGFloat)ovalHeight;\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+RoundedCorner.m",
    "content": "// UIImage+RoundedCorner.m\n// Created by Trevor Harmon on 9/20/09.\n// Free for personal or commercial use, with or without modification.\n// No warranty is expressed or implied.\n\n#import \"UIImage+RoundedCorner.h\"\n#import \"UIImage+Alpha.h\"\n\n\n@implementation UIImage (RoundedCorner)\n\n// Creates a copy of this image with rounded corners\n// If borderSize is non-zero, a transparent border of the given size will also be added\n// Original author: Björn Sållarp. Used with permission. See: http://blog.sallarp.com/iphone-uiimage-round-corners/\n- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize {\n    // If the image does not have an alpha layer, add one\n    UIImage *image = [self imageWithAlpha];\n    \n    // Build a context that's the same dimensions as the new size\n    CGContextRef context = CGBitmapContextCreate(NULL,\n                                                 image.size.width,\n                                                 image.size.height,\n                                                 CGImageGetBitsPerComponent(image.CGImage),\n                                                 0,\n                                                 CGImageGetColorSpace(image.CGImage),\n                                                 CGImageGetBitmapInfo(image.CGImage));\n\n    // Create a clipping path with rounded corners\n    CGContextBeginPath(context);\n    [self addRoundedRectToPath:CGRectMake(borderSize, borderSize, image.size.width - borderSize * 2, image.size.height - borderSize * 2)\n                       context:context\n                     ovalWidth:cornerSize\n                    ovalHeight:cornerSize];\n    CGContextClosePath(context);\n    CGContextClip(context);\n\n    // Draw the image to the context; the clipping path will make anything outside the rounded rect transparent\n    CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage);\n    \n    // Create a CGImage from the context\n    CGImageRef clippedImage = CGBitmapContextCreateImage(context);\n    CGContextRelease(context);\n    \n    // Create a UIImage from the CGImage\n    UIImage *roundedImage = [UIImage imageWithCGImage:clippedImage];\n    CGImageRelease(clippedImage);\n    \n    return roundedImage;\n}\n\n#pragma mark -\n#pragma mark Private helper methods\n\n// Adds a rectangular path to the given context and rounds its corners by the given extents\n// Original author: Björn Sållarp. Used with permission. See: http://blog.sallarp.com/iphone-uiimage-round-corners/\n- (void)addRoundedRectToPath:(CGRect)rect context:(CGContextRef)context ovalWidth:(CGFloat)ovalWidth ovalHeight:(CGFloat)ovalHeight {\n    if (ovalWidth == 0 || ovalHeight == 0) {\n        CGContextAddRect(context, rect);\n        return;\n    }\n    CGContextSaveGState(context);\n    CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect));\n    CGContextScaleCTM(context, ovalWidth, ovalHeight);\n    CGFloat fw = CGRectGetWidth(rect) / ovalWidth;\n    CGFloat fh = CGRectGetHeight(rect) / ovalHeight;\n    CGContextMoveToPoint(context, fw, fh/2);\n    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);\n    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);\n    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);\n    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1);\n    CGContextClosePath(context);\n    CGContextRestoreGState(context);\n}\n\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+SplitImageIntoTwoParts.h",
    "content": "//\n//  UIImage+SplitImageIntoTwoParts.h\n//  TapRepublic\n//\n//  Created by Terry Lin on 12-5-11.\n//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface UIImage (SplitImageIntoTwoParts)\n+ (NSArray*)splitImageIntoTwoParts:(UIImage*)image;\n@end\n"
  },
  {
    "path": "testPasterImage/Libs/FilterImageLibs/UIImage-Extensions/UIImage+SplitImageIntoTwoParts.m",
    "content": "//\n//  UIImage+SplitImageIntoTwoParts.m\n//  TapRepublic\n//\n//  Created by Terry Lin on 12-5-11.\n//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.\n//\n#define SAWTOOTH_COUNT 10\n#define SAWTOOTH_WIDTH_FACTOR 20 \n#import \"UIImage+SplitImageIntoTwoParts.h\"\n\n@implementation UIImage (SplitImageIntoTwoParts)\n\n+(NSArray *)splitImageIntoTwoParts:(UIImage *)image\n{    \n    CGFloat scale = [[UIScreen mainScreen] scale]; \n    NSMutableArray *array = [NSMutableArray arrayWithCapacity:2];\n    CGFloat width,height,widthgap,heightgap;\n    int piceCount = SAWTOOTH_COUNT;\n    width = image.size.width;\n    height = image.size.height;\n    widthgap = width/SAWTOOTH_WIDTH_FACTOR;\n    heightgap = height/piceCount;\n    //    CGRect rect = CGRectMake(0, 0, width, height);\n    CGContextRef context;\n    CGImageRef imageMasked;\n    UIImage *leftImage,*rightImage;\n    \n    //part one\n    UIGraphicsBeginImageContext(CGSizeMake(width*scale, height*scale));\n    context = UIGraphicsGetCurrentContext();\n    CGContextScaleCTM(context, scale, scale);\n    CGContextMoveToPoint(context, 0, 0);\n    int a=-1;\n    for (int i=0; i<piceCount+1; i++) {\n        CGContextAddLineToPoint(context, width/2+(widthgap*a), heightgap*i);\n        a= a*-1;\n    }\n    CGContextAddLineToPoint(context, 0, height);\n    CGContextClosePath(context);\n    CGContextClip(context);\n    [image drawAtPoint:CGPointMake(0, 0)];\n    imageMasked = CGBitmapContextCreateImage(context);\n    leftImage = [UIImage imageWithCGImage:imageMasked scale:scale orientation:UIImageOrientationUp];\n    [array addObject:leftImage];\n    UIGraphicsEndImageContext();\n    \n    //part two\n    UIGraphicsBeginImageContext(CGSizeMake(width*scale, height*scale));\n    context = UIGraphicsGetCurrentContext();\n    CGContextScaleCTM(context, scale, scale);\n    CGContextMoveToPoint(context, width, 0);\n    a=-1;\n    for (int i=0; i<piceCount+1; i++) {\n        CGContextAddLineToPoint(context, width/2+(widthgap*a), heightgap*i);\n        a= a*-1;\n    }\n    CGContextAddLineToPoint(context, width, height);\n    CGContextClosePath(context);\n    CGContextClip(context);\n    [image drawAtPoint:CGPointMake(0, 0)];\n    imageMasked = CGBitmapContextCreateImage(context);\n    rightImage = [UIImage imageWithCGImage:imageMasked scale:scale orientation:UIImageOrientationUp];\n    [array addObject:rightImage];\n    UIGraphicsEndImageContext();\n    \n    \n    return array;\n}\n@end\n"
  },
  {
    "path": "testPasterImage/Views/YBCustomViews/YBCustomButton.h",
    "content": "//\n//  YBCustomButton.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/27.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface YBCustomButton : UIButton\n\n@property (nonatomic, assign) NSInteger buttonTag;\n@property (nonatomic, assign) BOOL isCurrentIndex;\n\n@end\n"
  },
  {
    "path": "testPasterImage/Views/YBCustomViews/YBCustomButton.m",
    "content": "//\n//  YBCustomButton.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/27.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"YBCustomButton.h\"\n\n@implementation YBCustomButton\n\n\n\n@end\n"
  },
  {
    "path": "testPasterImage/Views/YBFilterImage/YBFilterScrollView.h",
    "content": "//\n//  YBFilterScrollView.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/27.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@protocol YBFilterScrollViewDelegate <NSObject>\n@required;\n- (void)filterImage:(UIImage *)editedImage;\n@optional;\n// 测试有返回值的代理\n- (NSString *)deliverStr:(NSString *)originalStr;\n@end\n\n\n@interface YBFilterScrollView : UIScrollView\n\n/**滤镜scrollView的高*/\n@property (nonatomic, assign) CGFloat filterScrollViewW;\n/**内切间距*/\n@property (nonatomic, assign) CGFloat insert_space;\n/**名字数组*/\n@property (nonatomic, copy) NSArray *titleArray;\n/**label的高*/\n@property (nonatomic, assign) CGFloat labelH;\n/**每个小方图的宽和高*/\n@property (nonatomic, assign) CGFloat perButtonW_H;\n/**原始图片*/\n@property (nonatomic, strong) UIImage *originImage;\n/**YBFilterScrollViewDelegate*/\n@property (nonatomic,weak) id<YBFilterScrollViewDelegate> filterDelegate;\n\n/**\n *  开始加载滤镜的scrollView\n */\n- (void)loadScrollView;\n\n\n@end\n"
  },
  {
    "path": "testPasterImage/Views/YBFilterImage/YBFilterScrollView.m",
    "content": "//\n//  YBFilterScrollView.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/27.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"YBFilterScrollView.h\"\n#import \"ImageUtil.h\"\n#import \"ColorMatrix.h\"\n\n@interface YBFilterScrollView ()\n\n/**被编辑过的图片*/\n@property (nonatomic, strong) UIImage *editedImage;\n/**默认选中的*/\n@property (nonatomic, strong) UIButton *defaultButton;\n\n\n@end\n\n@implementation YBFilterScrollView\n@synthesize insert_space;\n\n- (void)loadScrollView {\n    \n    // 初始化内部控件\n    [self initViews];\n}\n\n/**\n *  初始化内部控件\n */\n- (void)initViews\n{\n    for (int i = 0; i < self.titleArray.count; i ++)\n    {\n        CGFloat filterBtnW_H = self.perButtonW_H;\n        UIButton *filterBtn = [[UIButton alloc]init];\n        filterBtn.frame = CGRectMake((i+1)*insert_space + filterBtnW_H*i, insert_space, filterBtnW_H, filterBtnW_H);\n        filterBtn.layer.borderColor = [UIColor clearColor].CGColor;\n        filterBtn.layer.borderWidth = 1.;\n        filterBtn.tag = 1000 + i;\n        [filterBtn setBackgroundImage:[self buttonSetImageWithButton:filterBtn] forState:UIControlStateNormal];\n        [filterBtn addTarget:self action:@selector(filterClick:) forControlEvents:UIControlEventTouchUpInside];\n        [self addSubview:filterBtn];\n        \n        if (i == 0) {\n            filterBtn.selected = YES;\n            self.defaultButton = filterBtn;\n            [self filterClick:filterBtn];\n        }\n        \n        CGFloat labelX = filterBtn.frame.origin.x;\n        CGFloat labelY = CGRectGetMaxY(filterBtn.frame) + 5;\n        CGFloat labelW = filterBtn.frame.size.width;\n        CGFloat labelH = self.labelH - 5;\n        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(labelX, labelY, labelW, labelH)];\n        label.text = [self.titleArray objectAtIndex:i];\n        label.textColor = [UIColor grayColor];\n        label.textAlignment = NSTextAlignmentCenter;\n        label.font = [UIFont systemFontOfSize:12.];\n        [self addSubview:label];\n    }\n}\n\n/**\n *  设置button的预览图\n */\n- (UIImage *)buttonSetImageWithButton:(UIButton *)button\n{\n    NSInteger currentIndex = button.tag - 1000;\n    UIImage *buttonImage;\n    switch (currentIndex)\n    {\n        case 0:\n        {\n            buttonImage = self.originImage;\n        }\n            break;\n        case 1:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_lomo];\n        }\n            break;\n        case 2:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_heibai];\n        }\n            break;\n        case 3:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_huajiu];\n        }\n            break;\n        case 4:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_gete];\n        }\n            break;\n        case 5:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_ruise];\n        }\n            break;\n        case 6:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_danya];\n        }\n            break;\n        case 7:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_jiuhong];\n        }\n            break;\n        case 8:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_qingning];\n        }\n            break;\n        case 9:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_langman];\n        }\n            break;\n        case 10:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_guangyun];\n        }\n            break;\n        case 11:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_landiao];\n        }\n            break;\n        case 12:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_menghuan];\n        }\n            break;\n        case 13:\n        {\n            buttonImage = [ImageUtil imageWithImage:self.originImage withColorMatrix:colormatrix_yese];\n        }\n            break;\n            \n        default:\n            break;\n    }\n\n    return buttonImage;\n}\n\n/**\n *  点击方法\n */\n- (void)filterClick:(UIButton *)button\n{\n    //按钮选中状态切换的逻辑\n    self.defaultButton.selected = NO;\n    if (!self.defaultButton.selected) {\n        [UIView animateWithDuration:.5 animations:^{\n            self.defaultButton.layer.borderColor = [UIColor clearColor].CGColor;\n            self.defaultButton.layer.borderWidth = 0.1;\n        }];\n    }\n    button.selected = YES;\n    self.defaultButton = button;\n    if (self.defaultButton.selected) {\n        [UIView animateWithDuration:.5 animations:^{\n            self.defaultButton.layer.borderColor = [UIColor redColor].CGColor;\n            self.defaultButton.layer.borderWidth = 2;\n        }];\n    }\n    \n    self.editedImage = button.currentBackgroundImage;\n    if (self.editedImage == nil) {\n        self.editedImage = self.originImage;\n    }\n    \n    //调用代理，把编辑过的当前按钮的图片传给控制器\n    if (_filterDelegate && [_filterDelegate respondsToSelector:@selector(filterImage:)])\n    {\n        [_filterDelegate filterImage:button.currentBackgroundImage];\n        NSString *string =  [_filterDelegate deliverStr:[NSString stringWithFormat:@\"%@-%@\",[self class],[self.titleArray objectAtIndex:button.tag - 1000]]];\n        NSLog(@\"%@\",string);\n    }\n    \n}\n\n\n\n@end\n"
  },
  {
    "path": "testPasterImage/Views/YBPasterImage/YBPasterScrollView.h",
    "content": "//\n//  YBPasterScrollView.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//代理方法\n@protocol YBPasterScrollViewDelegate <NSObject>\n@required;\n- (void)pasterTag:(NSInteger)pasterTag pasterImage:(UIImage *)pasterImage;\n@optional;\n@end\n\n\n@interface YBPasterScrollView : UIScrollView\n\n/**贴纸名字数组*/\n@property (nonatomic, copy) NSArray *pasterNameArray;\n/**贴纸图片数组*/\n@property (nonatomic, copy) NSArray *pasterImageArray;\n/**贴纸的高和宽*/\n@property (nonatomic, assign) CGFloat pasterImage_W_H;\n/**YBPasterScrollViewDelegate*/\n@property (nonatomic,weak) id<YBPasterScrollViewDelegate> pasterDelegate;\n\n/**默认选中的*/\n@property (nonatomic, strong) UIButton *defaultButton;\n\n\n/**\n *  创建添加贴纸页底部的scrollView\n *\n *  @param pasterImageArray 穿过来的图片名字数组\n *\n *  @return 返回创建的自定义scrollView\n */\n- (instancetype)initScrollViewWithPasterImageArray:(NSArray *)pasterImageArray;\n\n@end\n"
  },
  {
    "path": "testPasterImage/Views/YBPasterImage/YBPasterScrollView.m",
    "content": "//\n//  YBPasterScrollView.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"YBPasterScrollView.h\"\n\n\n#define defaultPasterImageW_H pasterScrollView_H - 2 * inset_space\n/**底部scrollView的高*/\nextern CGFloat pasterScrollView_H;\n/**贴纸直接间隔距离*/\nconst CGFloat inset_space = 15;\n\n\n@interface YBPasterScrollView ()\n\n@end\n\n\n@implementation YBPasterScrollView\n\n/**\n *  重新自定义scrollView\n *\n *  @param pasterImageArray 底部贴纸的图片\n *\n *  @return 返回一个scrollView\n */\n- (instancetype)initScrollViewWithPasterImageArray:(NSArray *)pasterImageArray\n{\n    if (self = [super init]) {\n        \n        self.pasterImageArray = pasterImageArray;\n        self.pasterImage_W_H = pasterScrollView_H - inset_space * 2;\n        \n        [self setupUI];\n        \n    }\n    return self;\n}\n\n/**\n *  设置UI\n */\n- (void)setupUI\n{\n    for (int i = 0; i < self.pasterImageArray.count; i ++)\n    {\n        CGFloat pasterBtnW_H = self.pasterImage_W_H;\n        UIButton *pasterBtn = [[UIButton alloc]init];\n        pasterBtn.frame = CGRectMake((i+1)*inset_space + pasterBtnW_H*i, inset_space, pasterBtnW_H, pasterBtnW_H);\n        [pasterBtn setImage:self.pasterImageArray[i] forState:UIControlStateNormal];\n        //pasterBtn.layer.borderColor = [UIColor whiteColor].CGColor;\n        //pasterBtn.layer.borderWidth = 0.5;\n        pasterBtn.tag = 1000 + i;\n        [pasterBtn addTarget:self action:@selector(pasterClick:) forControlEvents:UIControlEventTouchUpInside];\n        [self addSubview:pasterBtn];\n    }\n}\n\n/**\n *  点击选取贴纸\n */\n- (void)pasterClick:(UIButton *)sender\n{\n    //按钮选中状态切换的逻辑\n    self.defaultButton.selected = NO;\n    if (!self.defaultButton.selected) {\n        [UIView animateWithDuration:.5 animations:^{\n            self.defaultButton.layer.borderColor = [UIColor clearColor].CGColor;\n            self.defaultButton.layer.borderWidth = 0.1;\n        }];\n    }\n    sender.selected = YES;\n    self.defaultButton = sender;\n    if (self.defaultButton.selected) {\n        [UIView animateWithDuration:.5 animations:^{\n            self.defaultButton.layer.borderColor = [UIColor redColor].CGColor;\n            self.defaultButton.layer.borderWidth = 2;\n        }];\n    }\n    \n    if (_pasterDelegate && [_pasterDelegate respondsToSelector:@selector(pasterTag:pasterImage:)]) {\n        \n        [_pasterDelegate pasterTag:sender.tag - 1000 pasterImage:[self.pasterImageArray objectAtIndex:sender.tag - 1000]];\n    }\n}\n\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    \n}\n@end\n"
  },
  {
    "path": "testPasterImage/Views/YBPasterImage/YBPasterView.h",
    "content": "//\n//  YBPasterView.h\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/6.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@protocol YBPasterViewDelegate <NSObject>\n@required;\n@optional;\n- (void)deleteThePaster;\n@end\n\n@interface YBPasterView : UIView\n\n/**YBPasterViewDelegate*/\n@property (nonatomic,weak) id<YBPasterViewDelegate> delegate;\n/**图片，所要加成贴纸的图片*/\n@property (nonatomic, strong) UIImage *pasterImage;\n/**隐藏“删除”和“缩放”按钮*/\n- (void)hiddenBtn;\n/**显示“删除”和“缩放”按钮*/\n- (void)showBtn;\n\n@end\n"
  },
  {
    "path": "testPasterImage/Views/YBPasterImage/YBPasterView.m",
    "content": "//\n//  YBPasterView.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/6.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import \"YBPasterView.h\"\n\n/**默认删除和缩放按钮的大小*/\n#define btnW_H 24.0\n/**默认的图片宽高\u0010*/\n#define defaultImageViewW_H self.frame.size.width - btnW_H\n/**缩放和删除按钮与图片的间隔距离*/\n#define paster_insert_space btnW_H/2\n/**总高度*/\n#define PASTER_SLIDE 120\n/**安全边框*/\n#define SECURITY_LENGTH PASTER_SLIDE/2\n\n\n@interface YBPasterView ()\n{\n    CGFloat minWidth;\n    CGFloat minHeight;\n    CGFloat deltaAngle;\n    CGPoint prevPoint;\n    CGPoint touchStart;\n    CGRect  bgRect ;\n}\n/**删除按钮*/\n@property (nonatomic, strong) UIImageView *delegateImageView;\n/**缩放和旋转按钮*/\n@property (nonatomic, strong) UIImageView *scaleImageView;\n/**贴纸图片*/\n@property (nonatomic, strong) UIImageView *pasterImageView;\n\n@end\n\n\n@implementation YBPasterView\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    if (self = [super initWithFrame:frame])\n    {\n        //设置UI\n        [self setupUI];\n    }\n    return self;\n}\n\n/**\n *  隐藏“删除”和“缩放”按钮\n */\n- (void)hiddenBtn\n{\n    [UIView animateWithDuration:.5 animations:^{\n        self.delegateImageView.alpha = 0.0;\n        self.delegateImageView.hidden = YES;\n        self.scaleImageView.alpha = 0.0;\n        self.scaleImageView.hidden = YES;\n    }];\n}\n\n/**\n *  显示“删除”和“缩放”按钮\n */\n- (void)showBtn\n{\n    [UIView animateWithDuration:.5 animations:^{\n        self.delegateImageView.alpha = 1.0;\n        self.scaleImageView.alpha = 1.0;\n        self.delegateImageView.hidden = NO;\n        self.scaleImageView.hidden = NO;\n    }];\n}\n\n/**\n *  设置UI\n */\n- (void)setupUI\n{\n    self.backgroundColor = [UIColor lightGrayColor];\n    \n    minWidth = self.bounds.size.width * 0.5;\n    minHeight = self.bounds.size.height * 0.5;\n    deltaAngle = atan2(self.frame.origin.y+self.frame.size.height - self.center.y, self.frame.origin.x+self.frame.size.width - self.center.x);\n    \n#warning clang - 用自有的touchMove方法移动，直接加拖拽手势效果不好\n    //UIPanGestureRecognizer *dragResizeGestrue = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(dragPasterView:)];\n    //[self addGestureRecognizer:dragResizeGestrue];\n    \n#warning clang - 用拖拽按钮控制父控件旋转\n    //UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotation:)] ;\n    //[self addGestureRecognizer:rotateGesture] ;\n    \n    UIImageView *pasterImageView = [[UIImageView alloc]init];\n    pasterImageView.backgroundColor = [UIColor lightGrayColor];\n    pasterImageView.layer.borderColor = [UIColor redColor].CGColor;\n    pasterImageView.layer.borderWidth = 0.5;\n    pasterImageView.userInteractionEnabled = YES;\n    [self addSubview:pasterImageView];\n    self.pasterImageView = pasterImageView;\n    \n    UIImageView *delegateImageView = [[UIImageView alloc]init];\n    [delegateImageView setImage:[UIImage imageNamed:@\"bt_paster_delete\"]];\n    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(btDeletePressed:)];\n    delegateImageView.userInteractionEnabled = YES;\n    [delegateImageView addGestureRecognizer:tap];\n    [self addSubview:delegateImageView];\n    self.delegateImageView = delegateImageView;\n    \n    UIImageView *scaleImageView = [[UIImageView alloc]init];\n    [scaleImageView setImage:[UIImage imageNamed:@\"bt_paster_transform\"]];\n    UIPanGestureRecognizer *panResizeGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(resizeTranslate:)] ;\n    scaleImageView.userInteractionEnabled = YES;\n    [scaleImageView addGestureRecognizer:panResizeGesture] ;\n    [self addSubview:scaleImageView];\n    self.scaleImageView = scaleImageView;\n    \n    self.pasterImageView.frame = CGRectMake(paster_insert_space, paster_insert_space, defaultImageViewW_H, defaultImageViewW_H);\n    self.delegateImageView.frame = CGRectMake(0, 0, btnW_H, btnW_H);\n    self.scaleImageView.frame = CGRectMake(CGRectGetMaxX(self.pasterImageView.frame) - btnW_H/2, CGRectGetMaxY(self.pasterImageView.frame) - btnW_H/2, btnW_H, btnW_H);\n}\n\n/**\n *  旋转手势\n */\n- (void)handleRotation:(UIRotationGestureRecognizer *)rotateGesture\n{\n    self.transform = CGAffineTransformRotate(self.transform, rotateGesture.rotation) ;\n    rotateGesture.rotation = 0 ;\n}\n\n/**\n *  拖动手势\n */\n- (void)dragPasterView:(UIPanGestureRecognizer *)dragPasterView\n{\n    CGPoint point = [dragPasterView translationInView:dragPasterView.view];\n    self.center = CGPointMake(self.center.x + point.x, self.center.y + point.y);\n    \n    [dragPasterView setTranslation:CGPointZero inView:dragPasterView.view];\n    \n    [self checkIsOut];\n}\n\n/**\n *  右下角的缩放和旋转手势\n */\n- (void)resizeTranslate:(UIPanGestureRecognizer *)recognizer\n{\n    if ([recognizer state] == UIGestureRecognizerStateBegan)\n    {\n        prevPoint = [recognizer locationInView:self];\n        [self setNeedsDisplay];\n    }\n    else if ([recognizer state] == UIGestureRecognizerStateChanged)\n    {\n        if (self.bounds.size.width < minWidth || self.bounds.size.height < minHeight)\n        {\n            self.bounds = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, minWidth + 1 , minHeight + 1);\n            self.scaleImageView.frame =CGRectMake(self.bounds.size.width-btnW_H,self.bounds.size.height-btnW_H,btnW_H,btnW_H);\n            prevPoint = [recognizer locationInView:self];\n        }\n        else\n        {\n            CGPoint point = [recognizer locationInView:self];\n            float wChange = 0.0, hChange = 0.0;\n            wChange = (point.x - prevPoint.x);\n            float wRatioChange = (wChange/(float)self.bounds.size.width);\n            hChange = wRatioChange * self.bounds.size.height;\n            \n            if (ABS(wChange) > 50.0f || ABS(hChange) > 50.0f)\n            {\n                prevPoint = [recognizer locationOfTouch:0 inView:self];\n                return;\n            }\n            \n            CGFloat finalWidth  = self.bounds.size.width + (wChange) ;\n            CGFloat finalHeight = self.bounds.size.height + (wChange) ;\n            if (finalWidth > PASTER_SLIDE*(1+0.5))\n            {\n                finalWidth = PASTER_SLIDE*(1+0.5);\n            }\n            if (finalWidth < PASTER_SLIDE*(1-0.5))\n            {\n                finalWidth = PASTER_SLIDE*(1-0.5) ;\n            }\n            if (finalHeight > PASTER_SLIDE*(1+0.5))\n            {\n                finalHeight = PASTER_SLIDE*(1+0.5) ;\n            }\n            if (finalHeight < PASTER_SLIDE*(1-0.5))\n            {\n                finalHeight = PASTER_SLIDE*(1-0.5) ;\n            }\n            \n            self.bounds = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, finalWidth, finalHeight);\n            self.scaleImageView.frame = CGRectMake(self.bounds.size.width-btnW_H, self.bounds.size.height-btnW_H, btnW_H, btnW_H);\n            self.pasterImageView.frame = CGRectMake(paster_insert_space, paster_insert_space, self.bounds.size.width - paster_insert_space*2, self.bounds.size.height - paster_insert_space*2);\n            \n            prevPoint = [recognizer locationOfTouch:0 inView:self];\n        }\n        \n        /* 旋转 */\n        float ang = atan2([recognizer locationInView:self.superview].y - self.center.y, [recognizer locationInView:self.superview].x - self.center.x) ;\n        float angleDiff = deltaAngle - ang ;\n        self.transform = CGAffineTransformMakeRotation(-angleDiff);\n        [self setNeedsDisplay];\n        \n    }\n    else if ([recognizer state] == UIGestureRecognizerStateEnded)\n    {\n        prevPoint = [recognizer locationInView:self];\n        [self setNeedsDisplay];\n    }\n    \n    //检查旋转和缩放是否出界\n    [self checkIsOut];\n}\n\n/**\n *  左上角的删除点击手势\n */\n- (void)btDeletePressed:(UITapGestureRecognizer *)recognizer\n{\n    if (self.delegate && [self.delegate respondsToSelector:@selector(deleteThePaster)])\n    {\n        [self.delegate deleteThePaster];\n    }\n    [self removeFromSuperview];\n    \n}\n\n/**\n *  重写pasterImage的set方法\n */\n- (void)setPasterImage:(UIImage *)pasterImage\n{\n    _pasterImage = pasterImage;\n    if (pasterImage) {\n        self.pasterImageView.image = pasterImage;\n    }\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    \n}\n\n/**\n  *  检查在添加tag的时候是否超出了显示范围，如果超出，移动进显示范围内\n  */\n- (void)checkIsOut\n{\n    CGPoint point = self.center;\n    CGFloat top;\n    CGFloat left;\n    CGFloat bottom;\n    CGFloat right;\n    top = point.y - self.frame.size.height/2;\n    bottom = (self.superview.frame.size.height - point.y) - self.frame.size.height/2;\n    \n    if (point.y < self.superview.frame.size.height/2)//顶部超出范围时\n    {\n        if (top < 0)\n        {\n            point.y += ABS(top);\n        }\n    }\n    else//底部超出范围时\n    {\n        if (bottom < 0)\n        {\n            point.y -= ABS(bottom);\n        }\n    }\n    \n    left = point.x - self.frame.size.width/2;\n    right =(self.superview.frame.size.width - point.x) - self.frame.size.width/2;\n    if (point.x < self.superview.frame.size.width/2)//左边超出范围时\n    {\n        if (left < 0)\n        {\n            point.x += ABS(left);\n        }\n    }\n    else//右边超出范围时\n    {\n        if (right < 0)\n        {\n            point.x -= ABS(right);\n        }\n    }\n    \n    if (point.x == self.center.x && point.y == self.center.y) {\n    }else{\n        [UIView animateWithDuration:0.2 animations:^{\n            self.center = point;\n            \n        }];\n    }\n}\n\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event\n{\n    UITouch *touch = [touches anyObject] ;\n    touchStart = [touch locationInView:self.superview] ;\n}\n\n/**\n *  移动\n */\n- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event\n{\n    CGPoint touchLocation = [[touches anyObject] locationInView:self];\n    if (CGRectContainsPoint(self.scaleImageView.frame, touchLocation)) {\n        return;\n    }\n    CGPoint touch = [[touches anyObject] locationInView:self.superview];\n    [self translateUsingTouchLocation:touch];\n    [self checkIsOut];\n    touchStart = touch;\n}\n\n/**\n *  确保移动时不超出屏幕\n */\n- (void)translateUsingTouchLocation:(CGPoint)touchPoint\n{\n    CGPoint newCenter = CGPointMake(self.center.x + touchPoint.x - touchStart.x,\n                                    self.center.y + touchPoint.y - touchStart.y) ;\n    \n    // Ensure the translation won't cause the view to move offscreen. BEGIN\n    CGFloat midPointX = CGRectGetMidX(self.bounds) ;\n    if (newCenter.x > self.superview.bounds.size.width - midPointX + SECURITY_LENGTH)\n    {\n        newCenter.x = self.superview.bounds.size.width - midPointX + SECURITY_LENGTH;\n    }\n    if (newCenter.x < midPointX - SECURITY_LENGTH)\n    {\n        newCenter.x = midPointX - SECURITY_LENGTH;\n    }\n    \n    CGFloat midPointY = CGRectGetMidY(self.bounds);\n    if (newCenter.y > self.superview.bounds.size.height - midPointY + SECURITY_LENGTH)\n    {\n        newCenter.y = self.superview.bounds.size.height - midPointY + SECURITY_LENGTH;\n    }\n    if (newCenter.y < midPointY - SECURITY_LENGTH)\n    {\n        newCenter.y = midPointY - SECURITY_LENGTH;\n    }\n    // Ensure the translation won't cause the view to move offscreen. END\n    self.center = newCenter;\n}\n\n\n#pragma mark - UIGestureRecognizerDelegate\n- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer\nshouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {\n    return YES;\n}\n\n\n@end\n"
  },
  {
    "path": "testPasterImage/main.m",
    "content": "//\n//  main.m\n//  testPasterImage\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "testPasterImage.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t6828CE0E1DB76A1B00369A7F /* YBBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6828CE0D1DB76A1B00369A7F /* YBBaseViewController.m */; };\n\t\t6828CE111DB76A6300369A7F /* UIViewController+Swizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 6828CE101DB76A6300369A7F /* UIViewController+Swizzling.m */; };\n\t\t68A7FE8F1D7D602E00F3488D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 68A7FE8E1D7D602E00F3488D /* main.m */; };\n\t\t68A7FE921D7D602E00F3488D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 68A7FE911D7D602E00F3488D /* AppDelegate.m */; };\n\t\t68A7FE981D7D602E00F3488D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 68A7FE961D7D602E00F3488D /* Main.storyboard */; };\n\t\t68A7FE9A1D7D602E00F3488D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 68A7FE991D7D602E00F3488D /* Assets.xcassets */; };\n\t\t68A7FE9D1D7D602E00F3488D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 68A7FE9B1D7D602E00F3488D /* LaunchScreen.storyboard */; };\n\t\t68A7FEA81D7D602E00F3488D /* testPasterImageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68A7FEA71D7D602E00F3488D /* testPasterImageTests.m */; };\n\t\t68A7FEB31D7D602F00F3488D /* testPasterImageUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68A7FEB21D7D602F00F3488D /* testPasterImageUITests.m */; };\n\t\t68BA63C01D9E178B007EF318 /* UIViewController+Example.m in Sources */ = {isa = PBXBuildFile; fileRef = 68BA63BF1D9E178B007EF318 /* UIViewController+Example.m */; };\n\t\t68E54F791D9A13130003BF63 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54F761D9A13130003BF63 /* ViewController.m */; };\n\t\t68E54F7A1D9A13130003BF63 /* YBPasterImageVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54F781D9A13130003BF63 /* YBPasterImageVC.m */; };\n\t\t68E54F881D9A13540003BF63 /* UIImage+AddFunction.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54F851D9A13540003BF63 /* UIImage+AddFunction.m */; };\n\t\t68E54F891D9A13540003BF63 /* UIViewController+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54F871D9A13540003BF63 /* UIViewController+Extension.m */; };\n\t\t68E54F901D9A13D10003BF63 /* YBPasterScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54F8D1D9A13D10003BF63 /* YBPasterScrollView.m */; };\n\t\t68E54F911D9A13D10003BF63 /* YBPasterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54F8F1D9A13D10003BF63 /* YBPasterView.m */; };\n\t\t68E54F961D9A20B00003BF63 /* YBCustomButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54F951D9A20B00003BF63 /* YBCustomButton.m */; };\n\t\t68E54FE11D9A584B0003BF63 /* YBFilterScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54FE01D9A584B0003BF63 /* YBFilterScrollView.m */; };\n\t\t68E54FF31D9A6C140003BF63 /* ImageUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54FE71D9A6C140003BF63 /* ImageUtil.m */; };\n\t\t68E54FF41D9A6C140003BF63 /* UIImage+Alpha.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54FEA1D9A6C140003BF63 /* UIImage+Alpha.m */; };\n\t\t68E54FF51D9A6C140003BF63 /* UIImage+Cut.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54FEC1D9A6C140003BF63 /* UIImage+Cut.m */; };\n\t\t68E54FF61D9A6C140003BF63 /* UIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54FEE1D9A6C140003BF63 /* UIImage+Resize.m */; };\n\t\t68E54FF71D9A6C140003BF63 /* UIImage+RoundedCorner.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54FF01D9A6C140003BF63 /* UIImage+RoundedCorner.m */; };\n\t\t68E54FF81D9A6C140003BF63 /* UIImage+SplitImageIntoTwoParts.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E54FF21D9A6C140003BF63 /* UIImage+SplitImageIntoTwoParts.m */; };\n\t\tE675C631B2BC66F8F7D1FDA0 /* libPods-testPasterImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3AE1DD9585D80CEC7302FDE3 /* libPods-testPasterImage.a */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t68A7FEA41D7D602E00F3488D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 68A7FE821D7D602E00F3488D /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 68A7FE891D7D602E00F3488D;\n\t\t\tremoteInfo = testPasterImage;\n\t\t};\n\t\t68A7FEAF1D7D602F00F3488D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 68A7FE821D7D602E00F3488D /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 68A7FE891D7D602E00F3488D;\n\t\t\tremoteInfo = testPasterImage;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t0E1D0ACD3D2EAF07D3741914 /* Pods-testPasterImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-testPasterImage.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t3AE1DD9585D80CEC7302FDE3 /* libPods-testPasterImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-testPasterImage.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6828CE0C1DB76A1B00369A7F /* YBBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YBBaseViewController.h; sourceTree = \"<group>\"; };\n\t\t6828CE0D1DB76A1B00369A7F /* YBBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YBBaseViewController.m; sourceTree = \"<group>\"; };\n\t\t6828CE0F1DB76A6300369A7F /* UIViewController+Swizzling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIViewController+Swizzling.h\"; sourceTree = \"<group>\"; };\n\t\t6828CE101DB76A6300369A7F /* UIViewController+Swizzling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIViewController+Swizzling.m\"; sourceTree = \"<group>\"; };\n\t\t68A7FE8A1D7D602E00F3488D /* testPasterImage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testPasterImage.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t68A7FE8E1D7D602E00F3488D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t68A7FE901D7D602E00F3488D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t68A7FE911D7D602E00F3488D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t68A7FE971D7D602E00F3488D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t68A7FE991D7D602E00F3488D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t68A7FE9C1D7D602E00F3488D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t68A7FE9E1D7D602E00F3488D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t68A7FEA31D7D602E00F3488D /* testPasterImageTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = testPasterImageTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t68A7FEA71D7D602E00F3488D /* testPasterImageTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = testPasterImageTests.m; sourceTree = \"<group>\"; };\n\t\t68A7FEA91D7D602E00F3488D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t68A7FEAE1D7D602F00F3488D /* testPasterImageUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = testPasterImageUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t68A7FEB21D7D602F00F3488D /* testPasterImageUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = testPasterImageUITests.m; sourceTree = \"<group>\"; };\n\t\t68A7FEB41D7D602F00F3488D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t68BA63BE1D9E178B007EF318 /* UIViewController+Example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIViewController+Example.h\"; sourceTree = \"<group>\"; };\n\t\t68BA63BF1D9E178B007EF318 /* UIViewController+Example.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIViewController+Example.m\"; sourceTree = \"<group>\"; };\n\t\t68E54F751D9A13130003BF63 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\t68E54F761D9A13130003BF63 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\t68E54F771D9A13130003BF63 /* YBPasterImageVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YBPasterImageVC.h; sourceTree = \"<group>\"; };\n\t\t68E54F781D9A13130003BF63 /* YBPasterImageVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YBPasterImageVC.m; sourceTree = \"<group>\"; };\n\t\t68E54F841D9A13540003BF63 /* UIImage+AddFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIImage+AddFunction.h\"; sourceTree = \"<group>\"; };\n\t\t68E54F851D9A13540003BF63 /* UIImage+AddFunction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIImage+AddFunction.m\"; sourceTree = \"<group>\"; };\n\t\t68E54F861D9A13540003BF63 /* UIViewController+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIViewController+Extension.h\"; sourceTree = \"<group>\"; };\n\t\t68E54F871D9A13540003BF63 /* UIViewController+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIViewController+Extension.m\"; sourceTree = \"<group>\"; };\n\t\t68E54F8C1D9A13D10003BF63 /* YBPasterScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YBPasterScrollView.h; sourceTree = \"<group>\"; };\n\t\t68E54F8D1D9A13D10003BF63 /* YBPasterScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YBPasterScrollView.m; sourceTree = \"<group>\"; };\n\t\t68E54F8E1D9A13D10003BF63 /* YBPasterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YBPasterView.h; sourceTree = \"<group>\"; };\n\t\t68E54F8F1D9A13D10003BF63 /* YBPasterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YBPasterView.m; sourceTree = \"<group>\"; };\n\t\t68E54F941D9A20B00003BF63 /* YBCustomButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YBCustomButton.h; sourceTree = \"<group>\"; };\n\t\t68E54F951D9A20B00003BF63 /* YBCustomButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YBCustomButton.m; sourceTree = \"<group>\"; };\n\t\t68E54FDF1D9A584B0003BF63 /* YBFilterScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YBFilterScrollView.h; sourceTree = \"<group>\"; };\n\t\t68E54FE01D9A584B0003BF63 /* YBFilterScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YBFilterScrollView.m; sourceTree = \"<group>\"; };\n\t\t68E54FE51D9A6C140003BF63 /* ColorMatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorMatrix.h; sourceTree = \"<group>\"; };\n\t\t68E54FE61D9A6C140003BF63 /* ImageUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageUtil.h; sourceTree = \"<group>\"; };\n\t\t68E54FE71D9A6C140003BF63 /* ImageUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageUtil.m; sourceTree = \"<group>\"; };\n\t\t68E54FE91D9A6C140003BF63 /* UIImage+Alpha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIImage+Alpha.h\"; sourceTree = \"<group>\"; };\n\t\t68E54FEA1D9A6C140003BF63 /* UIImage+Alpha.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIImage+Alpha.m\"; sourceTree = \"<group>\"; };\n\t\t68E54FEB1D9A6C140003BF63 /* UIImage+Cut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIImage+Cut.h\"; sourceTree = \"<group>\"; };\n\t\t68E54FEC1D9A6C140003BF63 /* UIImage+Cut.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIImage+Cut.m\"; sourceTree = \"<group>\"; };\n\t\t68E54FED1D9A6C140003BF63 /* UIImage+Resize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIImage+Resize.h\"; sourceTree = \"<group>\"; };\n\t\t68E54FEE1D9A6C140003BF63 /* UIImage+Resize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIImage+Resize.m\"; sourceTree = \"<group>\"; };\n\t\t68E54FEF1D9A6C140003BF63 /* UIImage+RoundedCorner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIImage+RoundedCorner.h\"; sourceTree = \"<group>\"; };\n\t\t68E54FF01D9A6C140003BF63 /* UIImage+RoundedCorner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIImage+RoundedCorner.m\"; sourceTree = \"<group>\"; };\n\t\t68E54FF11D9A6C140003BF63 /* UIImage+SplitImageIntoTwoParts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"UIImage+SplitImageIntoTwoParts.h\"; sourceTree = \"<group>\"; };\n\t\t68E54FF21D9A6C140003BF63 /* UIImage+SplitImageIntoTwoParts.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"UIImage+SplitImageIntoTwoParts.m\"; sourceTree = \"<group>\"; };\n\t\tE2D87E7F14BF62318BD7B391 /* Pods-testPasterImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-testPasterImage.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage.release.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t68A7FE871D7D602E00F3488D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE675C631B2BC66F8F7D1FDA0 /* libPods-testPasterImage.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t68A7FEA01D7D602E00F3488D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t68A7FEAB1D7D602F00F3488D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t68A7FE811D7D602E00F3488D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68A7FE8C1D7D602E00F3488D /* testPasterImage */,\n\t\t\t\t68A7FEA61D7D602E00F3488D /* testPasterImageTests */,\n\t\t\t\t68A7FEB11D7D602F00F3488D /* testPasterImageUITests */,\n\t\t\t\t68A7FE8B1D7D602E00F3488D /* Products */,\n\t\t\t\tD37AF9F23C8DBC836EB27BD0 /* Pods */,\n\t\t\t\tB81B40EFE9215CE75818B88A /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68A7FE8B1D7D602E00F3488D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68A7FE8A1D7D602E00F3488D /* testPasterImage.app */,\n\t\t\t\t68A7FEA31D7D602E00F3488D /* testPasterImageTests.xctest */,\n\t\t\t\t68A7FEAE1D7D602F00F3488D /* testPasterImageUITests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68A7FE8C1D7D602E00F3488D /* testPasterImage */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68A7FE901D7D602E00F3488D /* AppDelegate.h */,\n\t\t\t\t68A7FE911D7D602E00F3488D /* AppDelegate.m */,\n\t\t\t\t68E54F741D9A12F30003BF63 /* Controllers */,\n\t\t\t\t68E54F8A1D9A13D10003BF63 /* Views */,\n\t\t\t\t68E54F831D9A13540003BF63 /* Categories */,\n\t\t\t\t68E54FE31D9A6C140003BF63 /* Libs */,\n\t\t\t\t68A7FE961D7D602E00F3488D /* Main.storyboard */,\n\t\t\t\t68A7FE8D1D7D602E00F3488D /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = testPasterImage;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68A7FE8D1D7D602E00F3488D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68A7FE991D7D602E00F3488D /* Assets.xcassets */,\n\t\t\t\t68A7FE9B1D7D602E00F3488D /* LaunchScreen.storyboard */,\n\t\t\t\t68A7FE9E1D7D602E00F3488D /* Info.plist */,\n\t\t\t\t68A7FE8E1D7D602E00F3488D /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68A7FEA61D7D602E00F3488D /* testPasterImageTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68A7FEA71D7D602E00F3488D /* testPasterImageTests.m */,\n\t\t\t\t68A7FEA91D7D602E00F3488D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = testPasterImageTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68A7FEB11D7D602F00F3488D /* testPasterImageUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68A7FEB21D7D602F00F3488D /* testPasterImageUITests.m */,\n\t\t\t\t68A7FEB41D7D602F00F3488D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = testPasterImageUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54F741D9A12F30003BF63 /* Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54F751D9A13130003BF63 /* ViewController.h */,\n\t\t\t\t68E54F761D9A13130003BF63 /* ViewController.m */,\n\t\t\t\t68E54F771D9A13130003BF63 /* YBPasterImageVC.h */,\n\t\t\t\t68E54F781D9A13130003BF63 /* YBPasterImageVC.m */,\n\t\t\t\t6828CE0C1DB76A1B00369A7F /* YBBaseViewController.h */,\n\t\t\t\t6828CE0D1DB76A1B00369A7F /* YBBaseViewController.m */,\n\t\t\t);\n\t\t\tpath = Controllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54F831D9A13540003BF63 /* Categories */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54F841D9A13540003BF63 /* UIImage+AddFunction.h */,\n\t\t\t\t68E54F851D9A13540003BF63 /* UIImage+AddFunction.m */,\n\t\t\t\t68BA63BE1D9E178B007EF318 /* UIViewController+Example.h */,\n\t\t\t\t68BA63BF1D9E178B007EF318 /* UIViewController+Example.m */,\n\t\t\t\t6828CE0F1DB76A6300369A7F /* UIViewController+Swizzling.h */,\n\t\t\t\t6828CE101DB76A6300369A7F /* UIViewController+Swizzling.m */,\n\t\t\t\t68E54F861D9A13540003BF63 /* UIViewController+Extension.h */,\n\t\t\t\t68E54F871D9A13540003BF63 /* UIViewController+Extension.m */,\n\t\t\t);\n\t\t\tpath = Categories;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54F8A1D9A13D10003BF63 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54F931D9A20910003BF63 /* YBCustomViews */,\n\t\t\t\t68E54F921D9A14010003BF63 /* YBFilterImage */,\n\t\t\t\t68E54F8B1D9A13D10003BF63 /* YBPasterImage */,\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54F8B1D9A13D10003BF63 /* YBPasterImage */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54F8C1D9A13D10003BF63 /* YBPasterScrollView.h */,\n\t\t\t\t68E54F8D1D9A13D10003BF63 /* YBPasterScrollView.m */,\n\t\t\t\t68E54F8E1D9A13D10003BF63 /* YBPasterView.h */,\n\t\t\t\t68E54F8F1D9A13D10003BF63 /* YBPasterView.m */,\n\t\t\t);\n\t\t\tpath = YBPasterImage;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54F921D9A14010003BF63 /* YBFilterImage */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54FDF1D9A584B0003BF63 /* YBFilterScrollView.h */,\n\t\t\t\t68E54FE01D9A584B0003BF63 /* YBFilterScrollView.m */,\n\t\t\t);\n\t\t\tpath = YBFilterImage;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54F931D9A20910003BF63 /* YBCustomViews */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54F941D9A20B00003BF63 /* YBCustomButton.h */,\n\t\t\t\t68E54F951D9A20B00003BF63 /* YBCustomButton.m */,\n\t\t\t);\n\t\t\tpath = YBCustomViews;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54FE31D9A6C140003BF63 /* Libs */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54FE41D9A6C140003BF63 /* FilterImageLibs */,\n\t\t\t);\n\t\t\tpath = Libs;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54FE41D9A6C140003BF63 /* FilterImageLibs */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54FE51D9A6C140003BF63 /* ColorMatrix.h */,\n\t\t\t\t68E54FE61D9A6C140003BF63 /* ImageUtil.h */,\n\t\t\t\t68E54FE71D9A6C140003BF63 /* ImageUtil.m */,\n\t\t\t\t68E54FE81D9A6C140003BF63 /* UIImage-Extensions */,\n\t\t\t);\n\t\t\tpath = FilterImageLibs;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68E54FE81D9A6C140003BF63 /* UIImage-Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t68E54FE91D9A6C140003BF63 /* UIImage+Alpha.h */,\n\t\t\t\t68E54FEA1D9A6C140003BF63 /* UIImage+Alpha.m */,\n\t\t\t\t68E54FEB1D9A6C140003BF63 /* UIImage+Cut.h */,\n\t\t\t\t68E54FEC1D9A6C140003BF63 /* UIImage+Cut.m */,\n\t\t\t\t68E54FED1D9A6C140003BF63 /* UIImage+Resize.h */,\n\t\t\t\t68E54FEE1D9A6C140003BF63 /* UIImage+Resize.m */,\n\t\t\t\t68E54FEF1D9A6C140003BF63 /* UIImage+RoundedCorner.h */,\n\t\t\t\t68E54FF01D9A6C140003BF63 /* UIImage+RoundedCorner.m */,\n\t\t\t\t68E54FF11D9A6C140003BF63 /* UIImage+SplitImageIntoTwoParts.h */,\n\t\t\t\t68E54FF21D9A6C140003BF63 /* UIImage+SplitImageIntoTwoParts.m */,\n\t\t\t);\n\t\t\tpath = \"UIImage-Extensions\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB81B40EFE9215CE75818B88A /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3AE1DD9585D80CEC7302FDE3 /* libPods-testPasterImage.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD37AF9F23C8DBC836EB27BD0 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0E1D0ACD3D2EAF07D3741914 /* Pods-testPasterImage.debug.xcconfig */,\n\t\t\t\tE2D87E7F14BF62318BD7B391 /* Pods-testPasterImage.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t68A7FE891D7D602E00F3488D /* testPasterImage */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 68A7FEB71D7D602F00F3488D /* Build configuration list for PBXNativeTarget \"testPasterImage\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF775385417FC25057086136C /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t68A7FE861D7D602E00F3488D /* Sources */,\n\t\t\t\t68A7FE871D7D602E00F3488D /* Frameworks */,\n\t\t\t\t68A7FE881D7D602E00F3488D /* Resources */,\n\t\t\t\tB294BE38D838F5CCD14593EA /* [CP] Embed Pods Frameworks */,\n\t\t\t\tE89784E5118341200B2A00D4 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = testPasterImage;\n\t\t\tproductName = testPasterImage;\n\t\t\tproductReference = 68A7FE8A1D7D602E00F3488D /* testPasterImage.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t68A7FEA21D7D602E00F3488D /* testPasterImageTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 68A7FEBA1D7D602F00F3488D /* Build configuration list for PBXNativeTarget \"testPasterImageTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t68A7FE9F1D7D602E00F3488D /* Sources */,\n\t\t\t\t68A7FEA01D7D602E00F3488D /* Frameworks */,\n\t\t\t\t68A7FEA11D7D602E00F3488D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t68A7FEA51D7D602E00F3488D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = testPasterImageTests;\n\t\t\tproductName = testPasterImageTests;\n\t\t\tproductReference = 68A7FEA31D7D602E00F3488D /* testPasterImageTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t68A7FEAD1D7D602F00F3488D /* testPasterImageUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 68A7FEBD1D7D602F00F3488D /* Build configuration list for PBXNativeTarget \"testPasterImageUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t68A7FEAA1D7D602F00F3488D /* Sources */,\n\t\t\t\t68A7FEAB1D7D602F00F3488D /* Frameworks */,\n\t\t\t\t68A7FEAC1D7D602F00F3488D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t68A7FEB01D7D602F00F3488D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = testPasterImageUITests;\n\t\t\tproductName = testPasterImageUITests;\n\t\t\tproductReference = 68A7FEAE1D7D602F00F3488D /* testPasterImageUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t68A7FE821D7D602E00F3488D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0730;\n\t\t\t\tORGANIZATIONNAME = \"王迎博\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t68A7FE891D7D602E00F3488D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tDevelopmentTeam = MA34265KQ7;\n\t\t\t\t\t};\n\t\t\t\t\t68A7FEA21D7D602E00F3488D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tTestTargetID = 68A7FE891D7D602E00F3488D;\n\t\t\t\t\t};\n\t\t\t\t\t68A7FEAD1D7D602F00F3488D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tTestTargetID = 68A7FE891D7D602E00F3488D;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 68A7FE851D7D602E00F3488D /* Build configuration list for PBXProject \"testPasterImage\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 68A7FE811D7D602E00F3488D;\n\t\t\tproductRefGroup = 68A7FE8B1D7D602E00F3488D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t68A7FE891D7D602E00F3488D /* testPasterImage */,\n\t\t\t\t68A7FEA21D7D602E00F3488D /* testPasterImageTests */,\n\t\t\t\t68A7FEAD1D7D602F00F3488D /* testPasterImageUITests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t68A7FE881D7D602E00F3488D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t68A7FE9D1D7D602E00F3488D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t68A7FE9A1D7D602E00F3488D /* Assets.xcassets in Resources */,\n\t\t\t\t68A7FE981D7D602E00F3488D /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t68A7FEA11D7D602E00F3488D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t68A7FEAC1D7D602F00F3488D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\tB294BE38D838F5CCD14593EA /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tE89784E5118341200B2A00D4 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-testPasterImage/Pods-testPasterImage-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF775385417FC25057086136C /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t68A7FE861D7D602E00F3488D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t68E54FF31D9A6C140003BF63 /* ImageUtil.m in Sources */,\n\t\t\t\t68BA63C01D9E178B007EF318 /* UIViewController+Example.m in Sources */,\n\t\t\t\t68E54FF71D9A6C140003BF63 /* UIImage+RoundedCorner.m in Sources */,\n\t\t\t\t6828CE111DB76A6300369A7F /* UIViewController+Swizzling.m in Sources */,\n\t\t\t\t68E54F791D9A13130003BF63 /* ViewController.m in Sources */,\n\t\t\t\t68E54F7A1D9A13130003BF63 /* YBPasterImageVC.m in Sources */,\n\t\t\t\t68E54FE11D9A584B0003BF63 /* YBFilterScrollView.m in Sources */,\n\t\t\t\t6828CE0E1DB76A1B00369A7F /* YBBaseViewController.m in Sources */,\n\t\t\t\t68E54F881D9A13540003BF63 /* UIImage+AddFunction.m in Sources */,\n\t\t\t\t68A7FE921D7D602E00F3488D /* AppDelegate.m in Sources */,\n\t\t\t\t68E54F901D9A13D10003BF63 /* YBPasterScrollView.m in Sources */,\n\t\t\t\t68E54FF81D9A6C140003BF63 /* UIImage+SplitImageIntoTwoParts.m in Sources */,\n\t\t\t\t68E54F891D9A13540003BF63 /* UIViewController+Extension.m in Sources */,\n\t\t\t\t68E54FF51D9A6C140003BF63 /* UIImage+Cut.m in Sources */,\n\t\t\t\t68E54FF41D9A6C140003BF63 /* UIImage+Alpha.m in Sources */,\n\t\t\t\t68E54F911D9A13D10003BF63 /* YBPasterView.m in Sources */,\n\t\t\t\t68A7FE8F1D7D602E00F3488D /* main.m in Sources */,\n\t\t\t\t68E54F961D9A20B00003BF63 /* YBCustomButton.m in Sources */,\n\t\t\t\t68E54FF61D9A6C140003BF63 /* UIImage+Resize.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t68A7FE9F1D7D602E00F3488D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t68A7FEA81D7D602E00F3488D /* testPasterImageTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t68A7FEAA1D7D602F00F3488D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t68A7FEB31D7D602F00F3488D /* testPasterImageUITests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t68A7FEA51D7D602E00F3488D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 68A7FE891D7D602E00F3488D /* testPasterImage */;\n\t\t\ttargetProxy = 68A7FEA41D7D602E00F3488D /* PBXContainerItemProxy */;\n\t\t};\n\t\t68A7FEB01D7D602F00F3488D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 68A7FE891D7D602E00F3488D /* testPasterImage */;\n\t\t\ttargetProxy = 68A7FEAF1D7D602F00F3488D /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t68A7FE961D7D602E00F3488D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t68A7FE971D7D602E00F3488D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t68A7FE9B1D7D602E00F3488D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t68A7FE9C1D7D602E00F3488D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t68A7FEB51D7D602F00F3488D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t68A7FEB61D7D602F00F3488D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t68A7FEB81D7D602F00F3488D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0E1D0ACD3D2EAF07D3741914 /* Pods-testPasterImage.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = testPasterImage/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.jiapin.www.testPasterImage;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t68A7FEB91D7D602F00F3488D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E2D87E7F14BF62318BD7B391 /* Pods-testPasterImage.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tINFOPLIST_FILE = testPasterImage/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.jiapin.www.testPasterImage;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t68A7FEBB1D7D602F00F3488D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = testPasterImageTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.jiapin.www.testPasterImageTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/testPasterImage.app/testPasterImage\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t68A7FEBC1D7D602F00F3488D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = testPasterImageTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.jiapin.www.testPasterImageTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/testPasterImage.app/testPasterImage\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t68A7FEBE1D7D602F00F3488D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = testPasterImageUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.jiapin.www.testPasterImageUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = testPasterImage;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t68A7FEBF1D7D602F00F3488D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = testPasterImageUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.jiapin.www.testPasterImageUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = testPasterImage;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t68A7FE851D7D602E00F3488D /* Build configuration list for PBXProject \"testPasterImage\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t68A7FEB51D7D602F00F3488D /* Debug */,\n\t\t\t\t68A7FEB61D7D602F00F3488D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t68A7FEB71D7D602F00F3488D /* Build configuration list for PBXNativeTarget \"testPasterImage\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t68A7FEB81D7D602F00F3488D /* Debug */,\n\t\t\t\t68A7FEB91D7D602F00F3488D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t68A7FEBA1D7D602F00F3488D /* Build configuration list for PBXNativeTarget \"testPasterImageTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t68A7FEBB1D7D602F00F3488D /* Debug */,\n\t\t\t\t68A7FEBC1D7D602F00F3488D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t68A7FEBD1D7D602F00F3488D /* Build configuration list for PBXNativeTarget \"testPasterImageUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t68A7FEBE1D7D602F00F3488D /* Debug */,\n\t\t\t\t68A7FEBF1D7D602F00F3488D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 68A7FE821D7D602E00F3488D /* Project object */;\n}\n"
  },
  {
    "path": "testPasterImage.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:testPasterImage.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "testPasterImage.xcodeproj/xcuserdata/vipstore.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   type = \"1\"\n   version = \"2.0\">\n</Bucket>\n"
  },
  {
    "path": "testPasterImage.xcodeproj/xcuserdata/vipstore.xcuserdatad/xcschemes/testPasterImage.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 = \"68A7FE891D7D602E00F3488D\"\n               BuildableName = \"testPasterImage.app\"\n               BlueprintName = \"testPasterImage\"\n               ReferencedContainer = \"container:testPasterImage.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 = \"68A7FEA21D7D602E00F3488D\"\n               BuildableName = \"testPasterImageTests.xctest\"\n               BlueprintName = \"testPasterImageTests\"\n               ReferencedContainer = \"container:testPasterImage.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"68A7FEAD1D7D602F00F3488D\"\n               BuildableName = \"testPasterImageUITests.xctest\"\n               BlueprintName = \"testPasterImageUITests\"\n               ReferencedContainer = \"container:testPasterImage.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"68A7FE891D7D602E00F3488D\"\n            BuildableName = \"testPasterImage.app\"\n            BlueprintName = \"testPasterImage\"\n            ReferencedContainer = \"container:testPasterImage.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 = \"68A7FE891D7D602E00F3488D\"\n            BuildableName = \"testPasterImage.app\"\n            BlueprintName = \"testPasterImage\"\n            ReferencedContainer = \"container:testPasterImage.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 = \"68A7FE891D7D602E00F3488D\"\n            BuildableName = \"testPasterImage.app\"\n            BlueprintName = \"testPasterImage\"\n            ReferencedContainer = \"container:testPasterImage.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": "testPasterImage.xcodeproj/xcuserdata/vipstore.xcuserdatad/xcschemes/xcschememanagement.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>SchemeUserState</key>\n\t<dict>\n\t\t<key>testPasterImage.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>0</integer>\n\t\t</dict>\n\t</dict>\n\t<key>SuppressBuildableAutocreation</key>\n\t<dict>\n\t\t<key>68A7FE891D7D602E00F3488D</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>68A7FEA21D7D602E00F3488D</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>68A7FEAD1D7D602F00F3488D</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "testPasterImage.xcodeproj/xcuserdata/wangyingbo.xcuserdatad/xcschemes/testPasterImage.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 = \"68A7FE891D7D602E00F3488D\"\n               BuildableName = \"testPasterImage.app\"\n               BlueprintName = \"testPasterImage\"\n               ReferencedContainer = \"container:testPasterImage.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 = \"68A7FEA21D7D602E00F3488D\"\n               BuildableName = \"testPasterImageTests.xctest\"\n               BlueprintName = \"testPasterImageTests\"\n               ReferencedContainer = \"container:testPasterImage.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"68A7FEAD1D7D602F00F3488D\"\n               BuildableName = \"testPasterImageUITests.xctest\"\n               BlueprintName = \"testPasterImageUITests\"\n               ReferencedContainer = \"container:testPasterImage.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"68A7FE891D7D602E00F3488D\"\n            BuildableName = \"testPasterImage.app\"\n            BlueprintName = \"testPasterImage\"\n            ReferencedContainer = \"container:testPasterImage.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 = \"68A7FE891D7D602E00F3488D\"\n            BuildableName = \"testPasterImage.app\"\n            BlueprintName = \"testPasterImage\"\n            ReferencedContainer = \"container:testPasterImage.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 = \"68A7FE891D7D602E00F3488D\"\n            BuildableName = \"testPasterImage.app\"\n            BlueprintName = \"testPasterImage\"\n            ReferencedContainer = \"container:testPasterImage.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": "testPasterImage.xcodeproj/xcuserdata/wangyingbo.xcuserdatad/xcschemes/xcschememanagement.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>SchemeUserState</key>\n\t<dict>\n\t\t<key>testPasterImage.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>0</integer>\n\t\t</dict>\n\t</dict>\n\t<key>SuppressBuildableAutocreation</key>\n\t<dict>\n\t\t<key>68A7FE891D7D602E00F3488D</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>68A7FEA21D7D602E00F3488D</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>68A7FEAD1D7D602F00F3488D</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "testPasterImage.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:testPasterImage.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "testPasterImage.xcworkspace/xcshareddata/testPasterImage.xcscmblueprint",
    "content": "{\n  \"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey\" : \"537B6586F05AEB9F89F52A1E940931332B028804\",\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey\" : {\n    \"1a0beb16-39a9-491a-8432-0dfbb1476d54++7897\" : {\n\n    }\n  },\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey\" : {\n    \"537B6586F05AEB9F89F52A1E940931332B028804\" : 0,\n    \"1a0beb16-39a9-491a-8432-0dfbb1476d54++7897\" : 0\n  },\n  \"DVTSourceControlWorkspaceBlueprintIdentifierKey\" : \"F1E10107-A592-40B8-B4E3-05CD8A7A80E6\",\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey\" : {\n    \"537B6586F05AEB9F89F52A1E940931332B028804\" : \"testPasterImage\\/\",\n    \"1a0beb16-39a9-491a-8432-0dfbb1476d54++7897\" : \"testPasterImage\\/testPasterImage\\/Libs\\/FilterImageLibs\\/UIImage-Extensions\\/\"\n  },\n  \"DVTSourceControlWorkspaceBlueprintNameKey\" : \"testPasterImage\",\n  \"DVTSourceControlWorkspaceBlueprintVersion\" : 204,\n  \"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey\" : \"testPasterImage.xcworkspace\",\n  \"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey\" : [\n    {\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey\" : \"https:\\/\\/svn.duapp.com\\/appid9kgedf0yca\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey\" : \"com.apple.dt.Xcode.sourcecontrol.Subversion\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey\" : \"1a0beb16-39a9-491a-8432-0dfbb1476d54++7897\"\n    },\n    {\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey\" : \"https:\\/\\/github.com\\/wangyingbo\\/YBPasterImage.git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey\" : \"com.apple.dt.Xcode.sourcecontrol.Git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey\" : \"537B6586F05AEB9F89F52A1E940931332B028804\"\n    }\n  ]\n}"
  },
  {
    "path": "testPasterImage.xcworkspace/xcuserdata/vipstore.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   type = \"0\"\n   version = \"2.0\">\n</Bucket>\n"
  },
  {
    "path": "testPasterImageTests/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>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</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": "testPasterImageTests/testPasterImageTests.m",
    "content": "//\n//  testPasterImageTests.m\n//  testPasterImageTests\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface testPasterImageTests : XCTestCase\n\n@end\n\n@implementation testPasterImageTests\n\n- (void)setUp {\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown {\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample {\n    // This is an example of a functional test case.\n    // Use XCTAssert and related functions to verify your tests produce the correct results.\n}\n\n- (void)testPerformanceExample {\n    // This is an example of a performance test case.\n    [self measureBlock:^{\n        // Put the code you want to measure the time of here.\n    }];\n}\n\n@end\n"
  },
  {
    "path": "testPasterImageUITests/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>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</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": "testPasterImageUITests/testPasterImageUITests.m",
    "content": "//\n//  testPasterImageUITests.m\n//  testPasterImageUITests\n//\n//  Created by 王迎博 on 16/9/5.\n//  Copyright © 2016年 王迎博. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface testPasterImageUITests : XCTestCase\n\n@end\n\n@implementation testPasterImageUITests\n\n- (void)setUp {\n    [super setUp];\n    \n    // Put setup code here. This method is called before the invocation of each test method in the class.\n    \n    // In UI tests it is usually best to stop immediately when a failure occurs.\n    self.continueAfterFailure = NO;\n    // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.\n    [[[XCUIApplication alloc] init] launch];\n    \n    // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.\n}\n\n- (void)tearDown {\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample {\n    // Use recording to get started writing UI tests.\n    // Use XCTAssert and related functions to verify your tests produce the correct results.\n}\n\n@end\n"
  }
]