[
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yml",
    "content": "name: 🐞 Bug report\ndescription: File a Bug Report for unexpected or incorrect SDK Behavior\ntitle: '[Bug]: '\nlabels: [\"bug\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this bug report! Please consider contacting support@braze.com for faster integration troubleshooting and to avoid leaking private information to our public Github issues.\n        \n        Consider upgrading to the new [Braze Swift SDK](https://github.com/braze-inc/braze-swift-sdk), the bug might not exist in this new SDK.\n  - type: dropdown\n    id: platform\n    attributes:\n      label: Platform\n      multiple: false\n      options:\n        - iOS\n        - tvOS\n        - Mac Catalyst\n        - Other\n    validations:\n      required: true\n  - type: input\n    id: platform_version\n    attributes:\n      label: Platform Version\n      placeholder: ex. iOS 15.1\n    validations:\n      required: true\n  - type: input\n    id: sdk_version\n    attributes:\n      label: Braze SDK Version\n      placeholder: ex. 4.3.0\n    validations:\n      required: true\n  - type: input\n    id: xcode_version\n    attributes:\n      label: Xcode Version\n      placeholder: ex. Xcode 10.1\n    validations:\n      required: true\n  - type: dropdown\n    id: integration_method\n    attributes:\n      label: Integration Method\n      multiple: false\n      options:\n        - Swift Package Manager\n        - Cocoapods\n        - Carthage\n        - Manually\n        - Other\n    validations:\n      required: true\n  - type: dropdown\n    id: processor\n    attributes:\n      label: Computer Processor\n      multiple: false\n      options:\n        - Intel\n        - Apple (M1)\n    validations:\n      required: true\n  - type: input\n    id: repro_rate\n    attributes:\n      label: Repro Rate\n      description: How often can you reproduce this bug?\n      placeholder: ex. 100% of the time\n    validations:\n      required: true\n  - type: textarea\n    id: repro_steps\n    attributes:\n      label: Steps To Reproduce\n      description: Please provide a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example)\n      value: |\n        Example:\n          1. Add `pod 'Appboy-iOS-SDK'` to the Podspec file.\n          2. Add `[Appboy startWithApiKey:inApplication:withLaunchOptions:];` method in `application:didFinishLaunchingWithOptions:` method in `AppDelegate.m`.\n          3. Run the app.\n    validations:\n      required: true\n  - type: textarea\n    id: expected_behavior\n    attributes:\n      label: Expected Behavior\n      description: What was supposed to happen?\n    validations:\n      required: true\n  - type: textarea\n    id: actual_behavior\n    attributes:\n      label: Actual Incorrect Behavior\n      description: What incorrect behavior happened instead?\n    validations:\n      required: true\n  - type: textarea\n    id: verbose_logs\n    attributes:\n      label: Verbose Logs\n      description: Please copy and paste verbose log output. This will be automatically formatted into code, so no need for backticks.\n      render: shell\n  - type: textarea\n    id: other_info\n    attributes:\n      label: Additional Information\n      description: Anything else you'd like to share?\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Braze Swift SDK\n    url: https://github.com/braze-inc/braze-swift-sdk/\n    about: Consider upgrading to the new Braze Swift SDK for a better experience.\n  - name: Braze Support\n    url: https://support.braze.com/\n    about: Contact Braze Support for company or campaign-specific troubleshooting\n  - name: Security Issues\n    url: https://www.braze.com/docs/developer_guide/disclosures/security_and_vulnerability_disclosure/\n    about: Please report security vulnerabilities here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature.yml",
    "content": "name: ✅ Feature Request\ndescription: Request New SDK Features\ntitle: '[Feature]: '\nlabels: [\"feature-request\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Did you know: You can also submit feature requests in our [Public Roadmap Portal](https://dashboard.braze.com/resources/roadmap)\n  - type: textarea\n    id: problem\n    attributes:\n      label: What problem are you facing?\n      description: Help us understand what you're unable to accomplish, or what's difficult with your integration\n      placeholder: |\n        ex: I am unable to accomplish XYZ today, since the SDK does not allow me to...\n    validations:\n      required: true\n  - type: textarea\n    id: workarounds\n    attributes:\n      label: Workarounds\n      description: Are there any workarounds you can use? How complicated are they?\n    validations:\n      required: true\n  - type: textarea\n    id: ideal_solution\n    attributes:\n      label: Ideal Solution\n      description: What would your ideal solution look like?\n    validations:\n      required: false\n  - type: textarea\n    id: other_information\n    attributes:\n      label: Other Information\n      description: Any additional information you'd like to share?\n    validations:\n      required: false\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n\nExample/build/\nExample/builds/\nPods/\nPodfile.lock\n!Samples/**/Podfile.lock\n\nxcuserdata/\n.idea/\n**xcshareddata**\n\n# Emacs temporary files\n*~\n\n# XCFrameworks\n*.xcframework\n"
  },
  {
    "path": "Appboy-Push-Story.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"Appboy-Push-Story\"\n  s.version      = \"4.7.0\"\n  s.summary      = \"This is the Braze Push Story SDK for Mobile Marketing Automation\"\n  s.homepage     = \"http://www.braze.com\"\n  s.license      = { :type => 'Commercial', :text => 'Please refer to https://github.com/Appboy/appboy-ios-sdk/blob/master/LICENSE'}\n  s.author       = { \"Appboy\" => \"http://www.braze.com\" }\n  s.source       = { :http => \"https://github.com/Appboy/appboy-ios-sdk/releases/download/#{s.version.to_s}/AppboyPushStory.zip\" }\n  s.platform = :ios\n  s.ios.deployment_target = '11.0'\n  s.requires_arc = true\n  s.documentation_url = 'https://www.braze.com/docs'\n  s.vendored_frameworks = 'AppboyPushStory/AppboyPushStory.xcframework'\n  s.resource_bundle = { 'AppboyPushStory' => 'AppboyPushStory/Resources/*' }\n  s.user_target_xcconfig = { 'OTHER_LDFLAGS' => '-ObjC' }\nend\n"
  },
  {
    "path": "Appboy-iOS-SDK.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"Appboy-iOS-SDK\"\n  s.version      = \"4.7.0\"\n  s.summary      = \"This is the Braze iOS SDK for Mobile Marketing Automation\"\n  s.homepage     = \"http://www.braze.com\"\n  s.license      = { :type => 'Commercial', :text => 'Please refer to https://github.com/Appboy/appboy-ios-sdk/blob/master/LICENSE'}\n  s.author       = { \"Appboy\" => \"http://www.braze.com\" }\n  s.source       = { :http => \"https://github.com/Appboy/appboy-ios-sdk/releases/download/#{s.version.to_s}/Appboy_iOS_SDK.zip\" }\n  s.platform = :ios\n  s.ios.deployment_target = '11.0'\n  s.requires_arc = true\n  s.documentation_url = 'https://www.braze.com/docs'\n  s.exclude_files = 'AppboyKit/**/*.txt'\n  s.preserve_paths = 'AppboyKit/**/*.*'\n  s.default_subspec = 'UI'\n\n  s.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-ObjC' }\n\n  s.subspec 'Core' do |sc|\n    sc.ios.library = 'z'\n    sc.frameworks = 'SystemConfiguration', 'QuartzCore', 'CoreText', 'WebKit'\n    sc.source_files = 'AppboyKit/include/*.h', 'AppboyKit/ABKModalWebViewController.m', 'AppboyKit/ABKNoConnectionLocalization.m', 'AppboyKit/ABKLocationManagerProvider.m'\n    sc.resource_bundle = { 'Appboy' => ['AppboyKit/Appboy.bundle/*.{lproj,txt,xcprivacy}'] }\n    sc.vendored_framework = 'AppboyKit/AppboyKitLibrary.xcframework'\n    sc.weak_framework = 'CoreTelephony', 'UserNotifications'\n  end\n\n  s.subspec 'UI' do |sui|\n    sui.dependency 'Appboy-iOS-SDK/NewsFeed'\n    sui.dependency 'Appboy-iOS-SDK/InAppMessage'\n    sui.dependency 'Appboy-iOS-SDK/ContentCards'\n    sui.dependency 'Appboy-iOS-SDK/Core'\n  end\n\n  s.subspec 'NewsFeed' do |snf|\n    snf.source_files = 'AppboyUI/ABKNewsFeed/*.*', 'AppboyUI/ABKNewsFeed/ViewControllers/**/*.*', 'AppboyUI/ABKUIUtils/**/*.*', 'AppboyKit/ABKSDWebImageProxy.m'\n    snf.resource_bundle = { 'AppboyUI.NewsFeed' => 'AppboyUI/ABKNewsFeed/Resources/**/*.*' }\n    snf.dependency 'Appboy-iOS-SDK/Core'\n    snf.dependency 'SDWebImage', '>= 5.18.7', '< 6'\n  end\n\n  s.subspec 'InAppMessage' do |siam|\n    siam.source_files = 'AppboyUI/ABKUIUtils/**/*.*', 'AppboyUI/ABKInAppMessage/*.*', 'AppboyUI/ABKInAppMessage/ViewControllers/*.*', 'AppboyKit/ABKSDWebImageProxy.m'\n    siam.resource_bundle = { 'AppboyUI.InAppMessage' => 'AppboyUI/ABKInAppMessage/Resources/*.*' }\n    siam.dependency 'Appboy-iOS-SDK/Core'\n    siam.dependency 'SDWebImage', '>= 5.18.7', '< 6'\n  end\n\n  s.subspec 'ContentCards' do |scc|\n    scc.source_files = 'AppboyUI/ABKContentCards/*.*', 'AppboyUI/ABKContentCards/ViewControllers/**/*.*', 'AppboyUI/ABKUIUtils/**/*.*', 'AppboyKit/ABKSDWebImageProxy.m'\n    scc.resource_bundle = { 'AppboyUI.ContentCards' => 'AppboyUI/ABKContentCards/Resources/**/*.*' }\n    scc.dependency 'Appboy-iOS-SDK/Core'\n    scc.dependency 'SDWebImage', '>= 5.18.7', '< 6'\n  end\nend\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKAttributionData.h",
    "content": "#import <Foundation/Foundation.h>\n\n\n/*\n * Braze Public API: ABKAttributionData\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKAttributionData : NSObject\n\n/*!\n * @param network The attribution network\n * @param campaign The attribution campaign\n * @param adGroup The attribution adGroup\n * @param creative The attribution creative\n *\n * @discussion: Creates an ABKAttributionData object to send to Braze servers.\n */\n- (instancetype)initWithNetwork:(nullable NSString *)network\n                       campaign:(nullable NSString *)campaign\n                        adGroup:(nullable NSString *)adGroup\n                       creative:(nullable NSString *)creative;\n\n@property (nonatomic, readonly, nullable) NSString *network;\n@property (nonatomic, readonly, nullable) NSString *campaign;\n@property (nonatomic, readonly, nullable) NSString *adGroup;\n@property (nonatomic, readonly, nullable) NSString *creative;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKBannerCard.h",
    "content": "#import \"ABKCard.h\"\n\n/*\n * Braze Public API: ABKBannerCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKBannerCard : ABKCard <NSCoding>\n\n/* \n * This property is the URL of the card's image.\n */\n@property (copy) NSString *image;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n/*\n * This property is the aspect ratio of the card's image. It is meant to serve as a hint before\n * image loading completes. Note that the property may not be supplied in certain circumstances.\n */\n@property float imageAspectRatio;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKBannerContentCard.h",
    "content": "#import \"ABKContentCard.h\"\n\n@interface ABKBannerContentCard : ABKContentCard <NSCoding>\n\n/*\n * The URL of the card's image.\n */\n@property (copy) NSString *image;\n\n/*\n * This property is the aspect ratio of the card's image. It is meant to serve as a hint before\n * image loading completes. Note that the property may not be supplied in certain circumstances.\n */\n@property float imageAspectRatio;\n\n@end\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKCaptionedImageCard.h",
    "content": "#import \"ABKCard.h\"\n\n/*\n * Braze Public API: ABKCaptionedImageCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKCaptionedImageCard : ABKCard <NSCoding>\n\n/*\n * This property is the URL of the card's image.\n */\n@property (copy) NSString *image;\n\n/*\n * This property is the aspect ratio of the card's image. It is meant to serve as a hint before\n * image loading completes. Note that the property may not be supplied in certain circumstances.\n */\n@property float imageAspectRatio;\n\n/*\n * The title text for the card.\n */\n@property (copy) NSString *title;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKCaptionedImageContentCard.h",
    "content": "#import \"ABKContentCard.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKCaptionedImageContentCard : ABKContentCard <NSCoding>\n\n/*\n * The URL of the card's image.\n */\n@property (copy) NSString *image;\n\n/*\n * This property is the aspect ratio of the card's image. It is meant to serve as a hint before\n * image loading completes. Note that the property may not be supplied in certain circumstances.\n */\n@property float imageAspectRatio;\n\n/*\n * The title text for the card.\n */\n@property (copy) NSString *title;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKCard.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKFeedController.h\"\n\n/*\n * Braze Public API: ABKCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKCard : NSObject <NSCopying, NSCoding>\n\n/*\n * Card's ID.\n */\n@property (readonly) NSString *idString;\n\n/*\n * This property reflects if the card is read or unread by the user.\n */\n@property (nonatomic) BOOL viewed;\n\n/*\n * The property is the unix timestamp of the card's creation time from Braze dashboard.\n */\n@property (nonatomic, readonly) double created;\n\n/*\n * The property is the unix timestamp of the card's latest update time from Braze dashboard.\n */\n@property (nonatomic, readonly) double updated;\n\n/*\n * The categories assigned to the card.\n */\n@property ABKCardCategory categories;\n\n/*\n * The property is the unix timestamp of the card's expiration time. When the value is less than 0, it means the card\n * doesn't an expire date.\n */\n@property (readonly) double expiresAt;\n\n/*!\n * This property carries extra data in the form of an NSDictionary which can be sent down via the Braze Dashboard.\n * You may want to design and implement a custom handler to access this data depending on your use case.\n */\n@property (strong, nullable) NSDictionary *extras;\n\n//Optional:\n/*\n * The URL string that will be opened after the card is clicked on.\n */\n@property (copy, nullable) NSString *urlString;\n\n/*!\n * When the card's urlString is not nil, if the property is set to YES, the URL will be opened in a modal WKWebView\n * inside the app. If this property is set to NO, the URL will be opened by the OS and web URLs will be opened in\n * an external web browser app.\n *\n * This property defaults to NO.\n */\n@property BOOL openUrlInWebView;\n\n/*\n * @param cardDictionary The dictionary for card deserialization.\n *\n * Deserializes the dictionary to a card for use by wrappers such as Braze's Unity SDK for iOS.\n * When the deserialization isn't successful, this method returns nil; otherwise, it returns the deserialized card.\n */\n+ (nullable ABKCard *)deserializeCardFromDictionary:(nullable NSDictionary *)cardDictionary;\n\n/*\n * Serializes the card to binary data for use by wrappers such as Braze's Unity SDK for iOS.\n */\n- (nullable NSData *)serializeToData;\n\n/*\n * Manually log an impression to Braze for the card.\n * This should only be used for custom news feed view controller. ABKFeedViewController already has card impression logging.\n */\n- (void)logCardImpression;\n\n/*\n * Manually log a click to Braze for the card.\n * This should only be used for custom news feed view controller. ABKFeedViewController already has card click logging.\n * The SDK will only log a card click when the card has the url property with a valid url.\n */\n- (void)logCardClicked;\n\n- (BOOL)hasSameId:(ABKCard *)card;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKClassicCard.h",
    "content": "#import \"ABKCard.h\"\n\n/*\n * Braze Public API: ABKClassicCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKClassicCard : ABKCard <NSCoding>\n\n/*\n * This property is the URL of the card's image.\n */\n@property (copy, nullable) NSString *image;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n\n/*\n * The news title text for the card.\n */\n@property (copy, nullable) NSString *title;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKClassicContentCard.h",
    "content": "#import \"ABKContentCard.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKClassicContentCard : ABKContentCard <NSCoding>\n\n/*\n * The URL of the card's image.\n */\n@property (copy, nullable) NSString *image;\n\n/*\n * The news title text for the card.\n */\n@property (copy) NSString *title;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKContentCard.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*\n * Braze Public API: ABKContentCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKContentCard : NSObject <NSCopying, NSCoding>\n\n/*!\n * Card's ID.\n */\n@property (readonly) NSString *idString;\n\n/*!\n * This property reflects if the card is read or unread by the user.\n */\n@property (nonatomic) BOOL viewed;\n\n/*!\n * The property is the unix timestamp of the card's creation time from Braze dashboard.\n */\n@property (nonatomic, readonly) double created;\n\n/*!\n * The property is the unix timestamp of the card's expiration time. When the value is less than 0, it means the card\n * doesn't an expire date.\n */\n@property (readonly) double expiresAt;\n\n/*!\n * This property reflects if the card can be dismissed by the user.\n */\n@property (nonatomic) BOOL dismissible;\n\n/*!\n * This property reflects if the card has been pinned by the user.\n */\n@property (nonatomic) BOOL pinned;\n\n/*!\n * This property reflects if the card has been dimissed.\n */\n@property (nonatomic) BOOL dismissed;\n\n/*!\n * This property reflects if the card has been clicked.\n */\n@property (nonatomic) BOOL clicked;\n\n/*!\n * This property carries extra data in the form of an NSDictionary which can be sent down via the Braze Dashboard.\n * You may want to design and implement a custom handler to access this data depending on your use case.\n */\n@property (strong, nullable) NSDictionary *extras;\n\n/*!\n * This property is set to YES if the instance represents a test content card \n */\n@property (nonatomic, readonly) BOOL isTest;\n\n/*!\n * The URL string that will be opened after the card is clicked on.\n */\n@property (copy, nullable) NSString *urlString;\n\n/*!\n * When the card's urlString is not nil, if the property is set to YES, the URL will be opened in a modal WKWebView\n * inside the app. If this property is set to NO, the URL will be opened by the OS and web URLs will be opened in\n * an external web browser app.\n *\n * This property defaults to NO.\n */\n@property BOOL openUrlInWebView;\n\n/*!\n * @param cardDictionary The dictionary for card deserialization.\n *\n * Deserializes the dictionary to a card for use by wrappers such as Braze's Unity SDK for iOS.\n * When the deserialization isn't successful, this method returns nil; otherwise, it returns the deserialized card.\n */\n+ (nullable ABKContentCard *)deserializeCardFromDictionary:(nullable NSDictionary *)cardDictionary;\n\n/*!\n * Serializes the card to binary data for use by wrappers such as Braze's Unity SDK for iOS.\n */\n- (nullable NSData *)serializeToData;\n\n/*!\n * Manually log an impression to Braze for the card.\n * This should only be used for custom content card view controllers.\n */\n- (void)logContentCardImpression;\n\n/*!\n * Manually log a click to Braze for the card.\n * This should only be used for custom contentcard view controllers.\n */\n- (void)logContentCardClicked;\n\n/*!\n * Manually dismiss a card.\n * Sets the card's `dismissed` property to YES and logs the dismissal to Braze.\n * Only has effect if the card is dismissible and if the `dismissed` property is currently set to NO.\n */\n- (void)logContentCardDismissed;\n\n- (BOOL)isControlCard;\n\n- (BOOL)hasSameId:(ABKContentCard *)card;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKFacebookUser.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKUser.h\"\n\nNS_ASSUME_NONNULL_BEGIN\nextern NSInteger const DefaultNumberOfFriends;\n\n/*\n * Braze Public API: ABKFacebookUser\n */\n@interface ABKFacebookUser : NSObject\n\n/*!\n * @param facebookUserDictionary The dictionary returned from facebook with facebook graph api endpoint \"/me\". Please\n * refer to https://developers.facebook.com/docs/graph-api/reference/v4.0/user for more information.\n * @param numberOfFriends The length of the friends array from facebook. You can get the array from the dictionary returned\n * from facebook with facebook graph api endpoint \"/me/friends\", under the key \"data\". Please refer to\n * https://developers.facebook.com/docs/graph-api/reference/v4.0/user/friends for more information.\n * @param likes The array of user's facebook likes from facebook. You can get the array from the dictionary returned\n * from facebook with facebook graph api endpoint \"/me/likes\", under the key \"data\"; Please refer to\n * https://developers.facebook.com/docs/graph-api/reference/v4.0/user/likes for more information.\n *\n * @discussion: This method is to generate a ABKFacebookUser so you can pass the user's facebook account data to Braze.\n * After a ABKFacebookUser object is generated, you can check the value of properties but you cannot change it.\n * If you want to update the user's facebook data, you need to generate a new ABKFacebookUser instance and set it as\n * [Appboy sharedInstance].user.facebookUser.\n */\n- (instancetype)initWithFacebookUserDictionary:(nullable NSDictionary *)facebookUserDictionary\n                     numberOfFriends:(NSInteger)numberOfFriends\n                               likes:(nullable NSArray *)likes;\n\n@property (readonly, nullable) NSDictionary *facebookUserDictionary;\n@property (readonly) NSInteger numberOfFriends;\n@property (readonly, nullable) NSArray *likes;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKFeedController.h",
    "content": "#import <Foundation/Foundation.h>\n\n/* ------------------------------------------------------------------------------------------------------\n * Notifications\n */\n\n/*!\n * When the news feed is updated, Braze will post a notification through the NSNotificationCenter.\n * The name of the notification is the string constant referred to by ABKFeedUpdatedNotification. The\n * userInfo dictionary associated with the notification will has one object, with key the same string\n * as ABKFeedUpdatedIsSuccessfulKey, to indicate whether the update is successful or not.\n *\n * To listen for this notification, you would register an object as an observer of the notification\n * using something like:\n *\n * <pre>\n *   [[NSNotificationCenter defaultCenter] addObserver:self\n *                                            selector:@selector(feedUpdatedNotificationReceived:)\n *                                                name:ABKFeedUpdatedNotification\n *                                              object:nil];\n * </pre>\n *\n * where \"feedUpdatedNotificationReceived:\" is your callback method for handling the notification:\n *\n * <pre>\n *   - (void)feedUpdatedNotificationReceived:(NSNotification *)notification {\n *     BOOL updateIsSuccessful = [notification.userInfo[ABKFeedUpdatedIsSuccessfulKey] boolValue];\n *     < Do something in response to the notification >\n *   }\n * </pre>\n */\nNS_ASSUME_NONNULL_BEGIN\nextern NSString *const ABKFeedUpdatedNotification;\nextern NSString *const ABKFeedUpdatedIsSuccessfulKey;\n\n/* ------------------------------------------------------------------------------------------------------\n * Enums\n */\n\n/*!\n* Values representing the news feed cards' categories recognized by the SDK.\n*/\ntypedef NS_OPTIONS(NSUInteger, ABKCardCategory) {\n  ABKCardCategoryNoCategory = 1 << 0,\n  ABKCardCategoryNews = 1 << 1,\n  ABKCardCategoryAdvertising = 1 << 2,\n  ABKCardCategoryAnnouncements = 1 << 3,\n  ABKCardCategorySocial = 1 << 4,\n  ABKCardCategoryAll = 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4\n};\n\n/*\n * Braze Public API: ABKFeedController\n */\n@interface ABKFeedController : NSObject\n\n/*!\n * The latest cards of the Braze News Feed saved in memory and disk. Right now the available card types are ABKBannerCard,\n * ABKCaptionedImageCard, ABKClassicCard and ABKTextAnnouncementCard. They are all subclasses\n * of ABKCard.\n */\n@property (readonly, getter=getNewsFeedCards) NSArray *newsFeedCards;\n\n/*!\n * The NSDate object that indicates the last time the newsFeedCards property was updated from the Braze server.\n */\n@property (readonly, nullable) NSDate *lastUpdate;\n\n/*!\n * This method returns the number of currently active cards which have not been viewed in the given categories.\n * A \"view\" happens when a card becomes visible in the feed view.  This differentiates\n * between cards which are off-screen in the scrolling view, and those which\n * are on-screen; when a card scrolls onto the screen, it's counted as viewed.\n *\n * Cards are counted as viewed only once -- if a card scrolls off the screen and\n * back on, it's not re-counted.\n *\n * Cards are counted only once even if they appear in multiple feed views or across multiple devices.\n */\n- (NSInteger)unreadCardCountForCategories:(ABKCardCategory)categories;\n\n/*!\n * This method returns the total number of currently active cards belongs to given categories. Cards are\n * counted only once even if they appear in multiple feed views.\n */\n- (NSInteger)cardCountForCategories:(ABKCardCategory)categories;\n\n/*!\n * @param categories An ABKCardCategory indicating the categories that you want to get. You can pass more than one category\n * at one time by using \"|\" to separate categories like: ABKCardCategoryNews | ABKCardCategoryAnnouncements | ABKCardCategorySocial\n * @return An array of cards of the given categories.\n *\n * @discussion This method will find the cards of given categories and return them.\n * When the given categories don't exist in any card, this method will return an empty array.\n */\n- (NSArray *)getCardsInCategories:(ABKCardCategory)categories;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKSdkAuthenticationDelegate.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKSdkAuthenticationError.h\"\n\n/*\n * Braze Public API: ABKSdkAuthenticationDelegate\n */\nNS_ASSUME_NONNULL_BEGIN\n\n@protocol ABKSdkAuthenticationDelegate <NSObject>\n\n/*!\n * This method is fired when an SDK Authentication error is returned by the server, for example, if\n * the signature is expired or invalid.\n *\n * You are responsible for providing the Braze SDK a valid signature when this delegate method is\n * called.\n * SDK requests will retry periodically using an exponential backoff approach. After 50 consecutive\n * failed attempts, retries will be paused until the next session start.\n *\n * @param authError The SDK Authentication error returned by the server\n */\n- (void)handleSdkAuthenticationError:(ABKSdkAuthenticationError *)authError;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKSdkAuthenticationError.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*\n * Braze Public API: ABKSdkAuthenticationError\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKSdkAuthenticationError : NSObject\n\n/*!\n * The error code for the SDK Authentication failure.\n */\n@property (readonly) NSInteger code;\n\n/*!\n * The reason for the SDK Authentication failure.\n */\n@property (nullable, readonly) NSString *reason;\n\n/*!\n * The user ID associated with the request that failed due to SDK Authentication failure.\n */\n@property (nullable, readonly) NSString *userId;\n\n/*!\n * The signature that was sent with the request that failed due to SDK Authentication failure.\n */\n@property (readonly) NSString *signature;\n\n- (instancetype)initWithCode:(NSInteger)code\n                      reason:(NSString *)reason\n                      userId:(NSString *)userId\n                   signature:(NSString *)signature;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKSdkMetadata.h",
    "content": "/*!\n * Enum representing the accepted SDK Metatadata.\n * See addSdkMetadata for more details.\n */\ntypedef NSString *ABKSdkMetadata NS_TYPED_EXTENSIBLE_ENUM;\nextern ABKSdkMetadata const ABKSdkMetadataAdjust;\nextern ABKSdkMetadata const ABKSdkMetadataAirBridge;\nextern ABKSdkMetadata const ABKSdkMetadataAppsFlyer;\nextern ABKSdkMetadata const ABKSdkMetadataBluedot;\nextern ABKSdkMetadata const ABKSdkMetadataBranch;\nextern ABKSdkMetadata const ABKSdkMetadataCordova;\nextern ABKSdkMetadata const ABKSdkMetadataCarthage;\nextern ABKSdkMetadata const ABKSdkMetadataCocoaPods;\nextern ABKSdkMetadata const ABKSdkMetadataCordovaPM;\nextern ABKSdkMetadata const ABKSdkMetadataExpo;\nextern ABKSdkMetadata const ABKSdkMetadataFoursquare;\nextern ABKSdkMetadata const ABKSdkMetadataFlutter;\nextern ABKSdkMetadata const ABKSdkMetadataGoogleTagManager;\nextern ABKSdkMetadata const ABKSdkMetadataGimbal;\nextern ABKSdkMetadata const ABKSdkMetadataGraddle;\nextern ABKSdkMetadata const ABKSdkMetadataIonic;\nextern ABKSdkMetadata const ABKSdkMetadataKochava;\nextern ABKSdkMetadata const ABKSdkMetadataManual;\nextern ABKSdkMetadata const ABKSdkMetadataMParticle;\nextern ABKSdkMetadata const ABKSdkMetadataNativeScript;\nextern ABKSdkMetadata const ABKSdkMetadataNPM;\nextern ABKSdkMetadata const ABKSdkMetadataNuGet;\nextern ABKSdkMetadata const ABKSdkMetadataPub;\nextern ABKSdkMetadata const ABKSdkMetadataRadar;\nextern ABKSdkMetadata const ABKSdkMetadataReactNative;\nextern ABKSdkMetadata const ABKSdkMetadataSegment;\nextern ABKSdkMetadata const ABKSdkMetadataSingular;\nextern ABKSdkMetadata const ABKSdkMetadataSwiftPM;\nextern ABKSdkMetadata const ABKSdkMetadataTealium;\nextern ABKSdkMetadata const ABKSdkMetadataUnreal;\nextern ABKSdkMetadata const ABKSdkMetadataUnityPM;\nextern ABKSdkMetadata const ABKSdkMetadataUnity;\nextern ABKSdkMetadata const ABKSdkMetadataVizbee;\nextern ABKSdkMetadata const ABKSdkMetadataXamarin;\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKTextAnnouncementCard.h",
    "content": "#import \"ABKCard.h\"\n\n/*\n * Braze Public API: ABKTextAnnouncementCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKTextAnnouncementCard : ABKCard <NSCoding>\n\n/*\n * The title text for the card.\n */\n@property (copy) NSString *title;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKTwitterUser.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*\n * Braze Public API: ABKTwitterUser\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKTwitterUser : NSObject\n\n/*!\n * The value returned from Twitter's Users API with key \"description\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property (copy, nullable) NSString* userDescription;\n\n/*!\n * The value returned from Twitter's Users API with key \"name\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property (copy, nullable) NSString* twitterName;\n\n/*!\n * The value returned from Twitter's Users API with key \"profile_image_url\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property (copy, nullable) NSString* profileImageUrl;\n\n/*!\n * The value returned from Twitter's Users API with key \"screen_name\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property (copy, nullable) NSString* screenName;\n\n/*!\n * The value returned from Twitter's Users API with key \"followers_count\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property NSInteger followersCount;\n\n/*!\n * The value returned from Twitter's Users API with key \"friends_count\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property NSInteger friendsCount;\n\n/*!\n * The value returned from Twitter's Users API with key \"statuses_count\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property NSInteger statusesCount;\n\n/*!\n * The value returned from Twitter's Users API with key \"id\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property NSInteger twitterID;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/ABKUser.h",
    "content": "//\n//  ABKUser.h\n//  AppboySDK\n\n#import <Foundation/Foundation.h>\n\n@class ABKFacebookUser;\n@class ABKTwitterUser;\n@class ABKAttributionData;\n\nNS_ASSUME_NONNULL_BEGIN\n/* ------------------------------------------------------------------------------------------------------\n * Enums\n */\n\n/*!\n * Genders recognized by the SDK.\n */\ntypedef NS_ENUM(NSInteger, ABKUserGenderType) {\n  ABKUserGenderMale,\n  ABKUserGenderFemale,\n  ABKUserGenderOther,\n  ABKUserGenderUnknown,\n  ABKUserGenderNotApplicable,\n  ABKUserGenderPreferNotToSay\n};\n\n/*!\n * Convenience enum to represent notification status, for email and push notifications.\n *\n * OPTED_IN: subscribed, and explicitly opted in.\n * SUBSCRIBED: subscribed, but not explicitly opted in.\n * UNSUBSCRIBED: unsubscribed and/or explicitly opted out.\n */\ntypedef NS_ENUM(NSInteger, ABKNotificationSubscriptionType) {\n  ABKOptedIn,\n  ABKSubscribed,\n  ABKUnsubscribed\n};\n\n/*!\n * When setting the custom attributes with custom keys:\n * 1. The maximum key length is 255 characters; longer keys are truncated.\n * 2. The maximum length for a string value in a custom attribute is 255 characters; longer values are truncated.\n */\n\n/*\n * Braze Public API: ABKUser\n */\n@interface ABKUser : NSObject\n\n/*!\n * The User's first name (String)\n */\n@property (nonatomic, copy, nullable) NSString *firstName;\n\n/*!\n * The User's last name (String)\n */\n@property (nonatomic, copy, nullable) NSString *lastName;\n\n/*!\n * The User's email (String)\n */\n@property (nonatomic, copy, nullable) NSString *email;\n\n/*!\n * The User's date of birth (NSDate)\n */\n@property (nonatomic, copy, nullable) NSDate *dateOfBirth;\n\n/*!\n * The User's country (String)\n */\n@property (nonatomic, copy, nullable) NSString *country;\n\n/*!\n * The User's home city (String)\n */\n@property (nonatomic, copy, nullable) NSString *homeCity;\n\n/*!\n * The User's language (String)\n *\n * Language Strings should be valid ISO 639-1 language codes.\n * See https://www.loc.gov/standards/iso639-2/php/code_list.php.\n *\n * If not set here, user language will be inferred from the device language.\n */\n@property (nonatomic, copy, nullable) NSString *language;\n\n/*!\n * The User's phone number (String)\n */\n@property (nonatomic, copy, nullable) NSString *phone;\n\n@property (nonatomic, copy, nullable, readonly) NSString *userID;\n\n/*!\n * The User's avatar image URL. This URL will be processed by the server and used in their user profile on the\n * dashboard. (String)\n */\n@property (nonatomic, copy, nullable) NSString *avatarImageURL;\n\n/*!\n * The User's Facebook account information. For more detail, please refer to ABKFacebookUser.h.\n */\n@property (strong, nullable) ABKFacebookUser *facebookUser;\n\n/*!\n * The User's Twitter account information. For more detail, please refer to ABKTwitterUser.h.\n */\n@property (strong, nullable) ABKTwitterUser *twitterUser;\n\n/*!\n * Sets the attribution information for the user. For in apps that have an install tracking integration.\n * For more information, please refer to ABKAttributionData.h.\n */\n@property (strong, nullable) ABKAttributionData *attributionData;\n\n/*!\n * Adds an an alias for the current user.  Individual (alias, label) pairs can exist on one and only one user.\n * If a different user already has this alias or external user id, the alias attempt will be rejected\n * on the server.\n *\n * @param alias The alias of the current user.\n * @param label The label of the alias; used to differentiate it from other aliases for the user.\n * @return Whether or not the alias and label are valid. Does not guarantee they won't collide with\n *         an existing pair.\n */\n- (BOOL)addAlias:(NSString *)alias withLabel:(NSString *)label;\n\n/*!\n * @param gender ABKUserGender enum representing the user's gender.\n * @return YES if the user gender is set properly\n */\n- (BOOL)setGender:(ABKUserGenderType)gender;\n\n/*!\n * Sets whether or not the user should be sent email campaigns. Setting it to unsubscribed opts the user out of\n * an email campaign that you create through the Braze dashboard.\n *\n * @param emailNotificationSubscriptionType enum representing the user's email notifications subscription type.\n * @return YES if the field is set successfully, else NO.\n */\n- (BOOL)setEmailNotificationSubscriptionType:(ABKNotificationSubscriptionType)emailNotificationSubscriptionType;\n\n/*!\n * Sets the push notification subscription status of the user. Used to collect information about the user.\n *\n * @param pushNotificationSubscriptionType enum representing the user's push notifications subscription type.\n * @return YES if the field is set successfully, else NO.\n */\n- (BOOL)setPushNotificationSubscriptionType:(ABKNotificationSubscriptionType)pushNotificationSubscriptionType;\n\n/*!\n * Adds the user to a Subscription Group.\n *\n * @param groupId The string UUID corresponding to the subscription group, provided by the Braze dashboard.\n * @return YES if the user was successfully added, else NO. If not, the groupId might have been nil or invalid.\n */\n- (BOOL)addToSubscriptionGroupWithGroupId:(NSString *)groupId;\n\n/*!\n * Removes the user from a Subscription Group.\n *\n * @param groupId The string UUID corresponding to the subscription group, provided by the Braze dashboard.\n * @return YES if the user was successfully removed, else NO. If not, the groupId might have been nil or invalid.\n */\n- (BOOL)removeFromSubscriptionGroupWithGroupId:(NSString *)groupId;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value A boolean value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andBOOLValue:(BOOL)value;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value An integer value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andIntegerValue:(NSInteger)value;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value A double value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andDoubleValue:(double)value;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value An NSString value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andStringValue:(NSString *)value;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value An NSDate value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andDateValue:(NSDate *)value;\n\n/*!\n * @param key The String name of the custom user attribute to unset\n * @return whether or not the custom user attribute was unset successfully\n */\n- (BOOL)unsetCustomAttributeWithKey:(NSString *)key;\n\n/**\n   * Increments the value of an custom attribute by one. Only integer and long custom attributes can be incremented.\n   * Attempting to increment a custom attribute that is not an integer or a long will be ignored. If you increment a\n   * custom attribute that has not previously been set, a custom attribute will be created and assigned a value of one.\n   *\n   * @param key The identifier of the custom attribute\n   * @return YES if the increment for the custom attribute of given key is saved\n   */\n- (BOOL)incrementCustomUserAttribute:(NSString *)key;\n\n/**\n * Increments the value of an custom attribute by a given amount. Only integer and long custom attributes can be\n * incremented. Attempting to increment a custom attribute that is not an integer or a long will be ignored. If\n * you increment a custom attribute that has not previously been set, a custom attribute will be created and assigned\n * the value of incrementValue. To decrement the value of a custom attribute, use a negative incrementValue.\n *\n * @param key The identifier of the custom attribute\n * @param incrementValue The amount by which to increment the custom attribute\n * @return YES if the increment for the custom attribute of given key is saved\n */\n- (BOOL)incrementCustomUserAttribute:(NSString *)key by:(NSInteger)incrementValue;\n\n/**\n * Adds the string value to a custom attribute string array specified by the key. If you add a key that has not\n * previously been set, a custom attribute string array will be created containing the value.\n *\n * @param key The custom attribute key\n * @param value A string to be added to the custom attribute string array\n * @return YES if the operation was successful\n */\n- (BOOL)addToCustomAttributeArrayWithKey:(NSString *)key value:(NSString *)value;\n\n/**\n * Removes the string value from a custom attribute string array specified by the key. If you remove a key that has not\n * previously been set, nothing will be changed.\n *\n * @param key The custom attribute key\n * @param value A string to be removed from the custom attribute string array\n * @return YES if the operation was successful\n */\n- (BOOL)removeFromCustomAttributeArrayWithKey:(NSString *)key value:(NSString *)value;\n\n/**\n * Sets a string array from a custom attribute specified by the key.\n *\n * @param key The custom attribute key\n * @param valueArray A string array to set as a custom attribute. If this value is nil, then Braze will unset the custom\n *        attribute and remove the corresponding array if there is one.\n * @return YES if the operation was successful\n */\n- (BOOL)setCustomAttributeArrayWithKey:(NSString *)key array:(nullable NSArray *)valueArray;\n\n/*!\n* Sets the last known location for the user. Intended for use with ABKDisableLocationAutomaticTrackingOptionKey set to YES\n* when starting Braze, so that the only locations being set are by the integrating app.  Otherwise, calls to this\n* method will be contending with automatic location update events.\n*\n* @param latitude The latitude of the User's location in degrees, the number should be in the range of [-90, 90]\n* @param longitude The longitude of the User's location in degrees, the number should be in the range of [-180, 180]\n* @param horizontalAccuracy The accuracy of the User's horizontal location in meters, the number should not be negative\n*/\n- (BOOL)setLastKnownLocationWithLatitude:(double)latitude longitude:(double)longitude horizontalAccuracy:(double)horizontalAccuracy;\n\n/*!\n* Sets the last known location for the user. Intended for use with ABKDisableLocationAutomaticTrackingOptionKey set to YES\n* when starting Braze, so that the only locations being set are by the integrating app.  Otherwise, calls to this\n* method will be contending with automatic location update events.\n*\n* @param latitude The latitude of the User's location in degrees, the number should be in the range of [-90, 90]\n* @param longitude The longitude of the User's location in degrees, the number should be in the range of [-180, 180]\n* @param horizontalAccuracy The accuracy of the User's horizontal location in meters, the number should not be negative\n* @param altitude The altitude of the User's location in meters\n* @param verticalAccuracy The accuracy of the User's vertical location in meters, the number should not be negative\n*/\n- (BOOL)setLastKnownLocationWithLatitude:(double)latitude\n                               longitude:(double)longitude\n                      horizontalAccuracy:(double)horizontalAccuracy\n                                altitude:(double)altitude\n                        verticalAccuracy:(double)verticalAccuracy;\n\n/*!\n * Adds the location custom attribute for the user.\n *\n * @param key The custom attribute key\n * @param latitude The latitude of the location in degrees, the number should be in the range of [-90, 90]\n * @param longitude The longitude of the location in degrees, the number should be in the range of [-180, 180]\n */\n- (BOOL)addLocationCustomAttributeWithKey:(NSString *)key\n                                 latitude:(double)latitude\n                                longitude:(double)longitude;\n\n/*!\n * Removes the location custom attribute for the user.\n *\n * @param key The custom attribute key\n */\n- (BOOL)removeLocationCustomAttributeWithKey:(NSString *)key;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/Appboy.h",
    "content": "//\n//  Appboy.h\n//  AppboySDK\n\n/*!\n  \\mainpage\n  This site contains technical documentation for the %Braze iOS SDK. Click on the \"Classes\" link above to\n  view the %Braze public interface classes and start integrating the SDK into your app!\n*/\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import <UserNotifications/UserNotifications.h>\n\n#import \"ABKSdkMetadata.h\"\n\n#ifndef APPBOY_SDK_VERSION\n#define APPBOY_SDK_VERSION @\"4.7.0\"\n#endif\n\n#if !TARGET_OS_TV\n@class ABKInAppMessageController;\n@class ABKInAppMessage;\n@class ABKInAppMessageViewController;\n#endif\n\n@class ABKUser;\n@class ABKFeedController;\n@class ABKContentCardsController;\n@class ABKLocationManager;\n@protocol ABKInAppMessageControllerDelegate;\n@protocol ABKIDFADelegate;\n@protocol ABKURLDelegate;\n@protocol ABKImageDelegate;\n@protocol ABKSdkAuthenticationDelegate;\n\nNS_ASSUME_NONNULL_BEGIN\n/* ------------------------------------------------------------------------------------------------------\n * Keys for Braze startup options\n */\n\n/*!\n * If you want to set the request policy at app startup time (useful for avoiding any automatic data requests made by\n * Braze at startup if you're looking to have full manual control). You can include one of the\n * ABKRequestProcessingPolicy enum values as the value for the ABKRequestProcessingPolicyOptionKey in the appboyOptions\n * dictionary.\n */\nextern NSString *const ABKRequestProcessingPolicyOptionKey;\n\n/*!\n * Sets the data flush interval (in seconds). This only has an effect when the request processing mode is set to\n * ABKAutomaticRequestProcessing (which is the default). Values are converted into NSTimeIntervals and must be greater\n * than 1.0.\n */\nextern NSString *const ABKFlushIntervalOptionKey;\n\n/*!\n * This key can be set to YES or NO and will configure whether Braze will automatically collect location (if the user permits).\n * If set to YES, Braze will collect location if authorized.\n * If it is set to NO or omitted, location will not be recorded for the user unless you manually\n * call setUserLastKnownLocation on ABKUser.\n */\nextern NSString *const ABKEnableAutomaticLocationCollectionKey;\n\n/*!\n * This key can be set to YES or NO and will configure whether geofences are enabled.\n * If set to YES, geofences will be enabled.\n * If set to NO, geofences will be disabled.\n * If the field is omitted, we will use the value of ABKEnableAutomaticLocationCollectionKey.\n */\nextern NSString *const ABKEnableGeofencesKey;\n\n/*!\n * This key can be set to YES or NO and will configure whether geofence requests are made automatically.\n * If set to YES, geofence requests will not be made automatically.\n * If set to NO, geofence requests will be made automatically. This is the default value when you have geofences enabled.\n */\nextern NSString *const ABKDisableAutomaticGeofenceRequestsKey;\n\n/*!\n * This key can be set to an instance of a class that extends ABKIDFADelegate, which can be used to pass advertiser tracking information to to Braze.\n */\nextern NSString *const ABKIDFADelegateKey;\n\n/*!\n * This key can be set to a custom API endpoint. This gets sent in the format sdk.api.braze.eu.\n */\nextern NSString *const ABKEndpointKey;\n\n/*!\n * This key can be set to an instance of a class that conforms to the ABKURLDelegate protocol, allowing it to handle URLs in a custom way.\n */\nextern NSString *const ABKURLDelegateKey;\n\n/*!\n * This can can be set to an instance of a class that conforms to the ABKImageDelegate protocol, allowing flexibility for using custom image libraries.\n */\nextern NSString *const ABKImageDelegateKey;\n\n/*!\n * This key can be set to an instance of a class that conforms to the ABKInAppMessageControllerDelegate protocol, allowing it to handle in-app messages in a custom way.\n */\nextern NSString *const ABKInAppMessageControllerDelegateKey;\n\n/*!\n * This key can be set YES or NO and will configure whether a modal in-app message will be dismissed when the user clicks\n * outside of the in-app message.\n * If set to YES, the in-app message will be dismissed.\n * If set to NO, the in-app message will not be dismissed. This is the default value.\n */\nextern NSString *const ABKEnableDismissModalOnOutsideTapKey;\n\n/*!\n * This key can be set YES or NO and will configure whether the SDK Authentication feature is enabled.\n */\nextern NSString *const ABKEnableSDKAuthenticationKey;\n\n/*!\n * This key can can be set to an instance of a class that conforms to the ABKSdkAuthenticationDelegate protocol, allowing it to handle\n * SDK Authentication errors. Setting this delegate will cause the delegate method `handleSdkAuthenticationError:` to get called in\n * the event of an SDK Authentication error.\n */\nextern NSString *const ABKSdkAuthenticationDelegateKey;\n\n/*!\n * Set the time interval for session time out (in seconds). This will affect the case when user has a session shorter than\n * the set time interval. In that case, the session won't be close even though the user closed the app, but will continue until\n * it times out. The value should be an integer bigger than 0.\n */\nextern NSString *const ABKSessionTimeoutKey;\n\n/*!\n * Set the minimum time interval in seconds between triggers. After a trigger happens, we will ignore any triggers until\n * the minimum time interval elapses. The default value is 30s. The minimum valid value is 0s.\n */\nextern NSString *const ABKMinimumTriggerTimeIntervalKey;\n\n/*!\n * Key to report the SDK flavor currently being used.  For internal use only.\n */\nextern NSString *const ABKSDKFlavorKey;\n\n/*!\n * Key to specify an allowlist for device fields that are collected by the Braze SDK.\n *\n * To specify allowlisted device fields, assign the bitwise `OR` of desired fields to this key. Fields are defined\n * in `ABKDeviceOptions`. To turn off all fields, set the value of this key to `ABKDeviceOptionNone`. By default,\n * all fields are collected.\n */\nextern NSString *const ABKDeviceAllowlistKey;\n\n/*!\n * This key is deprecated in favor of ABKDeviceAllowlistKey. See ABKDeviceAllowlistKey for more details.\n */\nextern NSString *const ABKDeviceWhitelistKey __deprecated_msg(\"ABKDeviceWhitelistKey is deprecated. Please use ABKDeviceAllowlistKey instead.\");\n\nextern NSString *const ABKEphemeralEventsKey;\n\n/*!\n * This key can be set to a string value representing the app group name for the Push Story Notification\n * Content extension. This is required for the SDK to fetch data from and handle user interactions\n * with the Push Story app extension.\n */\nextern NSString *const ABKPushStoryAppGroupKey;\n\n/*!\n * This key can be set to an integer value to specify the level of the log statements output by the Braze SDK.\n *\n * The default log level is 8 and will minimally log info. To enable verbose logging for debugging, use log level 0.\n *\n * This selection will override any LogLevel value set in the Info.plist.\n */\nextern NSString *const ABKLogLevelKey;\n\n/* ------------------------------------------------------------------------------------------------------\n * Enums\n */\n\n/*!\n * Possible values for the SDK's request processing policies:\n *   ABKAutomaticRequestProcessing (default) - All server communication is handled automatically. This includes flushing\n *        analytics data to the server, updating the feed, and requesting new in-app messages. Braze's\n *        communication policy is to perform immediate server requests when user facing data is required (new in-app messages,\n *        feed refreshes, etc.), and to otherwise perform periodic flushes of new analytics data every few seconds.\n *        The interval between periodic flushes can be set explicitly using the ABKFlushInterval startup option.\n *   ABKAutomaticRequestProcessingExceptForDataFlush - Deprecated. Use ABKManualRequestProcessing.\n *   ABKManualRequestProcessing - The same as ABKAutomaticRequestProcessing, except that updates to\n *        custom attributes and triggering of custom events will not automatically flush to the server. Instead, you\n *        must call requestImmediateDataFlush when you want to synchronize newly updated user data with Braze. Note that\n *        the configuration does not turn off all networking, i.e. requests important to the proper functionality of the Braze\n *        SDK will still occur.\n *\n * Regardless of policy, Braze will intelligently combine requests on the request queue to minimize the total number of\n * requests and their combined payload.\n */\ntypedef NS_ENUM(NSInteger, ABKRequestProcessingPolicy) {\n  ABKAutomaticRequestProcessing,\n  ABKManualRequestProcessing,\n  ABKAutomaticRequestProcessingExceptForDataFlush __deprecated_enum_msg(\"ABKAutomaticRequestProcessingExceptForDataFlush is deprecated. Use ManualRequestProcessing.\") = ABKManualRequestProcessing\n};\n\n/*!\n * Internal enum used to report the SDK flavor being used.\n */\ntypedef NS_ENUM(NSInteger , ABKSDKFlavor) {\n  UNITY = 1,\n  REACT,\n  CORDOVA,\n  XAMARIN,\n  FLUTTER,\n  SEGMENT,\n  MPARTICLE,\n  TEALIUM\n};\n\ntypedef NS_OPTIONS(NSUInteger, ABKDeviceOptions) {\n  ABKDeviceOptionNone = 0,\n  ABKDeviceOptionResolution = (1 << 0),\n  ABKDeviceOptionCarrier = (1 << 1),\n  ABKDeviceOptionLocale = (1 << 2),\n  ABKDeviceOptionModel = (1 << 3),\n  ABKDeviceOptionOSVersion = (1 << 4),\n  // Note: The ABKDeviceOptionIDFV allowlist key currently has no effect.\n  // IDFV is read regardless of allowlist settings due to its\n  // role as the primary device identifier within the Braze system.\n  ABKDeviceOptionIDFV = (1 << 5),\n  ABKDeviceOptionIDFA = (1 << 6),\n  ABKDeviceOptionPushEnabled = (1 << 7),\n  ABKDeviceOptionTimezone = (1 << 8),\n  ABKDeviceOptionPushAuthStatus = (1 << 9),\n  ABKDeviceOptionAdTrackingEnabled = (1 << 10),\n  ABKDeviceOptionPushDisplayOptions = (1 << 11),\n  ABKDeviceOptionAll = ~ABKDeviceOptionNone\n};\n\n/*!\n * Possible channels supported by the SDK.\n */\ntypedef NS_ENUM(NSInteger, ABKChannel) {\n  ABKPushNotificationChannel,\n  ABKInAppMessageChannel,\n  ABKNewsFeedChannel,\n  ABKContentCardChannel,\n  ABKUnknownChannel __deprecated_enum_msg(\"ABKUnknownChannel will be removed in a future update.\")\n};\n\n/*\n * Braze Public API: Appboy\n */\n@interface Appboy : NSObject\n\n/* ------------------------------------------------------------------------------------------------------\n * Initialization\n */\n\n/*!\n * Get the Appboy singleton.  Returns nil if accessed before startWithApiKey: called.\n */\n+ (nullable Appboy *)sharedInstance;\n\n/*!\n * Get the Appboy singleton.  Throws an exception if accessed before startWithApiKey: is called.\n */\n+ (nonnull Appboy *)unsafeInstance;\n\n/*!\n * @param apiKey The app's API key\n * @param application the current app\n * @param launchOptions The options NSDictionary that you get from application:didFinishLaunchingWithOptions\n *\n * @discussion Starts up Braze and tells it that your app is done launching. You should call this\n * method in your App Delegate application:didFinishLaunchingWithOptions method before calling makeKeyAndVisible,\n * accessing [Appboy sharedInstance] or otherwise rendering Braze view controllers. Your apiKey comes from\n * the Braze dashboard where you registered your app.\n */\n+ (void)startWithApiKey:(NSString *)apiKey\n          inApplication:(UIApplication *)application\n      withLaunchOptions:(nullable NSDictionary *)launchOptions;\n\n/*!\n * @param apiKey The app's API key\n * @param application The current app\n * @param launchOptions The options NSDictionary that you get from application:didFinishLaunchingWithOptions\n * @param appboyOptions An optional NSDictionary with startup configuration values for Braze. See below\n * for more information.\n *\n * @discussion Starts up Braze and tells it that your app is done launching. You should call this\n * method in your App Delegate application:didFinishLaunchingWithOptions method before calling makeKeyAndVisible,\n * accessing [Appboy sharedInstance] or otherwise rendering Braze view controllers. Your apiKey comes from\n * the Braze dashboard where you registered your app.\n */\n+ (void)startWithApiKey:(NSString *)apiKey\n          inApplication:(UIApplication *)application\n      withLaunchOptions:(nullable NSDictionary *)launchOptions\n      withAppboyOptions:(nullable NSDictionary *)appboyOptions;\n\n/* ------------------------------------------------------------------------------------------------------\n * Properties\n */\n\n/*!\n * The current app user.\n * See ABKUser.h and changeUser:userId below.\n */\n@property (readonly) ABKUser *user;\n\n@property (readonly) ABKFeedController *feedController;\n\n@property (readonly) ABKContentCardsController *contentCardsController;\n\n/*!\n* The policy regarding processing of network requests by the SDK. See the enumeration values for more information on\n* possible options. This value can be set at runtime, or can be injected in at startup via the appboyOptions dictionary.\n*\n* Any time the request processing policy is set to manual, any scheduled flush of the queue is canceled, but if the\n* request queue was already processing, the current queue will finish processing. If you need to cancel in flight\n* requests, you need to call <pre>[[Appboy sharedInstance] shutdownServerCommunication]</pre>.\n*\n* Setting the request policy does not automatically cause a flush to occur, it just allows for a flush to be scheduled\n* the next time an eligible request is enqueued. To force an immediate flush after changing the request processing\n* policy, invoke <pre>[[Appboy sharedInstance] requestImmediateDataFlush]</pre>.\n*/\n@property ABKRequestProcessingPolicy requestProcessingPolicy;\n\n/*!\n * A class extending ABKIDFADelegate can be set to provide the IDFA to Braze.\n */\n@property (nonatomic, strong, nullable) id<ABKIDFADelegate> idfaDelegate;\n\n/*!\n * A class conforming to ABKSdkAuthenticationDelegate can be set to handle SDK Authentication errors.\n */\n@property (nonatomic, strong, nullable) id<ABKSdkAuthenticationDelegate> sdkAuthenticationDelegate;\n\n/*!\n * A custom `NSURLSessionConfiguration` for configuring network session parameters.\n */\n@property (nonatomic, readonly) NSURLSessionConfiguration *urlSessionConfiguration;\n\n#if !TARGET_OS_TV\n/*!\n * The current in-app message manager.\n * See ABKInAppMessageController.h.\n */\n@property (readonly) ABKInAppMessageController *inAppMessageController;\n\n/*!\n * The Braze location manager provides access to location related functionality in the Braze SDK.\n * See ABKLocationManager.h.\n */\n@property (nonatomic, readonly) ABKLocationManager *locationManager;\n\n/*!\n * A class conforming to the ABKURLDelegate protocol can be set to handle URLs in a custom way.\n */\n@property (nonatomic, weak, nullable) id<ABKURLDelegate> appboyUrlDelegate;\n\n/*!\n * A class conforming to ABKImageDelegate can be set to use a custom image library.\n */\n@property (nonatomic, strong, nullable) id<ABKImageDelegate> imageDelegate;\n\n/*!\n * Property for internal reporting of SDK flavor.\n */\n@property (nonatomic) ABKSDKFlavor sdkFlavor;\n\n#endif\n\n/* ------------------------------------------------------------------------------------------------------\n * Methods\n */\n\n/*!\n * Enqueues a data flush request for the current user and immediately starts processing the network queue. Note that if\n * the queue already contains another request for the current user, that the new data flush request\n * will be merged into the already existing request and only one will execute for that user.\n *\n * If you're using ABKManualRequestProcessing, you only need to call this when you want to force\n * an immediate flush of updated user data.\n */\n- (void)requestImmediateDataFlush;\n\n- (void)flushDataAndProcessRequestQueue __deprecated_msg(\"Please use `requestImmediateDataFlush` instead.\");\n\n/*!\n * Stops all in flight server communication and enables manual request processing control to ensure that no automatic\n * network activity occurs. You should usually only call shutdownServerCommunication if the OS is forcing you to stop\n * background tasks upon exit of your application. To continue normal operation after calling this, you will need to\n * explicitly set the request processing mode back to your desired state.\n */\n- (void)shutdownServerCommunication;\n\n/*!\n* @param userId The new user's ID (from the host application).\n*\n* @discussion\n* This method changes the user's ID. These user IDs should be private and not easily obtained (e.g. not a plain\n* email address or username).\n*\n* When you first start using Braze on a device, the user is considered \"anonymous\". You can use this method to\n* optionally identify a user with a unique ID, which enables the following:\n*\n*   - If the same user is identified on another device, their user profile, usage history and event history will\n*     be shared across devices.\n*\n*   - If your app is used by multiple people, you can assign each of them a unique identifier to track them\n*     separately. Only the most recent user on a particular device will receive push notifications and in-app\n*     messages.\n*\n*   - If you identify a user which has never been identified on another device, the entire history of that user as\n*     an \"anonymous\" user on this device will be preserved and associated with the newly identified user.\n*\n*   - However, if you identify a user which *has* been identified on another device, the previous anonymous\n*     history of the user on this device will not be added to the already existing profile for that user.\n*\n*   - Note that switching from one an anonymous user to an identified user or from one identified user to another is\n*     a relatively costly operation. When you request the\n*     user switch, the current session for the previous user is automatically closed and a new session is started.\n*     Braze will also automatically make a data refresh request to get the news feed, in-app message and other information\n*     for the new user.\n*\n*  Note: Once you identify a user, you cannot go back to the \"anonymous\" profile. The transition from anonymous\n*  to identified tracking only happens once because the initial anonymous user receives special treatment\n*  to allow for preservation of their history. We recommend against changing the user id just because your app\n*  has entered a \"logged out\" state because it separates this device from the user profile and thus you will be\n*  unable to target the previously logged out user with re-engagement campaigns. If you anticipate multiple\n*  users on the same device, but only want to target one of them when your app is in a logged out state, we recommend\n*  separately keeping track of the user ID you want to target while logged out and switching back to\n*  that user ID as part of your app's logout process.\n*/\n- (void)changeUser:(NSString *)userId;\n\n/*!\n * @param userId The new user's ID (from the host application)\n * @param signature The SDK Authentication signature for the user being identified.\n *\n * @discussion See documantation for `changeUser:` above\n */\n- (void)changeUser:(NSString *)userId sdkAuthSignature:(nullable NSString *)signature;\n\n/*!\n * @param signature The SDK Authentication signature for the current user\n *\n * @discussion Sets the signature used for SDK authentication for the current user.\n */\n- (void)setSdkAuthenticationSignature:(NSString *)signature;\n\n/*!\n * @discussion Unsubscribe from SDK Authentication errors. After this method is called,\n * the ABKSdkAuthenticationDelegate method `handleSdkAuthenticationError:` will not be called in the event of\n * an SDK Authentication error.\n */\n- (void)unsubscribeFromSdkAuthenticationErrors;\n\n/*!\n * @param eventName The name of the event to log.\n *\n * @discussion Adds an app specific event to event tracking log that's lazily pushed up to the server. Think of\n *   events like counters. That is, each time you log an event, we'll update a counter for that user. Events should be\n *   fairly broad like \"beat level 1\" or \"watched video\" instead of something more specific like \"watched Katy\n *   Perry's Last Friday Night\" so you can create more broad user segments for targeting.\n *\n * <pre>\n * [[Appboy sharedInstance] logCustomEvent:@\"clicked_button\"];\n * </pre>\n */\n- (void)logCustomEvent:(NSString *)eventName;\n\n/*!\n * @param eventName The name of the event to log.\n * @param properties An <code>NSDictionary</code> of properties to associate with this purchase. Property keys are non-empty <code>NSString</code> objects with\n * <= 255 characters and no leading dollar signs.  Property values can be <code>NSNumber</code> booleans, integers, floats < 62 bits, <code>NSDate</code> objects,\n * <code>NSString</code> objects with <= 255 characters, or any JSON Encodable object including NSArray and NSDictionary of the previous data types (nested properties). Total length of encoded properties must be under 50 KB.\n *\n * @discussion Adds an app specific event to event tracking log that's lazily pushed up to the server. Think of\n *   events like counters. That is, each time you log an event, we'll update a counter for that user. Events should be\n *   fairly broad like \"beat level 1\" or \"watched video\" instead of something more specific like \"watched Katy\n *   Perry's Last Friday Night\" so you can create more broad user segments for targeting.\n *\n * <pre>\n * [[Appboy sharedInstance] logCustomEvent:@\"clicked_button\" properties:@{@\"key1\":@\"val\"}];\n * </pre>\n */\n- (void)logCustomEvent:(NSString *)eventName withProperties:(nullable NSDictionary *)properties;\n\n/*!\n * This method is equivalent to calling logPurchase:inCurrency:atPrice:withQuantity:andProperties: with a quantity of 1 and nil properties.\n * Please see logPurchase:inCurrency:atPrice:withQuantity:andProperties: for more information.\n */\n- (void)logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price;\n\n/*!\n * This method is equivalent to calling logPurchase:inCurrency:atPrice:withQuantity:andProperties with a quantity of 1.\n * Please see logPurchase:inCurrency:atPrice:withQuantity:andProperties: for more information.\n */\n- (void)logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price withProperties:(nullable NSDictionary *)properties;\n\n/*!\n * This method is equivalent to calling logPurchase:inCurrency:atPrice:withQuantity:andProperties with nil properties.\n * Please see logPurchase:inCurrency:atPrice:withQuantity:andProperties: for more information.\n */\n- (void)logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price withQuantity:(NSUInteger)quantity;\n\n/*!\n * @param productIdentifier A String indicating the product that was purchased. Usually the product identifier in the\n * iTunes store.\n * @param currencyCode Currencies should be represented as an ISO 4217 currency code. Prices should\n * be sent in decimal format, with the same base units as are provided by the SKProduct class. Callers of this method\n * who have access to the NSLocale object for the purchase in question (which can be obtained from SKProduct listings\n * provided by StoreKit) can obtain the currency code by invoking:\n * <pre>[locale objectForKey:NSLocaleCurrencyCode]</pre>\n * Supported currency symbols include: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF,\n * BMD, BND, BOB, BRL, BSD, BTC, BTN, BWP, BYR, BZD, CAD, CDF, CHF, CLF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF,\n * DKK, DOP, DZD, EEK, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF,\n * IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD,\n * LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MTL, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR,\n * NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLL, SOS, SRD,\n * STD, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VEF, VND, VUV, WST, XAF, XAG,\n * XAU, XCD, XDR, XOF, XPD, XPF, XPT, YER, ZAR, ZMK, ZMW and ZWL. Any other provided currency symbol will result in a logged\n * warning and no other action taken by the SDK.\n * @param price Prices should be reported as NSDecimalNumber objects. Base units are treated the same as with SKProduct\n * from StoreKit and depend on the currency. As an example, USD should be reported as Dollars.Cents, whereas JPY should\n * be reported as a whole number of Yen. All provided NSDecimalNumber values will have NSRoundPlain rounding applied\n * such that a maximum of two digits exist after their decimal point.\n * @param quantity An unsigned number to indicate the purchase quantity. This number must be greater than 0 but no larger than 100.\n * @param properties An <code>NSDictionary</code> of properties to associate with this purchase. Property keys are non-empty <code>NSString</code> objects with\n * <= 255 characters and no leading dollar signs.  Property values can be <code>NSNumber</code> integers, floats, booleans < 62 bits in length, <code>NSDate</code> objects or\n * <code>NSString</code> objects with <= 255 characters.\n *\n * @discussion Logs a purchase made in the application.\n *\n * Note: Braze supports purchases in multiple currencies. Purchases that you report in a currency other than USD will\n * be shown in the dashboard in USD based on the exchange rate at the date they were reported.\n */\n- (void)logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price withQuantity:(NSUInteger)quantity andProperties:(nullable NSDictionary *)properties;\n\n/*!\n * If you're displaying cards on your own instead of using ABKFeedViewController, you should still report impressions of\n * the news feed back to Braze with this method so that your campaign reporting features still work in the dashboard.\n */\n- (void)logFeedDisplayed;\n\n/*!\n * If you're displaying content cards on your own instead of using ABKContentCardsViewController, you should still report\n * impressions of the content cards back to Braze with this method so that your campaign reporting features still work\n * in the dashboard.\n */\n- (void)logContentCardsDisplayed;\n\n/*!\n * Enqueues a news feed request for the current user. Note that if the queue already contains another request for the\n * current user, that the new feed request will be merged into the already existing request and only one will execute\n * for that user.\n *\n * When the new cards for news feed return from Braze server, the SDK will post an ABKFeedUpdatedNotification with an\n * ABKFeedUpdatedIsSuccessfulKey in the notification's userInfo dictionary to indicate if the news feed request is successful\n * or not. For more detail about the ABKFeedUpdatedNotification and the ABKFeedUpdatedIsSuccessfulKey, please check ABKFeedController.\n */\n- (void)requestFeedRefresh;\n\n/*!\n * Enqueues a content cards request for the current user.\n */\n- (void)requestContentCardsRefresh;\n\n/*!\n * Manually request geofences with a specific location.\n */\n- (void)requestGeofencesWithLongitude:(double)longitude latitude:(double)latitude;\n\n/*!\n * Get the device ID - the IDFV - which will reset if all apps for a given vendor are removed from the device.\n *\n * @return The device ID.\n */\n- (NSString *)getDeviceId;\n\n\n#if !TARGET_OS_TV\n\n/*!\n * @param deviceToken The device's push token.\n *\n * @discussion This method posts a token to Braze servers to associate the token with the current device.\n */\n- (void)registerDeviceToken:(NSData *)deviceToken;\n\n/*!\n * @param application The app's UIApplication object\n * @param notification An NSDictionary passed in from the didReceiveRemoteNotification call\n *\n * @discussion This method forwards remote notifications to Braze. Call it from the application:didReceiveRemoteNotification\n * method of your App Delegate.\n */\n- (void)registerApplication:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification NS_DEPRECATED_IOS(3_0, 10_0, \"`registerApplication:didReceiveRemoteNotification:` is deprecated in iOS 10, please use `registerApplication:didReceiveRemoteNotification:fetchCompletionHandler:` instead.\");\n\n/*!\n * @param application The app's UIApplication object\n * @param notification An NSDictionary passed in from the didReceiveRemoteNotification:fetchCompletionHandler: call\n * @param completionHandler A block passed in from the didReceiveRemoteNotification:fetchCompletionHandler: call\n *\n * @discussion This method forwards remote notifications to Braze. If the completionHandler is passed in when\n * the method is called, Braze will call the completionHandler. However, if the completionHandler is not passed in,\n * it is the host app's responsibility to call the completionHandler.\n * Call it from the application:didReceiveRemoteNotification:fetchCompletionHandler: method of your App Delegate.\n */\n- (void)registerApplication:(UIApplication *)application\ndidReceiveRemoteNotification:(NSDictionary *)notification\n     fetchCompletionHandler:(nullable void (^)(UIBackgroundFetchResult))completionHandler;\n\n/*!\n * @param identifier The action identifier passed in from the handleActionWithIdentifier:forRemoteNotification:.\n * @param userInfo An NSDictionary passed in from the handleActionWithIdentifier:forRemoteNotification: call.\n * @param completionHandler A block passed in from the didReceiveRemoteNotification:fetchCompletionHandler: call\n *\n * @discussion This method forwards remote notifications and the custom action chosen by user to Braze. Call it from\n * the application:handleActionWithIdentifier:forRemoteNotification: method of your App Delegate.\n */\n- (void)getActionWithIdentifier:(NSString *)identifier\n          forRemoteNotification:(NSDictionary *)userInfo\n              completionHandler:(nullable void (^)(void))completionHandler NS_DEPRECATED_IOS(8_0, 10_0,\"`getActionWithIdentifier:forRemoteNotification:completionHandler:` is deprecated in iOS 10, please use `userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:` instead.\");\n\n/*!\n * @param center The app's current UNUserNotificationCenter object\n * @param response The UNNotificationResponse object passed in from the didReceiveNotificationResponse:withCompletionHandler: call\n * @param completionHandler A block passed in from the didReceiveNotificationResponse:withCompletionHandler: call. Braze will call\n * it at the end of the method if one is passed in. If you prefer to handle the completionHandler youself, please pass nil to Braze.\n *\n * @discussion This method forwards the response of the notification to Braze after user interacted with the notification.\n * Call it from the userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: method of your App Delegate.\n */\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center\ndidReceiveNotificationResponse:(UNNotificationResponse *)response\n         withCompletionHandler:(nullable void (^)(void))completionHandler NS_AVAILABLE_IOS(10_0);\n\n/*!\n * @param pushAuthGranted The boolean value passed in from completionHandler in UNUserNotificationCenter's\n * requestAuthorizationWithOptions:completionHandler: method, which indicates if the push authorization\n * was granted or not.\n *\n * @discussion This method forwards the push authorization result to Braze after the user interacts with\n * the notification prompt.\n * Call it from the UNUserNotificationCenter's requestAuthorizationWithOptions:completionHandler: method\n * when you prompt users to enable push.\n */\n- (void)pushAuthorizationFromUserNotificationCenter:(BOOL)pushAuthGranted;\n\n#endif\n\n/*!\n * Adds SDK Metadata values to those automatically collected by the SDK.\n *\n * Metadata tell Braze how the SDK is integrated (e.g. wrapper, package manager, etc.)\n *\n * @param metadata The metadata values reflecting the current SDK integration.\n */\n- (void)addSdkMetadata:(NSArray<ABKSdkMetadata> *)metadata;\n\n/* ------------------------------------------------------------------------------------------------------\n * Data processing configuration methods.\n */\n\n/*!\n * @discussion This method immediately wipes all data from the Braze iOS SDK. After this method is\n * called, the sharedInstance singleton will be nulled out and Braze functionality will be disabled\n * until the next call to startWithApiKey: in a subsequent app run. All references to the previous\n * singleton should be released.\n *\n * Note that the next call to startWithApiKey: must take place in a subsequent app run. Initializing the SDK\n * within the same app run after calling this method is not supported.\n *\n * The SDK will automatically re-enable itself when startWithApiKey: is called. There is\n * no need to call requestEnableSDKOnNextAppRun: to re-enable the SDK. wipeDataAndDisableForAppRun:\n * may be used at any time, including while the SDK is otherwise disabled.\n *\n * Note that if you are using unsafeInstance:, further calls to unsafeInstance: after using this\n * method will cause an uncaught exception to be thrown. We do not recommend using this method in\n * concert with unsafeInstance:.\n */\n+ (void)wipeDataAndDisableForAppRun;\n\n/*!\n * @discussion This method immediately disables the Braze iOS SDK. After this method is called, the\n * sharedInstance singleton will be nulled out and Braze functionality will be disabled until the\n * SDK is re-enabled via a call to requestEnableSDKOnNextAppRun: and re-initialized in a subsequent\n * app run via a call to startWithApiKey:. All references to the previous singleton should be released.\n *\n * Note that the next call to startWithApiKey: must take place in a subsequent app run. Initializing the SDK\n * within the same app run after calling this method is not supported.\n *\n * Unlike with wipeDataAndDisableForAppRun:, calling requestEnableSDKOnNextAppRun: is required to\n * re-enable the SDK after the method is called.\n *\n * Note that if you are using unsafeInstance:, further calls to unsafeInstance: after using this\n * method will cause an exception to be thrown. We do not recommend using this method in concert\n * with unsafeInstance:.\n */\n+ (void)disableSDK;\n\n/*!\n * @discussion This method requests the Braze iOS SDK to be re-enabled on the next app run.\n * After this method is called, the following call to startWithApiKey: will successfully\n * re-enable the SDK. Braze functionality will remain disabled until that point.\n *\n * Note that this method does not re-initialize the Appboy singleton on its own nor re-enable\n * Braze functionality immediately.\n */\n+ (void)requestEnableSDKOnNextAppRun;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Headers/AppboyKit.h",
    "content": "#import \"Appboy.h\"\n#import \"ABKUser.h\"\n#import \"ABKFacebookUser.h\"\n#import \"ABKTwitterUser.h\"\n#import \"ABKAttributionData.h\"\n\n// Cards\n#import \"ABKCard.h\"\n#import \"ABKBannerCard.h\"\n#import \"ABKCaptionedImageCard.h\"\n#import \"ABKClassicCard.h\"\n#import \"ABKTextAnnouncementCard.h\"\n\n// Content Card\n#import \"ABKContentCard.h\"\n#import \"ABKBannerContentCard.h\"\n#import \"ABKCaptionedImageContentCard.h\"\n#import \"ABKClassicContentCard.h\"\n\n// SDK Authentication\n#import \"ABKSdkAuthenticationError.h\"\n#import \"ABKSdkAuthenticationDelegate.h\"\n\n#if !TARGET_OS_TV\n// In-app Message\n#import \"ABKInAppMessage.h\"\n#import \"ABKInAppMessageSlideup.h\"\n#import \"ABKInAppMessageImmersive.h\"\n#import \"ABKInAppMessageModal.h\"\n#import \"ABKInAppMessageFull.h\"\n#import \"ABKInAppMessageHTML.h\"\n#import \"ABKInAppMessageHTMLFull.h\"\n#import \"ABKInAppMessageHTMLBase.h\"\n#import \"ABKInAppMessageControl.h\"\n#import \"ABKInAppMessageControllerDelegate.h\"\n#import \"ABKInAppMessageController.h\"\n#import \"ABKInAppMessageButton.h\"\n#import \"ABKInAppMessageWebViewBridge.h\"\n#import \"ABKInAppMessageUIControlling.h\"\n#import \"ABKInAppMessageDarkTheme.h\"\n#import \"ABKInAppMessageDarkButtonTheme.h\"\n\n// News Feed\n#import \"ABKFeedController.h\"\n\n// Content Cards Feed\n#import \"ABKContentCardsController.h\"\n\n// IDFA\n#import \"ABKIDFADelegate.h\"\n\n// SDWebImage\n#import \"ABKSDWebImageProxy.h\"\n\n// ABKImageDelegate\n#import \"ABKImageDelegate.h\"\n\n// Location\n#import \"ABKLocationManager.h\"\n#import \"ABKLocationManagerProvider.h\"\n\n#import \"ABKURLDelegate.h\"\n#import \"ABKPushUtils.h\"\n#import \"ABKModalWebViewController.h\"\n#import \"ABKNoConnectionLocalization.h\"\n\n#endif\n"
  },
  {
    "path": "Appboy-tvOS-SDK/AppboyTVOSKit.framework/Modules/module.modulemap",
    "content": "framework module AppboyTVOSKit {\n  umbrella header \"AppboyKit.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Appboy-tvOS-SDK.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"Appboy-tvOS-SDK\"\n  s.version      = \"4.7.0\"\n  s.summary      = \"This is the Braze tvOS SDK for Mobile Marketing Automation\"\n  s.homepage     = \"http://www.braze.com\"\n  s.license      = { :type => 'Commercial', :text => 'Please refer to https://github.com/Appboy/appboy-ios-sdk/blob/master/LICENSE'}\n  s.author       = { \"Appboy\" => \"http://www.braze.com\" }\n  s.source       = { :git => 'https://github.com/Appboy/appboy-ios-sdk.git', :tag => s.version.to_s}\n  s.platform = :tvos\n  s.tvos.deployment_target = 11.0\n  s.requires_arc = true\n  s.documentation_url = 'https://www.braze.com/docs'\n  s.tvos.frameworks = 'SystemConfiguration'\n  s.preserve_paths = 'Appboy-tvOS-SDK/AppboyTVOSKit.framework'\n  s.vendored_frameworks = 'Appboy-tvOS-SDK/AppboyTVOSKit.framework'\n\n  # Skip this architecture to pass Pod validation since we removed the `arm64` simulator ARCH in order to use lipo later\n  s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=appletvsimulator*]' => 'arm64' }\nend\n"
  },
  {
    "path": "AppboyKit/ABKLocationManagerProvider.m",
    "content": "#import \"ABKLocationManagerProvider.h\"\n\n#if !TARGET_OS_TV\n#import <CoreLocation/CoreLocation.h>\n#endif\n\n@implementation ABKLocationManagerProvider\n\n+ (BOOL)locationServicesEnabled {\n#if !TARGET_OS_TV\n  return YES;\n#endif\n  return NO;\n}\n\n@end\n"
  },
  {
    "path": "AppboyKit/ABKModalWebViewController.m",
    "content": "#import \"ABKModalWebViewController.h\"\n#import \"ABKNoConnectionLocalization.h\"\n\nstatic NSString *const titleKeyPath = @\"title\";\nstatic NSString *const estimatedProgressKeyPath = @\"estimatedProgress\";\nstatic NSString *const localizedNoConnectionKey = @\"Appboy.no-connection.message\";\n\n@implementation ABKModalWebViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  \n  UIViewController *webViewController = [[UIViewController alloc] init];\n  self.webView = [self getWebView];\n  webViewController.view = self.webView;\n#if !TARGET_OS_TV\n  if (@available(iOS 15.0, *)) {\n    self.view.backgroundColor = UIColor.systemGroupedBackgroundColor;\n  }\n#endif\n\n  [self setupProgressBarWithViewController:webViewController];\n  \n  UIBarButtonItem *closeBarButton = [self getDoneBarButtonItem];\n  [webViewController.navigationItem setRightBarButtonItem:closeBarButton];\n  \n  [self.webView addObserver:self forKeyPath:titleKeyPath options:NSKeyValueObservingOptionNew context:nil];\n  [self.webView addObserver:self forKeyPath:estimatedProgressKeyPath options:NSKeyValueObservingOptionNew context:nil];\n  \n  [self setViewControllers:@[webViewController]];\n  \n  [self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath\n                      ofObject:(id)object\n                        change:(NSDictionary<NSKeyValueChangeKey,id> *)change\n                       context:(void *)context {\n  if ([titleKeyPath isEqualToString:keyPath]) {\n    self.title = self.webView.title;\n  } else if ([estimatedProgressKeyPath isEqualToString:keyPath]) {\n    if (self.webView.estimatedProgress == 1.0) {\n      [UIView animateWithDuration:1 animations:^{\n        self.progressBar.alpha = 0.0;\n      }];\n    } else if (self.webView.estimatedProgress < 1.0) {\n      self.progressBar.alpha = 1.0;\n      [self.progressBar setProgress:self.webView.estimatedProgress animated:YES];\n    }\n  }\n}\n\n- (void)dealloc {\n  [self.webView removeObserver:self forKeyPath:titleKeyPath];\n  [self.webView removeObserver:self forKeyPath:estimatedProgressKeyPath];\n}\n\n#pragma mark - Customization Methods\n\n/*!\n * @discussion Returns a WKWebView object, whose navigationDelegate is this ABKModalWebViewController instance.\n *\n * If you want to do any customization to the WKWebView, please override this method in an ABKModalWebViewController\n * category and return the customized WKWebView. All instances of ABKModalWebViewController will then \n * call the category's `getWebView` implementation instead of this method.\n *\n */\n- (WKWebView *)getWebView {\n  WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];\n  webViewConfiguration.allowsInlineMediaPlayback = YES;\n  WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webViewConfiguration];\n  webView.navigationDelegate = self;\n  return webView;\n}\n\n/*!\n *\n * @param viewController The view controller to which the progress bar will be added as a subview.\n *\n * @discussion Creates a UIProgressView and puts it on top of the param viewController.\n *\n * If you want to do any customization to the progress bar, please override this method in an ABKModalWebViewController\n * category and set up the progress bar. All instances of ABKModalWebViewController will then\n * call the category's `setupProgressBarWithViewController:` implementation instead of this method.\n *\n */\n- (void)setupProgressBarWithViewController:(UIViewController *)viewController {\n  UIProgressView *progressBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];\n  progressBar.alpha = 0;\n  self.progressBar = progressBar;\n  \n  [viewController.view addSubview:self.progressBar];\n  self.progressBar.translatesAutoresizingMaskIntoConstraints = NO;\n  [viewController.view addConstraint:[NSLayoutConstraint constraintWithItem:self.progressBar\n                                                                  attribute:NSLayoutAttributeTop\n                                                                  relatedBy:NSLayoutRelationEqual\n                                                                     toItem:viewController.topLayoutGuide\n                                                                  attribute:NSLayoutAttributeBottom\n                                                                 multiplier:1.0\n                                                                   constant:0.0]];\n  [viewController.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|[progressBar]|\"\n                                                                              options:NSLayoutFormatDirectionLeadingToTrailing\n                                                                              metrics:nil\n                                                                                views:@{@\"progressBar\" : self.progressBar}]];\n}\n\n/*!\n * @discussion Returns the Done UIBarButtonItem, which allows the user to dismiss the modal web view.\n *\n * If you want to do any customization to the Done button, please override this method in an ABKModalWebViewController\n * category and return the customized UIBarButtonItem. All instances of ABKModalWebViewController will then\n * call the category's `getDoneBarButtonItem` implementation instead of this method.\n *\n */\n- (UIBarButtonItem *)getDoneBarButtonItem {\n  return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone\n                                                       target:self\n                                                       action:@selector(closeButtonPressed:)];\n}\n\n- (void)closeButtonPressed:(id)sender {\n  [self dismissViewControllerAnimated:YES completion:nil];\n}\n\n#pragma mark - WKNavigationDelegate methods\n\n- (void)webView:(WKWebView *)webView\n    decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction\n    decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {\n  NSString *urlString = [[navigationAction.request.mainDocumentURL absoluteString] lowercaseString];\n  NSArray *stringComponents = [urlString componentsSeparatedByString:@\":\"];\n  if ([stringComponents[1] hasPrefix:@\"//itunes.apple.com\"]  ||\n      (![stringComponents[0] isEqual:@\"http\"] &&\n       ![stringComponents[0] isEqual:@\"https\"])) {\n        // Dismiss the modal web view and let the system handle the deep links\n    if ([[UIApplication sharedApplication] openURL:navigationAction.request.URL]) {\n      decisionHandler(WKNavigationActionPolicyCancel);\n      [self dismissViewControllerAnimated:YES completion:nil];\n      return;\n    }\n  }\n  decisionHandler(WKNavigationActionPolicyAllow);\n}\n\n- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {\n  self.progressBar.alpha = 0.0;\n}\n\n- (void)webView:(WKWebView *)webView\n    didFailProvisionalNavigation:(WKNavigation *)navigation\n      withError:(NSError *)error {\n  self.progressBar.alpha = 0.0;\n  \n  // Display localized \"No Connection\" message\n  UILabel *label = [[UILabel alloc] init];\n  label.textAlignment = NSTextAlignmentCenter;\n  label.numberOfLines = 0;\n  NSString *localizedNoConectionMessage = NSLocalizedString(@\"Appboy.no-connection.message\", @\"No connection error message for URL loading failure\");\n  if (localizedNoConectionMessage.length == 0 || [localizedNoConnectionKey isEqualToString:localizedNoConectionMessage]) {\n    localizedNoConectionMessage = [ABKNoConnectionLocalization getNoConnectionLocalizedString];\n  }\n  label.text = localizedNoConectionMessage;\n  [self.webView addSubview:label];\n  label.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.webView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|-10-[noConnectionLabel]-10-|\"\n                                                                       options:NSLayoutFormatDirectionLeadingToTrailing\n                                                                       metrics:nil\n                                                                         views:@{@\"noConnectionLabel\" : label}]];\n  [self.webView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"V:|[noConnectionLabel]|\"\n                                                                       options:NSLayoutFormatAlignAllCenterY\n                                                                       metrics:nil\n                                                                         views:@{@\"noConnectionLabel\" : label}]];\n}\n\n@end\n"
  },
  {
    "path": "AppboyKit/ABKNoConnectionLocalization.m",
    "content": "#import \"ABKNoConnectionLocalization.h\"\n\n@implementation ABKNoConnectionLocalization\n\n+ (NSDictionary *)localizedNoConnectionStringDictionary {\n  return @{@\"ar\":@\"لا يمكن إجراء الاتصال بالشبكة. يرجى تكرار المحاولة لاحقا.\",\n           @\"da\":@\"Kan ikke etablere netværksforbindelse. Prøv venligst senere.\",\n           @\"de\":@\"Netzwerkverbindung kann nicht aufgebaut werden. Bitte später noch einmal versuchen.\",\n           @\"en\":@\"Cannot establish network connection. Please try again later.\",\n           @\"es-419\":@\"No se puede establecer conexión con la red. Por favor, vuelva a intentarlo más tarde.\",\n           @\"es-MX\":@\"No se puede establecer conexión con la red. Por favor, vuelva a intentarlo más tarde.\",\n           @\"es\":@\"No se puede establecer conexión de red. Por favor inténtelo más tarde.\",\n           @\"et\":@\"Võrguühenduse loomine ebaõnnestus. Palun proovige hiljem uuesti.\",\n           @\"fi\":@\"Verkkoyhteyttä ei voida luoda. Yritä myöhemmin uudelleen.\",\n           @\"fil\":@\"Hindi makapagtatag ng koneksyon sa network. angyaring subukan muli mamaya.\",\n           @\"fr\":@\"Impossible d'établir la connexion réseau. Veuillez réessayer ultérieurement.\",\n           @\"he\":@\".לא ניתן לקבוע חיבור רשת.בבקשה נסה שוב בקרוב\",\n           @\"hi\":@\"नेटवर्क कनेक्शन स्थापित नहीं हो रहा है।. कृपया बाद में दोबारा प्रयास करें।.\",\n           @\"id\":@\"Tidak bisa melakukan koneksi jaringan. Coba lagi nanti.\",\n           @\"it\":@\"Impossibile stabilire una connessione di rete. Riprovare più tardi.\",\n           @\"ja\":@\"ネットワークに接続できません。後でもう一度試してください。\",\n           @\"km\":@\"មិនអាចបង្កើតបណ្តាញតភ្ជាប់បានទេ. សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ.\",\n           @\"ko\":@\"네트워크 연결을 할 수 없습니다. 나중에 다시 시도해 주십시오.\",\n           @\"lo\":@\"ບໍ່​ສາ​ມາດ​ຕັ້ງ​ການ​ເຊື່ອມ​ຕໍ່​ເຄືອ​ຂ່າຍ​ໄດ້. ກະ​ລຸ​ນາ​ລອງ​ໃໝ່​ພາຍ​ຫຼັງ.\",\n           @\"ms\":@\"Tidak boleh membuat sambungan rangkaian. Sila cuba kemudian.\",\n           @\"my\":@\"ကြန္ယက္ဆက္သြယ္ျခင္း မျပဳလုပ္ႏိုင္ပါ။. ေက်းဇူးျပဳ၍ ထပ္မံၾကိဳးစားၾကည္႕ပါ။.\",\n           @\"nb\":@\"Kan ikke etablere nettverkstilkobling. Vennligst prøv igjen senere.\",\n           @\"nl\":@\"Kan geen netwerkverbinding maken. Probeer het later opnieuw.\",\n           @\"pl\":@\"Nie można ustanowić połączenia z siecią. Proszę spróbować ponownie później.\",\n           @\"pt-PT\":@\"Não é possível estabelecer a ligação à rede. Por favor, tente mais tarde.\",\n           @\"pt\":@\"Não é possível estabelecer uma conexão de rede. Tente novamente mais tarde.\",\n           @\"ru\":@\"Невозможно установить сетевое подключение. Пожалуйста, повторите попытку позже.\",\n           @\"sv\":@\"Det gick inte att skapa en nätverksanslutning. Försök igen senare.\",\n           @\"th\":@\"ไม่สามารถสร้างการเชื่อมต่อเครือข่าย. กรุณาลองใหม่ภายหลัง.\",\n           @\"vi\":@\"Không thể thiết lập kết nối mạng. Vui lòng thử lại sau.\",\n           @\"zh-Hans\":@\"无法建立网络连接。请稍候再试。\",\n           @\"zh-Hant\":@\"無法建立網路連線。請稍候再試。\",\n           @\"zh-HK\":@\"無法建立網路連線。請稍候再試。\",\n           @\"zh-TW\":@\"無法建立網路連線。請稍候再試。\",\n           @\"zh\":@\"无法建立网络连接。请稍候再试。\"};\n}\n\n+ (NSString *)getNoConnectionLocalizedString {\n  NSString *language = [[NSLocale preferredLanguages] count]? [NSLocale preferredLanguages][0]: @\"en\";\n  NSDictionary *localizedStringDict = [self localizedNoConnectionStringDictionary];\n  \n  while (localizedStringDict[language] == nil && [language rangeOfString:@\"-\"].location != NSNotFound) {\n    NSArray *languageComponent = [language componentsSeparatedByString:@\"-\"];\n    language = [[languageComponent subarrayWithRange:NSMakeRange(0, languageComponent.count - 1)] componentsJoinedByString:@\"-\"];\n  }\n  NSString *localizedString = localizedStringDict[language] ? localizedStringDict[language] : localizedStringDict[@\"en\"];\n  return localizedString;\n}\n\n@end\n"
  },
  {
    "path": "AppboyKit/ABKSDWebImageProxy.m",
    "content": "#import \"ABKSDWebImageProxy.h\"\n#import <SDWebImage/UIImageView+WebCache.h>\n#import <SDWebImage/UIView+WebCache.h>\n#import <SDWebImage/SDWebImageManager.h>\n#import <SDWebImage/SDImageCache.h>\n\n@implementation ABKSDWebImageProxy\n\n+ (void)setImageForView:(UIImageView *)imageView\n  showActivityIndicator:(BOOL)showActivityIndicator\n                withURL:(nullable NSURL *)imageURL\n       imagePlaceHolder:(nullable UIImage *)placeHolder\n              completed:(nullable void (^)(UIImage * _Nullable image, NSError * _Nullable error, NSInteger cacheType, NSURL * _Nullable imageURL))completion {\n  if (showActivityIndicator) {\n    imageView.sd_imageIndicator = SDWebImageActivityIndicator.grayIndicator;\n  }\n  [imageView sd_setImageWithURL:imageURL\n               placeholderImage:placeHolder\n                        options: (SDWebImageQueryMemoryData | SDWebImageQueryDiskDataSync)\n                      completed:completion];\n}\n\n+ (void)loadImageWithURL:(nullable NSURL *)url\n                 options:(NSInteger)options\n               completed:(nullable void (^)(UIImage *image, NSData *data, NSError *error, NSInteger cacheType, BOOL finished, NSURL *imageURL))completion {\n  [[SDWebImageManager sharedManager] loadImageWithURL:url\n                                              options:options\n                                             progress:nil\n                                            completed:completion];\n}\n\n+ (void)diskImageExistsForURL:(nullable NSURL *)url\n                    completed:(nullable void (^)(BOOL isInCache))completion{\n  if (url != nil) {\n    [[SDImageCache sharedImageCache] diskImageExistsWithKey:url.absoluteString completion:completion];\n  }\n}\n\n+ (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url {\n  return [[SDWebImageManager sharedManager] cacheKeyForURL:url];\n}\n\n+ (void)removeSDWebImageForKey:(nullable NSString *)key {\n  [[SDImageCache sharedImageCache] removeImageForKey:key withCompletion:nil];\n}\n\n+ (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key {\n  return [[SDImageCache sharedImageCache] imageFromCacheForKey:key];\n}\n\n+ (void)clearSDWebImageCache {\n  [[SDImageCache sharedImageCache] clearMemory];\n  [[SDImageCache sharedImageCache] clearDiskOnCompletion:nil];\n}\n\n+ (BOOL)isSupportedSDWebImageVersion {\n  BOOL imageViewMethodsExist = [UIImageView instancesRespondToSelector:@selector(setSd_imageIndicator:)] &&\n                               [UIImageView instancesRespondToSelector:@selector(sd_setImageWithURL:placeholderImage:completed:)];\n    \n  SDWebImageManager *imageManager = [SDWebImageManager sharedManager];\n  BOOL managerMethodsExist = [imageManager respondsToSelector:@selector(loadImageWithURL:options:progress:completed:)] &&\n                             [imageManager respondsToSelector:@selector(cacheKeyForURL:)];\n  \n  SDImageCache *imageCache = [SDImageCache sharedImageCache];\n  BOOL imageCacheMethodsExist = [imageCache respondsToSelector:@selector(removeImageForKey:withCompletion:)] &&\n                                [imageCache respondsToSelector:@selector(clearDiskOnCompletion:)] &&\n                                [imageCache respondsToSelector:@selector(diskImageExistsWithKey:completion:)] &&\n                                [imageCache respondsToSelector:@selector(clearMemory)] &&\n                                [imageCache respondsToSelector:@selector(imageFromCacheForKey:)];\n  \n  return imageViewMethodsExist && managerMethodsExist && imageCacheMethodsExist;\n}\n\n@end\n"
  },
  {
    "path": "AppboyKit/Appboy.bundle/PrivacyInfo.xcprivacy",
    "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  <key>NSPrivacyTracking</key>\n  <false/>\n  <key>NSPrivacyTrackingDomains</key>\n  <array/>\n  <key>NSPrivacyAccessedAPITypes</key>\n  <array>\n    <dict>\n      <key>NSPrivacyAccessedAPIType</key>\n      <string>NSPrivacyAccessedAPICategoryUserDefaults</string>\n      <key>NSPrivacyAccessedAPITypeReasons</key>\n      <array>\n        <string>CA92.1</string>\n      </array>\n    </dict>\n    <dict>\n      <key>NSPrivacyAccessedAPIType</key>\n      <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>\n      <key>NSPrivacyAccessedAPITypeReasons</key>\n      <array>\n        <string>C617.1</string>\n      </array>\n    </dict>\n  </array>\n  <key>NSPrivacyCollectedDataTypes</key>\n  <array>\n    <dict>\n      <key>NSPrivacyCollectedDataType</key>\n      <string>NSPrivacyCollectedDataTypeUserID</string>\n      <key>NSPrivacyCollectedDataTypeLinked</key>\n      <true/>\n      <key>NSPrivacyCollectedDataTypeTracking</key>\n      <false/>\n      <key>NSPrivacyCollectedDataTypePurposes</key>\n      <array>\n        <string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>\n        <string>NSPrivacyCollectedDataTypePurposeAnalytics</string>\n        <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>\n      </array>\n    </dict>\n    <dict>\n      <key>NSPrivacyCollectedDataType</key>\n      <string>NSPrivacyCollectedDataTypeDeviceID</string>\n      <key>NSPrivacyCollectedDataTypeLinked</key>\n      <true/>\n      <key>NSPrivacyCollectedDataTypeTracking</key>\n      <false/>\n      <key>NSPrivacyCollectedDataTypePurposes</key>\n      <array>\n        <string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>\n        <string>NSPrivacyCollectedDataTypePurposeAnalytics</string>\n        <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>\n      </array>\n    </dict>\n    <dict>\n      <key>NSPrivacyCollectedDataType</key>\n      <string>NSPrivacyCollectedDataTypeProductInteraction</string>\n      <key>NSPrivacyCollectedDataTypeLinked</key>\n      <true/>\n      <key>NSPrivacyCollectedDataTypeTracking</key>\n      <false/>\n      <key>NSPrivacyCollectedDataTypePurposes</key>\n      <array>\n        <string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>\n        <string>NSPrivacyCollectedDataTypePurposeAnalytics</string>\n        <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>\n      </array>\n    </dict>\n    <dict>\n      <key>NSPrivacyCollectedDataType</key>\n      <string>NSPrivacyCollectedDataTypePreciseLocation</string>\n      <key>NSPrivacyCollectedDataTypeLinked</key>\n      <true/>\n      <key>NSPrivacyCollectedDataTypeTracking</key>\n      <false/>\n      <key>NSPrivacyCollectedDataTypePurposes</key>\n      <array>\n        <string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>\n        <string>NSPrivacyCollectedDataTypePurposeAnalytics</string>\n      </array>\n    </dict>\n    <dict>\n      <key>NSPrivacyCollectedDataType</key>\n      <string>NSPrivacyCollectedDataTypeCoarseLocation</string>\n      <key>NSPrivacyCollectedDataTypeLinked</key>\n      <true/>\n      <key>NSPrivacyCollectedDataTypeTracking</key>\n      <false/>\n      <key>NSPrivacyCollectedDataTypePurposes</key>\n      <array>\n        <string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>\n        <string>NSPrivacyCollectedDataTypePurposeAnalytics</string>\n      </array>\n    </dict>\n  </array>\n</dict>\n</plist>\n"
  },
  {
    "path": "AppboyKit/Appboy.bundle/ZipArchive_LICENSE.txt",
    "content": "Copyright (c) 2010-2015, ZipArchive, https://github.com/ZipArchive\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "AppboyKit/Appboy.bundle/_CodeSignature/CodeResources",
    "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>files</key>\n\t<dict>\n\t\t<key>PrivacyInfo.xcprivacy</key>\n\t\t<data>\n\t\t35537WDlOfHuEOldTrUa7OmzNwQ=\n\t\t</data>\n\t\t<key>ZipArchive_LICENSE.txt</key>\n\t\t<data>\n\t\tJbmSdiuxe/Zs/esUY7pUvV4byF4=\n\t\t</data>\n\t\t<key>appboy-spm-cleanup.sh</key>\n\t\t<data>\n\t\tO3UfCL3lKKMB/+splkNXf6zYbbU=\n\t\t</data>\n\t\t<key>ar.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tikkSl37t+7dVXcdDSsplItVo5v4=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>cs.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tHpBIYzzQP2b/gz2ASERTvoi95m4=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>da.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tsg0g9Tgrlg3sJjwTl+G3PC8FAJg=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>de.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tIoqO+svUlTLorH1d321C+DaCvLU=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>en.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tCcyvcSMMNgJPpJScduQ1DvYCPqc=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>es-419.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tLmBpUiGVEU/srcwSdgMN2xHVnsc=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>es-MX.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tLmBpUiGVEU/srcwSdgMN2xHVnsc=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>es.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tiAm4QTEmMOfm3uJbSU2CjYASqg4=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>et.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tYRS0Fh60D+5z7QyzbRifH6lS5m0=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>fi.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tElciMeWd7+DdrGsUYIV1BCc9zts=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>fil.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tAwAsH+O3Oum5GBbG9U/UzAHs+Uo=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>fr.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t4MoSFYmXS1rkntVmD8Bdc7Hn5pw=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>he.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tRp7mkbk7PXmWefbaSE8FDXGXles=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>hi.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tO8MWNHc3Um4NcsIrID5Vk4dd54s=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>id.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t49qpfq7iRtfxxUbVInBDeKNjz7E=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>it.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tlaa/58WCKhmdGMlVjsTlBYUopG4=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>ja.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t3wDAz31yuk5UdZyTMdeUKUbgbeU=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>km.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tPAlPrqyz9/Dr9FoyARSmLUUSNlY=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>ko.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\titXcFANBAU96clWcX1rA7p30JnE=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>lo.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t9ummy0p0yIJpe1mMX7Xl03P0H/w=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>ms.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tGv7vjcrr6syw+oqHQ43wPMXrgNk=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>my.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t9yuPTyT4nWP0qa0okY7pGmudiV0=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>nb.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tl80bnfoSc9rlRA4bXKJ0rwRC0OM=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>nl.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t/h2VZ4vvhTv86/q3pb2e1Egu/Sw=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>pl.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tBsEGyLvt3DQkwFvz66oYe7ua/Po=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>pt-PT.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t4TjlnSbVdiRFyVbE2qBiMd+CyOQ=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>pt.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tzqP4s5SMAvHJJIetNS1R6ZE4O54=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>ru.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tSTrDNbH4mbH8IiQ0hn8Vek5WgLQ=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>sv.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tmAlAT4rTioVuM3DYq5gih2kfI9o=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>th.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tDeAcN0mnPKHFwDbYuGg+sr5xk+0=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>uk.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tTc4MJlZRNrNeCkLxxfRMq9EFW68=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>vi.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tWnpBLIVxIeYHM1hAYdI5jgR/Y3o=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh-HK.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tA4gTpmd3RAdTOb5x7jO211+TLu8=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh-Hans.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t6FRvJc2sxWJf+sECiTmCMl2VFOQ=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh-Hant.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tA4gTpmd3RAdTOb5x7jO211+TLu8=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh-TW.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tA4gTpmd3RAdTOb5x7jO211+TLu8=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t6FRvJc2sxWJf+sECiTmCMl2VFOQ=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n\t<key>files2</key>\n\t<dict>\n\t\t<key>PrivacyInfo.xcprivacy</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t35537WDlOfHuEOldTrUa7OmzNwQ=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tvz81m6KH2HKZHoLSODBrzGNp/+lfzoLblqWy7rtuvpI=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>ZipArchive_LICENSE.txt</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tJbmSdiuxe/Zs/esUY7pUvV4byF4=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tj7CoF6NtgM8sSqLkZ/syPjE4TgZL0oOqy+1tPp5ip/M=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>appboy-spm-cleanup.sh</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tO3UfCL3lKKMB/+splkNXf6zYbbU=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t/l959MIHRRf5Hali4ZYnnwYbGGrbAruO2CSKS1WrggE=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>ar.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tikkSl37t+7dVXcdDSsplItVo5v4=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tTasxj0n6Fu6eabJu/tAeixHF2EN9H9R3yEZ/dauIt7I=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>cs.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tHpBIYzzQP2b/gz2ASERTvoi95m4=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\ttnoN1JgdcOm+Gbs0kMTM0b1IS3cP+cWhB2WHpe7oOI8=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>da.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tsg0g9Tgrlg3sJjwTl+G3PC8FAJg=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\txhUG+25LUOipRTwGtAmWNwyKMtXS6fUJRBZJ4Pc2oH8=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>de.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tIoqO+svUlTLorH1d321C+DaCvLU=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t6y6k6zh0MxVioySbYA2ZWdiStPv22ikISkc9DDegkk8=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>en.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tCcyvcSMMNgJPpJScduQ1DvYCPqc=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tNN+BQMMtBdLA+Yax5OiWpOamEQo1EhH/RAcqjMe7h+s=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>es-419.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tLmBpUiGVEU/srcwSdgMN2xHVnsc=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tFvh73dDedMMiSObM13PBR9iNZmE+izl7CXQ33O8edLc=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>es-MX.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tLmBpUiGVEU/srcwSdgMN2xHVnsc=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tFvh73dDedMMiSObM13PBR9iNZmE+izl7CXQ33O8edLc=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>es.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tiAm4QTEmMOfm3uJbSU2CjYASqg4=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\toRsLMkaRaSzmu9MrHtp1Kj/fmQNsokuRc3b7gU+RIUw=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>et.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tYRS0Fh60D+5z7QyzbRifH6lS5m0=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tIFkIJG3633h4s8vuCb/cNLLBoRTLm5TMYbriDREkRCY=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>fi.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tElciMeWd7+DdrGsUYIV1BCc9zts=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tsTMTM41FNd3QOc6PRgzFqpzKdHVf0Yav+heyxVGXozM=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>fil.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tAwAsH+O3Oum5GBbG9U/UzAHs+Uo=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t4WSrZSSXSF0VkX/hZI9Jc3AeYK3oKs5m/K6mO1PyURE=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>fr.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t4MoSFYmXS1rkntVmD8Bdc7Hn5pw=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tsZwtzjFxqC4U1eGSwpPMtdSLxaT4TNCzMysev2RNW0k=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>he.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tRp7mkbk7PXmWefbaSE8FDXGXles=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tv2uh+X/qP+u6S9ZoY9ppeoXnfZmoTpBJPKSqzk7at5g=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>hi.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tO8MWNHc3Um4NcsIrID5Vk4dd54s=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tOnU/X/MkvxSlf+OGy3RDF4vcdVyTtSog2KWRtC5oPYU=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>id.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t49qpfq7iRtfxxUbVInBDeKNjz7E=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tdeYxzwkoBzdMrkWGd+f+VgSnx/s33CkitB+HZ0NZGO4=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>it.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tlaa/58WCKhmdGMlVjsTlBYUopG4=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tH69+kWo9xhAO7omzXIUzwgZh//sDyr0Gx0XXSs6FNoE=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>ja.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t3wDAz31yuk5UdZyTMdeUKUbgbeU=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tTFsM9+s7alWiWgpE6OyR2ZQteKpirSJ2ZEvwj/hnGxA=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>km.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tPAlPrqyz9/Dr9FoyARSmLUUSNlY=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tazehywKf6sG34ERf6Wh5jwCJGs3zWQc+Qb9s/ML6Wtk=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>ko.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\titXcFANBAU96clWcX1rA7p30JnE=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tWkkbb8+TIExBHBF6tuLXThb3sR4dwrC3+4YlR2q2PAg=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>lo.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t9ummy0p0yIJpe1mMX7Xl03P0H/w=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tkZi+9bet5HA/jbyjGxu64lcw8hH0ZWv55g3SuTmuB8I=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>ms.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tGv7vjcrr6syw+oqHQ43wPMXrgNk=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t5Hr2LuS7C9LAEL/5/p+YDpe6+TwEwk63WMYaHUY8OI4=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>my.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t9yuPTyT4nWP0qa0okY7pGmudiV0=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tOGLTjMs+TI9BMp02BEY7Y9L/EwjJz+4xSIGnPnJfHBI=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>nb.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tl80bnfoSc9rlRA4bXKJ0rwRC0OM=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tEeJLYfG14UVjDjg44lseegKl97KcnPX7h9SPGzeC7b0=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>nl.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t/h2VZ4vvhTv86/q3pb2e1Egu/Sw=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tIbQbBgC+JoU+yAky0EtrojOVeeoczWsKXZbbqwcAsOo=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>pl.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tBsEGyLvt3DQkwFvz66oYe7ua/Po=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t2OY0P3AYZpW/A6i3kAY3G1yJa7IV6Rt03pfWUza76Gs=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>pt-PT.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t4TjlnSbVdiRFyVbE2qBiMd+CyOQ=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tZ4Z/vNNS2oK6+pU5Fw2SlIto4qnFc4BNSysbg+4dKtg=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>pt.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tzqP4s5SMAvHJJIetNS1R6ZE4O54=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tvRJuR2MouqsYKCHj7G/CcW37NOzKw/Z3SFVG/WQEZeY=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>ru.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tSTrDNbH4mbH8IiQ0hn8Vek5WgLQ=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tgHPNWQd/dis0H7ZLB4Pv8Buf+Asa/NmYiWVTyFRAtNk=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>sv.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tmAlAT4rTioVuM3DYq5gih2kfI9o=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tlHcFD3AK/emy+aL3h6W3x8N0ToKNJroct782JbXL9UE=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>th.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tDeAcN0mnPKHFwDbYuGg+sr5xk+0=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\ti0DEOQlExvgorEkQ5lbY9KFETyTSfX0H+b05K0K0HY4=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>uk.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tTc4MJlZRNrNeCkLxxfRMq9EFW68=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tnl9a70ZKrLi8yHFhksJgNIMv8lHI/cEE09LQf9+IaAc=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>vi.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tWnpBLIVxIeYHM1hAYdI5jgR/Y3o=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tPeGoDxEZIq6z/SuI09D8igvTMnJOPTkuSwgXG4mgxxM=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh-HK.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tA4gTpmd3RAdTOb5x7jO211+TLu8=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tSFa2j6R9YoRZJ5/2EOUw3d2Xr7vh8iAHrNCjamSip3g=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh-Hans.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t6FRvJc2sxWJf+sECiTmCMl2VFOQ=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tfn83ZQteQmX1XgcF3J5cCPycXHscx1EIqBhU8RGqs5M=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh-Hant.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tA4gTpmd3RAdTOb5x7jO211+TLu8=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tSFa2j6R9YoRZJ5/2EOUw3d2Xr7vh8iAHrNCjamSip3g=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh-TW.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tA4gTpmd3RAdTOb5x7jO211+TLu8=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tSFa2j6R9YoRZJ5/2EOUw3d2Xr7vh8iAHrNCjamSip3g=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>zh.lproj/LocalizedAppboyUIString.strings</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\t6FRvJc2sxWJf+sECiTmCMl2VFOQ=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tfn83ZQteQmX1XgcF3J5cCPycXHscx1EIqBhU8RGqs5M=\n\t\t\t</data>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n\t<key>rules</key>\n\t<dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^version.plist$</key>\n\t\t<true/>\n\t</dict>\n\t<key>rules2</key>\n\t<dict>\n\t\t<key>.*\\.dSYM($|/)</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>11</real>\n\t\t</dict>\n\t\t<key>^(.*/)?\\.DS_Store$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>2000</real>\n\t\t</dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^Info\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^PkgInfo$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^embedded\\.provisionprofile$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^version\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "AppboyKit/Appboy.bundle/appboy-spm-cleanup.sh",
    "content": "#! /bin/sh\n\n# AppboyKitLibrary\nfind \"${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}\" -name libAppboyKitLibrary.a -follow -exec rm {} \\;\n\n# AppboyPushStory\nfind \"${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}\" -name \"AppboyPushStory.framework\" -follow -exec rm -r {} \\;\n\n"
  },
  {
    "path": "AppboyKit/include/ABKAttributionData.h",
    "content": "#import <Foundation/Foundation.h>\n\n\n/*\n * Braze Public API: ABKAttributionData\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKAttributionData : NSObject\n\n/*!\n * @param network The attribution network\n * @param campaign The attribution campaign\n * @param adGroup The attribution adGroup\n * @param creative The attribution creative\n *\n * @discussion: Creates an ABKAttributionData object to send to Braze servers.\n */\n- (instancetype)initWithNetwork:(nullable NSString *)network\n                       campaign:(nullable NSString *)campaign\n                        adGroup:(nullable NSString *)adGroup\n                       creative:(nullable NSString *)creative;\n\n@property (nonatomic, readonly, nullable) NSString *network;\n@property (nonatomic, readonly, nullable) NSString *campaign;\n@property (nonatomic, readonly, nullable) NSString *adGroup;\n@property (nonatomic, readonly, nullable) NSString *creative;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKBannerCard.h",
    "content": "#import \"ABKCard.h\"\n\n/*\n * Braze Public API: ABKBannerCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKBannerCard : ABKCard <NSCoding>\n\n/* \n * This property is the URL of the card's image.\n */\n@property (copy) NSString *image;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n/*\n * This property is the aspect ratio of the card's image. It is meant to serve as a hint before\n * image loading completes. Note that the property may not be supplied in certain circumstances.\n */\n@property float imageAspectRatio;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKBannerContentCard.h",
    "content": "#import \"ABKContentCard.h\"\n\n@interface ABKBannerContentCard : ABKContentCard <NSCoding>\n\n/*\n * The URL of the card's image.\n */\n@property (copy) NSString *image;\n\n/*\n * This property is the aspect ratio of the card's image. It is meant to serve as a hint before\n * image loading completes. Note that the property may not be supplied in certain circumstances.\n */\n@property float imageAspectRatio;\n\n@end\n"
  },
  {
    "path": "AppboyKit/include/ABKCaptionedImageCard.h",
    "content": "#import \"ABKCard.h\"\n\n/*\n * Braze Public API: ABKCaptionedImageCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKCaptionedImageCard : ABKCard <NSCoding>\n\n/*\n * This property is the URL of the card's image.\n */\n@property (copy) NSString *image;\n\n/*\n * This property is the aspect ratio of the card's image. It is meant to serve as a hint before\n * image loading completes. Note that the property may not be supplied in certain circumstances.\n */\n@property float imageAspectRatio;\n\n/*\n * The title text for the card.\n */\n@property (copy) NSString *title;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKCaptionedImageContentCard.h",
    "content": "#import \"ABKContentCard.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKCaptionedImageContentCard : ABKContentCard <NSCoding>\n\n/*\n * The URL of the card's image.\n */\n@property (copy) NSString *image;\n\n/*\n * This property is the aspect ratio of the card's image. It is meant to serve as a hint before\n * image loading completes. Note that the property may not be supplied in certain circumstances.\n */\n@property float imageAspectRatio;\n\n/*\n * The title text for the card.\n */\n@property (copy) NSString *title;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKCard.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKFeedController.h\"\n\n/*\n * Braze Public API: ABKCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKCard : NSObject <NSCopying, NSCoding>\n\n/*\n * Card's ID.\n */\n@property (readonly) NSString *idString;\n\n/*\n * This property reflects if the card is read or unread by the user.\n */\n@property (nonatomic) BOOL viewed;\n\n/*\n * The property is the unix timestamp of the card's creation time from Braze dashboard.\n */\n@property (nonatomic, readonly) double created;\n\n/*\n * The property is the unix timestamp of the card's latest update time from Braze dashboard.\n */\n@property (nonatomic, readonly) double updated;\n\n/*\n * The categories assigned to the card.\n */\n@property ABKCardCategory categories;\n\n/*\n * The property is the unix timestamp of the card's expiration time. When the value is less than 0, it means the card\n * doesn't an expire date.\n */\n@property (readonly) double expiresAt;\n\n/*!\n * This property carries extra data in the form of an NSDictionary which can be sent down via the Braze Dashboard.\n * You may want to design and implement a custom handler to access this data depending on your use case.\n */\n@property (strong, nullable) NSDictionary *extras;\n\n//Optional:\n/*\n * The URL string that will be opened after the card is clicked on.\n */\n@property (copy, nullable) NSString *urlString;\n\n/*!\n * When the card's urlString is not nil, if the property is set to YES, the URL will be opened in a modal WKWebView\n * inside the app. If this property is set to NO, the URL will be opened by the OS and web URLs will be opened in\n * an external web browser app.\n *\n * This property defaults to NO.\n */\n@property BOOL openUrlInWebView;\n\n/*\n * @param cardDictionary The dictionary for card deserialization.\n *\n * Deserializes the dictionary to a card for use by wrappers such as Braze's Unity SDK for iOS.\n * When the deserialization isn't successful, this method returns nil; otherwise, it returns the deserialized card.\n */\n+ (nullable ABKCard *)deserializeCardFromDictionary:(nullable NSDictionary *)cardDictionary;\n\n/*\n * Serializes the card to binary data for use by wrappers such as Braze's Unity SDK for iOS.\n */\n- (nullable NSData *)serializeToData;\n\n/*\n * Manually log an impression to Braze for the card.\n * This should only be used for custom news feed view controller. ABKFeedViewController already has card impression logging.\n */\n- (void)logCardImpression;\n\n/*\n * Manually log a click to Braze for the card.\n * This should only be used for custom news feed view controller. ABKFeedViewController already has card click logging.\n * The SDK will only log a card click when the card has the url property with a valid url.\n */\n- (void)logCardClicked;\n\n- (BOOL)hasSameId:(ABKCard *)card;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKClassicCard.h",
    "content": "#import \"ABKCard.h\"\n\n/*\n * Braze Public API: ABKClassicCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKClassicCard : ABKCard <NSCoding>\n\n/*\n * This property is the URL of the card's image.\n */\n@property (copy, nullable) NSString *image;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n\n/*\n * The news title text for the card.\n */\n@property (copy, nullable) NSString *title;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKClassicContentCard.h",
    "content": "#import \"ABKContentCard.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKClassicContentCard : ABKContentCard <NSCoding>\n\n/*\n * The URL of the card's image.\n */\n@property (copy, nullable) NSString *image;\n\n/*\n * The news title text for the card.\n */\n@property (copy) NSString *title;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKContentCard.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*\n * Braze Public API: ABKContentCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKContentCard : NSObject <NSCopying, NSCoding>\n\n/*!\n * Card's ID.\n */\n@property (readonly) NSString *idString;\n\n/*!\n * This property reflects if the card is read or unread by the user.\n */\n@property (nonatomic) BOOL viewed;\n\n/*!\n * The property is the unix timestamp of the card's creation time from Braze dashboard.\n */\n@property (nonatomic, readonly) double created;\n\n/*!\n * The property is the unix timestamp of the card's expiration time. When the value is less than 0, it means the card\n * doesn't an expire date.\n */\n@property (readonly) double expiresAt;\n\n/*!\n * This property reflects if the card can be dismissed by the user.\n */\n@property (nonatomic) BOOL dismissible;\n\n/*!\n * This property reflects if the card has been pinned by the user.\n */\n@property (nonatomic) BOOL pinned;\n\n/*!\n * This property reflects if the card has been dimissed.\n */\n@property (nonatomic) BOOL dismissed;\n\n/*!\n * This property reflects if the card has been clicked.\n */\n@property (nonatomic) BOOL clicked;\n\n/*!\n * This property carries extra data in the form of an NSDictionary which can be sent down via the Braze Dashboard.\n * You may want to design and implement a custom handler to access this data depending on your use case.\n */\n@property (strong, nullable) NSDictionary *extras;\n\n/*!\n * This property is set to YES if the instance represents a test content card \n */\n@property (nonatomic, readonly) BOOL isTest;\n\n/*!\n * The URL string that will be opened after the card is clicked on.\n */\n@property (copy, nullable) NSString *urlString;\n\n/*!\n * When the card's urlString is not nil, if the property is set to YES, the URL will be opened in a modal WKWebView\n * inside the app. If this property is set to NO, the URL will be opened by the OS and web URLs will be opened in\n * an external web browser app.\n *\n * This property defaults to NO.\n */\n@property BOOL openUrlInWebView;\n\n/*!\n * @param cardDictionary The dictionary for card deserialization.\n *\n * Deserializes the dictionary to a card for use by wrappers such as Braze's Unity SDK for iOS.\n * When the deserialization isn't successful, this method returns nil; otherwise, it returns the deserialized card.\n */\n+ (nullable ABKContentCard *)deserializeCardFromDictionary:(nullable NSDictionary *)cardDictionary;\n\n/*!\n * Serializes the card to binary data for use by wrappers such as Braze's Unity SDK for iOS.\n */\n- (nullable NSData *)serializeToData;\n\n/*!\n * Manually log an impression to Braze for the card.\n * This should only be used for custom content card view controllers.\n */\n- (void)logContentCardImpression;\n\n/*!\n * Manually log a click to Braze for the card.\n * This should only be used for custom contentcard view controllers.\n */\n- (void)logContentCardClicked;\n\n/*!\n * Manually dismiss a card.\n * Sets the card's `dismissed` property to YES and logs the dismissal to Braze.\n * Only has effect if the card is dismissible and if the `dismissed` property is currently set to NO.\n */\n- (void)logContentCardDismissed;\n\n- (BOOL)isControlCard;\n\n- (BOOL)hasSameId:(ABKContentCard *)card;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKContentCardsController.h",
    "content": "#import <Foundation/Foundation.h>\n\n/* ------------------------------------------------------------------------------------------------------\n * Notifications\n */\n\n/*!\n * When Content Cards are updated, Braze will post a notification through the NSNotificationCenter.\n * The name of the notification is the string constant referred to by ABKContentCardsProcessedNotification. The\n * userInfo dictionary associated with the notification will has one object, with key the same string\n * as ABKContentCardsProcessedIsSuccessfulKey, to indicate whether the update is successful or not.\n *\n * To listen for this notification, you would register an object as an observer of the notification\n * using something like:\n *\n * <pre>\n *   [[NSNotificationCenter defaultCenter] addObserver:self\n *                                            selector:@selector(contentCardsUpdatedNotificationReceived:)\n *                                                name:ABKContentCardsProcessedNotification\n *                                              object:nil];\n * </pre>\n *\n * where \"contentCardsUpdatedNotificationReceived:\" is your callback method for handling the notification:\n *\n * <pre>\n *   - (void)contentCardsUpdatedNotificationReceived:(NSNotification *)notification {\n *     BOOL updateIsSuccessful = [notification.userInfo[ABKContentCardsProcessedIsSuccessfulKey] boolValue];\n *     < Check if update was successful and do something in response to the notification >\n *   }\n * </pre>\n */\nNS_ASSUME_NONNULL_BEGIN\n\nextern NSString *const ABKContentCardsProcessedNotification;\nextern NSString *const ABKContentCardsProcessedIsSuccessfulKey;\n\n/*\n * Braze Public API: ABKContentCardsController\n */\n@interface ABKContentCardsController : NSObject\n\n/*!\n * The latest content cards that are saved in memory and disk.\n */\n@property (readonly, getter=getContentCards) NSArray *contentCards;\n\n/*!\n * The NSDate object that indicates the last time the contentCards property was updated from Braze server.\n */\n@property (readonly, nullable) NSDate *lastUpdate;\n\n/*!\n * Returns the count of unviewed cards, excluding control cards.\n * A \"view\" happens when a card becomes visible in the Content Cards view.  This differentiates\n * between cards which are off-screen in the scrolling view, and those which\n * are on-screen; when a card scrolls onto the screen, it's counted as viewed.\n *\n * Cards are counted as viewed only once -- if a card scrolls off the screen and\n * back on, it's not re-counted.\n *\n * Cards are counted only once even if they appear in multiple Content Cards views or across multiple devices.\n */\n- (NSInteger)unviewedContentCardCount;\n\n/*!\n * Returns the count of available cards, including control cards.\n * Cards are counted only once even if they appear in multiple Content Cards views.\n */\n- (NSInteger)contentCardCount;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKFacebookUser.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKUser.h\"\n\nNS_ASSUME_NONNULL_BEGIN\nextern NSInteger const DefaultNumberOfFriends;\n\n/*\n * Braze Public API: ABKFacebookUser\n */\n@interface ABKFacebookUser : NSObject\n\n/*!\n * @param facebookUserDictionary The dictionary returned from facebook with facebook graph api endpoint \"/me\". Please\n * refer to https://developers.facebook.com/docs/graph-api/reference/v4.0/user for more information.\n * @param numberOfFriends The length of the friends array from facebook. You can get the array from the dictionary returned\n * from facebook with facebook graph api endpoint \"/me/friends\", under the key \"data\". Please refer to\n * https://developers.facebook.com/docs/graph-api/reference/v4.0/user/friends for more information.\n * @param likes The array of user's facebook likes from facebook. You can get the array from the dictionary returned\n * from facebook with facebook graph api endpoint \"/me/likes\", under the key \"data\"; Please refer to\n * https://developers.facebook.com/docs/graph-api/reference/v4.0/user/likes for more information.\n *\n * @discussion: This method is to generate a ABKFacebookUser so you can pass the user's facebook account data to Braze.\n * After a ABKFacebookUser object is generated, you can check the value of properties but you cannot change it.\n * If you want to update the user's facebook data, you need to generate a new ABKFacebookUser instance and set it as\n * [Appboy sharedInstance].user.facebookUser.\n */\n- (instancetype)initWithFacebookUserDictionary:(nullable NSDictionary *)facebookUserDictionary\n                     numberOfFriends:(NSInteger)numberOfFriends\n                               likes:(nullable NSArray *)likes;\n\n@property (readonly, nullable) NSDictionary *facebookUserDictionary;\n@property (readonly) NSInteger numberOfFriends;\n@property (readonly, nullable) NSArray *likes;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKFeedController.h",
    "content": "#import <Foundation/Foundation.h>\n\n/* ------------------------------------------------------------------------------------------------------\n * Notifications\n */\n\n/*!\n * When the news feed is updated, Braze will post a notification through the NSNotificationCenter.\n * The name of the notification is the string constant referred to by ABKFeedUpdatedNotification. The\n * userInfo dictionary associated with the notification will has one object, with key the same string\n * as ABKFeedUpdatedIsSuccessfulKey, to indicate whether the update is successful or not.\n *\n * To listen for this notification, you would register an object as an observer of the notification\n * using something like:\n *\n * <pre>\n *   [[NSNotificationCenter defaultCenter] addObserver:self\n *                                            selector:@selector(feedUpdatedNotificationReceived:)\n *                                                name:ABKFeedUpdatedNotification\n *                                              object:nil];\n * </pre>\n *\n * where \"feedUpdatedNotificationReceived:\" is your callback method for handling the notification:\n *\n * <pre>\n *   - (void)feedUpdatedNotificationReceived:(NSNotification *)notification {\n *     BOOL updateIsSuccessful = [notification.userInfo[ABKFeedUpdatedIsSuccessfulKey] boolValue];\n *     < Do something in response to the notification >\n *   }\n * </pre>\n */\nNS_ASSUME_NONNULL_BEGIN\nextern NSString *const ABKFeedUpdatedNotification;\nextern NSString *const ABKFeedUpdatedIsSuccessfulKey;\n\n/* ------------------------------------------------------------------------------------------------------\n * Enums\n */\n\n/*!\n* Values representing the news feed cards' categories recognized by the SDK.\n*/\ntypedef NS_OPTIONS(NSUInteger, ABKCardCategory) {\n  ABKCardCategoryNoCategory = 1 << 0,\n  ABKCardCategoryNews = 1 << 1,\n  ABKCardCategoryAdvertising = 1 << 2,\n  ABKCardCategoryAnnouncements = 1 << 3,\n  ABKCardCategorySocial = 1 << 4,\n  ABKCardCategoryAll = 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4\n};\n\n/*\n * Braze Public API: ABKFeedController\n */\n@interface ABKFeedController : NSObject\n\n/*!\n * The latest cards of the Braze News Feed saved in memory and disk. Right now the available card types are ABKBannerCard,\n * ABKCaptionedImageCard, ABKClassicCard and ABKTextAnnouncementCard. They are all subclasses\n * of ABKCard.\n */\n@property (readonly, getter=getNewsFeedCards) NSArray *newsFeedCards;\n\n/*!\n * The NSDate object that indicates the last time the newsFeedCards property was updated from the Braze server.\n */\n@property (readonly, nullable) NSDate *lastUpdate;\n\n/*!\n * This method returns the number of currently active cards which have not been viewed in the given categories.\n * A \"view\" happens when a card becomes visible in the feed view.  This differentiates\n * between cards which are off-screen in the scrolling view, and those which\n * are on-screen; when a card scrolls onto the screen, it's counted as viewed.\n *\n * Cards are counted as viewed only once -- if a card scrolls off the screen and\n * back on, it's not re-counted.\n *\n * Cards are counted only once even if they appear in multiple feed views or across multiple devices.\n */\n- (NSInteger)unreadCardCountForCategories:(ABKCardCategory)categories;\n\n/*!\n * This method returns the total number of currently active cards belongs to given categories. Cards are\n * counted only once even if they appear in multiple feed views.\n */\n- (NSInteger)cardCountForCategories:(ABKCardCategory)categories;\n\n/*!\n * @param categories An ABKCardCategory indicating the categories that you want to get. You can pass more than one category\n * at one time by using \"|\" to separate categories like: ABKCardCategoryNews | ABKCardCategoryAnnouncements | ABKCardCategorySocial\n * @return An array of cards of the given categories.\n *\n * @discussion This method will find the cards of given categories and return them.\n * When the given categories don't exist in any card, this method will return an empty array.\n */\n- (NSArray *)getCardsInCategories:(ABKCardCategory)categories;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKIDFADelegate.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*\n * Braze Public API: ABKAppboyIDFADelegate\n */\nNS_ASSUME_NONNULL_BEGIN\n@protocol ABKIDFADelegate <NSObject>\n/*!\n * Asks the delegate to return a valid IDFA for the current user.\n *\n * Use this delegate to pass the IDFA to Braze. Braze does not collect IDFA automatically.\n *\n * @return The current users's IDFA UUID.\n */\n- (NSString *)advertisingIdentifierString;\n\n/*!\n * Asks the delegate to return whether advertising tracking is enabled for the current user.\n *\n * Your delegate implementation should use ATTrackingManager on iOS 14+ and ASIdentifierManager on earlier iOS versions.\n *\n * An example implementation is available here:\n * https://github.com/Appboy/appboy-ios-sdk/blob/master/Example/Stopwatch/Sources/Utils/IDFADelegate.m\n *\n * @return YES if advertising tracking is enabled for iOS 14 and earlier or if AppTrackingTransparency (ATT) is authorized with iOS 14+, NO otherwise\n */\n- (BOOL)isAdvertisingTrackingEnabledOrATTAuthorized;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKImageDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n\nNS_ASSUME_NONNULL_BEGIN\n/*\n * This delegate protocol gives the Braze iOS SDK access to the image framework.\n */\n\ntypedef NS_OPTIONS(NSUInteger, ABKImageOptions ) {\n   ABKImageOptionsRetryFailed = 1 << 0,\n   ABKImageOptionsLowPriority = 1 << 1,\n   ABKImageOptionsCacheMemoryOnly = 1 << 2,\n   ABKImageOptionsProgressiveDownload = 1 << 3,\n   ABKImageOptionsRefreshCached = 1 << 4,\n   ABKImageOptionsContinueInBackground = 1 << 5,\n   ABKImageOptionsHandleCookies = 1 << 6,\n};\n\n@protocol ABKImageDelegate\n\n- (void)setImageForView:(UIImageView *)imageView\n  showActivityIndicator:(BOOL)showActivityIndicator\n                withURL:(nullable NSURL *)imageURL\n       imagePlaceHolder:(nullable UIImage *)placeHolder\n              completed:(nullable void (^)(UIImage * _Nullable image, NSError * _Nullable error, NSInteger cacheType, NSURL * _Nullable imageURL))completion;\n\n- (void)loadImageWithURL:(nullable NSURL *)url\n                 options:(ABKImageOptions)options\n               completed:(nullable void(^)(UIImage *image, NSData *data, NSError *error, NSInteger cacheType, BOOL finished, NSURL *imageURL))completion;\n\n- (void)diskImageExistsForURL:(nullable NSURL *)url\n                   completed:(nullable void (^)(BOOL isInCache))completion;\n\n- (nullable UIImage *)imageFromCacheForURL:(nullable NSURL *)url;\n\n/*!\n * @discussion Returns a class that is UIImageView or a subclass of UIImageView to allow the implementor to bring their own\n * implementation of animated image support.\n */\n- (Class)imageViewClass;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessage.h",
    "content": "#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\n@class ABKInAppMessageDarkTheme;\n\n/*!\n * The ABKInAppMessageClickActionType defines the action that will be performed when the in-app message is clicked.\n *\n *   ABKInAppMessageDisplayNewsFeed - This is the default behavior. It will open a modal view of Braze news feed.\n *\n *   ABKInAppMessageRedirectToURI - The in-app message will try to redirect to the uri defined by the uri property. Only when the uri\n *    is an HTTP URL, a modal web view will be displayed. If the uri is a protocol uri, the in-app message will redirect to the\n *    protocol uri.\n *\n *   ABKInAppMessageNoneClickAction - The in-app message will do nothing but dismiss itself.\n */\ntypedef NS_ENUM(NSInteger, ABKInAppMessageClickActionType) {\n  ABKInAppMessageDisplayNewsFeed,\n  ABKInAppMessageRedirectToURI,\n  ABKInAppMessageNoneClickAction\n};\n\n/*!\n * The ABKInAppMessageDismissType defines how the in-app message can be dismissed.\n *\n *   ABKInAppMessageDismissAutomatically - This is the default behavior for ABKInAppMessageSlideup.\n *     It will dismiss after the length of time defined by the duration property. \n *     ABKInAppMessageSlideup of this type can also be dismissed by swiping.\n *\n *   ABKInAppMessageDismissManually - This is the default behavior for ABKInAppMessageImmersive. The\n *     in-app message will stay on the screen indefinitely unless dismissed by swiping or a click on\n *     the close button.\n */\ntypedef NS_ENUM(NSInteger, ABKInAppMessageDismissType) {\n  ABKInAppMessageDismissAutomatically,\n  ABKInAppMessageDismissManually\n};\n\n/*!\n * The ABKInAppMessageOrientation defines preferred screen orientation for the in-app message.\n *\n *   ABKInAppMessageOrientationAny - This is the default value for an in-app message's orientation. This\n *     value allows the in-app message display in any orientation.\n *\n *   ABKInAppMessageOrientationPortrait - This value will limit the in-app message to only display in\n *     protrait and portrait upside down orientation.\n *\n *   ABKInAppMessageOrientationLandscape - This value will limit the in-app message to only display in\n *     landscape orientation, including landscape left and landscape right.\n */\ntypedef NS_ENUM(NSInteger, ABKInAppMessageOrientation) {\n  ABKInAppMessageOrientationAny,\n  ABKInAppMessageOrientationPortrait,\n  ABKInAppMessageOrientationLandscape\n};\n\n/*!\n * Default icon and in-app message button background colors.\n * These are used in the in-app message view controllers.\n */\nstatic CGFloat const RedValueOfDefaultIconColorAndButtonBgColor = (CGFloat)0.0f;\nstatic CGFloat const GreenValueOfDefaultIconColorAndButtonBgColor = (CGFloat)(115.0f / 255.0f);\nstatic CGFloat const BlueValueOfDefaultIconColorAndButtonBgColor = (CGFloat)(213.0f / 255.0f);\nstatic CGFloat const AlphaValueOfDefaultIconColorAndButtonBgColor = (CGFloat)1.0f;\n\n/*\n * Braze Public API: ABKInAppMessage\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessage : NSObject\n\n/*!\n * This property defines the message displayed within the in-app message.\n */\n@property (copy) NSString *message;\n\n/*!\n * This property carries extra data in the form of an NSDictionary which can be sent down via the Braze Dashboard.\n * You may want to design and implement a custom handler to access this data depending on your use-case.\n */\n@property (strong, nullable) NSDictionary *extras;\n\n/*!\n * This property defines the number of seconds before the in-app message is automatically dismissed.\n */\n@property (nonatomic) NSTimeInterval duration;\n\n/*!\n * This property defines the action that will be performed when the in-app message is clicked.\n * See the ABKInAppMessageClickActionType enum documentation above offers additional details.\n */\n@property (readonly) ABKInAppMessageClickActionType inAppMessageClickActionType;\n\n/*!\n * When the in-app message's inAppMessageClickActionType is ABKInAppMessageRedirectToURI, clicking on the in-app message will redirect to the uri defined\n * in this property.\n *\n * This property can be a HTTP URI or a protocol URI.\n */\n@property (readonly, copy, nullable) NSURL *uri;\n\n/*!\n * When the in-app message's inAppMessageClickActionType is ABKInAppMessageRedirectToURI, if the property is set to YES, \n * the URI will be opened in a modal WKWebView inside the app. If this property is set to NO, the URI will be opened by\n * the OS and web URIs will be opened in an external web browser app.\n *\n * This property defaults to YES on ABKInAppMessageHTML subclasses and NO on all other ABKInAppMessage subclasses.\n */\n@property BOOL openUrlInWebView;\n\n/*!\n * inAppMessageDismissType defines the dismissal behavior of the in-app message.\n * See the above documentation for ABKInAppMessageDismissType for additional details.\n */\n@property ABKInAppMessageDismissType inAppMessageDismissType;\n\n/*!\n * backgroundColor defines the background color of the in-app message. The default background color is black with 0.9 alpha for\n * ABKInAppMessageSlideup, and white with 1.0 alpha for ABKInAppMessageModal and ABKInAppMessageFull.\n */\n@property (nonatomic, strong, nullable) UIColor *backgroundColor;\n\n/*!\n * textColor defines the message text color of the in-app message. The default text color is black.\n */\n@property (nonatomic, strong, nullable) UIColor *textColor;\n\n/*!\n * icon the unicode string of the Font Awesome icon for this in-app message.\n *\n * You may add Font Awesome icons to in-app messages from the Braze dashboard.\n */\n@property (nonatomic, copy, nullable) NSString *icon;\n\n/*!\n * iconColor defines the font color of icon property.\n * The default font color is white.\n */\n@property (nonatomic, strong, nullable) UIColor *iconColor;\n\n/*!\n * iconBackgroundColor defines the background color of icon property.\n *  * The default background color's RGB values are R:0 G:115 B:213.\n */\n@property (nonatomic, strong, nullable) UIColor *iconBackgroundColor;\n\n/*!\n * This boolean determines if the in-app message will attempt to use dark theme colors, granted the device\n * is in dark mode and the fields are present in the response.\n *\n * @discussion The default of this value is YES but can be overriden in `beforeInAppMessageDisplayed:`\n *             to ensure that the dark theme is disabled for any given in-app message.\n */\n@property (nonatomic, assign) BOOL enableDarkTheme;\n\n/*!\n * Data model that contains all the dark theme color info for any visible views, including any buttons\n * that may be present.\n */\n@property (nonatomic, strong, nullable) ABKInAppMessageDarkTheme *darkTheme;\n\n/*!\n * An optional UIUserInterfaceStyle that can be used to force dark or light mode.\n *\n * @discussion The default value will not override OS settings but can\n *             be overriden in `beforeInAppMessageDisplayed:`\n *             to ensure that the dark or light theme is used for any given in-app message.\n *             This property is of type NSInteger to avoid any iOS version dependencies.\n */\n@property (nonatomic) NSInteger overrideUserInterfaceStyle;\n\n/*!\n * imageURI defines the URI of the image icon on in-app message.\n * When there is a iconImage defined, the iconImage will be used and the value of property icon will \n * be ignored.\n */\n@property (copy, nullable) NSURL *imageURI;\n\n/*!\n * imageContentMode defines the content mode of the image on in-app message.\n * For immersive in-app messages, the imageContentMode defines both the image icon and the graphic\n * image's content mode.\n *\n * The imageContentMode default values are:\n *     Slideup: UIViewContentModeScaleAspectFit\n *       Modal: UIViewContentModeScaleAspectFit\n *        Full: UIViewContentModeScaleAspectFill\n */\n@property UIViewContentMode imageContentMode;\n\n/*!\n * orientation defines the preferred screen orientation for the in-app message.\n * In-app messages will only display if the preferred orientation matches the current status bar\n * orientation. However, there is an important exception for iPads. For in-app messages that\n * have a preferred orientation and are being displayed on an iPad, the in-app message will appear\n * in the style of the preferred orientation regardless of actual screen orientation.\n */\n@property ABKInAppMessageOrientation orientation;\n\n/*!\n * messageTextAlignment defines the preferred text alignment of the message label.\n * The default values are:\n *     Slideup: NSTextAlignmentNatural\n *       Modal: NSTextAlignmentCenter\n *        Full: NSTextAlignmentCenter\n */\n@property NSTextAlignment messageTextAlignment;\n\n/*\n * animateIn/animateOut define if the in-app message should be animated in/out on the screen when\n * displaying/dismissing. The default value is YES.\n */\n@property BOOL animateIn;\n@property BOOL animateOut;\n\n/*!\n * isControl defines whether this in-app message is a control. Control in-app messages should not be displayed to users.\n */\n@property BOOL isControl;\n\n/*!\n * If you're handling in-app messages completely on your own, you should still report\n * impressions and clicks on the in-app message back to Braze with these methods so that your campaign reporting features\n * still work in the dashboard.\n *\n * Note: Each in-app message can log at most one impression and at most one click.\n */\n- (void)logInAppMessageImpression;\n- (void)logInAppMessageClicked;\n\n/*!\n * This method will set the inAppMessageClickActionType property.\n *\n * When clickActionType is ABKInAppMessageRedirectToURI, the parameter uri cannot be nil. When clickActionType is\n * ABKInAppMessageDisplayNewsFeed or ABKInAppMessageNoneClickAction, the parameter uri will be ignored, and property uri\n * will be set to nil.\n */\n- (void)setInAppMessageClickAction:(ABKInAppMessageClickActionType)clickActionType withURI:(nullable NSURL *)uri;\n\n/*!\n * Serializes the in-app message to binary data for use by wrappers such as Braze's Unity SDK for iOS.\n */\n- (nullable NSData *)serializeToData;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageButton.h",
    "content": "#import \"ABKInAppMessage.h\"\n\n/*\n * Braze Public API: ABKInAppMessageButton\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageButton : NSObject\n\n/*!\n * This property defines the button title text in UIControlStateNormal. Setting this property will also change the button\n * title text.\n */\n@property (copy, nullable) NSString *buttonText;\n\n/*!\n * This property defines the button's background color.\n */\n@property (strong, nullable) UIColor *buttonBackgroundColor;\n\n/*!\n * This property defines the button's border color.\n * If this property is not sent from the server, the background color is used.\n */\n@property (strong, nullable) UIColor *buttonBorderColor;\n\n/*!\n * This property defines the button's title color in UIControlStateNormal. Setting this property will also change the\n * button title color.\n */\n@property (strong, nullable) UIColor *buttonTextColor;\n\n/*!\n * This property defines the button title font in UIControlStateNormal. Please set this property before the in-app message\n * is displayed, or the displayed in-app message will not apply the font.\n */\n@property (copy, nullable) UIFont *buttonTextFont;\n\n/*!\n * This property defines the action that will be performed when the button is clicked.\n * See the ABKInAppMessageClickActionType enum documentation in ABKInAppMessage.h offers additional details.\n */\n@property (readonly) ABKInAppMessageClickActionType buttonClickActionType;\n\n/*!\n * When the button's buttonClickActionType is ABKInAppMessageRedirectToURI, clicking on the button will redirect to the uri\n * defined in this property.\n *\n * This property can be a HTTP URI or a protocol URI.\n */\n@property (readonly, copy, nullable) NSURL *buttonClickedURI;\n\n/*!\n * When the button's buttonClickActionType is ABKInAppMessageRedirectToURI, if the property is set to YES,\n * the URI will be opened in a modal WKWebView inside the app. If this property is set to NO, the URI will be opened by\n * the OS and web URIs will be opened in an external web browser app.\n * \n * This property defaults to NO.\n */\n@property BOOL buttonOpenUrlInWebView;\n\n/*!\n * This property defines the button's ID. Button's ID is used to track user's clicking action and used for corresponding\n * data analytics.\n */\n@property (readonly) NSInteger buttonID;\n\n/*!\n * This method will set the buttonClickActionType property.\n *\n * When clickActionType is ABKInAppMessageRedirectToURI, the parameter uri cannot be nil, and the value will be passed to\n * buttonClickedURI. When clickActionType is ABKInAppMessageDisplayNewsFeed or ABKInAppMessageNoneClickAction, the\n * parameter uri will be ignored, and property uri  will be set to nil.\n */\n- (void)setButtonClickAction:(ABKInAppMessageClickActionType)clickActionType withURI:(nullable NSURL *)uri;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageControl.h",
    "content": "#import \"ABKInAppMessage.h\"\n\n/*\n * Braze Public API: ABKInAppMessageControl\n */\n@interface ABKInAppMessageControl : ABKInAppMessage\n\n@end\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageController.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKInAppMessage.h\"\n#import \"ABKInAppMessageControllerDelegate.h\"\n#import \"ABKInAppMessageUIControlling.h\"\n\n/*! Note: This class is not thread safe and all class methods should be called from the main thread.*/\n\n/*\n * Braze Public API: ABKInAppMessageController\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageController : NSObject\n\n/*!\n * Setting the delegate allows your app to control how, when, and if in-app messages are displayed.\n * Your app can set the delegate to override the default behavior of the ABKInAppMessageController. See\n * ABKInAppMessageControllerDelegate.h for more information.\n */\n@property (weak, nonatomic, nullable) id <ABKInAppMessageControllerDelegate> delegate;\n\n/*!\n * If you have implemented the In-App Message subspec, you can use the ABKInAppMessageUIController to control\n * in-app message behavior. See ABKInAppMessageUIController for more information.\n */\n@property (strong, nonatomic, nullable) id<ABKInAppMessageUIControlling> inAppMessageUIController;\n\n/*!\n * This boolean determines if modal in-app messages will be dismissed when the user taps outside of the\n * in-app message.\n *\n * @discussion The default of this value is NO but can be overriden by setting the value of ABKEnableDismissModalOnOutsideTapKey in\n *             appboyOptions or in the Braze dictionary in your Info.plist file.\n */\n@property BOOL enableDismissModalOnOutsideTap;\n\n/*!\n * @param delegate The in-app message delegate that implements the ABKInAppMessageControllerDelegate methods. If the delegate is\n * nil, it acts as one which always returns ABKDisplayInAppMessageNow and doesn't implement all other delegate methods.\n *\n * @discussion This method grabs the next in-app message from the in-app message stack, if there is one, and displays it with\n * the provided delegate. The delegate must return a ABKInAppMessageDisplayChoice that defines how the in-app message will be\n * handled. Please refer to the ABKInAppMessageDisplayChoice enum documentation for more detailed information.\n *\n * If there are no in-app messages available this returns immediately having taken no action.\n */\n- (void)displayNextInAppMessageWithDelegate:(nullable id<ABKInAppMessageControllerDelegate>)delegate __deprecated_msg(\"Please use 'displayNextInAppMessage' instead.\");\n\n/*!\n * Displays the next in-app message from the in-app message stack.\n *\n * This method pops the next in-app message from the in-app message stack and tries to displays it.\n * When defined, the current delegate methods are executed to respect any custom behavior.\n */\n- (void)displayNextInAppMessage;\n\n/*!\n * @return The number of in-app messages that are locally waiting to be displayed.\n *\n * @discussion Use this method to check how many in-app messages are waiting to be displayed and call\n * displayNextInAppMessageWithDelegate: at to display it. If an in-app message is currently being displayed, it will not be included\n * in the count.\n *\n * Note: Returning ABKDisplayInAppMessageLater in the beforeInAppMessageDisplayed: delegate method will put the in-app message back onto\n * the stack and this will be reflected in inAppMessagesRemainingOnStack.\n */\n- (NSInteger)inAppMessagesRemainingOnStack;\n\n/*!\n * @discussion This method allows you to request display of an in-app message. It adds the in-app message object to the top of the in-app message stack\n * and tries to display it immediately.\n *\n * If you add an ABKInAppMessage instance that you received through a Braze delegate method - i.e. one that is associated with a campaign or Canvas,\n * then impression and click analytics will work automatically. If you add an ABKInAppMessage instance that you instantiated yourself programmatically\n * (uncommon), then analytics will not be available.\n *\n * @param newInAppMessage the in-app message to add.\n */\n- (void)addInAppMessage:(ABKInAppMessage *)newInAppMessage;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageControllerDelegate.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKInAppMessage.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n/*!\n * Possible values for in-app message handling after a in-app message is offered to an ABKInAppMessageControllerDelegate\n *   ABKDisplayInAppMessageNow - The in-app message will be displayed immediately.\n *   ABKDisplayInAppMessageLater - The in-app message will be not be displayed and will be placed back onto the top of the stack.\n *   ABKDiscardInAppMessage - The in-app message will be discarded and will not be displayed.\n *   ABKReenqueueInAppMessage - The in-app message will not be displayed and all trigger times and re-eligibility will rollback as if the trigger never occurred.\n *\n * The following conditions can cause a in-app message to be offered to the delegate defined by the delegate property on\n * [Appboy sharedInstance].inAppMessageController:\n * - A in-app message is received from the Braze server.\n * - A in-app message is waiting to display when an UIApplicationDidBecomeActiveNotification event occurs.\n * - A in-app message is added by ABKInAppMessageController method addInAppMessage:.\n *\n * You can choose to manually display any in-app messages that are waiting locally to be displayed by calling:\n * [[Appboy sharedInstance].inAppMessageController displayNextInAppMessage].\n */\ntypedef NS_ENUM(NSInteger, ABKInAppMessageDisplayChoice) {\n  ABKDisplayInAppMessageNow,\n  ABKDisplayInAppMessageLater,\n  ABKDiscardInAppMessage,\n  ABKReenqueueInAppMessage,\n};\n\ntypedef NS_ENUM(NSInteger, ABKTriggerEventType) {\n  ABKTriggerEventTypeSessionStart,\n  ABKTriggerEventTypeCustomEvent,\n  ABKTriggerEventTypePurchase,\n  ABKTriggerEventTypeOther\n};\n\n/*!\n * The in-app message delegate allows you to control the display of the Braze in-app message. For more detailed\n * information on in-app message behavior, including when and how the delegate is used, see the documentation for the\n * ABKInAppMessageDisplayChoice enum above for more detailed information.\n *\n * This delegate is for those who are using the Core subspec and not integrating the In-App Message subspec. If\n * you are using the In-App Message subspec, please use ABKInAppMessageUIDelegate.\n */\n\n/*!\n * Braze Public API: ABKInAppMessageControllerDelegate\n */\n@protocol ABKInAppMessageControllerDelegate <NSObject>\n\n@optional\n\n/*!\n * @param inAppMessage The in-app message object being offered to the delegate method.\n * @return ABKInAppMessageDisplayChoice The in-app message display choice. For details refer to the documentation regarding the ENUM ABKInAppMessageDisplayChoice\n * above.\n *\n * This delegate method defines whether the in-app message will be displayed now, displayed later, or discarded.\n *\n * If there are situations where you would not want the in-app message to appear (such as during a full screen\n * game or on a loading screen), you can use this delegate to delay or discard pending in-app message messages.\n */\n- (ABKInAppMessageDisplayChoice)beforeInAppMessageDisplayed:(ABKInAppMessage *)inAppMessage;\n\n/*!\n * @param inAppMessage The control in-app message object being offered to the delegate method.\n * @return ABKInAppMessageDisplayChoice The control in-app message impression logging choice.\n * For details refer to the documentation regarding the ENUM ABKInAppMessageDisplayChoice above.\n * Logging a control message impression is an equivalent of displaying the message, except that no actual display occurs.\n *\n * This delegate method defines the timing of when the control in-app message impression event should be logged: now, later, discarded, or re-enqueued.\n * Logging a control message impression is an equivalent of displaying the message, except that no actual display occurs.\n *\n * If there are situations where you would not want the control in-app message impression to be logged, you can use this delegate to delay\n * or discard it.\n */\n- (ABKInAppMessageDisplayChoice)beforeControlMessageImpressionLogged:(ABKInAppMessage *)inAppMessage;\n\n/*!\n * Executed when no trigger matches the Braze event.\n *\n * @param eventType The type of event that failed to match the user's triggers.\n * @param name The event name of a custom event, the product identifier for a purchase\n *             event, or `nil` for a session start event.\n */\n- (void)noMatchingTriggerForEvent:(ABKTriggerEventType)eventType\n                             name:(nullable NSString *)name;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageDarkButtonTheme.h",
    "content": "#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface ABKInAppMessageDarkButtonTheme : NSObject\n\n/*!\n * Dark theme of the button's background color.\n */\n@property (strong) UIColor *buttonBackgroundColor;\n\n/*!\n * Dark theme of the button's border color.\n */\n@property (strong) UIColor *buttonBorderColor;\n\n/*!\n * Dark theme of the button's text color.\n */\n@property (strong) UIColor *buttonTextColor;\n\n/*!\n * Creates a model containing the dark theme colors for buttons by parsing the dictionary `darkButtonFields`\n */\n- (instancetype)initWithFields:(NSDictionary *)darkButtonFields;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageDarkTheme.h",
    "content": "#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\n@class ABKInAppMessageButton;\n@class ABKInAppMessageDarkButtonTheme;\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface ABKInAppMessageDarkTheme : NSObject\n\n/* Properties of all ABKInAppMessages */\n@property (nonatomic, strong, nullable) UIColor *backgroundColor;\n\n@property (nonatomic, strong, nullable) UIColor *textColor;\n\n@property (nonatomic, strong, nullable) UIColor *iconColor;\n\n@property (nonatomic, strong, nullable) UIColor *iconBackgroundColor;\n\n/* ABKInAppMessageImmersive only */\n@property (nonatomic, strong, nullable) UIColor *headerTextColor;\n\n@property (nonatomic, strong, nullable) UIColor *closeButtonColor;\n\n@property (nonatomic, strong, nullable) UIColor *frameColor;\n\n/*!\n * An array of all the button color properties, in the same order as the buttons object in ABKInAppImmersive\n */\n@property (nonatomic, strong, nullable) NSArray<ABKInAppMessageDarkButtonTheme *> *buttons;\n\n/*!\n * Data model storing all the Dark Theme values passed down from the server for an in-app message.\n * This only gets initalized if the campaign is set up to support Dark Theme and has the fields populated.\n */\n- (instancetype)initWithFields:(NSDictionary<NSString *, NSString *> *)darkThemeFields;\n\n/*!\n * Returns the dark color variant given a valid key. If the key isn't found, returns nil.\n */\n- (UIColor *)getColorForKey:(NSString *)key;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageFull.h",
    "content": "#import \"ABKInAppMessageImmersive.h\"\n\n/*\n * Braze Public API: ABKInAppMessageFull\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageFull : ABKInAppMessageImmersive\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageHTML.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKInAppMessageHTMLBase.h\"\n\n/*\n * Braze Public API: ABKInAppMessageHTML\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageHTML : ABKInAppMessageHTMLBase\n\n/*!\n * This property indicates whether the content was built by our platform.\n */\n@property (nonatomic) BOOL trusted;\n\n/*!\n * This property is an array of asset URLs that are used when generating the HTML.\n */\n@property (strong, nonatomic, nullable) NSArray *assetUrls;\n\n/*!\n * This property is a dictionary of other structured data that can be included with the in-app message.\n */\n@property (strong, nonatomic, nullable) NSDictionary *messageFields;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageHTMLBase.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKInAppMessage.h\"\n\n/*\n * Braze Public API: ABKInAppMessageHTMLBase\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageHTMLBase : ABKInAppMessage\n\n/*!\n * This is the local URL of the assets directory for the HTML in-app message. Please note that the\n * value of this property can be overridden by Braze at the time of displaying, so please don't set\n * it as the value will be discarded.\n */\n@property (strong, nonatomic) NSURL *assetsLocalDirectoryPath;\n\n/*!\n * Log a click on the in-app message with a buttonId. HTMLFull in-app messages have the limitation of only\n * handling a single button click, but we allow HTML in-app messages to handle multiple button clicks.\n *\n * @param buttonId the id of the click\n */\n- (void)logInAppMessageHTMLClickWithButtonID:(NSString *)buttonId;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageHTMLFull.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKInAppMessageHTMLBase.h\"\n\n/*\n * Braze Public API: ABKInAppMessageHTMLFull\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageHTMLFull : ABKInAppMessageHTMLBase\n\n/*!\n * This property is the remote URL of the assets zip file.\n */\n@property (strong, nonatomic, nullable) NSURL *assetsZipRemoteUrl;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageImmersive.h",
    "content": "#import \"ABKInAppMessage.h\"\n\n@class ABKInAppMessageButton;\n\n/*\n * Braze Public API: ABKInAppMessageImmersive\n */\nNS_ASSUME_NONNULL_BEGIN\n\n/*!\n * The ABKInAppMessageImmersiveImageStyle defines the image style of the in-app message\n *\n *   ABKInAppMessageGraphic - The image will make up the entire in-app message, with buttons on the\n *     image(buttons are optional). No icons, headers or message will be displayed in this style.\n *\n *\n *   ABKInAppMessageTopImage - This is the default image style. The image will be on upper top of the\n *     in-app message if there is one, with all other in-app message elements.\n */\ntypedef NS_ENUM(NSInteger, ABKInAppMessageImmersiveImageStyle) {\n  ABKInAppMessageGraphic,\n  ABKInAppMessageTopImage\n};\n\n@interface ABKInAppMessageImmersive : ABKInAppMessage\n\n/*!\n * header defines the header text of the in-app message.\n * The header will only be displayed in one line on the default Braze in-app messages. If the header is more than one\n * line, it will be truncated at the end.\n */\n@property (copy, nullable) NSString *header;\n\n/*!\n * headerTextColor defines the header text color, when there is a header string in the in-app message. The default text color\n * is black.\n */\n@property (nonatomic, strong, nullable) UIColor *headerTextColor;\n\n/*!\n * closeButtonColor defines the close button color of the in-app message.\n * When this property is nil, the close button's default color is black.\n */\n@property (nonatomic, strong, nullable) UIColor *closeButtonColor;\n\n/*!\n * buttons defines the buttons of the in-app message.\n * Each button must be an instance of ABKInAppMessageButton.\n * When there are more than two buttons in the array, only the first two buttons will be displayed in the in-app message.\n * For more information and setting of ABKInAppMessageButton, please see the documentation in ABKInAppMessageButton.h for additional details.\n */\n@property (readonly, copy, nullable) NSArray<ABKInAppMessageButton *> *buttons;\n\n/*!\n * frameColor defines the frame color of an immersive in-app message. This color will fill the\n * screen outside of the in-app message. When the property is nil, the color will be\n * set to the default color, which is black with 90% opacity.\n */\n@property (nonatomic, strong, nullable) UIColor *frameColor;\n\n/*!\n * headerTextAlignment defines the preferred text alignment of the header label.\n * The default value is NSTextAlignmentCenter.\n */\n@property NSTextAlignment headerTextAlignment;\n\n/*!\n * imageStyle defines the image style of a immersive in-app message. \n * For more information about the possible image styles, please check the documentation of\n * ABKInAppMessageImmersiveImageStyle above.\n */\n@property ABKInAppMessageImmersiveImageStyle imageStyle;\n\n/*!\n * @param buttonId The clicked button's button ID for the in-app message. This number can't be negative.\n * If you're handling in-app messages completely on your own, you should still report\n * clicks on the in-app message button back to Braze with this method so that your campaign reporting features\n * still work in the dashboard.\n *\n * Note: Each in-app message can log at most one button click.\n */\n- (void)logInAppMessageClickedWithButtonID:(NSInteger)buttonId;\n\n/*!\n * @param buttonArray The button array for the in-app message. This array should NOT be nil nor empty. Every object in the array\n * must be an instance of ABKInAppMessageButton.\n *\n * This method will set the in-app message buttons.\n */\n- (void)setInAppMessageButtons:(NSArray *)buttonArray;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageModal.h",
    "content": "#import \"ABKInAppMessageImmersive.h\"\n\n/*\n * Braze Public API: ABKInAppMessageModal\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageModal : ABKInAppMessageImmersive\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageSlideup.h",
    "content": "#import \"ABKInAppMessage.h\"\n\n/*!\n * There are two possible values which control where the in-app message will enter the view.\n *\n *    ABKInAppMessageSlideupFromBottom - This is the default behavior.\n *      The in-app message will slide onto the screen from the bottom edge of the view and will hide by sliding back down off\n *      the bottom of the screen.\n *\n *    ABKInAppMessageSlideupFromTop - The in-app message will slide onto the screen from the top edge of the view and will hide by sliding\n *      back up off the top of the screen.\n */\ntypedef NS_ENUM(NSInteger, ABKInAppMessageSlideupAnchor) {\n  ABKInAppMessageSlideupFromTop,\n  ABKInAppMessageSlideupFromBottom\n};\n\n/*\n * Braze Public API: ABKInAppMessageSlideup\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageSlideup : ABKInAppMessage\n\n/*!\n * If hideChevron equals YES, the in-app message will not render the chevron on the right side of the in-app message.\n * The chevron is a useful visual cue for the user that more content may be reached by tapping the in-app message.\n */\n@property BOOL hideChevron;\n\n/*!\n * inAppMessageSlideupAnchor defines the position of the in-app message on screen.\n * See the above documentation for ABKInAppMessageAnchor enum documentation above offers additional details.\n */\n@property ABKInAppMessageSlideupAnchor inAppMessageSlideupAnchor;\n\n/*!\n * chevronColor defines the chevron arrow color of the in-app message.\n * When this property is nil, the chevron's default color is white.\n */\n@property (strong, nullable) UIColor *chevronColor;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageUIControlling.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKInAppMessage.h\"\n#import \"ABKInAppMessageControllerDelegate.h\"\n\n@protocol ABKInAppMessageUIControlling <NSObject>\n\n@optional\n\n/*!\n * @discussion This method sets the optional ABKInAppMessageUIDelegate.\n *\n * To set this delegate, call [[Appboy sharedInstance].inAppMessageController.inAppMessageUIController\n * setInAppMessageUIDelegate: ] after initializing Braze.\n */\n- (void)setInAppMessageUIDelegate:(id)uiDelegate;\n\n/*!\n * @discussion This method will hide the in-app message that is currently being displayed.\n *             The animated parameter controls whether or not the in-app message will be animated\n *             away. This method does nothing if no in-app\n *             message is currently being displayed.\n *\n * Note: This will not fire the onInAppMessageDismissed: delegate method.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)hideCurrentInAppMessage:(BOOL)animated;\n\n/*!\n * @discussion This method will return the ABKInAppMessageDisplayChoice (see ABKInAppMessageControllerDelegate\n *             for more information) based on whether or not the keyboard is showing.\n *             If you have implemented the beforeInAppMessageDisplayed:withKeyboardIsUp: in\n *             ABKInAppMessageUIDelegate, the choice returned there will override the default choice.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (ABKInAppMessageDisplayChoice)getCurrentDisplayChoiceForInAppMessage:(ABKInAppMessage *)inAppMessage;\n\n/*!\n * @discussion This method will return the ABKInAppMessageDisplayChoice (see ABKInAppMessageControllerDelegate\n *             for more information) based on whether or not the keyboard is showing.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (ABKInAppMessageDisplayChoice)getCurrentDisplayChoiceForControlInAppMessage:(ABKInAppMessage *)controlInAppMessage;\n\n/*!\n * @discussion This method displays the in-app message. We call it when the in-app message has no\n *             image URL, or there is an image URL, and it has already been downloaded. If you call\n *             this method directly and the image hasn't been downloaded, there will be a spinner\n *             animating in the image view.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)showInAppMessage:(ABKInAppMessage *)inAppMessage;\n\n/*!\n * @discussion This method returns whether or not an in-app message is currently being shown.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (BOOL)inAppMessageCurrentlyVisible;\n\n@end\n"
  },
  {
    "path": "AppboyKit/include/ABKInAppMessageWebViewBridge.h",
    "content": "#import <WebKit/WebKit.h>\n#import \"ABKInAppMessageHTML.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@class Appboy;\n@class ABKInAppMessageHTML;\n@protocol ABKInAppMessageWebViewBridgeDelegate;\n\n#pragma mark - ABKInAppMessageWebViewBridge\n\n/*!\n * The webview bridge\n * @discussion The bridge is automatically setup on initialization and destroyed on dealloc. The bridge\n * needs to be retained to stay enabled. Keep a strong instance of the bridge in a property to do so\n */\n@interface ABKInAppMessageWebViewBridge : NSObject <WKScriptMessageHandler>\n\n/*!\n * The delegate instance\n */\n@property (nonatomic, weak) id<ABKInAppMessageWebViewBridgeDelegate> delegate;\n\n/*!\n * Initialize an instance of ABKInAppMessageWebViewBridge\n * @param webView The WKWebView in which the bridge needs to be setup\n * @param inAppMessage The InAppMessage being displayed\n * @param appboy The Appboy instance\n */\n- (instancetype)initWithWebView:(WKWebView *)webView\n                   inAppMessage:(ABKInAppMessageHTML *)inAppMessage\n                 appboyInstance:(Appboy *)appboy;\n\n@end\n\n#pragma mark - ABKInAppMessageWebViewBridgeDelegate\n\n/*!\n * Methods for managing bridge related actions\n */\n@protocol ABKInAppMessageWebViewBridgeDelegate <NSObject>\n\n/*!\n * Tells the delegate that the bridge has received a click action to execute\n * @param webViewBridge The bridge informing the delegate\n * @param clickAction The clickAction performed\n */\n- (void)webViewBridge:(ABKInAppMessageWebViewBridge *)webViewBridge\n  receivedClickAction:(ABKInAppMessageClickActionType)clickAction;\n\n/*!\n * Tells the delegate that a close message action was received\n * @param webViewBridge The bridge informing the delegate\n */\n- (void)closeMessageWithWebViewBridge:(ABKInAppMessageWebViewBridge *)webViewBridge;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKLocationManager.h",
    "content": "#import <Foundation/Foundation.h>\n#import <CoreLocation/CoreLocation.h>\n\n@class ABKServerConfig;\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface ABKLocationManager : NSObject <CLLocationManagerDelegate>\n\n/*!\n * Use ABKEnableAutomaticLocationCollectionKey to enable automatic location tracking.\n * For more information, please refer to Appboy.h.\n */\n@property (readonly) BOOL enableLocationTracking;\n\n/*!\n * Use ABKEnableGeofencesKey to enable geofences.\n * For more information, please refer to Appboy.h.\n */\n@property (readonly) BOOL enableGeofences;\n\n/*!\n * Use ABKDisableAutomaticGeofenceRequestsKey to disable automatic geofence requests.\n * For more information, please refer to requestGeofencesWithLongitude:latitude: in Appboy.h\n */\n@property (readonly) BOOL disableAutomaticGeofenceRequests;\n\n/*!\n * Calling this method will log a location using the regular location provider if a location is reported in under\n * 60 seconds. After 60 seconds expires the regular location provider will stop collecting location.\n */\n- (void)logSingleLocation;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKLocationManagerProvider.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*!\n * Do not call these methods within your code. They are meant for Braze internal use only.\n */\n\n/*!\n * ABKLocationManagerProvider.h and ABKLocationManagerProvider.m must be added to your project\n * regardless of whether or not you enable location services. This occurs automatically if you integrate/update via the CocoaPod.\n */\n\n/*\n * Braze Public API: ABKLocationManagerProvider\n */\n\n@class CLLocationManager;\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKLocationManagerProvider : NSObject\n\n+ (BOOL)locationServicesEnabled;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKModalWebViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <WebKit/WebKit.h>\n\n@interface ABKModalWebViewController : UINavigationController <WKNavigationDelegate>\n\n/*!\n * The url the modal web view controller should open. Please note that this is the initial url and\n * won't be updated if the initial url re-directs to another url.\n */\n@property NSURL *url;\n\n/*!\n * The WKWebView which displays the web view.\n */\n@property (nonatomic) IBOutlet WKWebView *webView;\n\n/*!\n * The UIProgressView which shows the web view loading process. It will be on top of the web view and\n * will disappear as soon as the page is loaded.\n */\n@property (nonatomic) IBOutlet UIProgressView *progressBar;\n\n@end\n"
  },
  {
    "path": "AppboyKit/include/ABKNoConnectionLocalization.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface ABKNoConnectionLocalization : NSObject\n\n+ (NSString *)getNoConnectionLocalizedString;\n\n@end\n"
  },
  {
    "path": "AppboyKit/include/ABKPushUtils.h",
    "content": "#if !TARGET_OS_TV\n#import <Foundation/Foundation.h>\n#import <UserNotifications/UserNotifications.h>\n#import <UIKit/UIKit.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n/*\n * Braze Public API: ABKPushUtils\n */\n@interface ABKPushUtils : NSObject\n\n/*!\n * @param response The UNNotificationResponse passed to userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:.\n *\n * @return YES if the user notification was sent from Braze servers.\n */\n+ (BOOL)isAppboyUserNotification:(UNNotificationResponse *)response API_AVAILABLE(ios(10.0), macCatalyst(14.0));\n\n/*!\n * @param userInfo The userInfo dictionary passed to application:didReceiveRemoteNotification:fetch​Completion​Handler:\n *                 or application:didReceiveRemoteNotification:.\n *\n * @return YES if the push notification was sent from Braze servers.\n */\n+ (BOOL)isAppboyRemoteNotification:(NSDictionary *)userInfo;\n\n/*!\n * @param userInfo The userInfo dictionary passed to application:didReceiveRemoteNotification:fetchCompletionHandler:\n *                 or application:didReceiveRemoteNotification:.\n *\n * @return YES if the push notification was sent by Braze for an internal feature.\n *\n * @discussion Braze uses content-available silent notifications for internal features. You can use this method to ensure\n *             your app doesn't take any undesired or unnecessary actions upon receiving Braze's internal content-available notifications\n *             (e.g., pinging your server for content).\n */\n+ (BOOL)isAppboyInternalRemoteNotification:(NSDictionary *)userInfo;\n\n/*!\n * @param response The UNNotificationResponse passed to userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:.\n *\n * @return YES if the user notification was sent by Braze for uninstall tracking.\n *\n * @discussion Uninstall tracking notifications are content-available silent notifications. You can use this method to ensure \n *             your app doesn't take any undesired or unnecessary actions upon receiving Braze's uninstall tracking notifications\n *             (e.g., pinging your server for content).\n */\n+ (BOOL)isUninstallTrackingUserNotification:(UNNotificationResponse *)response API_AVAILABLE(ios(10.0), macCatalyst(14.0));\n\n/*!\n * @param userInfo The userInfo dictionary passed to application:didReceiveRemoteNotification:fetchCompletionHandler:\n *                 or application:didReceiveRemoteNotification:.\n *\n * @return YES if the push notification was sent by Braze for uninstall tracking.\n *\n * @discussion Uninstall tracking notifications are content-available silent notifications. You can use this method to ensure\n *             your app doesn't take any undesired or unnecessary actions upon receiving Braze's uninstall tracking notifications\n *             (e.g., pinging your server for content).\n */\n+ (BOOL)isUninstallTrackingRemoteNotification:(NSDictionary *)userInfo;\n\n/*!\n * @param response The UNNotificationResponse passed to userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:.\n *\n * @return YES if the user notification was sent by Braze for syncing geofences.\n *\n * @discussion Geofence sync notifications are content-available silent notifications. You can use this method to ensure\n *             your app doesn't take any undesired or unnecessary actions upon receiving Braze's geofence sync notifications\n *             (e.g., pinging your server for content).\n */\n+ (BOOL)isGeofencesSyncUserNotification:(UNNotificationResponse *)response API_AVAILABLE(ios(10.0), macCatalyst(14.0));\n\n/*!\n * @param userInfo The userInfo dictionary passed to application:didReceiveRemoteNotification:fetchCompletionHandler:\n *                 or application:didReceiveRemoteNotification:.\n *\n * @return YES if the push notification was sent by Braze for syncing geofences.\n *\n * @discussion Geofence sync notifications are content-available silent notifications. You can use this method to ensure\n *             your app doesn't take any undesired or unnecessary actions upon receiving Braze's geofence sync notifications\n *             (e.g., pinging your server for content).\n */\n+ (BOOL)isGeofencesSyncRemoteNotification:(NSDictionary *)userInfo;\n\n/*!\n * @param userInfo The userInfo dictionary passed to application:didReceiveRemoteNotification:fetch​Completion​Handler:\n *\n * @return YES if the push notification was sent by Braze and is silent.\n */\n+ (BOOL)isAppboySilentRemoteNotification:(NSDictionary *)userInfo;\n\n/*!\n * @param userInfo The userInfo dictionary passed to application:didReceiveRemoteNotification:fetchCompletionHandler:\n *                 or application:didReceiveRemoteNotification:.\n *\n * @return YES if the push notification was sent by Braze for push stories.\n */\n+ (BOOL)isPushStoryRemoteNotification:(NSDictionary *)userInfo;\n\n+ (BOOL)notificationContainsContentCard:(NSDictionary *)userInfo;\n\n/*!\n * @param userInfo The userInfo dictionary payload.\n *\n * @return YES if the notification contains an a flag that inticates the device should fetch test triggers from the server.\n *\n */\n+ (BOOL)shouldFetchTestTriggersFlagContainedInPayload:(NSDictionary *)userInfo __deprecated;\n\n/*!\n * @return A set of the default UNNotificationCategories used by Braze.\n */\n+ (NSSet<UNNotificationCategory *> *)getAppboyUNNotificationCategorySet API_AVAILABLE(ios(10.0), macCatalyst(14.0));\n\n+ (NSSet<UIUserNotificationCategory *> *)getAppboyUIUserNotificationCategorySet __deprecated_msg(\"Please use `getAppboyUNNotificationCategorySet` instead.\");\n\n@end\nNS_ASSUME_NONNULL_END\n#endif\n"
  },
  {
    "path": "AppboyKit/include/ABKSDWebImageProxy.h",
    "content": "#import <UIKit/UIKit.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\nstatic NSString *const CORE_VERSION_WARNING = @\"Attempting to download image but Braze image utilities not found. Make sure you chose the UI Subspec if you want to use Braze's UI.\";\n\n/*\n * This proxy class gives the Braze iOS SDK access to the SDWebImage framework.\n * \n * NOTE:\n * This class requires SDWebImage version 4.0*.\n */\n@interface ABKSDWebImageProxy : NSObject\n\n+ (void)setImageForView:(UIImageView *)imageView\n  showActivityIndicator:(BOOL)showActivityIndicator\n                withURL:(nullable NSURL *)imageURL\n       imagePlaceHolder:(nullable UIImage *)placeHolder\n              completed:(nullable void (^)(UIImage * _Nullable image, NSError * _Nullable error, NSInteger cacheType, NSURL * _Nullable imageURL))completion;\n+ (void)loadImageWithURL:(nullable NSURL *)url\n                 options:(NSInteger)options\n               completed:(nullable void(^)(UIImage *image, NSData *data, NSError *error, NSInteger cacheType, BOOL finished, NSURL *imageURL))completion;\n+ (void)diskImageExistsForURL:(nullable NSURL *)url\n                   completed:(nullable void (^)(BOOL isInCache))completion;\n+ (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url;\n+ (void)removeSDWebImageForKey:(nullable NSString *)key;\n+ (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key;\n+ (void)clearSDWebImageCache;\n+ (BOOL)isSupportedSDWebImageVersion;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKSdkAuthenticationDelegate.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKSdkAuthenticationError.h\"\n\n/*\n * Braze Public API: ABKSdkAuthenticationDelegate\n */\nNS_ASSUME_NONNULL_BEGIN\n\n@protocol ABKSdkAuthenticationDelegate <NSObject>\n\n/*!\n * This method is fired when an SDK Authentication error is returned by the server, for example, if\n * the signature is expired or invalid.\n *\n * You are responsible for providing the Braze SDK a valid signature when this delegate method is\n * called.\n * SDK requests will retry periodically using an exponential backoff approach. After 50 consecutive\n * failed attempts, retries will be paused until the next session start.\n *\n * @param authError The SDK Authentication error returned by the server\n */\n- (void)handleSdkAuthenticationError:(ABKSdkAuthenticationError *)authError;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKSdkAuthenticationError.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*\n * Braze Public API: ABKSdkAuthenticationError\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKSdkAuthenticationError : NSObject\n\n/*!\n * The error code for the SDK Authentication failure.\n */\n@property (readonly) NSInteger code;\n\n/*!\n * The reason for the SDK Authentication failure.\n */\n@property (nullable, readonly) NSString *reason;\n\n/*!\n * The user ID associated with the request that failed due to SDK Authentication failure.\n */\n@property (nullable, readonly) NSString *userId;\n\n/*!\n * The signature that was sent with the request that failed due to SDK Authentication failure.\n */\n@property (readonly) NSString *signature;\n\n- (instancetype)initWithCode:(NSInteger)code\n                      reason:(NSString *)reason\n                      userId:(NSString *)userId\n                   signature:(NSString *)signature;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKSdkMetadata.h",
    "content": "/*!\n * Enum representing the accepted SDK Metatadata.\n * See addSdkMetadata for more details.\n */\ntypedef NSString *ABKSdkMetadata NS_TYPED_EXTENSIBLE_ENUM;\nextern ABKSdkMetadata const ABKSdkMetadataAdjust;\nextern ABKSdkMetadata const ABKSdkMetadataAirBridge;\nextern ABKSdkMetadata const ABKSdkMetadataAppsFlyer;\nextern ABKSdkMetadata const ABKSdkMetadataBluedot;\nextern ABKSdkMetadata const ABKSdkMetadataBranch;\nextern ABKSdkMetadata const ABKSdkMetadataCordova;\nextern ABKSdkMetadata const ABKSdkMetadataCarthage;\nextern ABKSdkMetadata const ABKSdkMetadataCocoaPods;\nextern ABKSdkMetadata const ABKSdkMetadataCordovaPM;\nextern ABKSdkMetadata const ABKSdkMetadataExpo;\nextern ABKSdkMetadata const ABKSdkMetadataFoursquare;\nextern ABKSdkMetadata const ABKSdkMetadataFlutter;\nextern ABKSdkMetadata const ABKSdkMetadataGoogleTagManager;\nextern ABKSdkMetadata const ABKSdkMetadataGimbal;\nextern ABKSdkMetadata const ABKSdkMetadataGraddle;\nextern ABKSdkMetadata const ABKSdkMetadataIonic;\nextern ABKSdkMetadata const ABKSdkMetadataKochava;\nextern ABKSdkMetadata const ABKSdkMetadataManual;\nextern ABKSdkMetadata const ABKSdkMetadataMParticle;\nextern ABKSdkMetadata const ABKSdkMetadataNativeScript;\nextern ABKSdkMetadata const ABKSdkMetadataNPM;\nextern ABKSdkMetadata const ABKSdkMetadataNuGet;\nextern ABKSdkMetadata const ABKSdkMetadataPub;\nextern ABKSdkMetadata const ABKSdkMetadataRadar;\nextern ABKSdkMetadata const ABKSdkMetadataReactNative;\nextern ABKSdkMetadata const ABKSdkMetadataSegment;\nextern ABKSdkMetadata const ABKSdkMetadataSingular;\nextern ABKSdkMetadata const ABKSdkMetadataSwiftPM;\nextern ABKSdkMetadata const ABKSdkMetadataTealium;\nextern ABKSdkMetadata const ABKSdkMetadataUnreal;\nextern ABKSdkMetadata const ABKSdkMetadataUnityPM;\nextern ABKSdkMetadata const ABKSdkMetadataUnity;\nextern ABKSdkMetadata const ABKSdkMetadataVizbee;\nextern ABKSdkMetadata const ABKSdkMetadataXamarin;\n"
  },
  {
    "path": "AppboyKit/include/ABKTextAnnouncementCard.h",
    "content": "#import \"ABKCard.h\"\n\n/*\n * Braze Public API: ABKTextAnnouncementCard\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKTextAnnouncementCard : ABKCard <NSCoding>\n\n/*\n * The title text for the card.\n */\n@property (copy) NSString *title;\n\n/*\n * The description text for the card.\n */\n@property (copy) NSString *cardDescription;\n\n/*\n * The link text for the property url, like @\"blog.appboy.com\". It can be displayed on the card's\n * UI to indicate the action/direction of clicking on the card.\n */\n@property (copy, nullable) NSString *domain;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKTwitterUser.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*\n * Braze Public API: ABKTwitterUser\n */\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKTwitterUser : NSObject\n\n/*!\n * The value returned from Twitter's Users API with key \"description\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property (copy, nullable) NSString* userDescription;\n\n/*!\n * The value returned from Twitter's Users API with key \"name\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property (copy, nullable) NSString* twitterName;\n\n/*!\n * The value returned from Twitter's Users API with key \"profile_image_url\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property (copy, nullable) NSString* profileImageUrl;\n\n/*!\n * The value returned from Twitter's Users API with key \"screen_name\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property (copy, nullable) NSString* screenName;\n\n/*!\n * The value returned from Twitter's Users API with key \"followers_count\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property NSInteger followersCount;\n\n/*!\n * The value returned from Twitter's Users API with key \"friends_count\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property NSInteger friendsCount;\n\n/*!\n * The value returned from Twitter's Users API with key \"statuses_count\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property NSInteger statusesCount;\n\n/*!\n * The value returned from Twitter's Users API with key \"id\". Please refer to\n * https://dev.twitter.com/overview/api/users for more information.\n */\n@property NSInteger twitterID;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKURLDelegate.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"Appboy.h\"\n\n/*\n * Braze Public API: ABKURLDelegate\n */\nNS_ASSUME_NONNULL_BEGIN\n\n@protocol ABKURLDelegate <NSObject>\n\n/*!\n * @param url The deep link or web URL being offered to the delegate method.\n * @param channel An enum representing the URL's associated messaging channel.\n * @param extras The extras dictionary associated with the campaign or messaging object that the URL originated from.\n                 Extras may be specified as key-value pairs on the Braze dashboard.\n * @return Boolean value which controls whether or not Braze will handle opening the URL. Returning YES will\n *         prevent Braze from opening the URL. Returning NO will cause Braze to handle opening the URL.\n *\n * This delegate method is fired whenever the user attempts to open a URL sent by Braze. You can use this delegate\n * to customize Braze's URL handling.\n */\n- (BOOL)handleAppboyURL:(NSURL * _Nullable)url\n            fromChannel:(ABKChannel)channel\n             withExtras:(NSDictionary * _Nullable)extras;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/ABKUser.h",
    "content": "//\n//  ABKUser.h\n//  AppboySDK\n\n#import <Foundation/Foundation.h>\n\n@class ABKFacebookUser;\n@class ABKTwitterUser;\n@class ABKAttributionData;\n\nNS_ASSUME_NONNULL_BEGIN\n/* ------------------------------------------------------------------------------------------------------\n * Enums\n */\n\n/*!\n * Genders recognized by the SDK.\n */\ntypedef NS_ENUM(NSInteger, ABKUserGenderType) {\n  ABKUserGenderMale,\n  ABKUserGenderFemale,\n  ABKUserGenderOther,\n  ABKUserGenderUnknown,\n  ABKUserGenderNotApplicable,\n  ABKUserGenderPreferNotToSay\n};\n\n/*!\n * Convenience enum to represent notification status, for email and push notifications.\n *\n * OPTED_IN: subscribed, and explicitly opted in.\n * SUBSCRIBED: subscribed, but not explicitly opted in.\n * UNSUBSCRIBED: unsubscribed and/or explicitly opted out.\n */\ntypedef NS_ENUM(NSInteger, ABKNotificationSubscriptionType) {\n  ABKOptedIn,\n  ABKSubscribed,\n  ABKUnsubscribed\n};\n\n/*!\n * When setting the custom attributes with custom keys:\n * 1. The maximum key length is 255 characters; longer keys are truncated.\n * 2. The maximum length for a string value in a custom attribute is 255 characters; longer values are truncated.\n */\n\n/*\n * Braze Public API: ABKUser\n */\n@interface ABKUser : NSObject\n\n/*!\n * The User's first name (String)\n */\n@property (nonatomic, copy, nullable) NSString *firstName;\n\n/*!\n * The User's last name (String)\n */\n@property (nonatomic, copy, nullable) NSString *lastName;\n\n/*!\n * The User's email (String)\n */\n@property (nonatomic, copy, nullable) NSString *email;\n\n/*!\n * The User's date of birth (NSDate)\n */\n@property (nonatomic, copy, nullable) NSDate *dateOfBirth;\n\n/*!\n * The User's country (String)\n */\n@property (nonatomic, copy, nullable) NSString *country;\n\n/*!\n * The User's home city (String)\n */\n@property (nonatomic, copy, nullable) NSString *homeCity;\n\n/*!\n * The User's language (String)\n *\n * Language Strings should be valid ISO 639-1 language codes.\n * See https://www.loc.gov/standards/iso639-2/php/code_list.php.\n *\n * If not set here, user language will be inferred from the device language.\n */\n@property (nonatomic, copy, nullable) NSString *language;\n\n/*!\n * The User's phone number (String)\n */\n@property (nonatomic, copy, nullable) NSString *phone;\n\n@property (nonatomic, copy, nullable, readonly) NSString *userID;\n\n/*!\n * The User's avatar image URL. This URL will be processed by the server and used in their user profile on the\n * dashboard. (String)\n */\n@property (nonatomic, copy, nullable) NSString *avatarImageURL;\n\n/*!\n * The User's Facebook account information. For more detail, please refer to ABKFacebookUser.h.\n */\n@property (strong, nullable) ABKFacebookUser *facebookUser;\n\n/*!\n * The User's Twitter account information. For more detail, please refer to ABKTwitterUser.h.\n */\n@property (strong, nullable) ABKTwitterUser *twitterUser;\n\n/*!\n * Sets the attribution information for the user. For in apps that have an install tracking integration.\n * For more information, please refer to ABKAttributionData.h.\n */\n@property (strong, nullable) ABKAttributionData *attributionData;\n\n/*!\n * Adds an an alias for the current user.  Individual (alias, label) pairs can exist on one and only one user.\n * If a different user already has this alias or external user id, the alias attempt will be rejected\n * on the server.\n *\n * @param alias The alias of the current user.\n * @param label The label of the alias; used to differentiate it from other aliases for the user.\n * @return Whether or not the alias and label are valid. Does not guarantee they won't collide with\n *         an existing pair.\n */\n- (BOOL)addAlias:(NSString *)alias withLabel:(NSString *)label;\n\n/*!\n * @param gender ABKUserGender enum representing the user's gender.\n * @return YES if the user gender is set properly\n */\n- (BOOL)setGender:(ABKUserGenderType)gender;\n\n/*!\n * Sets whether or not the user should be sent email campaigns. Setting it to unsubscribed opts the user out of\n * an email campaign that you create through the Braze dashboard.\n *\n * @param emailNotificationSubscriptionType enum representing the user's email notifications subscription type.\n * @return YES if the field is set successfully, else NO.\n */\n- (BOOL)setEmailNotificationSubscriptionType:(ABKNotificationSubscriptionType)emailNotificationSubscriptionType;\n\n/*!\n * Sets the push notification subscription status of the user. Used to collect information about the user.\n *\n * @param pushNotificationSubscriptionType enum representing the user's push notifications subscription type.\n * @return YES if the field is set successfully, else NO.\n */\n- (BOOL)setPushNotificationSubscriptionType:(ABKNotificationSubscriptionType)pushNotificationSubscriptionType;\n\n/*!\n * Adds the user to a Subscription Group.\n *\n * @param groupId The string UUID corresponding to the subscription group, provided by the Braze dashboard.\n * @return YES if the user was successfully added, else NO. If not, the groupId might have been nil or invalid.\n */\n- (BOOL)addToSubscriptionGroupWithGroupId:(NSString *)groupId;\n\n/*!\n * Removes the user from a Subscription Group.\n *\n * @param groupId The string UUID corresponding to the subscription group, provided by the Braze dashboard.\n * @return YES if the user was successfully removed, else NO. If not, the groupId might have been nil or invalid.\n */\n- (BOOL)removeFromSubscriptionGroupWithGroupId:(NSString *)groupId;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value A boolean value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andBOOLValue:(BOOL)value;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value An integer value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andIntegerValue:(NSInteger)value;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value A double value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andDoubleValue:(double)value;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value An NSString value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andStringValue:(NSString *)value;\n\n/*!\n * @param key The String name of the custom user attribute\n * @param value An NSDate value to set as a custom attribute\n * @return whether or not the custom user attribute was set successfully; If not, your key might have been nil or empty,\n *         your value might have been invalid (either nil, or not of the correct type), or you tried to set a value for\n *         one of the reserved keys. Please check the log for more details about the specific failure you encountered.\n */\n- (BOOL)setCustomAttributeWithKey:(NSString *)key andDateValue:(NSDate *)value;\n\n/*!\n * @param key The String name of the custom user attribute to unset\n * @return whether or not the custom user attribute was unset successfully\n */\n- (BOOL)unsetCustomAttributeWithKey:(NSString *)key;\n\n/**\n   * Increments the value of an custom attribute by one. Only integer and long custom attributes can be incremented.\n   * Attempting to increment a custom attribute that is not an integer or a long will be ignored. If you increment a\n   * custom attribute that has not previously been set, a custom attribute will be created and assigned a value of one.\n   *\n   * @param key The identifier of the custom attribute\n   * @return YES if the increment for the custom attribute of given key is saved\n   */\n- (BOOL)incrementCustomUserAttribute:(NSString *)key;\n\n/**\n * Increments the value of an custom attribute by a given amount. Only integer and long custom attributes can be\n * incremented. Attempting to increment a custom attribute that is not an integer or a long will be ignored. If\n * you increment a custom attribute that has not previously been set, a custom attribute will be created and assigned\n * the value of incrementValue. To decrement the value of a custom attribute, use a negative incrementValue.\n *\n * @param key The identifier of the custom attribute\n * @param incrementValue The amount by which to increment the custom attribute\n * @return YES if the increment for the custom attribute of given key is saved\n */\n- (BOOL)incrementCustomUserAttribute:(NSString *)key by:(NSInteger)incrementValue;\n\n/**\n * Adds the string value to a custom attribute string array specified by the key. If you add a key that has not\n * previously been set, a custom attribute string array will be created containing the value.\n *\n * @param key The custom attribute key\n * @param value A string to be added to the custom attribute string array\n * @return YES if the operation was successful\n */\n- (BOOL)addToCustomAttributeArrayWithKey:(NSString *)key value:(NSString *)value;\n\n/**\n * Removes the string value from a custom attribute string array specified by the key. If you remove a key that has not\n * previously been set, nothing will be changed.\n *\n * @param key The custom attribute key\n * @param value A string to be removed from the custom attribute string array\n * @return YES if the operation was successful\n */\n- (BOOL)removeFromCustomAttributeArrayWithKey:(NSString *)key value:(NSString *)value;\n\n/**\n * Sets a string array from a custom attribute specified by the key.\n *\n * @param key The custom attribute key\n * @param valueArray A string array to set as a custom attribute. If this value is nil, then Braze will unset the custom\n *        attribute and remove the corresponding array if there is one.\n * @return YES if the operation was successful\n */\n- (BOOL)setCustomAttributeArrayWithKey:(NSString *)key array:(nullable NSArray *)valueArray;\n\n/*!\n* Sets the last known location for the user. Intended for use with ABKDisableLocationAutomaticTrackingOptionKey set to YES\n* when starting Braze, so that the only locations being set are by the integrating app.  Otherwise, calls to this\n* method will be contending with automatic location update events.\n*\n* @param latitude The latitude of the User's location in degrees, the number should be in the range of [-90, 90]\n* @param longitude The longitude of the User's location in degrees, the number should be in the range of [-180, 180]\n* @param horizontalAccuracy The accuracy of the User's horizontal location in meters, the number should not be negative\n*/\n- (BOOL)setLastKnownLocationWithLatitude:(double)latitude longitude:(double)longitude horizontalAccuracy:(double)horizontalAccuracy;\n\n/*!\n* Sets the last known location for the user. Intended for use with ABKDisableLocationAutomaticTrackingOptionKey set to YES\n* when starting Braze, so that the only locations being set are by the integrating app.  Otherwise, calls to this\n* method will be contending with automatic location update events.\n*\n* @param latitude The latitude of the User's location in degrees, the number should be in the range of [-90, 90]\n* @param longitude The longitude of the User's location in degrees, the number should be in the range of [-180, 180]\n* @param horizontalAccuracy The accuracy of the User's horizontal location in meters, the number should not be negative\n* @param altitude The altitude of the User's location in meters\n* @param verticalAccuracy The accuracy of the User's vertical location in meters, the number should not be negative\n*/\n- (BOOL)setLastKnownLocationWithLatitude:(double)latitude\n                               longitude:(double)longitude\n                      horizontalAccuracy:(double)horizontalAccuracy\n                                altitude:(double)altitude\n                        verticalAccuracy:(double)verticalAccuracy;\n\n/*!\n * Adds the location custom attribute for the user.\n *\n * @param key The custom attribute key\n * @param latitude The latitude of the location in degrees, the number should be in the range of [-90, 90]\n * @param longitude The longitude of the location in degrees, the number should be in the range of [-180, 180]\n */\n- (BOOL)addLocationCustomAttributeWithKey:(NSString *)key\n                                 latitude:(double)latitude\n                                longitude:(double)longitude;\n\n/*!\n * Removes the location custom attribute for the user.\n *\n * @param key The custom attribute key\n */\n- (BOOL)removeLocationCustomAttributeWithKey:(NSString *)key;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/Appboy.h",
    "content": "//\n//  Appboy.h\n//  AppboySDK\n\n/*!\n  \\mainpage\n  This site contains technical documentation for the %Braze iOS SDK. Click on the \"Classes\" link above to\n  view the %Braze public interface classes and start integrating the SDK into your app!\n*/\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import <UserNotifications/UserNotifications.h>\n\n#import \"ABKSdkMetadata.h\"\n\n#ifndef APPBOY_SDK_VERSION\n#define APPBOY_SDK_VERSION @\"4.7.0\"\n#endif\n\n#if !TARGET_OS_TV\n@class ABKInAppMessageController;\n@class ABKInAppMessage;\n@class ABKInAppMessageViewController;\n#endif\n\n@class ABKUser;\n@class ABKFeedController;\n@class ABKContentCardsController;\n@class ABKLocationManager;\n@protocol ABKInAppMessageControllerDelegate;\n@protocol ABKIDFADelegate;\n@protocol ABKURLDelegate;\n@protocol ABKImageDelegate;\n@protocol ABKSdkAuthenticationDelegate;\n\nNS_ASSUME_NONNULL_BEGIN\n/* ------------------------------------------------------------------------------------------------------\n * Keys for Braze startup options\n */\n\n/*!\n * If you want to set the request policy at app startup time (useful for avoiding any automatic data requests made by\n * Braze at startup if you're looking to have full manual control). You can include one of the\n * ABKRequestProcessingPolicy enum values as the value for the ABKRequestProcessingPolicyOptionKey in the appboyOptions\n * dictionary.\n */\nextern NSString *const ABKRequestProcessingPolicyOptionKey;\n\n/*!\n * Sets the data flush interval (in seconds). This only has an effect when the request processing mode is set to\n * ABKAutomaticRequestProcessing (which is the default). Values are converted into NSTimeIntervals and must be greater\n * than 1.0.\n */\nextern NSString *const ABKFlushIntervalOptionKey;\n\n/*!\n * This key can be set to YES or NO and will configure whether Braze will automatically collect location (if the user permits).\n * If set to YES, Braze will collect location if authorized.\n * If it is set to NO or omitted, location will not be recorded for the user unless you manually\n * call setUserLastKnownLocation on ABKUser.\n */\nextern NSString *const ABKEnableAutomaticLocationCollectionKey;\n\n/*!\n * This key can be set to YES or NO and will configure whether geofences are enabled.\n * If set to YES, geofences will be enabled.\n * If set to NO, geofences will be disabled.\n * If the field is omitted, we will use the value of ABKEnableAutomaticLocationCollectionKey.\n */\nextern NSString *const ABKEnableGeofencesKey;\n\n/*!\n * This key can be set to YES or NO and will configure whether geofence requests are made automatically.\n * If set to YES, geofence requests will not be made automatically.\n * If set to NO, geofence requests will be made automatically. This is the default value when you have geofences enabled.\n */\nextern NSString *const ABKDisableAutomaticGeofenceRequestsKey;\n\n/*!\n * This key can be set to an instance of a class that extends ABKIDFADelegate, which can be used to pass advertiser tracking information to to Braze.\n */\nextern NSString *const ABKIDFADelegateKey;\n\n/*!\n * This key can be set to a custom API endpoint. This gets sent in the format sdk.api.braze.eu.\n */\nextern NSString *const ABKEndpointKey;\n\n/*!\n * This key can be set to an instance of a class that conforms to the ABKURLDelegate protocol, allowing it to handle URLs in a custom way.\n */\nextern NSString *const ABKURLDelegateKey;\n\n/*!\n * This can can be set to an instance of a class that conforms to the ABKImageDelegate protocol, allowing flexibility for using custom image libraries.\n */\nextern NSString *const ABKImageDelegateKey;\n\n/*!\n * This key can be set to an instance of a class that conforms to the ABKInAppMessageControllerDelegate protocol, allowing it to handle in-app messages in a custom way.\n */\nextern NSString *const ABKInAppMessageControllerDelegateKey;\n\n/*!\n * This key can be set YES or NO and will configure whether a modal in-app message will be dismissed when the user clicks\n * outside of the in-app message.\n * If set to YES, the in-app message will be dismissed.\n * If set to NO, the in-app message will not be dismissed. This is the default value.\n */\nextern NSString *const ABKEnableDismissModalOnOutsideTapKey;\n\n/*!\n * This key can be set YES or NO and will configure whether the SDK Authentication feature is enabled.\n */\nextern NSString *const ABKEnableSDKAuthenticationKey;\n\n/*!\n * This key can can be set to an instance of a class that conforms to the ABKSdkAuthenticationDelegate protocol, allowing it to handle\n * SDK Authentication errors. Setting this delegate will cause the delegate method `handleSdkAuthenticationError:` to get called in\n * the event of an SDK Authentication error.\n */\nextern NSString *const ABKSdkAuthenticationDelegateKey;\n\n/*!\n * Set the time interval for session time out (in seconds). This will affect the case when user has a session shorter than\n * the set time interval. In that case, the session won't be close even though the user closed the app, but will continue until\n * it times out. The value should be an integer bigger than 0.\n */\nextern NSString *const ABKSessionTimeoutKey;\n\n/*!\n * Set the minimum time interval in seconds between triggers. After a trigger happens, we will ignore any triggers until\n * the minimum time interval elapses. The default value is 30s. The minimum valid value is 0s.\n */\nextern NSString *const ABKMinimumTriggerTimeIntervalKey;\n\n/*!\n * Key to report the SDK flavor currently being used.  For internal use only.\n */\nextern NSString *const ABKSDKFlavorKey;\n\n/*!\n * Key to specify an allowlist for device fields that are collected by the Braze SDK.\n *\n * To specify allowlisted device fields, assign the bitwise `OR` of desired fields to this key. Fields are defined\n * in `ABKDeviceOptions`. To turn off all fields, set the value of this key to `ABKDeviceOptionNone`. By default,\n * all fields are collected.\n */\nextern NSString *const ABKDeviceAllowlistKey;\n\n/*!\n * This key is deprecated in favor of ABKDeviceAllowlistKey. See ABKDeviceAllowlistKey for more details.\n */\nextern NSString *const ABKDeviceWhitelistKey __deprecated_msg(\"ABKDeviceWhitelistKey is deprecated. Please use ABKDeviceAllowlistKey instead.\");\n\nextern NSString *const ABKEphemeralEventsKey;\n\n/*!\n * This key can be set to a string value representing the app group name for the Push Story Notification\n * Content extension. This is required for the SDK to fetch data from and handle user interactions\n * with the Push Story app extension.\n */\nextern NSString *const ABKPushStoryAppGroupKey;\n\n/*!\n * This key can be set to an integer value to specify the level of the log statements output by the Braze SDK.\n *\n * The default log level is 8 and will minimally log info. To enable verbose logging for debugging, use log level 0.\n *\n * This selection will override any LogLevel value set in the Info.plist.\n */\nextern NSString *const ABKLogLevelKey;\n\n/* ------------------------------------------------------------------------------------------------------\n * Enums\n */\n\n/*!\n * Possible values for the SDK's request processing policies:\n *   ABKAutomaticRequestProcessing (default) - All server communication is handled automatically. This includes flushing\n *        analytics data to the server, updating the feed, and requesting new in-app messages. Braze's\n *        communication policy is to perform immediate server requests when user facing data is required (new in-app messages,\n *        feed refreshes, etc.), and to otherwise perform periodic flushes of new analytics data every few seconds.\n *        The interval between periodic flushes can be set explicitly using the ABKFlushInterval startup option.\n *   ABKAutomaticRequestProcessingExceptForDataFlush - Deprecated. Use ABKManualRequestProcessing.\n *   ABKManualRequestProcessing - The same as ABKAutomaticRequestProcessing, except that updates to\n *        custom attributes and triggering of custom events will not automatically flush to the server. Instead, you\n *        must call requestImmediateDataFlush when you want to synchronize newly updated user data with Braze. Note that\n *        the configuration does not turn off all networking, i.e. requests important to the proper functionality of the Braze\n *        SDK will still occur.\n *\n * Regardless of policy, Braze will intelligently combine requests on the request queue to minimize the total number of\n * requests and their combined payload.\n */\ntypedef NS_ENUM(NSInteger, ABKRequestProcessingPolicy) {\n  ABKAutomaticRequestProcessing,\n  ABKManualRequestProcessing,\n  ABKAutomaticRequestProcessingExceptForDataFlush __deprecated_enum_msg(\"ABKAutomaticRequestProcessingExceptForDataFlush is deprecated. Use ManualRequestProcessing.\") = ABKManualRequestProcessing\n};\n\n/*!\n * Internal enum used to report the SDK flavor being used.\n */\ntypedef NS_ENUM(NSInteger , ABKSDKFlavor) {\n  UNITY = 1,\n  REACT,\n  CORDOVA,\n  XAMARIN,\n  FLUTTER,\n  SEGMENT,\n  MPARTICLE,\n  TEALIUM\n};\n\ntypedef NS_OPTIONS(NSUInteger, ABKDeviceOptions) {\n  ABKDeviceOptionNone = 0,\n  ABKDeviceOptionResolution = (1 << 0),\n  ABKDeviceOptionCarrier = (1 << 1),\n  ABKDeviceOptionLocale = (1 << 2),\n  ABKDeviceOptionModel = (1 << 3),\n  ABKDeviceOptionOSVersion = (1 << 4),\n  // Note: The ABKDeviceOptionIDFV allowlist key currently has no effect.\n  // IDFV is read regardless of allowlist settings due to its\n  // role as the primary device identifier within the Braze system.\n  ABKDeviceOptionIDFV = (1 << 5),\n  ABKDeviceOptionIDFA = (1 << 6),\n  ABKDeviceOptionPushEnabled = (1 << 7),\n  ABKDeviceOptionTimezone = (1 << 8),\n  ABKDeviceOptionPushAuthStatus = (1 << 9),\n  ABKDeviceOptionAdTrackingEnabled = (1 << 10),\n  ABKDeviceOptionPushDisplayOptions = (1 << 11),\n  ABKDeviceOptionAll = ~ABKDeviceOptionNone\n};\n\n/*!\n * Possible channels supported by the SDK.\n */\ntypedef NS_ENUM(NSInteger, ABKChannel) {\n  ABKPushNotificationChannel,\n  ABKInAppMessageChannel,\n  ABKNewsFeedChannel,\n  ABKContentCardChannel,\n  ABKUnknownChannel __deprecated_enum_msg(\"ABKUnknownChannel will be removed in a future update.\")\n};\n\n/*\n * Braze Public API: Appboy\n */\n@interface Appboy : NSObject\n\n/* ------------------------------------------------------------------------------------------------------\n * Initialization\n */\n\n/*!\n * Get the Appboy singleton.  Returns nil if accessed before startWithApiKey: called.\n */\n+ (nullable Appboy *)sharedInstance;\n\n/*!\n * Get the Appboy singleton.  Throws an exception if accessed before startWithApiKey: is called.\n */\n+ (nonnull Appboy *)unsafeInstance;\n\n/*!\n * @param apiKey The app's API key\n * @param application the current app\n * @param launchOptions The options NSDictionary that you get from application:didFinishLaunchingWithOptions\n *\n * @discussion Starts up Braze and tells it that your app is done launching. You should call this\n * method in your App Delegate application:didFinishLaunchingWithOptions method before calling makeKeyAndVisible,\n * accessing [Appboy sharedInstance] or otherwise rendering Braze view controllers. Your apiKey comes from\n * the Braze dashboard where you registered your app.\n */\n+ (void)startWithApiKey:(NSString *)apiKey\n          inApplication:(UIApplication *)application\n      withLaunchOptions:(nullable NSDictionary *)launchOptions;\n\n/*!\n * @param apiKey The app's API key\n * @param application The current app\n * @param launchOptions The options NSDictionary that you get from application:didFinishLaunchingWithOptions\n * @param appboyOptions An optional NSDictionary with startup configuration values for Braze. See below\n * for more information.\n *\n * @discussion Starts up Braze and tells it that your app is done launching. You should call this\n * method in your App Delegate application:didFinishLaunchingWithOptions method before calling makeKeyAndVisible,\n * accessing [Appboy sharedInstance] or otherwise rendering Braze view controllers. Your apiKey comes from\n * the Braze dashboard where you registered your app.\n */\n+ (void)startWithApiKey:(NSString *)apiKey\n          inApplication:(UIApplication *)application\n      withLaunchOptions:(nullable NSDictionary *)launchOptions\n      withAppboyOptions:(nullable NSDictionary *)appboyOptions;\n\n/* ------------------------------------------------------------------------------------------------------\n * Properties\n */\n\n/*!\n * The current app user.\n * See ABKUser.h and changeUser:userId below.\n */\n@property (readonly) ABKUser *user;\n\n@property (readonly) ABKFeedController *feedController;\n\n@property (readonly) ABKContentCardsController *contentCardsController;\n\n/*!\n* The policy regarding processing of network requests by the SDK. See the enumeration values for more information on\n* possible options. This value can be set at runtime, or can be injected in at startup via the appboyOptions dictionary.\n*\n* Any time the request processing policy is set to manual, any scheduled flush of the queue is canceled, but if the\n* request queue was already processing, the current queue will finish processing. If you need to cancel in flight\n* requests, you need to call <pre>[[Appboy sharedInstance] shutdownServerCommunication]</pre>.\n*\n* Setting the request policy does not automatically cause a flush to occur, it just allows for a flush to be scheduled\n* the next time an eligible request is enqueued. To force an immediate flush after changing the request processing\n* policy, invoke <pre>[[Appboy sharedInstance] requestImmediateDataFlush]</pre>.\n*/\n@property ABKRequestProcessingPolicy requestProcessingPolicy;\n\n/*!\n * A class extending ABKIDFADelegate can be set to provide the IDFA to Braze.\n */\n@property (nonatomic, strong, nullable) id<ABKIDFADelegate> idfaDelegate;\n\n/*!\n * A class conforming to ABKSdkAuthenticationDelegate can be set to handle SDK Authentication errors.\n */\n@property (nonatomic, strong, nullable) id<ABKSdkAuthenticationDelegate> sdkAuthenticationDelegate;\n\n/*!\n * A custom `NSURLSessionConfiguration` for configuring network session parameters.\n */\n@property (nonatomic, readonly) NSURLSessionConfiguration *urlSessionConfiguration;\n\n#if !TARGET_OS_TV\n/*!\n * The current in-app message manager.\n * See ABKInAppMessageController.h.\n */\n@property (readonly) ABKInAppMessageController *inAppMessageController;\n\n/*!\n * The Braze location manager provides access to location related functionality in the Braze SDK.\n * See ABKLocationManager.h.\n */\n@property (nonatomic, readonly) ABKLocationManager *locationManager;\n\n/*!\n * A class conforming to the ABKURLDelegate protocol can be set to handle URLs in a custom way.\n */\n@property (nonatomic, weak, nullable) id<ABKURLDelegate> appboyUrlDelegate;\n\n/*!\n * A class conforming to ABKImageDelegate can be set to use a custom image library.\n */\n@property (nonatomic, strong, nullable) id<ABKImageDelegate> imageDelegate;\n\n/*!\n * Property for internal reporting of SDK flavor.\n */\n@property (nonatomic) ABKSDKFlavor sdkFlavor;\n\n#endif\n\n/* ------------------------------------------------------------------------------------------------------\n * Methods\n */\n\n/*!\n * Enqueues a data flush request for the current user and immediately starts processing the network queue. Note that if\n * the queue already contains another request for the current user, that the new data flush request\n * will be merged into the already existing request and only one will execute for that user.\n *\n * If you're using ABKManualRequestProcessing, you only need to call this when you want to force\n * an immediate flush of updated user data.\n */\n- (void)requestImmediateDataFlush;\n\n- (void)flushDataAndProcessRequestQueue __deprecated_msg(\"Please use `requestImmediateDataFlush` instead.\");\n\n/*!\n * Stops all in flight server communication and enables manual request processing control to ensure that no automatic\n * network activity occurs. You should usually only call shutdownServerCommunication if the OS is forcing you to stop\n * background tasks upon exit of your application. To continue normal operation after calling this, you will need to\n * explicitly set the request processing mode back to your desired state.\n */\n- (void)shutdownServerCommunication;\n\n/*!\n* @param userId The new user's ID (from the host application).\n*\n* @discussion\n* This method changes the user's ID. These user IDs should be private and not easily obtained (e.g. not a plain\n* email address or username).\n*\n* When you first start using Braze on a device, the user is considered \"anonymous\". You can use this method to\n* optionally identify a user with a unique ID, which enables the following:\n*\n*   - If the same user is identified on another device, their user profile, usage history and event history will\n*     be shared across devices.\n*\n*   - If your app is used by multiple people, you can assign each of them a unique identifier to track them\n*     separately. Only the most recent user on a particular device will receive push notifications and in-app\n*     messages.\n*\n*   - If you identify a user which has never been identified on another device, the entire history of that user as\n*     an \"anonymous\" user on this device will be preserved and associated with the newly identified user.\n*\n*   - However, if you identify a user which *has* been identified on another device, the previous anonymous\n*     history of the user on this device will not be added to the already existing profile for that user.\n*\n*   - Note that switching from one an anonymous user to an identified user or from one identified user to another is\n*     a relatively costly operation. When you request the\n*     user switch, the current session for the previous user is automatically closed and a new session is started.\n*     Braze will also automatically make a data refresh request to get the news feed, in-app message and other information\n*     for the new user.\n*\n*  Note: Once you identify a user, you cannot go back to the \"anonymous\" profile. The transition from anonymous\n*  to identified tracking only happens once because the initial anonymous user receives special treatment\n*  to allow for preservation of their history. We recommend against changing the user id just because your app\n*  has entered a \"logged out\" state because it separates this device from the user profile and thus you will be\n*  unable to target the previously logged out user with re-engagement campaigns. If you anticipate multiple\n*  users on the same device, but only want to target one of them when your app is in a logged out state, we recommend\n*  separately keeping track of the user ID you want to target while logged out and switching back to\n*  that user ID as part of your app's logout process.\n*/\n- (void)changeUser:(NSString *)userId;\n\n/*!\n * @param userId The new user's ID (from the host application)\n * @param signature The SDK Authentication signature for the user being identified.\n *\n * @discussion See documantation for `changeUser:` above\n */\n- (void)changeUser:(NSString *)userId sdkAuthSignature:(nullable NSString *)signature;\n\n/*!\n * @param signature The SDK Authentication signature for the current user\n *\n * @discussion Sets the signature used for SDK authentication for the current user.\n */\n- (void)setSdkAuthenticationSignature:(NSString *)signature;\n\n/*!\n * @discussion Unsubscribe from SDK Authentication errors. After this method is called,\n * the ABKSdkAuthenticationDelegate method `handleSdkAuthenticationError:` will not be called in the event of\n * an SDK Authentication error.\n */\n- (void)unsubscribeFromSdkAuthenticationErrors;\n\n/*!\n * @param eventName The name of the event to log.\n *\n * @discussion Adds an app specific event to event tracking log that's lazily pushed up to the server. Think of\n *   events like counters. That is, each time you log an event, we'll update a counter for that user. Events should be\n *   fairly broad like \"beat level 1\" or \"watched video\" instead of something more specific like \"watched Katy\n *   Perry's Last Friday Night\" so you can create more broad user segments for targeting.\n *\n * <pre>\n * [[Appboy sharedInstance] logCustomEvent:@\"clicked_button\"];\n * </pre>\n */\n- (void)logCustomEvent:(NSString *)eventName;\n\n/*!\n * @param eventName The name of the event to log.\n * @param properties An <code>NSDictionary</code> of properties to associate with this purchase. Property keys are non-empty <code>NSString</code> objects with\n * <= 255 characters and no leading dollar signs.  Property values can be <code>NSNumber</code> booleans, integers, floats < 62 bits, <code>NSDate</code> objects,\n * <code>NSString</code> objects with <= 255 characters, or any JSON Encodable object including NSArray and NSDictionary of the previous data types (nested properties). Total length of encoded properties must be under 50 KB.\n *\n * @discussion Adds an app specific event to event tracking log that's lazily pushed up to the server. Think of\n *   events like counters. That is, each time you log an event, we'll update a counter for that user. Events should be\n *   fairly broad like \"beat level 1\" or \"watched video\" instead of something more specific like \"watched Katy\n *   Perry's Last Friday Night\" so you can create more broad user segments for targeting.\n *\n * <pre>\n * [[Appboy sharedInstance] logCustomEvent:@\"clicked_button\" properties:@{@\"key1\":@\"val\"}];\n * </pre>\n */\n- (void)logCustomEvent:(NSString *)eventName withProperties:(nullable NSDictionary *)properties;\n\n/*!\n * This method is equivalent to calling logPurchase:inCurrency:atPrice:withQuantity:andProperties: with a quantity of 1 and nil properties.\n * Please see logPurchase:inCurrency:atPrice:withQuantity:andProperties: for more information.\n */\n- (void)logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price;\n\n/*!\n * This method is equivalent to calling logPurchase:inCurrency:atPrice:withQuantity:andProperties with a quantity of 1.\n * Please see logPurchase:inCurrency:atPrice:withQuantity:andProperties: for more information.\n */\n- (void)logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price withProperties:(nullable NSDictionary *)properties;\n\n/*!\n * This method is equivalent to calling logPurchase:inCurrency:atPrice:withQuantity:andProperties with nil properties.\n * Please see logPurchase:inCurrency:atPrice:withQuantity:andProperties: for more information.\n */\n- (void)logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price withQuantity:(NSUInteger)quantity;\n\n/*!\n * @param productIdentifier A String indicating the product that was purchased. Usually the product identifier in the\n * iTunes store.\n * @param currencyCode Currencies should be represented as an ISO 4217 currency code. Prices should\n * be sent in decimal format, with the same base units as are provided by the SKProduct class. Callers of this method\n * who have access to the NSLocale object for the purchase in question (which can be obtained from SKProduct listings\n * provided by StoreKit) can obtain the currency code by invoking:\n * <pre>[locale objectForKey:NSLocaleCurrencyCode]</pre>\n * Supported currency symbols include: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF,\n * BMD, BND, BOB, BRL, BSD, BTC, BTN, BWP, BYR, BZD, CAD, CDF, CHF, CLF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF,\n * DKK, DOP, DZD, EEK, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF,\n * IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD,\n * LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MTL, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR,\n * NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLL, SOS, SRD,\n * STD, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VEF, VND, VUV, WST, XAF, XAG,\n * XAU, XCD, XDR, XOF, XPD, XPF, XPT, YER, ZAR, ZMK, ZMW and ZWL. Any other provided currency symbol will result in a logged\n * warning and no other action taken by the SDK.\n * @param price Prices should be reported as NSDecimalNumber objects. Base units are treated the same as with SKProduct\n * from StoreKit and depend on the currency. As an example, USD should be reported as Dollars.Cents, whereas JPY should\n * be reported as a whole number of Yen. All provided NSDecimalNumber values will have NSRoundPlain rounding applied\n * such that a maximum of two digits exist after their decimal point.\n * @param quantity An unsigned number to indicate the purchase quantity. This number must be greater than 0 but no larger than 100.\n * @param properties An <code>NSDictionary</code> of properties to associate with this purchase. Property keys are non-empty <code>NSString</code> objects with\n * <= 255 characters and no leading dollar signs.  Property values can be <code>NSNumber</code> integers, floats, booleans < 62 bits in length, <code>NSDate</code> objects or\n * <code>NSString</code> objects with <= 255 characters.\n *\n * @discussion Logs a purchase made in the application.\n *\n * Note: Braze supports purchases in multiple currencies. Purchases that you report in a currency other than USD will\n * be shown in the dashboard in USD based on the exchange rate at the date they were reported.\n */\n- (void)logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price withQuantity:(NSUInteger)quantity andProperties:(nullable NSDictionary *)properties;\n\n/*!\n * If you're displaying cards on your own instead of using ABKFeedViewController, you should still report impressions of\n * the news feed back to Braze with this method so that your campaign reporting features still work in the dashboard.\n */\n- (void)logFeedDisplayed;\n\n/*!\n * If you're displaying content cards on your own instead of using ABKContentCardsViewController, you should still report\n * impressions of the content cards back to Braze with this method so that your campaign reporting features still work\n * in the dashboard.\n */\n- (void)logContentCardsDisplayed;\n\n/*!\n * Enqueues a news feed request for the current user. Note that if the queue already contains another request for the\n * current user, that the new feed request will be merged into the already existing request and only one will execute\n * for that user.\n *\n * When the new cards for news feed return from Braze server, the SDK will post an ABKFeedUpdatedNotification with an\n * ABKFeedUpdatedIsSuccessfulKey in the notification's userInfo dictionary to indicate if the news feed request is successful\n * or not. For more detail about the ABKFeedUpdatedNotification and the ABKFeedUpdatedIsSuccessfulKey, please check ABKFeedController.\n */\n- (void)requestFeedRefresh;\n\n/*!\n * Enqueues a content cards request for the current user.\n */\n- (void)requestContentCardsRefresh;\n\n/*!\n * Manually request geofences with a specific location.\n */\n- (void)requestGeofencesWithLongitude:(double)longitude latitude:(double)latitude;\n\n/*!\n * Get the device ID - the IDFV - which will reset if all apps for a given vendor are removed from the device.\n *\n * @return The device ID.\n */\n- (NSString *)getDeviceId;\n\n\n#if !TARGET_OS_TV\n\n/*!\n * @param deviceToken The device's push token.\n *\n * @discussion This method posts a token to Braze servers to associate the token with the current device.\n */\n- (void)registerDeviceToken:(NSData *)deviceToken;\n\n/*!\n * @param application The app's UIApplication object\n * @param notification An NSDictionary passed in from the didReceiveRemoteNotification call\n *\n * @discussion This method forwards remote notifications to Braze. Call it from the application:didReceiveRemoteNotification\n * method of your App Delegate.\n */\n- (void)registerApplication:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification NS_DEPRECATED_IOS(3_0, 10_0, \"`registerApplication:didReceiveRemoteNotification:` is deprecated in iOS 10, please use `registerApplication:didReceiveRemoteNotification:fetchCompletionHandler:` instead.\");\n\n/*!\n * @param application The app's UIApplication object\n * @param notification An NSDictionary passed in from the didReceiveRemoteNotification:fetchCompletionHandler: call\n * @param completionHandler A block passed in from the didReceiveRemoteNotification:fetchCompletionHandler: call\n *\n * @discussion This method forwards remote notifications to Braze. If the completionHandler is passed in when\n * the method is called, Braze will call the completionHandler. However, if the completionHandler is not passed in,\n * it is the host app's responsibility to call the completionHandler.\n * Call it from the application:didReceiveRemoteNotification:fetchCompletionHandler: method of your App Delegate.\n */\n- (void)registerApplication:(UIApplication *)application\ndidReceiveRemoteNotification:(NSDictionary *)notification\n     fetchCompletionHandler:(nullable void (^)(UIBackgroundFetchResult))completionHandler;\n\n/*!\n * @param identifier The action identifier passed in from the handleActionWithIdentifier:forRemoteNotification:.\n * @param userInfo An NSDictionary passed in from the handleActionWithIdentifier:forRemoteNotification: call.\n * @param completionHandler A block passed in from the didReceiveRemoteNotification:fetchCompletionHandler: call\n *\n * @discussion This method forwards remote notifications and the custom action chosen by user to Braze. Call it from\n * the application:handleActionWithIdentifier:forRemoteNotification: method of your App Delegate.\n */\n- (void)getActionWithIdentifier:(NSString *)identifier\n          forRemoteNotification:(NSDictionary *)userInfo\n              completionHandler:(nullable void (^)(void))completionHandler NS_DEPRECATED_IOS(8_0, 10_0,\"`getActionWithIdentifier:forRemoteNotification:completionHandler:` is deprecated in iOS 10, please use `userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:` instead.\");\n\n/*!\n * @param center The app's current UNUserNotificationCenter object\n * @param response The UNNotificationResponse object passed in from the didReceiveNotificationResponse:withCompletionHandler: call\n * @param completionHandler A block passed in from the didReceiveNotificationResponse:withCompletionHandler: call. Braze will call\n * it at the end of the method if one is passed in. If you prefer to handle the completionHandler youself, please pass nil to Braze.\n *\n * @discussion This method forwards the response of the notification to Braze after user interacted with the notification.\n * Call it from the userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: method of your App Delegate.\n */\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center\ndidReceiveNotificationResponse:(UNNotificationResponse *)response\n         withCompletionHandler:(nullable void (^)(void))completionHandler NS_AVAILABLE_IOS(10_0);\n\n/*!\n * @param pushAuthGranted The boolean value passed in from completionHandler in UNUserNotificationCenter's\n * requestAuthorizationWithOptions:completionHandler: method, which indicates if the push authorization\n * was granted or not.\n *\n * @discussion This method forwards the push authorization result to Braze after the user interacts with\n * the notification prompt.\n * Call it from the UNUserNotificationCenter's requestAuthorizationWithOptions:completionHandler: method\n * when you prompt users to enable push.\n */\n- (void)pushAuthorizationFromUserNotificationCenter:(BOOL)pushAuthGranted;\n\n#endif\n\n/*!\n * Adds SDK Metadata values to those automatically collected by the SDK.\n *\n * Metadata tell Braze how the SDK is integrated (e.g. wrapper, package manager, etc.)\n *\n * @param metadata The metadata values reflecting the current SDK integration.\n */\n- (void)addSdkMetadata:(NSArray<ABKSdkMetadata> *)metadata;\n\n/* ------------------------------------------------------------------------------------------------------\n * Data processing configuration methods.\n */\n\n/*!\n * @discussion This method immediately wipes all data from the Braze iOS SDK. After this method is\n * called, the sharedInstance singleton will be nulled out and Braze functionality will be disabled\n * until the next call to startWithApiKey: in a subsequent app run. All references to the previous\n * singleton should be released.\n *\n * Note that the next call to startWithApiKey: must take place in a subsequent app run. Initializing the SDK\n * within the same app run after calling this method is not supported.\n *\n * The SDK will automatically re-enable itself when startWithApiKey: is called. There is\n * no need to call requestEnableSDKOnNextAppRun: to re-enable the SDK. wipeDataAndDisableForAppRun:\n * may be used at any time, including while the SDK is otherwise disabled.\n *\n * Note that if you are using unsafeInstance:, further calls to unsafeInstance: after using this\n * method will cause an uncaught exception to be thrown. We do not recommend using this method in\n * concert with unsafeInstance:.\n */\n+ (void)wipeDataAndDisableForAppRun;\n\n/*!\n * @discussion This method immediately disables the Braze iOS SDK. After this method is called, the\n * sharedInstance singleton will be nulled out and Braze functionality will be disabled until the\n * SDK is re-enabled via a call to requestEnableSDKOnNextAppRun: and re-initialized in a subsequent\n * app run via a call to startWithApiKey:. All references to the previous singleton should be released.\n *\n * Note that the next call to startWithApiKey: must take place in a subsequent app run. Initializing the SDK\n * within the same app run after calling this method is not supported.\n *\n * Unlike with wipeDataAndDisableForAppRun:, calling requestEnableSDKOnNextAppRun: is required to\n * re-enable the SDK after the method is called.\n *\n * Note that if you are using unsafeInstance:, further calls to unsafeInstance: after using this\n * method will cause an exception to be thrown. We do not recommend using this method in concert\n * with unsafeInstance:.\n */\n+ (void)disableSDK;\n\n/*!\n * @discussion This method requests the Braze iOS SDK to be re-enabled on the next app run.\n * After this method is called, the following call to startWithApiKey: will successfully\n * re-enable the SDK. Braze functionality will remain disabled until that point.\n *\n * Note that this method does not re-initialize the Appboy singleton on its own nor re-enable\n * Braze functionality immediately.\n */\n+ (void)requestEnableSDKOnNextAppRun;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyKit/include/AppboyKit.h",
    "content": "#import \"Appboy.h\"\n#import \"ABKUser.h\"\n#import \"ABKFacebookUser.h\"\n#import \"ABKTwitterUser.h\"\n#import \"ABKAttributionData.h\"\n\n// Cards\n#import \"ABKCard.h\"\n#import \"ABKBannerCard.h\"\n#import \"ABKCaptionedImageCard.h\"\n#import \"ABKClassicCard.h\"\n#import \"ABKTextAnnouncementCard.h\"\n\n// Content Card\n#import \"ABKContentCard.h\"\n#import \"ABKBannerContentCard.h\"\n#import \"ABKCaptionedImageContentCard.h\"\n#import \"ABKClassicContentCard.h\"\n\n// SDK Authentication\n#import \"ABKSdkAuthenticationError.h\"\n#import \"ABKSdkAuthenticationDelegate.h\"\n\n#if !TARGET_OS_TV\n// In-app Message\n#import \"ABKInAppMessage.h\"\n#import \"ABKInAppMessageSlideup.h\"\n#import \"ABKInAppMessageImmersive.h\"\n#import \"ABKInAppMessageModal.h\"\n#import \"ABKInAppMessageFull.h\"\n#import \"ABKInAppMessageHTML.h\"\n#import \"ABKInAppMessageHTMLFull.h\"\n#import \"ABKInAppMessageHTMLBase.h\"\n#import \"ABKInAppMessageControl.h\"\n#import \"ABKInAppMessageControllerDelegate.h\"\n#import \"ABKInAppMessageController.h\"\n#import \"ABKInAppMessageButton.h\"\n#import \"ABKInAppMessageWebViewBridge.h\"\n#import \"ABKInAppMessageUIControlling.h\"\n#import \"ABKInAppMessageDarkTheme.h\"\n#import \"ABKInAppMessageDarkButtonTheme.h\"\n\n// News Feed\n#import \"ABKFeedController.h\"\n\n// Content Cards Feed\n#import \"ABKContentCardsController.h\"\n\n// IDFA\n#import \"ABKIDFADelegate.h\"\n\n// SDWebImage\n#import \"ABKSDWebImageProxy.h\"\n\n// ABKImageDelegate\n#import \"ABKImageDelegate.h\"\n\n// Location\n#import \"ABKLocationManager.h\"\n#import \"ABKLocationManagerProvider.h\"\n\n#import \"ABKURLDelegate.h\"\n#import \"ABKPushUtils.h\"\n#import \"ABKModalWebViewController.h\"\n#import \"ABKNoConnectionLocalization.h\"\n\n#endif\n"
  },
  {
    "path": "AppboyPushStory/Dummy.m",
    "content": ""
  },
  {
    "path": "AppboyPushStory/include/AppboyPushStory/ABKStoriesView.h",
    "content": "// This class is an alternative version of iCarousel(https://github.com/nicklockwood/iCarousel).\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wunknown-pragmas\"\n#pragma clang diagnostic ignored \"-Wreserved-id-macro\"\n#pragma clang diagnostic ignored \"-Wobjc-missing-property-synthesis\"\n\n#import <Availability.h>\n#import <QuartzCore/QuartzCore.h>\n#import <UIKit/UIKit.h>\n\ntypedef NS_ENUM(NSInteger, ABKStoriesType) {\n    CoverFlow = 0,\n    Rotary,\n    InvertedRotary,\n    Cylinder,\n    InvertedCylinder,\n    Wheel,\n    InvertedWheel,\n    Linear,\n    TimeMachine,\n    InvertedTimeMachine\n};\n\nNS_ASSUME_NONNULL_BEGIN\n\n@protocol ABKStoriesDataSource;\n\n@interface ABKStoriesView : UIView\n\n@property (nonatomic, weak) __nullable id<ABKStoriesDataSource> dataSource;\n@property (nonatomic, assign) ABKStoriesType type;\n@property (nonatomic, assign) NSInteger currentPageIndex;\n@property (nonatomic, assign) CGFloat pageWidth;\n\n- (void)scrollToPageAtIndex:(NSInteger)index animated:(BOOL)animated;\n- (void)reloadData;\n\n@end\n\n@protocol ABKStoriesDataSource <NSObject>\n\n- (NSInteger)numberOfPagesInStoriesView:(ABKStoriesView *)storiesView;\n- (UIView *)storyView:(nullable UIView *)view atIndex:(NSInteger)index inStoriesView:(ABKStoriesView *)storiesView;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n#pragma clang diagnostic pop\n"
  },
  {
    "path": "AppboyPushStory/include/AppboyPushStory/ABKStoriesViewDataSource.h",
    "content": "#import <Foundation/Foundation.h>\n#import <UserNotifications/UserNotifications.h>\n#import <UserNotificationsUI/UserNotificationsUI.h>\n#import \"ABKStoriesView.h\"\n\n@interface ABKStoriesViewDataSource : NSObject<ABKStoriesDataSource>\n\n@property (nonatomic) NSMutableArray *images;\n@property (nonatomic) ABKStoriesView *storiesView;\n@property (nonatomic) NSArray<NSDictionary *> *storyPages;\n@property (nonatomic) NSString *appGroup;\n\n- (instancetype)initWithNotification:(UNNotification *)notification\n                         storiesView:(ABKStoriesView *)storiesView\n                            appGroup:(NSString *)appGroup API_AVAILABLE(ios(10.0), macCatalyst(14.0));\n\n- (UNNotificationContentExtensionResponseOption)didReceiveNotificationResponse:(UNNotificationResponse *)response API_AVAILABLE(ios(10.0), macCatalyst(14.0));\n\n- (void)viewWillDisappear;\n\n@end\n"
  },
  {
    "path": "AppboyPushStory/include/AppboyPushStory/AppboyPushStory.h",
    "content": "#import <UIKit/UIKit.h>\n\nFOUNDATION_EXPORT double AppboyPushStoryFrameworkVersionNumber;\nFOUNDATION_EXPORT const unsigned char AppboyPushStoryFrameworkVersionString[];\n\n#import \"ABKStoriesView.h\"\n#import \"ABKStoriesViewDataSource.h\"\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/AppboyContentCards.h",
    "content": "// Braze Content Cards View Controllers\n#import \"ABKContentCardsViewController.h\"\n#import \"ABKContentCardsTableViewController.h\"\n\n// Braze Content Cards Cells\n#import \"ABKBannerContentCardCell.h\"\n#import \"ABKBaseContentCardCell.h\"\n#import \"ABKCaptionedImageContentCardCell.h\"\n#import \"ABKClassicContentCardCell.h\"\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/Base.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Done\";\n\"Appboy.content-cards.no-card.text\" = \"We have no updates.\\nPlease check again later.\";\n\"Appboy.content-cards.no-connection.title\" = \"Connection Error\";\n\"Appboy.content-cards.no-connection.message\" = \"Cannot establish network connection.\\nPlease try again later.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/ar.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"تم\";\n\"Appboy.content-cards.no-card.text\" = \"ليس لدينا أي تحديث\\n يرجى التحقق مرة أخرى لاحقاً\";\n\"Appboy.content-cards.no-connection.title\" = \"خلل في الاتصال\";\n\"Appboy.content-cards.no-connection.message\" = \"لا يمكن إجراء الاتصال بالشبكة\\n يرجى تكرار المحاولة لاحقا \";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/cs.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Hotovo\";\n\"Appboy.content-cards.no-card.text\" = \"Nemáme žádné aktualizace.\\nZkontrolujte prosím znovu později.\";\n\"Appboy.content-cards.no-connection.title\" = \"Chyba připojení\";\n\"Appboy.content-cards.no-connection.message\" = \"Nelze navázat síťové připojení.\\nProsím zkuste to znovu později.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/da.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Afsluttet\";\n\"Appboy.content-cards.no-card.text\" = \"Vi har ingen updates.\\nPrøv venligst senere\";\n\"Appboy.content-cards.no-connection.title\" = \"Netværksfejl\";\n\"Appboy.content-cards.no-connection.message\" = \"Kan ikke etablere netværksforbindelse.\\nPrøv venligst senere.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/de.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Fertig\";\n\"Appboy.content-cards.no-card.text\" = \"Derzeit sind keine Updates verfügbar.\\nBitte später noch einmal versuchen.\";\n\"Appboy.content-cards.no-connection.title\" = \"Verbindungsfehler\";\n\"Appboy.content-cards.no-connection.message\" = \"Netzwerkverbindung kann nicht aufgebaut werden.\\nBitte später noch einmal versuchen.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/en.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Done\";\n\"Appboy.content-cards.no-card.text\" = \"We have no updates.\\nPlease check again later.\";\n\"Appboy.content-cards.no-connection.title\" = \"Connection Error\";\n\"Appboy.content-cards.no-connection.message\" = \"Cannot establish network connection.\\nPlease try again later.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/es-419.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Listo\";\n\"Appboy.content-cards.no-card.text\" = \"No tenemos ninguna actualización.\\nVuelva a verificar más tarde.\";\n\"Appboy.content-cards.no-connection.title\" = \"Error de conexión\";\n\"Appboy.content-cards.no-connection.message\" = \"No se puede establecer conexión con la red.\\nPor favor, vuelva a intentarlo más tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/es-MX.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Listo\";\n\"Appboy.content-cards.no-card.text\" = \"No tenemos ninguna actualización.\\nVuelva a verificar más tarde.\";\n\"Appboy.content-cards.no-connection.title\" = \"Error de conexión\";\n\"Appboy.content-cards.no-connection.message\" = \"No se puede establecer conexión con la red.\\nPor favor, vuelva a intentarlo más tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/es.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Finalizado\";\n\"Appboy.content-cards.no-card.text\" = \"No tenemos actualizaciones.\\nPor favor compruébelo más tarde.\";\n\"Appboy.content-cards.no-connection.title\" = \"Error de conexión\";\n\"Appboy.content-cards.no-connection.message\" = \"No se puede establecer conexión de red.\\nPor favor inténtelo más tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/et.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Valmis\";\n\"Appboy.content-cards.no-card.text\" = \"Uuendusi pole praegu saadaval.\\nProovige hiljem uuesti.\";\n\"Appboy.content-cards.no-connection.title\" = \"Üheduse viga\";\n\"Appboy.content-cards.no-connection.message\" = \"Võrguühenduse loomine ebaõnnestus.\\nProovige hiljem uuesti.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/fi.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Valmis\";\n\"Appboy.content-cards.no-card.text\" = \"Päivityksiä ei ole saatavilla.\\nTarkista myöhemmin uudelleen.\";\n\"Appboy.content-cards.no-connection.title\" = \"Yhteysvirhe\";\n\"Appboy.content-cards.no-connection.message\" = \"Verkkoyhteyttä ei voida luoda.\\nYritä myöhemmin uudelleen.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/fil.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Gawa na\";\n\"Appboy.content-cards.no-card.text\" = \"Wala kaming mga update.\\nMangyaring suriin muli sa ibang pagkakataon.\";\n\"Appboy.content-cards.no-connection.title\" = \"May Error sa Koneksyon\";\n\"Appboy.content-cards.no-connection.message\" = \"Hindi makapagtatag ng koneksyon sa network.\\nMangyaring subukan muli mamaya.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/fr.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Fini\";\n\"Appboy.content-cards.no-card.text\" = \"Aucune mise à jour disponible.\\nVeuillez vérifier ultérieurement.\";\n\"Appboy.content-cards.no-connection.title\" = \"Erreur de connexion.\";\n\"Appboy.content-cards.no-connection.message\" = \"Impossible d'établir la connexion réseau.\\nVeuillez réessayer ultérieurement.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/he.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"סיום\";\n\"Appboy.content-cards.no-card.text\" = \"אין לנו עדכונים\\nבבקשה בדוק שוב בקרוב\";\n\"Appboy.content-cards.no-connection.title\" = \"שגיאת חיבור רשת\";\n\"Appboy.content-cards.no-connection.message\" = \"לא ניתן לקבוע חיבור רשת\\nבבקשה נסה שוב בקרוב\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/hi.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"कर दिया गया\";\n\"Appboy.content-cards.no-card.text\" = \"हमारे पास कोई अपडेट नहीं हैं। कृपया बाद में फिर से जाँच करें.।\";\n\"Appboy.content-cards.no-connection.title\" = \"कनेक्शन की त्रुटि\";\n\"Appboy.content-cards.no-connection.message\" = \"नेटवर्क कनेक्शन स्थापित नहीं हो रहा है। कृपया बाद में दोबारा प्रयास करें।.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/id.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Selesai\";\n\"Appboy.content-cards.no-card.text\" = \"Kami tidak memiliki pembaruan.\\nCoba lagi nanti.\";\n\"Appboy.content-cards.no-connection.title\" = \"Kesalahan Koneksi\";\n\"Appboy.content-cards.no-connection.message\" = \"Tidak bisa melakukan koneksi jaringan.\\nCoba lagi nanti.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/it.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Fatto\";\n\"Appboy.content-cards.no-card.text\" = \"Non ci sono aggiornamenti.\\nRicontrollare più tardi.\";\n\"Appboy.content-cards.no-connection.title\" = \"Errore di connessione\";\n\"Appboy.content-cards.no-connection.message\" = \"Impossibile stabilire una connessione di rete.\\nRiprovare più tardi.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/ja.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"完了\";\n\"Appboy.content-cards.no-card.text\" = \"アップデートはありません。\\n後でもう一度確認してください。\";\n\"Appboy.content-cards.no-connection.title\" = \"接続エラー\";\n\"Appboy.content-cards.no-connection.message\" = \"ネットワークに接続できません。\\n後でもう一度試してください。\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/km.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"បានសម្រេច\";\n\"Appboy.content-cards.no-card.text\" = \"យើងមិនមានការធ្វើបច្ចុប្បន្នភាពទេ។ សូមពិនិត្យមើលម្តងទៀតនៅពេលក្រោយ.\";\n\"Appboy.content-cards.no-connection.title\" = \"កំហុសឆ្គងក្នុងការតភ្ជាប់\";\n\"Appboy.content-cards.no-connection.message\" = \"មិនអាចបង្កើតបណ្តាញតភ្ជាប់បានទេ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/ko.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"완료 \";\n\"Appboy.content-cards.no-card.text\" = \"업데이트가 없습니다.\\n다음에 다시 확인해 주십시오.\";\n\"Appboy.content-cards.no-connection.title\" = \"연결 오류\";\n\"Appboy.content-cards.no-connection.message\" = \"네트워크 연결을 할 수 없습니다.\\n나중에 다시 시도해 주십시오.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/lo.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"ສຳ​ເລັດ\";\n\"Appboy.content-cards.no-card.text\" = \"ພວກ​ເຮົາ​ບໍ່​ມີ​ການ​ອັບ​ເດດ.\\nກະ​ລຸ​ນາ​ລອງ​ໃໝ່​ພາຍ​ຫຼັງ.\";\n\"Appboy.content-cards.no-connection.title\" = \"ການ​ເຊື່ອມ​ຕໍ່​ຜິດ​ພາດ\";\n\"Appboy.content-cards.no-connection.message\" = \"ບໍ່​ສາ​ມາດ​ຕັ້ງ​ການ​ເຊື່ອມ​ຕໍ່​ເຄືອ​ຂ່າຍ​ໄດ້.\\nກະ​ລຸ​ນາ​ລອງ​ໃໝ່​ພາຍ​ຫຼັງ.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/ms.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Selesai\";\n\"Appboy.content-cards.no-card.text\" = \"Tiada kemas kini.\\nSila periksa kemudian.\";\n\"Appboy.content-cards.no-connection.title\" = \"Ralat Sambungan\";\n\"Appboy.content-cards.no-connection.message\" = \"Tidak boleh membuat sambungan rangkaian.\\nSila cuba kemudian.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/my.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"ျပီးျပီ\";\n\"Appboy.content-cards.no-card.text\" = \"ကၽႊႏု္ပ္ တို႕တြင္ အသစ္တင္ျပရန္မရွိပါ။ ေက်းဇူးျပဳ၍ ေနာင္တြင္ ထပ္စစ္ပါ။ .\";\n\"Appboy.content-cards.no-connection.title\" = \"ဆက္သြယ္ေရး အမွား\";\n\"Appboy.content-cards.no-connection.message\" = \"ကြန္ယက္ဆက္သြယ္ျခင္း မျပဳလုပ္ႏိုင္ပါ။ ေက်းဇူးျပဳ၍ ထပ္မံၾကိဳးစားၾကည္႕ပါ။.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/nb.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Ferdig\";\n\"Appboy.content-cards.no-card.text\" = \"Vi har ingen oppdateringer.\\nVennligst sjekk igjen senere.\";\n\"Appboy.content-cards.no-connection.title\" = \"Tilkoblingsfeil\";\n\"Appboy.content-cards.no-connection.message\" = \"Kan ikke etablere nettverkstilkobling.\\nVennligst prøv igjen senere.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/nl.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Gereed\";\n\"Appboy.content-cards.no-card.text\" = \"Er zijn geen updates.\\nProbeer het later opnieuw.\";\n\"Appboy.content-cards.no-connection.title\" = \"Verbindingsfout\";\n\"Appboy.content-cards.no-connection.message\" = \"Kan geen netwerkverbinding maken.\\nProbeer het later opnieuw.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/pl.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Gotowe\";\n\"Appboy.content-cards.no-card.text\" = \"Brak aktualizacji.\\nProszę sprawdzić ponownie później.\";\n\"Appboy.content-cards.no-connection.title\" = \"Błąd połączenia\";\n\"Appboy.content-cards.no-connection.message\" = \"Nie można ustanowić połączenia z siecią.\\nProszę spróbować ponownie później.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/pt-PT.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Concluído\";\n\"Appboy.content-cards.no-card.text\" = \"Não temos atualizações.\\nPor favor, verifique mais tarde.\";\n\"Appboy.content-cards.no-connection.title\" = \"Erro de Ligação\";\n\"Appboy.content-cards.no-connection.message\" = \"Não é possível estabelecer a ligação à rede.\\nPor favor, tente mais tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/pt.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Concluído\";\n\"Appboy.content-cards.no-card.text\" = \"Não temos nenhuma atualização.\\nVerifique novamente mais tarde.\";\n\"Appboy.content-cards.no-connection.title\" = \"Erro de conexão\";\n\"Appboy.content-cards.no-connection.message\" = \"Não é possível estabelecer uma conexão de rede.\\nTente novamente mais tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/ru.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Готово\";\n\"Appboy.content-cards.no-card.text\" = \"Обновления недоступны.\\nПожалуйста, проверьте снова позже.\";\n\"Appboy.content-cards.no-connection.title\" = \"Ошибка подключения\";\n\"Appboy.content-cards.no-connection.message\" = \"Невозможно установить сетевое подключение.\\nПожалуйста, повторите попытку позже.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/sv.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Klar\";\n\"Appboy.content-cards.no-card.text\" = \"Det finns inga uppdateringar.\\nFörsök igen senare.\";\n\"Appboy.content-cards.no-connection.title\" = \"Anslutningsfel\";\n\"Appboy.content-cards.no-connection.message\" = \"Det gick inte att skapa en nätverksanslutning.\\nFörsök igen senare.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/th.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"เสร็จสิ้น\";\n\"Appboy.content-cards.no-card.text\" = \"เราไม่มีการอัพเดต กรุณาตรวจสอบภายหลัง.\";\n\"Appboy.content-cards.no-connection.title\" = \"ผิดพลาดการเชื่อมต่อ\";\n\"Appboy.content-cards.no-connection.message\" = \"ไม่สามารถสร้างการเชื่อมต่อเครือข่าย กรุณาลองใหม่ภายหลัง.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/uk.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Готово\";\n\"Appboy.content-cards.no-card.text\" = \"Оновлення недоступні.\\nБудь ласка, перевірте знову пізніше.\";\n\"Appboy.content-cards.no-connection.title\" = \"Помилка підключення\";\n\"Appboy.content-cards.no-connection.message\" = \"неможливо встановити з'єднання з мережею.\\nБудь ласка, спробуйте ще раз пізніше.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/vi.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"Hoàn tất\";\n\"Appboy.content-cards.no-card.text\" = \"Chúng tôi không có cập nhật nào.\\nVui lòng kiểm tra lại sau.\";\n\"Appboy.content-cards.no-connection.title\" = \"Lỗi Kết Nối\";\n\"Appboy.content-cards.no-connection.message\" = \"Không thể thiết lập kết nối mạng.\\nVui lòng thử lại sau.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/zh-HK.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"完成\";\n\"Appboy.content-cards.no-card.text\" = \"暫時沒有更新.\\n請稍候再試.\";\n\"Appboy.content-cards.no-connection.title\" = \"連線錯誤\";\n\"Appboy.content-cards.no-connection.message\" = \"無法建立網路連線.\\n請稍候再試.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/zh-Hans.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"完成\";\n\"Appboy.content-cards.no-card.text\" = \"暂时没有更新.\\n请稍后再试.\";\n\"Appboy.content-cards.no-connection.title\" = \"连接错误\";\n\"Appboy.content-cards.no-connection.message\" = \"无法建立网络连接.\\n请稍候再试.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/zh-Hant.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"完成\";\n\"Appboy.content-cards.no-card.text\" = \"暫時沒有更新.\\n請稍候再試.\";\n\"Appboy.content-cards.no-connection.title\" = \"連線錯誤\";\n\"Appboy.content-cards.no-connection.message\" = \"無法建立網路連線.\\n請稍候再試.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/zh-TW.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"完成\";\n\"Appboy.content-cards.no-card.text\" = \"暫時沒有更新.\\n請稍候再試.\";\n\"Appboy.content-cards.no-connection.title\" = \"連線錯誤\";\n\"Appboy.content-cards.no-connection.message\" = \"無法建立網路連線.\\n請稍候再試.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/Resources/zh.lproj/AppboyContentCardsLocalizable.strings",
    "content": "/* Content Cards Context Labels */\n\"Appboy.content-cards.done-button.title\" = \"完成\";\n\"Appboy.content-cards.no-card.text\" = \"暂时没有更新.\\n请稍后再试.\";\n\"Appboy.content-cards.no-connection.title\" = \"连接错误\";\n\"Appboy.content-cards.no-connection.message\" = \"无法建立网络连接.\\n请稍候再试.\";\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/ABKContentCardsTableViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"AppboyKit.h\"\n#import \"ABKBaseContentCardCell.h\"\n\n@protocol ABKContentCardsTableViewControllerDelegate;\n\n@interface ABKContentCardsTableViewController : UITableViewController\n\n/*!\n * UI elements which are used in the Content Cards table view. You can find them in the Content Cards Storyboard.\n */\n@property (nonatomic, strong) IBOutlet UIView *emptyFeedView;\n@property (nonatomic, strong) IBOutlet UILabel *emptyFeedLabel;\n\n/*!\n * The ABKContentCardsTableViewController delegate\n */\n@property (weak, nonatomic) id<ABKContentCardsTableViewControllerDelegate> delegate;\n\n/*!\n * This property stores the cards displayed in the Content Cards feed. By default, the view controller\n * updates this value when it receives an ABKContentCardsProcessedNotification notification from the Braze SDK.\n *\n * This field's value should not be set directly from a subclass; instead, it should be set from within a populateContentCards:\n * implementation.\n */\n@property (nonatomic) NSMutableArray<ABKContentCard *> *cards;\n\n/*!\n *  This property allows you to enable or disable the unread indicator on the cards. The default\n *  value is NO, which will enable the displaying of the unread indicator on cards.\n */\n@property (assign, nonatomic) BOOL disableUnreadIndicator;\n\n/*!\n * This property defines the timeout for stored Content Cards in the Braze SDK. If the cards in the\n * Braze SDK are older than this value, the Content Cards view controller will request a Content Cards update.\n *\n * The default value is 60 seconds.\n */\n@property NSTimeInterval cacheTimeout;\n\n/*!\n * If set, this property overrides the maximum width of Content Cards set by the storyboard.\n */\n@property (assign, nonatomic) CGFloat maxContentCardWidth;\n\n/*!\n * This boolean determines if the Content Card will attempt to use dark theme colors, granted the device\n * is in dark mode.\n *\n * @discussion The default of this value is YES but can be overriden before the view controller is presented\n *             to ensure that the dark theme is disabled for any Content Card displayed.\n */\n@property (assign, nonatomic) BOOL enableDarkTheme;\n\n/*!\n * @discussion This method returns an instance of ABKContentCardsTableViewController. You can call it\n * to get a Content Cards view controller for your navigation controller.\n * @warning To use a custom Content Card view controller, instantiate your own subclass instead\n * (e.g. via alloc / init).\n */\n+ (instancetype)getNavigationContentCardsViewController;\n\n/*!\n * @discussion This method returns the localized string from AppboyContentCardsLocalizable.strings file.\n * You can easily override the localized string by adding the keys and the translations to your own\n * Localizable.strings file.\n *\n * To do custom handling with the Appboy localized string, you can override this method in a\n * subclass.\n */\n- (NSString *)localizedAppboyContentCardsString:(NSString *)key;\n\n/*!\n * @discussion initialization that always occurs for the Content Cards table view controller\n */\n- (void)setUp;\n\n/*!\n * @discussion Initialization that is in place of Storyboard or XIB initialization.\n *             This method should call all the property specific setUp methods.\n */\n- (void)setUpUI;\n\n/*!\n * @discussion specific view property initialization that is in place of Storyboard or XIB initialization.\n *  Called by the setUpUI method and is exposed here to allow overriding.\n */\n- (void)setUpEmptyFeedLabel;\n- (void)setUpEmptyFeedView;\n\n/*!\n * @discussion Registers Content Card type identifiers with the cell classes\n * that implement their view.\n */\n- (void)registerTableViewCellClasses;\n\n/*!\n * @discussion Given a Content Card, return its type identifier\n */\n- (NSString *)findCellIdentifierWithCard:(ABKContentCard *)card;\n\n/*!\n * @param tableView The table view which need the cell to diplay the card UI.\n * @param indexPath The index path of the card UI in the table view.\n * @param card The card model for the cell.\n *\n * @discussion This method dequeues and returns the corresponding card cell based on card type from\n * the given table view.\n */\n- (ABKBaseContentCardCell *)dequeueCellFromTableView:(UITableView *)tableView\n                                        forIndexPath:(NSIndexPath *)indexPath\n                                             forCard:(ABKContentCard *)card;\n\n/*!\n * @discussion This method handles the user's click on the card.\n *\n * If you wish to handle card clicks yourself, refer to ABKContentCardsTableViewControllerDelegate's\n * contentCardTableViewController:shouldHandleCardClick: method.\n *\n * @warning Overriding handleCardClick: yourself might prevent\n * ABKContentCardsTableViewControllerDelegate's contentCardTableViewController:shouldHandleCardClick:\n * and contentCardTableViewController:didHandleCardClick: from firing properly.\n *\n * If you decide to override this method, you must call [card logContentCardClicked] manually inside of your\n * new method to send the click event to the Braze server.\n */\n- (void)handleCardClick:(ABKContentCard *)card;\n\n- (void)requestNewCardsIfTimeout;\n\n/*!\n * @discussion This method is called when the cards stored in the cards property should be refreshed.\n */\n- (void)populateContentCards;\n\n@end\n\n\n@protocol ABKContentCardsTableViewControllerDelegate <NSObject>\n\n@optional\n\n/*!\n * Asks the delegate if the Braze SDK should handle the content card click action.\n *\n * @warning This method might not be called if you overrode handleCardClick:\n *\n * @param viewController The view controller displaying the content card.\n * @param url The content card's url.\n * @return YES to let the Braze SDK handle the click action, NO if you wish to handle the click action\n *         yourself.\n */\n- (BOOL)contentCardTableViewController:(ABKContentCardsTableViewController *)viewController\n                 shouldHandleCardClick:(NSURL *)url;\n\n/*!\n * Informs the delegate that the content card click action was handled by the Braze SDK.\n *\n * This method is not called if the delegate method `contentCardTableViewController:shouldHandleCardClick:`\n * returns NO.\n *\n * @warning This method might not be called if you overrode handleCardClick:\n *\n * @param viewController The view controller displaying the content card.\n * @param url The content card's url.\n */\n- (void)contentCardTableViewController:(ABKContentCardsTableViewController *)viewController\n                    didHandleCardClick:(NSURL *)url;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/ABKContentCardsTableViewController.m",
    "content": "#import \"ABKContentCardsTableViewController.h\"\n#import \"ABKContentCardsWebViewController.h\"\n#import \"ABKContentCardsController.h\"\n\n#import \"ABKContentCard.h\"\n\n#import \"ABKBannerContentCardCell.h\"\n#import \"ABKCaptionedImageContentCardCell.h\"\n#import \"ABKClassicContentCardCell.h\"\n#import \"ABKClassicImageContentCardCell.h\"\n#import \"ABKControlTableViewCell.h\"\n\n#import \"ABKUIUtils.h\"\n#import \"ABKUIURLUtils.h\"\n\nstatic double const ABKContentCardsCacheTimeout = 1 * 60; // 1 minute\nstatic CGFloat const ABKContentCardsCellEstimatedHeight = 400.0f;\n\n@interface ABKContentCardsTableViewController () <ABKBaseContentCardCellDelegate>\n\n/*!\n * This set stores the content cards IDs for which the impressions have been logged.\n */\n@property (nonatomic) NSMutableSet<NSString *> *cardImpressions;\n\n/*!\n * This set stores IDs for the content cards that are unviewed and on the screen right now.\n */\n@property (nonatomic) NSMutableSet<NSString *> *unviewedOnScreenCards;\n\n/*!\n *  There is some initialization such as associating which cell class to use in the table view that\n *  is the responsibility of the storyboard if one is provided. If no story board is used then\n *  the code in viewDidLoad will handle it. We can tell based on which init method is used.\n */\n@property (nonatomic) BOOL usesStoryboard;\n\n- (void)logCardImpressionIfNeeded:(ABKContentCard *)card;\n- (void)requestContentCardsRefresh;\n- (void)contentCardsUpdated:(NSNotification *)notification;\n\n@end\n\n@implementation ABKContentCardsTableViewController\n\n#pragma mark - Initialization\n\n- (instancetype)init {\n  self = [super init];\n  if (self) {\n    self.usesStoryboard = NO;\n    [self setUp];\n    [self setUpUI];\n  }\n\n  return self;\n}\n\n- (instancetype)initWithCoder:(NSCoder *)aDecoder {\n  self = [super initWithCoder:aDecoder];\n  if (self) {\n    self.usesStoryboard = YES;\n    [self setUp];\n  }\n  return self;\n}\n\n#pragma mark - SetUp\n\n- (void)setUp {\n  _cacheTimeout = ABKContentCardsCacheTimeout;\n  _cardImpressions = [NSMutableSet set];\n  _unviewedOnScreenCards = [NSMutableSet set];\n  _enableDarkTheme = YES;\n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(contentCardsUpdated:)\n                                               name:ABKContentCardsProcessedNotification\n                                             object:nil];\n}\n\n- (void)setUpUI {\n  [self setUpEmptyFeedLabel];\n  [self setUpEmptyFeedView];\n}\n\n- (void)setUpEmptyFeedLabel {\n  self.emptyFeedLabel = [[UILabel alloc] init];\n  self.emptyFeedLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleBody weight:UIFontWeightRegular];\n  self.emptyFeedLabel.adjustsFontSizeToFitWidth = YES;\n  self.emptyFeedLabel.adjustsFontForContentSizeCategory = YES;\n  self.emptyFeedLabel.textAlignment = NSTextAlignmentCenter;\n  self.emptyFeedLabel.numberOfLines = 0;\n  self.emptyFeedLabel.translatesAutoresizingMaskIntoConstraints = NO;\n}\n\n- (void)setUpEmptyFeedView {\n  self.emptyFeedView = [[UIView alloc] init];\n  self.emptyFeedView.backgroundColor = [UIColor clearColor];\n  [self.emptyFeedView addSubview:self.emptyFeedLabel];\n  self.edgesForExtendedLayout = UIRectEdgeNone;\n\n  NSLayoutConstraint *centerXConstraint = [self.emptyFeedLabel.centerXAnchor constraintEqualToAnchor:self.emptyFeedView.centerXAnchor];\n  NSLayoutConstraint *centerYConstraint = [self.emptyFeedLabel.centerYAnchor constraintEqualToAnchor:self.emptyFeedView.centerYAnchor];\n  NSLayoutConstraint *leadingConstraint = [self.emptyFeedLabel.leadingAnchor constraintEqualToAnchor:self.emptyFeedView.layoutMarginsGuide.leadingAnchor];\n  NSLayoutConstraint *trailingConstraint = [self.emptyFeedLabel.trailingAnchor constraintEqualToAnchor:self.emptyFeedView.layoutMarginsGuide.trailingAnchor];\n  NSLayoutConstraint *topConstraint = [self.emptyFeedLabel.topAnchor constraintEqualToAnchor:self.emptyFeedView.layoutMarginsGuide.topAnchor];\n  NSLayoutConstraint *bottomConstraint = [self.emptyFeedLabel.bottomAnchor constraintEqualToAnchor:self.emptyFeedView.layoutMarginsGuide.bottomAnchor];\n  [NSLayoutConstraint activateConstraints:@[centerXConstraint, centerYConstraint,\n                                            leadingConstraint, trailingConstraint,\n                                            topConstraint, bottomConstraint]];\n}\n\n- (void)dealloc {\n  [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n- (void)registerTableViewCellClasses {\n  [self.tableView registerClass:[ABKCaptionedImageContentCardCell class]\n         forCellReuseIdentifier:@\"ABKCaptionedImageContentCardCell\"];\n  [self.tableView registerClass:[ABKBannerContentCardCell class]\n         forCellReuseIdentifier:@\"ABKBannerContentCardCell\"];\n  [self.tableView registerClass:[ABKClassicContentCardCell class]\n         forCellReuseIdentifier:@\"ABKClassicCardCell\"];\n  [self.tableView registerClass:[ABKControlTableViewCell class]\n         forCellReuseIdentifier:@\"ABKControlCardCell\"];\n  [self.tableView registerClass:[ABKClassicImageContentCardCell class]\n         forCellReuseIdentifier:@\"ABKClassicImageCardCell\"];\n}\n\n# pragma mark - View Controller Life Cycle Methods\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  if (@available(iOS 13.0, *)) {\n    if (self.enableDarkTheme) {\n      // This value will respect the system UI style of dark or light mode\n      self.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;\n    } else {\n      self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;\n    }\n  }\n\n  if (!self.usesStoryboard) {\n    self.emptyFeedLabel.text = [self localizedAppboyContentCardsString:@\"Appboy.content-cards.no-card.text\"];\n\n    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;\n    \n    if (@available(iOS 13.0, *)) {\n      self.view.backgroundColor = [UIColor systemGroupedBackgroundColor];\n    } else {\n      self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];\n    }\n\n    [self registerTableViewCellClasses];\n\n    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];\n    [refreshControl addTarget:self action:@selector(refreshContentCards:)\n             forControlEvents:UIControlEventValueChanged];\n    self.refreshControl = refreshControl;\n  }\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n\n  [self requestNewCardsIfTimeout];\n  [self updateAndDisplayCardsFromCache];\n\n  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n    [self.tableView reloadData];\n  });\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n  [super viewDidAppear:animated];\n  [[Appboy sharedInstance] logContentCardsDisplayed];\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n  [super viewWillDisappear:animated];\n}\n\n- (void)viewWillTransitionToSize:(CGSize)size\n       withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {\n  [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];\n  [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {\n    [self.tableView reloadData];\n  }];\n}\n\n#pragma mark - Update And Display Cached Cards\n\n- (void)populateContentCards {\n  self.cards = [NSMutableArray arrayWithArray:[Appboy.sharedInstance.contentCardsController getContentCards]];\n}\n\n- (void)requestContentCardsRefresh {\n  [Appboy.sharedInstance requestContentCardsRefresh];\n}\n\n- (IBAction)refreshContentCards:(UIRefreshControl *)sender {\n  // Remove visible cards from unviewedOnScreenCards\n  NSArray *visibleIndexPaths = [self.tableView indexPathsForVisibleRows];\n  for (NSIndexPath *indexPath in visibleIndexPaths) {\n    ABKContentCard *card = self.cards[indexPath.row];\n    [self.unviewedOnScreenCards removeObject:card.idString];\n  }\n\n  [self requestContentCardsRefresh];\n}\n\n- (void)requestNewCardsIfTimeout {\n  NSTimeInterval passedTime = fabs(Appboy.sharedInstance.contentCardsController.lastUpdate.timeIntervalSinceNow);\n  if (passedTime > self.cacheTimeout) {\n    [self requestContentCardsRefresh];\n  } else {\n    // timeout is not passed, so we don't send a request for new content cards\n    [self.refreshControl endRefreshing];\n  }\n}\n\n- (void)contentCardsUpdated:(NSNotification *)notification {\n  BOOL isSuccessful = [notification.userInfo[ABKContentCardsProcessedIsSuccessfulKey] boolValue];\n  if (isSuccessful) {\n    [self updateAndDisplayCardsFromCache];\n  }\n  [self.refreshControl endRefreshing];\n}\n\n- (void)updateAndDisplayCardsFromCache {\n  [self populateContentCards];\n  if (self.cards == nil || self.cards.count == 0) {\n    [self hideTableViewAndShowViewInBackground:self.emptyFeedView];\n  } else {\n    [self showTableViewAndHideBackgroundViews];\n  }\n  [self.tableView reloadData];\n}\n\n- (void)logCardImpressionIfNeeded:(ABKContentCard *)card {\n  if ([self.cardImpressions containsObject:card.idString]) {\n    // do nothing if we have already logged an impression\n    return;\n  }\n\n  if (![card isControlCard]) {\n    if (card.viewed == NO) {\n      [self.unviewedOnScreenCards addObject:card.idString];\n    }\n  }\n  [card logContentCardImpression];\n  [self.cardImpressions addObject:card.idString];\n}\n\n#pragma mark - Table view header view\n\n- (void)hideTableViewAndShowViewInBackground:(UIView *)view {\n  view.hidden = NO;\n  view.frame = self.view.bounds;\n  [view layoutIfNeeded];\n  self.tableView.backgroundView = view;\n}\n\n- (void)showTableViewAndHideBackgroundViews {\n  self.emptyFeedView.hidden = YES;\n  self.tableView.backgroundView = nil;\n}\n\n#pragma mark - Configuration Update\n\n- (void)setDisableUnreadIndicator:(BOOL)disableUnreadIndicator {\n  if (disableUnreadIndicator != _disableUnreadIndicator) {\n    _disableUnreadIndicator = disableUnreadIndicator;\n    [self updateAndDisplayCardsFromCache];\n  }\n}\n\n#pragma mark - Table view data source\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {\n  return 1;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n  return self.cards.count;\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {\n  if ([self.cards[indexPath.row] isControlCard]) {\n    return 0;\n  }\n  return UITableViewAutomaticDimension;\n}\n\n// Overrides the storyboard to get accurate cell height estimates to prevent from having\n// the scrollView jump if a cell needs to resize itself\n- (CGFloat)tableView:(UITableView *)tableView\n  estimatedHeightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {\n  return ABKContentCardsCellEstimatedHeight;\n}\n\n- (void)tableView:(UITableView *)tableView\n  willDisplayCell:(UITableViewCell *)cell\nforRowAtIndexPath:(NSIndexPath *)indexPath {\n  ABKContentCard *card = self.cards[indexPath.row];\n  BOOL cellVisible = [[tableView indexPathsForVisibleRows] containsObject:indexPath];\n  if (cellVisible) {\n    [self logCardImpressionIfNeeded:card];\n  }\n}\n\n- (void)tableView:(UITableView *)tableView\n    didEndDisplayingCell:(UITableViewCell *)cell\n       forRowAtIndexPath:(NSIndexPath *)indexPath {\n  // We mark a cell as read only if it's not visible already.\n  // But this method might be called for visible cells too because of dynamic heights.\n  BOOL cellIsVisible = [[tableView indexPathsForVisibleRows] containsObject:indexPath];\n  if (!cellIsVisible && indexPath.row < self.cards.count) {\n    // indexPath.row is out of bounds if the card did end displaying due to its deletion\n\n    ABKContentCard *card = self.cards[indexPath.row];\n    [self.unviewedOnScreenCards removeObject:card.idString];\n  }\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  ABKContentCard *card = self.cards[indexPath.row];\n  ABKBaseContentCardCell *cell = [self dequeueCellFromTableView:tableView\n                                                   forIndexPath:indexPath\n                                                        forCard:card];\n  if (self.maxContentCardWidth > 0.0) {\n    cell.cardWidthConstraint.constant = self.maxContentCardWidth;\n  }\n\n  BOOL viewedSetting = card.viewed;\n  if ([self.unviewedOnScreenCards containsObject:card.idString]) {\n    card.viewed = NO;\n  }\n  cell.delegate = self;\n  [cell applyCard:card];\n  card.viewed = viewedSetting;\n  cell.hideUnreadIndicator = self.disableUnreadIndicator;\n  return cell;\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {\n  ABKContentCard *card = self.cards[indexPath.row];\n  [self handleCardClick:card];\n\n  // Remove card from unviewedOnScreenCards\n  [self.unviewedOnScreenCards removeObject:card.idString];\n  // Hide unviewed indicator\n  ABKBaseContentCardCell *cell = [tableView cellForRowAtIndexPath:indexPath];\n  cell.unviewedLineView.hidden = YES;\n}\n\n- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {\n  ABKContentCard *card = self.cards[indexPath.row];\n  return card.dismissible;\n}\n\n- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {\n  return UITableViewCellEditingStyleDelete;\n}\n\n- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {\n  if (editingStyle == UITableViewCellEditingStyleDelete) {\n    ABKContentCard *card = self.cards[indexPath.row];\n    [card logContentCardDismissed];\n    [self.cards removeObjectAtIndex:indexPath.row];\n    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];\n\n    if (self.cards.count == 0) {\n      [self hideTableViewAndShowViewInBackground:self.emptyFeedView];\n    }\n  }\n}\n\n#pragma mark - Dequeue cells\n\n- (ABKBaseContentCardCell *)dequeueCellFromTableView:(UITableView *)tableView\n                                        forIndexPath:(NSIndexPath *)indexPath\n                                             forCard:(ABKContentCard *)card {\n  return [tableView dequeueReusableCellWithIdentifier:[self findCellIdentifierWithCard:card]\n                                         forIndexPath:indexPath];\n}\n\n- (NSString *)findCellIdentifierWithCard:(ABKContentCard *)card {\n  if ([card isControlCard]) {\n    return @\"ABKControlCardCell\";\n  }\n  if ([card isKindOfClass:[ABKBannerContentCard class]]) {\n    return @\"ABKBannerContentCardCell\";\n  } else if ([card isKindOfClass:[ABKCaptionedImageContentCard class]]) {\n    return @\"ABKCaptionedImageContentCardCell\";\n  } else if ([card isKindOfClass:[ABKClassicContentCard class]]) {\n    NSString *imageURL = [((ABKClassicContentCard *)card) image];\n    if (imageURL.length > 0) {\n      return @\"ABKClassicImageCardCell\";\n    } else {\n      return @\"ABKClassicCardCell\";\n    }\n  }\n  return nil;\n}\n\n#pragma mark - Card Click Actions\n\n- (void)handleCardClick:(ABKContentCard *)card {\n  // Log a card click only when the card has the url property with a valid url.\n  if (card.urlString.length <= 0) {\n    return;\n  }\n\n  [card logContentCardClicked];\n  NSURL *cardURL = [ABKUIURLUtils getEncodedURIFromString:card.urlString];\n\n  // Content Cards Delegate handles card click action\n  if ([self.delegate respondsToSelector:@selector(contentCardTableViewController:shouldHandleCardClick:)] &&\n      ![self.delegate contentCardTableViewController:self shouldHandleCardClick:cardURL]) {\n    return;\n  }\n\n  // URL Delegate\n  if ([ABKUIURLUtils URLDelegate:Appboy.sharedInstance.appboyUrlDelegate\n                      handlesURL:cardURL\n                     fromChannel:ABKContentCardChannel\n                      withExtras:nil]) {\n    return;\n  }\n\n  // WebView\n  if ([ABKUIURLUtils URL:cardURL shouldOpenInWebView:card.openUrlInWebView]) {\n    [self openURLInWebView:cardURL];\n  } else {\n    // System\n    [ABKUIURLUtils openURLWithSystem:cardURL];\n  }\n\n  // Delegate inform card click action\n  if ([self.delegate respondsToSelector:@selector(contentCardTableViewController:didHandleCardClick:)]) {\n    [self.delegate contentCardTableViewController:self didHandleCardClick:cardURL];\n  }\n}\n\n- (void)openURLInWebView:(NSURL *)url {\n  ABKContentCardsWebViewController *webVC = [ABKContentCardsWebViewController new];\n  webVC.url = url;\n  webVC.showDoneButton = (self.navigationItem.rightBarButtonItem != nil);\n  [self.navigationController pushViewController:webVC animated:YES];\n}\n\n#pragma mark - Utility Methods\n\n+ (instancetype)getNavigationContentCardsViewController {\n  return [[ABKContentCardsTableViewController alloc] init];\n}\n\n- (NSString *)localizedAppboyContentCardsString:(NSString *)key {\n  return [ABKUIUtils getLocalizedString:key\n                         inAppboyBundle:[ABKUIUtils bundle:[ABKContentCardsTableViewController class] channel:ABKContentCardChannel]\n                                  table:@\"AppboyContentCardsLocalizable\"];\n}\n\n#pragma mark - ABKBaseContentCardCellDelegate\n\n- (void)cellRequestSizeUpdate:(UITableViewCell *)cell {\n  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];\n  if (indexPath == nil) {\n    return;\n  }\n\n  [UIView performWithoutAnimation:^{\n    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];\n  }];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/ABKContentCardsViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKContentCardsTableViewController.h\"\n\n@interface ABKContentCardsViewController : UINavigationController\n\n/*!\n * This property is the table view controller which displays all the content cards. It's also the root view\n * controller.\n */\n@property (strong, nonatomic) ABKContentCardsTableViewController *contentCardsViewController;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/ABKContentCardsViewController.m",
    "content": "#import \"ABKContentCardsViewController.h\"\n#import \"ABKUIUtils.h\"\n\n@implementation ABKContentCardsViewController\n\n- (instancetype)init {\n  self = [super initWithRootViewController:[[ABKContentCardsTableViewController alloc] init]];\n  if (self) {\n    self.contentCardsViewController = self.viewControllers.firstObject;\n    [self addDoneButton];\n#if !TARGET_OS_TV\n    if (@available(iOS 15.0, *)) {\n      self.view.backgroundColor = UIColor.systemGroupedBackgroundColor;\n    }\n#endif\n  }\n  return self;\n}\n\n- (void)addDoneButton {\n  UIBarButtonItem *closeBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone\n                                                                                  target:self\n                                                                                  action:@selector(dismissContentCardsViewController:)];\n  [self.contentCardsViewController.navigationItem setRightBarButtonItem:closeBarButton];\n}\n\n- (IBAction)dismissContentCardsViewController:(id)sender {\n  [self dismissViewControllerAnimated:YES completion:nil];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/ABKContentCardsWebViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <WebKit/WebKit.h>\n\n@interface ABKContentCardsWebViewController : UIViewController <WKNavigationDelegate>\n\n/*!\n * The URL the modal web view controller should open. Please note that this is the initial URL and\n * won't be updated if the initial URL re-directs to another URL.\n */\n@property NSURL *url;\n\n/*!\n * The WKWebView which displays the web page.\n */\n@property (nonatomic) IBOutlet WKWebView *webView;\n\n/*!\n * The UIProgressView which shows the web view loading process. It will be on top of the web view and\n * will disappear as soon as the page is loaded.\n */\n@property (nonatomic) IBOutlet UIProgressView *progressBar;\n\n/*!\n * The property tells the web view controller to add a Done button or not. The default value is NO.\n * Please set this property before displaying the web view controller.\n */\n@property (nonatomic) BOOL showDoneButton;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/ABKContentCardsWebViewController.m",
    "content": "#import \"ABKContentCardsWebViewController.h\"\n#import \"ABKNoConnectionLocalization.h\"\n#import \"ABKUIUtils.h\"\n\nstatic NSString *const EstimatedProgressKeyPath = @\"estimatedProgress\";\nstatic NSString *const LocalizedNoConnectionKey = @\"Appboy.no-connection.message\";\n\n@implementation ABKContentCardsWebViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n\n  self.webView.navigationDelegate = self;\n  self.webView = [self getWebView];\n  self.view = self.webView;\n\n#if !TARGET_OS_TV\n  if (@available(iOS 15.0, *)) {\n    self.view.backgroundColor = UIColor.systemGroupedBackgroundColor;\n  }\n#endif\n\n  [self setupProgressBar];\n  \n  if (self.showDoneButton) {\n    UIBarButtonItem *closeBarButton = [self getDoneBarButtonItem];\n    [self.navigationItem setRightBarButtonItem:closeBarButton];\n  }\n  \n  [self.webView addObserver:self\n                 forKeyPath:EstimatedProgressKeyPath\n                    options:NSKeyValueObservingOptionNew\n                    context:nil];\n  \n  [self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath\n                      ofObject:(id)object\n                        change:(NSDictionary<NSKeyValueChangeKey,id> *)change\n                       context:(void *)context {\n  if ([ABKUIUtils string:EstimatedProgressKeyPath isEqualToString:keyPath]) {\n    if (self.webView.estimatedProgress == 1.0) {\n      [UIView animateWithDuration:1 animations:^{\n        self.progressBar.alpha = 0.0;\n      }];\n    } else if (self.webView.estimatedProgress < 1.0) {\n      self.progressBar.alpha = 1.0;\n      [self.progressBar setProgress:self.webView.estimatedProgress animated:YES];\n    }\n  }\n}\n\n- (void)dealloc {\n  [self.webView removeObserver:self forKeyPath:EstimatedProgressKeyPath];\n}\n\n#pragma mark - Customization Methods\n\n/*!\n * @discussion Returns a WKWebView object, whose navigationDelegate is this ABKContentCardsWebViewController instance.\n *\n * If you want to do any customization to the WKWebView, please override this method in an ABKContentCardsWebViewController\n * category and return the customized WKWebView. All instances of ABKContentCardsWebViewController will then\n * call the category's `getWebView` implementation instead of this method.\n *\n */\n- (WKWebView *)getWebView {\n  WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero];\n  webView.navigationDelegate = self;\n  return webView;\n}\n\n/*!\n *\n * @discussion Creates a UIProgressView and puts it on top of the web view.\n *\n * If you want to do any customization to the progress bar, please override this method in an ABKContentCardsWebViewController\n * category and set up the progress bar. All instances of ABKContentCardsWebViewController will then\n * call the category's `setupProgressBar:` implementation instead of this method.\n *\n */\n- (void)setupProgressBar{\n  UIProgressView *progressBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];\n  progressBar.alpha = 0;\n  self.progressBar = progressBar;\n  \n  [self.view addSubview:self.progressBar];\n  self.progressBar.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.progressBar\n                                                        attribute:NSLayoutAttributeTop\n                                                        relatedBy:NSLayoutRelationEqual\n                                                           toItem:self.topLayoutGuide\n                                                        attribute:NSLayoutAttributeBottom\n                                                       multiplier:1.0\n                                                         constant:0.0]];\n  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|[progressBar]|\"\n                                                                    options:NSLayoutFormatDirectionLeadingToTrailing\n                                                                    metrics:nil\n                                                                      views:@{@\"progressBar\" : self.progressBar}]];\n}\n\n/*!\n * @discussion Returns the Done UIBarButtonItem, which allows the user to dismiss the modal web view.\n *\n * If you want to do any customization to the Done button, please override this method in an ABKContentCardsWebViewController\n * category and return the customized UIBarButtonItem. All instances of ABKContentCardsWebViewController will then\n * call the category's `getDoneBarButtonItem` implementation instead of this method.\n *\n */\n- (UIBarButtonItem *)getDoneBarButtonItem {\n  return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone\n                                                       target:self\n                                                       action:@selector(closeButtonPressed:)];\n}\n\n- (void)closeButtonPressed:(id)sender {\n  [self dismissViewControllerAnimated:YES completion:nil];\n}\n\n#pragma mark - WKNavigationDelegate methods\n\n- (void)webView:(WKWebView *)webView\n    decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction\n    decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {\n  NSString *urlString = [[navigationAction.request.mainDocumentURL absoluteString] lowercaseString];\n  NSArray *stringComponents = [urlString componentsSeparatedByString:@\":\"];\n  if ([stringComponents[1] hasPrefix:@\"//itunes.apple.com\"]  ||\n      (![stringComponents[0] isEqual:@\"http\"] &&\n       ![stringComponents[0] isEqual:@\"https\"])) {\n        // Dismiss the modal web view and let the system handle the deep links\n    if ([[UIApplication sharedApplication] openURL:navigationAction.request.URL]) {\n      decisionHandler(WKNavigationActionPolicyCancel);\n      [self.navigationController popViewControllerAnimated:NO];\n      return;\n    }\n  }\n  decisionHandler(WKNavigationActionPolicyAllow);\n}\n\n- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {\n  self.progressBar.alpha = 0.0;\n}\n\n- (void)webView:(WKWebView *)webView\n    didFailProvisionalNavigation:(WKNavigation *)navigation\n      withError:(NSError *)error {\n  self.progressBar.alpha = 0.0;\n\n  UILabel *label = [[UILabel alloc] init];\n  label.textAlignment = NSTextAlignmentCenter;\n  label.numberOfLines = 0;\n  NSString *localizedNoConectionMessage = NSLocalizedString(@\"Appboy.no-connection.message\",\n                                                            @\"No connection error message for URL loading failure\");\n  if (localizedNoConectionMessage.length == 0 || [ABKUIUtils string:LocalizedNoConnectionKey isEqualToString:localizedNoConectionMessage]) {\n    localizedNoConectionMessage = [ABKNoConnectionLocalization getNoConnectionLocalizedString];\n  }\n  label.text = localizedNoConectionMessage;\n  [self.webView addSubview:label];\n  label.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.webView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|-10-[noConnectionLabel]-10-|\"\n                                                                       options:NSLayoutFormatDirectionLeadingToTrailing\n                                                                       metrics:nil\n                                                                         views:@{@\"noConnectionLabel\" : label}]];\n  [self.webView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"V:|[noConnectionLabel]|\"\n                                                                       options:NSLayoutFormatAlignAllCenterY\n                                                                       metrics:nil\n                                                                         views:@{@\"noConnectionLabel\" : label}]];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKBannerContentCardCell.h",
    "content": "#import \"ABKBaseContentCardCell.h\"\n#import \"ABKBannerContentCard.h\"\n\n@interface ABKBannerContentCardCell : ABKBaseContentCardCell\n\n@property (strong, nonatomic) IBOutlet UIImageView *bannerImageView;\n@property (strong, nonatomic) IBOutlet NSLayoutConstraint *imageRatioConstraint;\n\n- (void)applyCard:(ABKBannerContentCard *)bannerCard;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKBannerContentCardCell.m",
    "content": "#import \"ABKBannerContentCardCell.h\"\n#import \"ABKBannerCard.h\"\n#import \"Appboy.h\"\n#import \"ABKImageDelegate.h\"\n#import \"ABKUIUtils.h\"\n\n@implementation ABKBannerContentCardCell\n\n#pragma mark - Properties\n\n- (UIImageView *)bannerImageView {\n  if (_bannerImageView != nil) {\n    return _bannerImageView;\n  }\n\n  UIImageView *bannerImageView = [[[self imageViewClass] alloc] init];\n  bannerImageView.contentMode = UIViewContentModeScaleAspectFit;\n  bannerImageView.translatesAutoresizingMaskIntoConstraints = NO;\n  _bannerImageView = bannerImageView;\n  return bannerImageView;\n}\n\n#pragma mark - SetUp\n\n- (void)setUpUI {\n  [super setUpUI];\n\n  // Views\n  [self.rootView addSubview:self.bannerImageView];\n  [self.rootView bringSubviewToFront:self.pinImageView];\n  [self.rootView bringSubviewToFront:self.unviewedLineView];\n\n  // AutoLayout\n  self.imageRatioConstraint = [self.bannerImageView.heightAnchor constraintEqualToAnchor:self.bannerImageView.widthAnchor];\n  self.imageRatioConstraint.priority = UILayoutPriorityDefaultHigh;\n\n  NSArray *constraints = @[\n    [self.bannerImageView.topAnchor constraintEqualToAnchor:self.rootView.topAnchor],\n    [self.bannerImageView.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor],\n    [self.bannerImageView.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor],\n    [self.bannerImageView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor],\n    self.imageRatioConstraint\n  ];\n  [NSLayoutConstraint activateConstraints:constraints];\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKBannerContentCard *)card {\n  if (![card isKindOfClass:[ABKBannerContentCard class]]) {\n    return;\n  }\n  \n  [super applyCard:card];\n  [self updateImageConstraintIfNeededWithAspectRatio:card.imageAspectRatio];\n  \n  if (![Appboy sharedInstance].imageDelegate) {\n    NSLog(@\"[APPBOY][WARN] %@ %s\",\n          @\"ABKImageDelegate on Appboy is nil. Image loading may be disabled.\",\n          __PRETTY_FUNCTION__);\n    return;\n  }\n  typeof(self) __weak weakSelf = self;\n  [[Appboy sharedInstance].imageDelegate setImageForView:self.bannerImageView\n                                   showActivityIndicator:NO\n                                                 withURL:[NSURL URLWithString:card.image]\n                                        imagePlaceHolder:[self getPlaceHolderImage]\n                                               completed:^(UIImage * _Nullable image,\n                                                           NSError * _Nullable error,\n                                                           NSInteger cacheType,\n                                                           NSURL * _Nullable imageURL) {\n    dispatch_async(dispatch_get_main_queue(), ^{\n      typeof(self) __strong strongSelf = weakSelf;\n      if (strongSelf == nil) {\n        return;\n      }\n\n      UIImage *finalImage = image != nil ? image : [strongSelf getPlaceHolderImage];\n      strongSelf.bannerImageView.image = finalImage;\n\n      CGFloat aspectRatio = finalImage.size.width / finalImage.size.height;\n      card.imageAspectRatio = aspectRatio;\n      [strongSelf updateImageConstraintIfNeededWithAspectRatio:aspectRatio];\n    });\n  }];\n}\n\n- (void)updateImageConstraintIfNeededWithAspectRatio:(CGFloat)aspectRatio {\n  if (aspectRatio == 0 || ABK_CGFLT_EQ(self.imageRatioConstraint.multiplier, 1 / aspectRatio)) {\n    return;\n  }\n\n  self.imageRatioConstraint.active = NO;\n  self.imageRatioConstraint = [self.bannerImageView.heightAnchor constraintEqualToAnchor:self.bannerImageView.widthAnchor\n                                                                                multiplier:1 / aspectRatio];\n  self.imageRatioConstraint.priority = UILayoutPriorityDefaultHigh;\n  self.imageRatioConstraint.active = YES;\n  [self.delegate cellRequestSizeUpdate:self];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKBaseContentCardCell.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKContentCard.h\"\n\n@protocol ABKBaseContentCardCellDelegate <NSObject>\n\n- (void)cellRequestSizeUpdate:(UITableViewCell *)cell;\n\n@end\n\n@interface ABKBaseContentCardCell : UITableViewCell\n\n/*!\n * This view displays the card contents and is the base view container for each card. To change or\n * configure the outline of the card like card width, background color board width, etc, you can\n * update this property accordingly.\n */\n@property (nonatomic) IBOutlet UIView *rootView;\n\n/*!\n * This is the triangle image which shows if a card has been viewed by the user.\n */\n@property (nonatomic) IBOutlet UIImageView *pinImageView;\n\n/*!\n * This is the blue line under unviewed cards.\n */\n@property (nonatomic) IBOutlet UIView *unviewedLineView;\n@property (nonatomic) UIColor *unviewedLineViewColor;\n\n/*!\n * Card root view related constraints\n */\n@property (nonatomic) IBOutlet NSLayoutConstraint *rootViewLeadingConstraint;\n@property (nonatomic) IBOutlet NSLayoutConstraint *rootViewTrailingConstraint;\n@property (nonatomic) IBOutlet NSLayoutConstraint *rootViewTopConstraint;\n@property (nonatomic) IBOutlet NSLayoutConstraint *rootViewBottomConstraint;\n\n@property (nonatomic) IBOutlet NSLayoutConstraint *cardWidthConstraint;\n\n/*!\n * These are basic UI configuration for the Content Cards feed. They are set to the default values in the\n * `setUp` method.\n *\n * It's recommended to set the values before the view is displayed.\n */\n@property (nonatomic, assign) CGFloat cardSidePadding;\n@property (nonatomic, assign) CGFloat cardSpacing;\n@property (nonatomic, assign) BOOL hideUnreadIndicator;\n\n/*!\n * To communicate back after any cell updates occur\n */\n@property (weak, nonatomic) id <ABKBaseContentCardCellDelegate> delegate;\n\n/*!\n * @param card The card model for the cell.\n *\n * @discussion Apply the data from the given card to the card cell. \n */\n- (void)applyCard:(ABKContentCard *)card;\n\n/*!\n * @discussion This is a utility method to return the place holder image.\n */\n- (UIImage *)getPlaceHolderImage;\n\n- (Class)imageViewClass;\n\n/*!\n * @discussion initialization that always occurs for the content card cells\n */\n- (void)setUp;\n\n/*!\n * @discussion Initialization that is in place of Storyboard or XIB initialization.\n *             This method should call all the property specific setUp methods.\n */\n- (void)setUpUI;\n\n/*!\n * @discussion This is a utility method to make text styled.\n */\n- (void)applyAppboyAttributedTextStyleFrom:(NSString *)text forLabel:(UILabel *)label;\n\n@end\n\nstatic const UILayoutPriority ABKContentCardPriorityLayoutRequiredBelowAppleRequired = UILayoutPriorityRequired - 1;\n\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKBaseContentCardCell.m",
    "content": "#import \"ABKBaseContentCardCell.h\"\n#import \"ABKUIUtils.h\"\n#import \"Appboy.h\"\n#import \"ABKImageDelegate.h\"\n\nstatic CGFloat AppboyCardSidePadding = 10.0;\nstatic CGFloat AppboyCardSpacing = 32.0;\nstatic CGFloat AppboyCardBorderWidth = 0.5;\nstatic CGFloat AppboyCardCornerRadius = 3.0;\nstatic CGFloat AppboyCardShadowXOffset = 0.0;\nstatic CGFloat AppboyCardShadowYOffset = -2.0;\nstatic CGFloat AppboyCardShadowOpacity = 0.5;\nstatic CGFloat AppboyCardLineSpacing = 1.2;\n\n@implementation ABKBaseContentCardCell\n\n#pragma mark - Properties\n\n- (UIView *)rootView {\n  if (_rootView != nil) {\n    return _rootView;\n  }\n\n  // View\n  UIView *rootView = [[UIView alloc] init];\n  rootView.translatesAutoresizingMaskIntoConstraints = NO;\n  if (@available(iOS 13.0, *)) {\n    rootView.backgroundColor = [UIColor systemBackgroundColor];\n  } else {\n    rootView.backgroundColor = [UIColor whiteColor];\n  }\n\n  // - Border\n  UIColor *lightBorderColor = [UIColor colorWithWhite:(224.0 / 255.0) alpha:1.0];\n  UIColor *darkBorderColor = [UIColor colorWithWhite:(85.0 / 255.0) alpha:1.0];\n\n  CALayer *rootLayer = rootView.layer;\n  rootLayer.masksToBounds = YES;\n  rootLayer.cornerRadius = AppboyCardCornerRadius;\n  rootLayer.borderWidth = AppboyCardBorderWidth;\n  rootLayer.borderColor = [ABKUIUtils dynamicColorForLightColor:lightBorderColor\n                                                      darkColor:darkBorderColor].CGColor;\n\n  // - Shadow\n  UIColor *shadowColor = [UIColor colorWithWhite:(178.0 / 255.0) alpha:1.0];\n  rootLayer.shadowColor = shadowColor.CGColor;\n  rootLayer.shadowOffset = CGSizeMake(AppboyCardShadowXOffset, AppboyCardShadowYOffset);\n  rootLayer.shadowOpacity = AppboyCardShadowOpacity;\n\n  _rootView = rootView;\n  return rootView;\n}\n\n- (UIImageView *)pinImageView {\n  if (_pinImageView != nil) {\n    return _pinImageView;\n  }\n\n  NSBundle *bundle = [ABKUIUtils bundle:[ABKBaseContentCardCell class]\n                                channel:ABKContentCardChannel];\n  UIImage *pinImage = [UIImage imageNamed:@\"appboy_cc_icon_pinned\"\n                                 inBundle:bundle\n            compatibleWithTraitCollection:nil];\n  pinImage = [pinImage imageFlippedForRightToLeftLayoutDirection];\n\n  UIImageView *pinImageView = [[UIImageView alloc] initWithImage:pinImage];\n  pinImageView.contentMode = UIViewContentModeScaleToFill;\n  pinImageView.translatesAutoresizingMaskIntoConstraints = NO;\n  _pinImageView = pinImageView;\n  return pinImageView;\n}\n\n- (UIView *)unviewedLineView {\n  if (_unviewedLineView != nil) {\n    return _unviewedLineView;\n  }\n\n  UIView *unviewedLineView = [[UIView alloc] init];\n  unviewedLineView.backgroundColor = self.unviewedLineViewColor;\n  unviewedLineView.translatesAutoresizingMaskIntoConstraints = NO;\n  _unviewedLineView = unviewedLineView;\n  return unviewedLineView;\n}\n\n#pragma mark - Initialization\n\n- (instancetype)initWithStyle:(UITableViewCellStyle)style\n              reuseIdentifier:(NSString *)reuseIdentifier {\n  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];\n  if (self) {\n    [self setUp];\n    [self setUpUI];\n  }\n\n  return  self;\n}\n\n- (instancetype)initWithCoder:(NSCoder *)aDecoder {\n  if (self = [super initWithCoder:aDecoder]) {\n    [self setUp];\n  }\n  return self;\n}\n\n#pragma mark - SetUp\n\n- (void)setUp {\n  self.backgroundColor = [UIColor clearColor];\n  self.contentView.backgroundColor = [UIColor clearColor];\n  self.selectionStyle = UITableViewCellSelectionStyleNone;\n\n  self.unviewedLineViewColor = self.tintColor;\n\n  self.cardSidePadding = AppboyCardSidePadding;\n  self.cardSpacing = AppboyCardSpacing;\n}\n\n- (void)setUpUI {\n  // View Hierarchy\n  [self.contentView addSubview:self.rootView];\n  [self.rootView addSubview:self.pinImageView];\n  [self.rootView addSubview:self.unviewedLineView];\n\n  // AutoLayout\n  // - Root\n  self.rootViewLeadingConstraint = [self.rootView.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor\n                                                                               constant:self.cardSidePadding];\n  self.rootViewTrailingConstraint = [self.rootView.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor\n                                                                                 constant:-self.cardSidePadding];\n  self.rootViewTopConstraint = [self.rootView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor\n                                                                       constant:self.cardSidePadding];\n  self.rootViewBottomConstraint = [self.rootView.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor\n                                                                             constant:-self.cardSidePadding];\n  self.cardWidthConstraint = [self.rootView.widthAnchor constraintLessThanOrEqualToConstant:380];\n  self.rootViewLeadingConstraint.priority = ABKContentCardPriorityLayoutRequiredBelowAppleRequired;\n  self.rootViewTrailingConstraint.priority = ABKContentCardPriorityLayoutRequiredBelowAppleRequired;\n\n  // - All constraints\n  NSArray *constraints = @[\n    // Root view\n    self.rootViewLeadingConstraint,\n    self.rootViewTrailingConstraint,\n    self.rootViewTopConstraint,\n    self.rootViewBottomConstraint,\n    self.cardWidthConstraint,\n    [self.rootView.centerXAnchor constraintEqualToAnchor:self.contentView.centerXAnchor],\n    // PinImage\n    [self.pinImageView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor],\n    [self.pinImageView.topAnchor constraintEqualToAnchor:self.rootView.topAnchor],\n    [self.pinImageView.widthAnchor constraintEqualToConstant:20],\n    [self.pinImageView.heightAnchor constraintEqualToConstant:20],\n    // UnviewedLine\n    [self.unviewedLineView.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor],\n    [self.unviewedLineView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor],\n    [self.unviewedLineView.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor],\n    [self.unviewedLineView.heightAnchor constraintEqualToConstant:8]\n  ];\n  [NSLayoutConstraint activateConstraints:constraints];\n}\n\n# pragma mark - Cell UI Configuration\n\n- (void)setUnviewedLineViewColor:(UIColor*)bgColor {\n  _unviewedLineViewColor = bgColor;\n  if (self.unviewedLineView) {\n    self.unviewedLineView.backgroundColor = self.unviewedLineViewColor;\n  }\n}\n\n- (void)setHideUnreadIndicator:(BOOL)hideUnreadIndicator {\n  if (_hideUnreadIndicator != hideUnreadIndicator) {\n    _hideUnreadIndicator = hideUnreadIndicator;\n    self.unviewedLineView.hidden = hideUnreadIndicator;\n  }\n}\n\n- (void)setCardSidePadding:(CGFloat)sidePadding {\n  _cardSidePadding = sidePadding;\n  if (self.rootViewLeadingConstraint && self.rootViewTrailingConstraint) {\n    self.rootViewLeadingConstraint.constant = self.cardSidePadding;\n    self.rootViewTrailingConstraint.constant = self.cardSidePadding;\n  }\n}\n\n- (void)setCardSpacing:(CGFloat)spacing {\n  _cardSpacing = spacing;\n  if (self.rootViewTopConstraint && self.rootViewBottomConstraint) {\n    self.rootViewTopConstraint.constant = self.cardSpacing / 2.0;\n    self.rootViewBottomConstraint.constant = self.cardSpacing / 2.0;\n  }\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKContentCard *)card {\n  if ([card isControlCard]) {\n    self.pinImageView.hidden = YES;\n    self.unviewedLineView.hidden = YES;\n    return;\n  }\n\n  self.unviewedLineView.hidden = self.hideUnreadIndicator || card.viewed;\n  self.pinImageView.hidden = !card.pinned;\n}\n\n#pragma mark - Utiliy Methods\n\n- (UIImage *)getPlaceHolderImage {\n  return [ABKUIUtils imageNamed:@\"appboy_cc_noimage_lrg\"\n                         bundle:[ABKBaseContentCardCell class]\n                        channel:ABKContentCardChannel];\n}\n\n- (Class)imageViewClass {\n  if ([Appboy sharedInstance].imageDelegate) {\n    return [[Appboy sharedInstance].imageDelegate imageViewClass];\n  }\n  return [UIImageView class];\n}\n\n- (void)applyAppboyAttributedTextStyleFrom:(NSString *)text forLabel:(UILabel *)label {\n  UIColor *color = label.textColor;\n  NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];\n  paragraphStyle.lineSpacing = AppboyCardLineSpacing;\n  UIFont *font = label.font;\n  NSDictionary *attributes = @{NSFontAttributeName: font,\n                               NSForegroundColorAttributeName: color,\n                               NSParagraphStyleAttributeName: paragraphStyle};\n  // Convert to empty string to fail gracefully if given null from backend\n  text = text ?: @\"\";\n  label.attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKCaptionedImageContentCardCell.h",
    "content": "#import \"ABKBaseContentCardCell.h\"\n#import \"ABKCaptionedImageContentCard.h\"\n\n@interface ABKCaptionedImageContentCardCell : ABKBaseContentCardCell\n\n@property (class, nonatomic) UIColor *titleLabelColor;\n@property (class, nonatomic) UIColor *descriptionLabelColor;\n@property (class, nonatomic) UIColor *linkLabelColor;\n\n@property (strong, nonatomic) IBOutlet UIImageView *captionedImageView;\n@property (strong, nonatomic) IBOutlet NSLayoutConstraint *imageRatioConstraint;\n@property (strong, nonatomic) IBOutlet UILabel *titleLabel;\n@property (strong, nonatomic) IBOutlet UILabel *descriptionLabel;\n@property (strong, nonatomic) IBOutlet UILabel *linkLabel;\n\n@property (nonatomic, assign) CGFloat padding;\n\n- (void)applyCard:(ABKCaptionedImageContentCard *)captionedImageCard;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKCaptionedImageContentCardCell.m",
    "content": "#import \"ABKCaptionedImageContentCardCell.h\"\n#import \"Appboy.h\"\n#import \"ABKImageDelegate.h\"\n#import \"ABKUIUtils.h\"\n\n@interface ABKCaptionedImageContentCardCell ()\n\n@property (strong, nonatomic) NSArray *descriptionConstraints;\n@property (strong, nonatomic) NSArray *linkConstraints;\n\n@end\n\n\n@implementation ABKCaptionedImageContentCardCell\n\nstatic UIColor *_titleLabelColor = nil;\nstatic UIColor *_descriptionLabelColor = nil;\nstatic UIColor *_linkLabelColor = nil;\n\n+ (UIColor *)titleLabelColor {\n  if (_titleLabelColor == nil) {\n    if (@available(iOS 13.0, *)) {\n      _titleLabelColor = [UIColor labelColor];\n    } else {\n      _titleLabelColor = [UIColor blackColor];\n    }\n  }\n  return _titleLabelColor;\n}\n\n+ (void)setTitleLabelColor:(UIColor *)titleLabelColor {\n  _titleLabelColor = titleLabelColor;\n}\n\n+ (UIColor *)descriptionLabelColor {\n  if (_descriptionLabelColor == nil) {\n    if (@available(iOS 13.0, *)) {\n      _descriptionLabelColor = [UIColor labelColor];\n    } else {\n      _descriptionLabelColor = [UIColor blackColor];\n    }\n  }\n  return _descriptionLabelColor;\n}\n\n+ (void)setDescriptionLabelColor:(UIColor *)descriptionLabelColor {\n  _descriptionLabelColor = descriptionLabelColor;\n}\n\n+ (UIColor *)linkLabelColor {\n  if (_linkLabelColor == nil) {\n    if (@available(iOS 13.0, *)) {\n      _linkLabelColor = [UIColor linkColor];\n    } else {\n      _linkLabelColor = [UIColor systemBlueColor];\n    }\n  }\n  return _linkLabelColor;\n}\n\n+ (void)setLinkLabelColor:(UIColor *)linkLabelColor{\n  _linkLabelColor = linkLabelColor;\n}\n\n#pragma mark - Properties\n\n- (UIImageView *)captionedImageView {\n  if (_captionedImageView != nil) {\n    return _captionedImageView;\n  }\n\n  UIImageView *captionedImageView = [[[self imageViewClass] alloc] init];\n  captionedImageView.contentMode = UIViewContentModeScaleAspectFit;\n  captionedImageView.translatesAutoresizingMaskIntoConstraints = NO;\n  _captionedImageView = captionedImageView;\n  return captionedImageView;\n}\n\n- (UILabel *)titleLabel {\n  if (_titleLabel != nil) {\n    return _titleLabel;\n  }\n\n  UILabel *titleLabel = [[UILabel alloc] init];\n  titleLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleCallout weight:UIFontWeightBold];\n  titleLabel.textColor = [self class].titleLabelColor;\n  titleLabel.text = @\"Title\";\n  titleLabel.numberOfLines = 0;\n  titleLabel.lineBreakMode = NSLineBreakByWordWrapping;\n  titleLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  _titleLabel = titleLabel;\n  return titleLabel;\n}\n\n- (UILabel *)descriptionLabel {\n  if (_descriptionLabel != nil) {\n    return _descriptionLabel;\n  }\n\n  UILabel *descriptionLabel = [[UILabel alloc] init];\n  descriptionLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleFootnote weight:UIFontWeightRegular];\n  descriptionLabel.textColor = [self class].descriptionLabelColor;\n  descriptionLabel.text = @\"Description\";\n  descriptionLabel.numberOfLines = 0;\n  descriptionLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  _descriptionLabel = descriptionLabel;\n  return descriptionLabel;\n}\n\n- (UILabel *)linkLabel {\n  if (_linkLabel != nil) {\n    return _linkLabel;\n  }\n\n  UILabel *linkLabel = [[UILabel alloc] init];\n  linkLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleFootnote weight:UIFontWeightMedium];\n  linkLabel.textColor = [self class].linkLabelColor;\n  linkLabel.text = @\"Link\";\n  linkLabel.numberOfLines = 0;\n  linkLabel.lineBreakMode = NSLineBreakByCharWrapping;\n  linkLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  _linkLabel = linkLabel;\n  return linkLabel;\n}\n\n#pragma mark - SetUp\n\n- (void)setUp {\n  [super setUp];\n  self.padding = 25;\n}\n\n- (void)setUpUI {\n  [super setUpUI];\n\n  // Views\n  [self.rootView addSubview:self.captionedImageView];\n  [self.rootView addSubview:self.titleLabel];\n  [self.rootView addSubview:self.descriptionLabel];\n  [self.rootView addSubview:self.linkLabel];\n\n  // - Remove / add pinImageView to reset it\n  [self.pinImageView removeFromSuperview];\n  [self.rootView addSubview:self.pinImageView];\n\n  // AutoLayout\n\n  self.imageRatioConstraint = [self.captionedImageView.heightAnchor constraintEqualToAnchor:self.captionedImageView.widthAnchor];\n  self.imageRatioConstraint.priority = UILayoutPriorityDefaultHigh;\n\n  NSArray *constraints = @[\n    // Captioned Image\n    [self.captionedImageView.topAnchor constraintEqualToAnchor:self.rootView.topAnchor],\n    [self.captionedImageView.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor],\n    [self.captionedImageView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor],\n    self.imageRatioConstraint,\n\n    // Pin Image\n    [self.pinImageView.topAnchor constraintEqualToAnchor:self.captionedImageView.topAnchor],\n    [self.pinImageView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor],\n    [self.pinImageView.widthAnchor constraintEqualToConstant:20],\n    [self.pinImageView.heightAnchor constraintEqualToConstant:20],\n\n    // Title\n    [self.titleLabel.topAnchor constraintEqualToAnchor:self.captionedImageView.bottomAnchor\n                                              constant:17],\n    [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor\n                                                  constant:self.padding],\n    [self.titleLabel.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor\n                                                   constant:-self.padding],\n\n    // Description\n    [self.descriptionLabel.topAnchor constraintEqualToAnchor:self.titleLabel.bottomAnchor\n                                                    constant:6],\n    [self.descriptionLabel.leadingAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor],\n    [self.descriptionLabel.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor],\n\n    // Link\n    [self.linkLabel.leadingAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor],\n    [self.linkLabel.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor]\n  ];\n  [NSLayoutConstraint activateConstraints:constraints];\n\n  self.descriptionConstraints = @[\n    [self.descriptionLabel.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor\n                                                       constant:-self.padding]\n  ];\n\n  self.linkConstraints = @[\n    [self.linkLabel.topAnchor constraintEqualToAnchor:self.descriptionLabel.bottomAnchor\n                                             constant:8],\n    [self.linkLabel.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor\n                                                constant:-self.padding]\n  ];\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKCaptionedImageContentCard *)card {\n  if (![card isKindOfClass:[ABKCaptionedImageContentCard class]]) {\n    return;\n  }\n  \n  [super applyCard:card];\n  [self applyAppboyAttributedTextStyleFrom:card.title forLabel:self.titleLabel];\n  [self applyAppboyAttributedTextStyleFrom:card.cardDescription forLabel:self.descriptionLabel];\n  [self applyAppboyAttributedTextStyleFrom:card.domain forLabel:self.linkLabel];\n  self.linkLabel.hidden = card.domain.length == 0;\n\n  [self updateConstraintsForCard:card];\n  [self updateImageConstraintIfNeededWithAspectRatio:card.imageAspectRatio];\n  \n  if (![Appboy sharedInstance].imageDelegate) {\n    NSLog(@\"[APPBOY][WARN] %@ %s\",\n          @\"ABKImageDelegate on Appboy is nil. Image loading may be disabled.\",\n          __PRETTY_FUNCTION__);\n    return;\n  }\n  typeof(self) __weak weakSelf = self;\n  [[Appboy sharedInstance].imageDelegate setImageForView:self.captionedImageView\n                                   showActivityIndicator:NO\n                                                 withURL:[NSURL URLWithString:card.image]\n                                        imagePlaceHolder:[self getPlaceHolderImage]\n                                               completed:^(UIImage * _Nullable image,\n                                                           NSError * _Nullable error,\n                                                           NSInteger cacheType,\n                                                           NSURL * _Nullable imageURL) {\n    dispatch_async(dispatch_get_main_queue(), ^{\n      typeof(self) __strong strongSelf = weakSelf;\n      if (strongSelf == nil) {\n        return;\n      }\n\n      if (image == nil) {\n        strongSelf.captionedImageView.image = [strongSelf getPlaceHolderImage];\n        return;\n      }\n\n      CGFloat aspectRatio = image.size.width / image.size.height;\n      card.imageAspectRatio = aspectRatio;\n      [strongSelf updateImageConstraintIfNeededWithAspectRatio:aspectRatio];\n    });\n  }];\n}\n\n- (void)updateConstraintsForCard:(ABKCaptionedImageContentCard *)card {\n  if (card.domain.length == 0) {\n    [NSLayoutConstraint deactivateConstraints:self.linkConstraints];\n    [NSLayoutConstraint activateConstraints:self.descriptionConstraints];\n  } else {\n    [NSLayoutConstraint deactivateConstraints:self.descriptionConstraints];\n    [NSLayoutConstraint activateConstraints:self.linkConstraints];\n  }\n}\n\n- (void)updateImageConstraintIfNeededWithAspectRatio:(CGFloat)aspectRatio {\n  if (aspectRatio == 0 || ABK_CGFLT_EQ(self.imageRatioConstraint.multiplier, 1 / aspectRatio)) {\n    return;\n  }\n\n  self.imageRatioConstraint.active = NO;\n  self.imageRatioConstraint = [self.captionedImageView.heightAnchor constraintEqualToAnchor:self.captionedImageView.widthAnchor\n                                                                                multiplier:1 / aspectRatio];\n  self.imageRatioConstraint.priority = UILayoutPriorityDefaultHigh;\n  self.imageRatioConstraint.active = YES;\n  [self.delegate cellRequestSizeUpdate:self];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKClassicContentCardCell.h",
    "content": "#import \"ABKBaseContentCardCell.h\"\n#import \"ABKClassicContentCard.h\"\n\n@interface ABKClassicContentCardCell : ABKBaseContentCardCell\n\n@property (class, nonatomic) UIColor *titleLabelColor;\n@property (class, nonatomic) UIColor *descriptionLabelColor;\n@property (class, nonatomic) UIColor *linkLabelColor;\n\n@property (strong, nonatomic) IBOutlet UILabel *titleLabel;\n@property (strong, nonatomic) IBOutlet UILabel *descriptionLabel;\n@property (strong, nonatomic) IBOutlet UILabel *linkLabel;\n\n@property (strong, nonatomic) NSArray *descriptionConstraints;\n@property (strong, nonatomic) NSArray *linkConstraints;\n\n@property (nonatomic, assign) CGFloat padding;\n\n- (void)applyCard:(ABKClassicContentCard *)classicCard;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKClassicContentCardCell.m",
    "content": "#import \"ABKClassicContentCardCell.h\"\n#import \"ABKUIUtils.h\"\n\n@implementation ABKClassicContentCardCell\n\nstatic UIColor *_titleLabelColor = nil;\nstatic UIColor *_descriptionLabelColor = nil;\nstatic UIColor *_linkLabelColor = nil;\n\n+ (UIColor *)titleLabelColor {\n  if (_titleLabelColor == nil) {\n    if (@available(iOS 13.0, *)) {\n      _titleLabelColor = [UIColor labelColor];\n    } else {\n      _titleLabelColor = [UIColor blackColor];\n    }\n  }\n  return _titleLabelColor;\n}\n\n+ (void)setTitleLabelColor:(UIColor *)titleLabelColor {\n  _titleLabelColor = titleLabelColor;\n}\n\n+ (UIColor *)descriptionLabelColor {\n  if (_descriptionLabelColor == nil) {\n    if (@available(iOS 13.0, *)) {\n      _descriptionLabelColor = [UIColor labelColor];\n    } else {\n      _descriptionLabelColor = [UIColor blackColor];\n    }\n  }\n  return _descriptionLabelColor;\n}\n\n+ (void)setDescriptionLabelColor:(UIColor *)descriptionLabelColor {\n  _descriptionLabelColor = descriptionLabelColor;\n}\n\n+ (UIColor *)linkLabelColor {\n  if (_linkLabelColor == nil) {\n    if (@available(iOS 13.0, *)) {\n      _linkLabelColor = [UIColor linkColor];\n    } else {\n      _linkLabelColor = [UIColor systemBlueColor];\n    }\n  }\n  return _linkLabelColor;\n}\n\n+ (void)setLinkLabelColor:(UIColor *)linkLabelColor{\n  _linkLabelColor = linkLabelColor;\n}\n\n#pragma mark - Properties\n\n- (UILabel *)titleLabel {\n  if (_titleLabel != nil) {\n    return _titleLabel;\n  }\n\n  UILabel *titleLabel = [[UILabel alloc] init];\n  titleLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleCallout weight:UIFontWeightBold];\n  titleLabel.textColor = [self class].titleLabelColor;\n  titleLabel.text = @\"Title\";\n  titleLabel.numberOfLines = 0;\n  titleLabel.lineBreakMode = NSLineBreakByWordWrapping;\n  titleLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  _titleLabel = titleLabel;\n  return titleLabel;\n}\n\n- (UILabel *)descriptionLabel {\n  if (_descriptionLabel != nil) {\n    return _descriptionLabel;\n  }\n\n  UILabel *descriptionLabel = [[UILabel alloc] init];\n  descriptionLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleFootnote weight:UIFontWeightRegular];\n  descriptionLabel.textColor = [self class].descriptionLabelColor;\n  descriptionLabel.text = @\"Description\";\n  descriptionLabel.numberOfLines = 0;\n  descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;\n  descriptionLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  _descriptionLabel = descriptionLabel;\n  return descriptionLabel;\n}\n\n- (UILabel *)linkLabel {\n  if (_linkLabel != nil) {\n    return _linkLabel;\n  }\n\n  UILabel *linkLabel = [[UILabel alloc] init];\n  linkLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleFootnote weight:UIFontWeightMedium];\n  linkLabel.textColor = [self class].linkLabelColor;\n  linkLabel.text = @\"Link\";\n  linkLabel.numberOfLines = 0;\n  linkLabel.lineBreakMode = NSLineBreakByCharWrapping;\n  linkLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  _linkLabel = linkLabel;\n  return linkLabel;\n}\n\n#pragma mark - SetUp\n\n- (void)setUp {\n  [super setUp];\n  self.padding = 25;\n}\n\n- (void)setUpUI {\n  [super setUpUI];\n\n  // Views\n  [self.rootView addSubview:self.titleLabel];\n  [self.rootView addSubview:self.descriptionLabel];\n  [self.rootView addSubview:self.linkLabel];\n\n  NSLayoutConstraint *titleTrailingConstraint = [self.titleLabel.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor\n                                                                                               constant:-self.padding];\n  titleTrailingConstraint.priority = ABKContentCardPriorityLayoutRequiredBelowAppleRequired;\n\n  // AutoLayout\n  NSArray *constraints = @[\n    // Title\n    // - Top\n    [self.titleLabel.topAnchor constraintEqualToAnchor:self.rootView.topAnchor\n                                              constant:17],\n    // - Horizontal\n    [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor\n                                                  constant:self.padding],\n    titleTrailingConstraint,\n    // Description\n    // - Top\n    [self.descriptionLabel.topAnchor constraintEqualToAnchor:self.titleLabel.bottomAnchor\n                                                    constant:6],\n    // - Horizontal\n    [self.descriptionLabel.leadingAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor],\n    [self.descriptionLabel.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor],\n    // Link\n    // - Horizontal\n    [self.linkLabel.leadingAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor],\n    [self.linkLabel.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor]\n  ];\n  [NSLayoutConstraint activateConstraints:constraints];\n\n  self.descriptionConstraints = @[\n    [self.descriptionLabel.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor\n                                                       constant:-self.padding]\n  ];\n\n  self.linkConstraints = @[\n    [self.linkLabel.topAnchor constraintEqualToAnchor:self.descriptionLabel.bottomAnchor\n                                             constant:8],\n    [self.linkLabel.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor\n                                                constant:-self.padding]\n  ];\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKClassicContentCard *)card {\n  if (![card isKindOfClass:[ABKClassicContentCard class]]) {\n    return;\n  }\n  \n  [super applyCard:card];\n  \n  [self applyAppboyAttributedTextStyleFrom:card.title forLabel:self.titleLabel];\n  [self applyAppboyAttributedTextStyleFrom:card.cardDescription forLabel:self.descriptionLabel];\n  [self applyAppboyAttributedTextStyleFrom:card.domain forLabel:self.linkLabel];\n  self.linkLabel.hidden = card.domain.length == 0;\n\n  [self updateConstraintsForCard:card];\n}\n\n- (void)updateConstraintsForCard:(ABKClassicContentCard *)card {\n  if (card.domain.length == 0) {\n    [NSLayoutConstraint deactivateConstraints:self.linkConstraints];\n    [NSLayoutConstraint activateConstraints:self.descriptionConstraints];\n  } else {\n    [NSLayoutConstraint deactivateConstraints:self.descriptionConstraints];\n    [NSLayoutConstraint activateConstraints:self.linkConstraints];\n  }\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKClassicImageContentCardCell.h",
    "content": "#import \"ABKClassicContentCardCell.h\"\n\n/*!\n * The ABKClassicContentCard has an optional image property.\n * Use this view controller for a classic card with an image and ABKClassicContentCardCell for a\n * classic card without an image.\n */\n@interface ABKClassicImageContentCardCell : ABKClassicContentCardCell\n\n@property (strong, nonatomic) IBOutlet UIImageView *classicImageView;\n\n- (void)applyCard:(ABKClassicContentCard *)classicCard;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKClassicImageContentCardCell.m",
    "content": "#import \"ABKClassicImageContentCardCell.h\"\n#import \"Appboy.h\"\n#import \"ABKImageDelegate.h\"\n#import \"ABKUIUtils.h\"\n\n@implementation ABKClassicImageContentCardCell\n\n#pragma mark - Properties\n\n- (UIImageView *)classicImageView {\n  if (_classicImageView != nil) {\n    return _classicImageView;\n  }\n\n  UIImageView *classicImageView = [[[self imageViewClass] alloc] init];\n  classicImageView.contentMode = UIViewContentModeScaleAspectFit;\n  classicImageView.translatesAutoresizingMaskIntoConstraints = NO;\n  classicImageView.clipsToBounds = YES;\n  _classicImageView = classicImageView;\n  return classicImageView;\n}\n\n#pragma mark - SetUp\n\n- (void)setUpUI {\n  [super setUpUI];\n\n  // Reset\n  [self.titleLabel removeFromSuperview];\n  [self.descriptionLabel removeFromSuperview];\n  [self.linkLabel removeFromSuperview];\n\n  // Views\n  [self.rootView addSubview:self.classicImageView];\n  [self.rootView addSubview:self.titleLabel];\n  [self.rootView addSubview:self.descriptionLabel];\n  [self.rootView addSubview:self.linkLabel];\n\n  NSLayoutConstraint *titleTrailingConstraint = [self.titleLabel.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor\n                                                                                               constant:-self.padding];\n  titleTrailingConstraint.priority = ABKContentCardPriorityLayoutRequiredBelowAppleRequired;\n\n  // AutoLayout\n  NSArray *constraints = @[\n    // ClassicImage\n    [self.classicImageView.topAnchor constraintEqualToAnchor:self.rootView.topAnchor\n                                                    constant:17],\n    [self.classicImageView.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor\n                                                        constant:self.padding],\n    [self.classicImageView.heightAnchor constraintEqualToConstant:57.5],\n    [self.classicImageView.widthAnchor constraintEqualToConstant:57.5],\n    // Title\n    [self.titleLabel.topAnchor constraintEqualToAnchor:self.rootView.topAnchor\n                                              constant:17],\n    [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.classicImageView.trailingAnchor constant:12],\n    titleTrailingConstraint,\n    // Description\n    // - Top\n    [self.descriptionLabel.topAnchor constraintEqualToAnchor:self.titleLabel.bottomAnchor\n                                                    constant:6],\n    // - Horizontal\n    [self.descriptionLabel.leadingAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor],\n    [self.descriptionLabel.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor],\n    // Link\n    // - Horizontal\n    [self.linkLabel.leadingAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor],\n    [self.linkLabel.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor]\n  ];\n  [NSLayoutConstraint activateConstraints:constraints];\n\n  self.descriptionConstraints = @[\n    [self.descriptionLabel.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor\n                                                       constant:-self.padding]\n  ];\n\n  self.linkConstraints = @[\n    [self.linkLabel.topAnchor constraintEqualToAnchor:self.descriptionLabel.bottomAnchor\n                                             constant:8],\n    [self.linkLabel.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor\n                                                constant:-self.padding]\n  ];\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKClassicContentCard *)card {\n  if (![card isKindOfClass:[ABKClassicContentCard class]]) {\n    return;\n  }\n  [super applyCard:card];\n  if (![Appboy sharedInstance].imageDelegate) {\n    NSLog(@\"[APPBOY][WARN] %@ %s\",\n          @\"ImageDelegate on Appboy is nil. Image loading may be disabled.\",\n          __PRETTY_FUNCTION__);\n    return;\n  }\n  [[Appboy sharedInstance].imageDelegate setImageForView:self.classicImageView\n                                   showActivityIndicator:NO\n                                                 withURL:[NSURL URLWithString:card.image]\n                                        imagePlaceHolder:[self getPlaceHolderImage]\n                                               completed:nil];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKControlTableViewCell.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKBaseContentCardCell.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface ABKControlTableViewCell : ABKBaseContentCardCell\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKContentCards/ViewControllers/Cells/ABKControlTableViewCell.m",
    "content": "#import \"ABKControlTableViewCell.h\"\n\n@implementation ABKControlTableViewCell\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageUIButton.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKInAppMessageButton.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageUIButton : UIButton\n\n/*!\n * The model object for the UIButton.\n */\n@property ABKInAppMessageButton *inAppButtonModel;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageUIButton.m",
    "content": "#import \"ABKInAppMessageUIButton.h\"\n#import \"ABKUIUtils.h\"\n\n#define DefaultTitleSize UIFontTextStyleSubheadline\nstatic CGFloat const ButtonCornerRadius = 5.0f;\nstatic CGFloat const ButtonTitleSidePadding = 12.0;\n\n@interface ABKInAppMessageUIButton ()\n\n@property (copy) UIColor *originalBackgroundColor;\n\n@end\n\n@implementation ABKInAppMessageUIButton\n\n- (instancetype)initWithFrame:(CGRect)frame {\n  if (self = [super initWithFrame:frame]) {\n    [self setUp];\n  }\n  return self;\n}\n\n- (instancetype)init {\n  if (self = [super init]) {\n    [self setUp];\n  }\n  return self;\n}\n\n- (instancetype)initWithCoder:(NSCoder *)aDecoder {\n  if (self  = [super initWithCoder:aDecoder]) {\n    [self setUp];\n  }\n  return self;\n}\n\n- (void)setUp {\n  self.titleLabel.font = [ABKUIUtils preferredFontForTextStyle:DefaultTitleSize weight:UIFontWeightBold];\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.titleLabel];\n  self.titleLabel.textAlignment = NSTextAlignmentCenter;\n  self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;\n  self.originalBackgroundColor = self.backgroundColor;\n}\n\n- (void)layoutSubviews {\n  [super layoutSubviews];\n  \n  if ([ABKUIUtils objectIsValidAndNotEmpty:self.inAppButtonModel.buttonTextFont]) {\n    self.titleLabel.font = self.inAppButtonModel.buttonTextFont;\n  }\n  \n  if ([ABKUIUtils objectIsValidAndNotEmpty:self.inAppButtonModel.buttonTextColor]) {\n    [self setTitleColor:self.inAppButtonModel.buttonTextColor forState:UIControlStateNormal];\n  }\n  \n  if ([ABKUIUtils objectIsValidAndNotEmpty:self.inAppButtonModel.buttonText]) {\n    [self setTitle:self.inAppButtonModel.buttonText forState:UIControlStateNormal];\n  }\n  \n  if ([ABKUIUtils objectIsValidAndNotEmpty:self.inAppButtonModel.buttonBackgroundColor]) {\n    self.backgroundColor = self.inAppButtonModel.buttonBackgroundColor;\n  }\n  \n  if ([ABKUIUtils objectIsValidAndNotEmpty:self.inAppButtonModel.buttonBorderColor]) {\n    self.layer.borderColor = [self.inAppButtonModel.buttonBorderColor CGColor];\n  } else if ([ABKUIUtils objectIsValidAndNotEmpty:self.inAppButtonModel.buttonBackgroundColor]) {\n    self.layer.borderColor = [self.inAppButtonModel.buttonBackgroundColor CGColor];\n  } else {\n    self.layer.borderColor = [[UIColor colorWithRed:(27.0/255.0) green:(120.0/255.0) blue:(207.0)/(255.0) alpha:1.0] CGColor];\n  }\n  \n  self.layer.cornerRadius = ButtonCornerRadius;\n  self.titleLabel.frame = CGRectMake(ButtonTitleSidePadding, 0,\n                             self.bounds.size.width - ButtonTitleSidePadding * 2, self.bounds.size.height);\n}\n\n- (void)setHighlighted:(BOOL)highlighted {\n  [super setHighlighted:highlighted];\n  \n  if (highlighted) {\n    [self setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:.08]];\n  } else {\n    self.backgroundColor = self.originalBackgroundColor;\n    [self setNeedsLayout];\n  }\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageUIController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKInAppMessageUIControlling.h\"\n#import \"ABKInAppMessageUIDelegate.h\"\n#import \"ABKInAppMessageWindowController.h\"\n\n@interface ABKInAppMessageUIController : NSObject <ABKInAppMessageUIControlling>\n\n/*!\n * supportedOrientationMask allows you to change which orientation mask the in-app message supports.\n * In-app messages will normally support the orientations specified in the app settings, but the method\n * supportedInterfaceOrientations may optionally override that. The value of supportedOrientationMask will be returned\n * in supportedInterfaceOrientations in the in-app message view controller.\n *\n * The default value of supportedOrientationMask is UIInterfaceOrientationMaskAll.\n */\n@property UIInterfaceOrientationMask supportedOrientationMask;\n\n/*!\n * preferredOrientation allows you to select which orientation should be preferred if multiple orientations are supported by the view controller.\n * If set to a value other than UIInterfaceOrientationUnknown, the value of preferredOrientation will be returned by\n * preferredInterfaceOrientationForPresentation in the in-app message view controller.\n * Otherwise, the current status bar orientation will be returned.\n *\n * The default value of preferredOrientation is UIInterfaceOrientationUnknown, which means status bar orientation should be set\n * for in-app message orientation.\n */\n@property UIInterfaceOrientation preferredOrientation;\n\n/*!\n * keyboardVisible will have the value YES when the keyboard is shown.\n */\n@property BOOL keyboardVisible;\n\n/*!\n * The ABKInAppMessageWindowController that is being shown.\n */\n@property (nullable) ABKInAppMessageWindowController *inAppMessageWindowController;\n\n/*!\n * The optional ABKInAppMessageUIDelegate that can be used to specify the UI behaviors of in-app messages.\n */\n@property (weak, nullable) id<ABKInAppMessageUIDelegate> uiDelegate;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageUIController.m",
    "content": "#import \"ABKInAppMessageUIController.h\"\n#import \"AppboyKit.h\"\n#import \"ABKInAppMessageWindowController.h\"\n#import \"ABKUIUtils.h\"\n#import \"ABKInAppMessageSlideupViewController.h\"\n#import \"ABKInAppMessageModalViewController.h\"\n#import \"ABKInAppMessageHTMLFullViewController.h\"\n#import \"ABKInAppMessageHTMLViewController.h\"\n#import \"ABKInAppMessageFullViewController.h\"\n\n@implementation ABKInAppMessageUIController\n\n- (instancetype)init {\n  if (self = [super init]) {\n    _supportedOrientationMask = UIInterfaceOrientationMaskAll;\n    _preferredOrientation = UIInterfaceOrientationUnknown;\n    \n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(receiveKeyboardWasShownNotification:)\n                                                 name:UIKeyboardWillShowNotification\n                                               object:nil];\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(receiveKeyboardDidHideNotification:)\n                                                 name:UIKeyboardDidHideNotification\n                                               object:nil];\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(inAppMessageWindowDismissed:)\n                                                 name:ABKNotificationInAppMessageWindowDismissed\n                                               object:nil];\n  }\n  return self;\n}\n\n#pragma mark - Show and Hide In-app Message\n\n- (void)showInAppMessage:(ABKInAppMessage *)inAppMessage {\n  if ([UIDevice currentDevice].userInterfaceIdiom != UIUserInterfaceIdiomPad) {\n    // Check the device orientation before displaying the in-app message\n    UIInterfaceOrientation statusBarOrientation = [ABKUIUtils getInterfaceOrientation];\n    NSString *errorMessage = @\"The in-app message %@ with %@ orientation shouldn't be displayed in %@, disregarding this in-app message.\";\n    if (inAppMessage.orientation == ABKInAppMessageOrientationPortrait &&\n        !UIInterfaceOrientationIsPortrait(statusBarOrientation)) {\n      NSLog(errorMessage, inAppMessage, @\"portrait\", @\"landscape\");\n      return;\n    }\n    if (inAppMessage.orientation == ABKInAppMessageOrientationLandscape &&\n        !UIInterfaceOrientationIsLandscape(statusBarOrientation)) {\n      NSLog(errorMessage, inAppMessage, @\"landscape\", @\"portrait\");\n      return;\n    }\n  }\n  \n  if ([inAppMessage isKindOfClass:[ABKInAppMessageImmersive class]]) {\n    ABKInAppMessageImmersive *immersiveInAppMessage = (ABKInAppMessageImmersive *)inAppMessage;\n    if (immersiveInAppMessage.imageStyle == ABKInAppMessageGraphic &&\n        ![ABKUIUtils objectIsValidAndNotEmpty:immersiveInAppMessage.imageURI]) {\n      NSLog(@\"The in-app message has graphic image style but no image, discard this in-app message.\");\n      return;\n    }\n    if ([immersiveInAppMessage isKindOfClass:[ABKInAppMessageFull class]] &&\n        ![ABKUIUtils objectIsValidAndNotEmpty:immersiveInAppMessage.imageURI]) {\n      NSLog(@\"The in-app message is a full in-app message without an image, discard this in-app message.\");\n      return;\n    }\n  }\n  \n  if (inAppMessage.inAppMessageClickActionType == ABKInAppMessageNoneClickAction &&\n      [inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n    ((ABKInAppMessageSlideup *)inAppMessage).hideChevron = YES;\n  }\n  \n  ABKInAppMessageViewController *inAppMessageViewController = nil;\n  if ([self.uiDelegate respondsToSelector:@selector(inAppMessageViewControllerWithInAppMessage:)]) {\n    inAppMessageViewController = [self.uiDelegate inAppMessageViewControllerWithInAppMessage:inAppMessage];\n  } else {\n    if ([inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n      inAppMessageViewController = [[ABKInAppMessageSlideupViewController alloc]\n                                    initWithInAppMessage:inAppMessage];\n    } else if ([inAppMessage isKindOfClass:[ABKInAppMessageModal class]]) {\n      inAppMessageViewController = [[ABKInAppMessageModalViewController alloc]\n                                    initWithInAppMessage:inAppMessage];\n    } else if ([inAppMessage isKindOfClass:[ABKInAppMessageFull class]]) {\n      inAppMessageViewController = [[ABKInAppMessageFullViewController alloc]\n                                    initWithInAppMessage:inAppMessage];\n    } else if ([inAppMessage isKindOfClass:[ABKInAppMessageHTMLFull class]]) {\n      inAppMessageViewController = [[ABKInAppMessageHTMLFullViewController alloc]\n                                    initWithInAppMessage:inAppMessage];\n    } else if ([inAppMessage isKindOfClass:[ABKInAppMessageHTML class]]) {\n      inAppMessageViewController = [[ABKInAppMessageHTMLViewController alloc]\n                                    initWithInAppMessage:inAppMessage];\n    }\n  }\n  if (inAppMessageViewController) {\n    ABKInAppMessageWindowController *windowController = [[ABKInAppMessageWindowController alloc]\n                                                         initWithInAppMessage:inAppMessage\n                                                   inAppMessageViewController:inAppMessageViewController\n                                                         inAppMessageDelegate:self.uiDelegate];\n    windowController.supportedOrientationMask = self.supportedOrientationMask;\n    windowController.preferredOrientation = self.preferredOrientation;\n    self.inAppMessageWindowController = windowController;\n    if (@available(iOS 13.0, *)) {\n      inAppMessageViewController.overrideUserInterfaceStyle = inAppMessage.overrideUserInterfaceStyle;\n    }\n    [self.inAppMessageWindowController displayInAppMessageViewWithAnimation:inAppMessage.animateIn];\n  }\n}\n\n- (ABKInAppMessageDisplayChoice)getCurrentDisplayChoiceForInAppMessage:(ABKInAppMessage *)inAppMessage {\n  ABKInAppMessageDisplayChoice inAppMessageDisplayChoice = self.keyboardVisible ?\n    ABKDisplayInAppMessageLater : ABKDisplayInAppMessageNow;\n  if (inAppMessageDisplayChoice == ABKDisplayInAppMessageLater) {\n    NSLog(@\"Initially setting in-app message display choice to ABKDisplayInAppMessageLater due to visible keyboard.\");\n  }\n  if ([self.uiDelegate respondsToSelector:@selector(beforeInAppMessageDisplayed:withKeyboardIsUp:)]) {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n    // ignore deprecation warning to support client integrations using the deprecated method\n    inAppMessageDisplayChoice = [self.uiDelegate beforeInAppMessageDisplayed:inAppMessage\n                                                            withKeyboardIsUp:self.keyboardVisible];\n#pragma clang diagnostic pop\n  } else if ([[Appboy sharedInstance].inAppMessageController.delegate\n              respondsToSelector:@selector(beforeInAppMessageDisplayed:)]) {\n    inAppMessageDisplayChoice = [[Appboy sharedInstance].inAppMessageController.delegate\n                                 beforeInAppMessageDisplayed:inAppMessage];\n  }\n  return inAppMessageDisplayChoice;\n}\n\n- (ABKInAppMessageDisplayChoice)getCurrentDisplayChoiceForControlInAppMessage:(ABKInAppMessage *)controlInAppMessage {\n  ABKInAppMessageDisplayChoice inAppMessageDisplayChoice = self.keyboardVisible ? ABKDisplayInAppMessageLater : ABKDisplayInAppMessageNow;\n  if (inAppMessageDisplayChoice == ABKDisplayInAppMessageLater) {\n    NSLog(@\"Initially setting in-app message display choice to ABKDisplayInAppMessageLater due to visible keyboard.\");\n  }\n  if ([[Appboy sharedInstance].inAppMessageController.delegate\n              respondsToSelector:@selector(beforeControlMessageImpressionLogged:)]) {\n    inAppMessageDisplayChoice = [Appboy.sharedInstance.inAppMessageController.delegate beforeControlMessageImpressionLogged:controlInAppMessage];\n  }\n  return inAppMessageDisplayChoice;\n}\n\n- (BOOL)inAppMessageCurrentlyVisible {\n  if (self.inAppMessageWindowController) {\n    return YES;\n  }\n  return NO;\n}\n\n- (void)hideCurrentInAppMessage:(BOOL)animated {\n  @try {\n    if (self.inAppMessageWindowController) {\n      [self.inAppMessageWindowController hideInAppMessageViewWithAnimation:animated];\n    }\n  }\n  @catch (NSException *exception) {\n    NSLog(@\"An error occured and this in-app message couldn't be hidden.\");\n  }\n}\n\n- (void)inAppMessageWindowDismissed:(NSNotification *)notification {\n  // We listen to this notification so that we know when the screen is clear of in-app messages\n  // and a new in-app message can be shown.\n  self.inAppMessageWindowController = nil;\n}\n\n#pragma mark - Keyboard\n\n- (void)receiveKeyboardDidHideNotification:(NSNotification *)notification {\n  self.keyboardVisible = NO;\n}\n\n- (void)receiveKeyboardWasShownNotification:(NSNotification *)notification {\n  self.keyboardVisible = YES;\n  [self.inAppMessageWindowController keyboardWasShown];\n}\n\n#pragma mark - Set UIDelegate\n\n- (void)setInAppMessageUIDelegate:(id)uiDelegate {\n  _uiDelegate = uiDelegate;\n}\n\n#pragma mark - Dealloc\n\n- (void)dealloc {\n  [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageUIDelegate.h",
    "content": "#import <Foundation/Foundation.h>\n#import <WebKit/WebKit.h>\n#import \"ABKInAppMessageViewController.h\"\n#import \"AppboyKit.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n/*!\n * The in-app message UI delegate allows you to control the display and behavior of the Braze in-app message.\n */\n@protocol ABKInAppMessageUIDelegate <NSObject>\n\n@optional\n\n/*!\n * @param inAppMessage The in-app message object being offered to the delegate method.\n * @param keyboardIsUp This boolean indicates whether or not the keyboard is currently being displayed when this\n * delegate fires.\n * @return ABKInAppMessageDisplayChoice for details refer to the documentation regarding the ENUM ABKInAppMessageDisplayChoice\n * above.\n *\n * This delegate method defines whether the in-app message will be displayed now, displayed later, or discarded.\n *\n * The default behavior is that the in-app message will be displayed unless the keyboard is currently active on the screen.\n * However, if there are other situations where you would not want the in-app message to appear (such as during a full screen\n * game or on a loading screen), you can use this delegate to delay or discard pending in-app message messages.\n *\n * This method is deprecated. Please use the beforeInAppMessageDisplayed: method in ABKInAppMessageControllerDelegate\n * and use the methods receiveKeyboardDidHideNotification: and receiveKeyboardWasShownNotification:\n * in ABKInAppMessageUIController to customize based on keyboard behavior.\n */\n- (ABKInAppMessageDisplayChoice)beforeInAppMessageDisplayed:(ABKInAppMessage *)inAppMessage withKeyboardIsUp:(BOOL)keyboardIsUp __deprecated;\n\n/*!\n * @param inAppMessage The in-app message object being offered to the delegate.\n *\n * This delegate method allows host applications to customize the look of an in-app message while\n * maintaining the same user experience and impression/click tracking as the default Braze in-app\n * message. It allows developers to pass incoming in-app messages to custom view controllers which\n * they have created.\n *\n * The custom view controller is responsible for handling any responsive UI layout use-cases. e.g. device orientations,\n * or varied message lengths.\n *\n * Even with a custom view, by inheriting from ABKInAppMessageViewController, the in-app message will automatically animate and\n * dismiss according to the parameters of the provided ABKInAppMessage object. See ABKInAppMessage.h for more information.\n *\n * By default, Braze will add following functions/changes to the custom view controller, and animate\n * the in-app message on and off the screen, based on the class of the given in-app message:\n *   * ABKInAppMessageSlideup:\n *      * stretch/shrink the in-app message view's width to fix the screen's width. If you wish to\n *        have margins between the in-app message and the edge of the screen, those must be incorporated\n *        into the custom view controller itself.\n *      * add the impression and click tracking for the in-app message\n *      * when user clicks on the in-app message, call the onInAppMessageClicked:, and handle the click\n *        behavior correspond to the in-app message's inAppMessageClickActionType property.\n *      * add a pan gesture to the in-app message so user can swipe it away.\n *   * ABKInAppMessageModal:\n *      * make the in-app message clickable when there is no button(s) on it.\n *      * put the in-app message in the center of the screen, and add a full screen background layer.\n *   * ABKInAppMessageFull:\n *      * make the in-app message clickable when there is no button(s) on it.\n *      * stretch/shrink the in-app message view to fix the whole screen.\n *\n * @returns An ABKInAppMessageViewController subclass for which the view is an ABKInAppMessageView\n * instance or subclass. Returning nil will prevent the in-app message from displaying.\n */\n- (nullable ABKInAppMessageViewController *)inAppMessageViewControllerWithInAppMessage:(ABKInAppMessage *)inAppMessage;\n\n/*!\n * @param inAppMessage The in-app message object being offered to the delegate.\n *\n * This delegate method is fired when:\n *   * the user manually dismisses the in-app message.\n *   * the in-app message times out and expires.\n *   * the close button on a modal in-app message or a full in-app message is clicked.\n * Use this method to perform any custom logic that should execute after the in-app message has been\n * dismissed.\n */\n- (void)onInAppMessageDismissed:(ABKInAppMessage *)inAppMessage;\n\n/*!\n * @param inAppMessage The in-app message object being offered to the delegate.\n * @return Boolean Value which controls whether or not Braze will execute the click action. Returning YES will prevent\n *         Braze from performing the click action. Returning NO will cause Braze to execute the action defined in the\n *         in-app message's inAppMessageClickActionType property after this delegate method is called.\n *\n * This delegate method is fired when the user clicks on a slideup in-app message, or a modal/full\n * in-app message without button(s) on it. See ABKInAppMessage.h for more information.\n */\n- (BOOL)onInAppMessageClicked:(ABKInAppMessage *)inAppMessage;\n\n/*!\n * @param inAppMessage The in-app message object being offered to the delegate.\n * @param button The clicked button being offered to the delegate.\n * @return Boolean Value which controls whether or not Braze will execute the click action. Returning YES will prevent\n *         Braze from performing the click action. Returning NO will cause Braze to execute the action defined in the\n *         button's inAppMessageClickActionType property after this delegate method is called.\n *\n * This delegate method is fired whenever the user clicks a button on the in-app message. See\n * ABKInAppMessageBlock.h for more information.\n */\n- (BOOL)onInAppMessageButtonClicked:(ABKInAppMessageImmersive *)inAppMessage button:(ABKInAppMessageButton *)button;\n\n/*!\n * @param inAppMessage The in-app message object being offered to the delegate.\n * @param clickedURL The URL that is clicked by user.\n * @param buttonId The buttonId within the clicked link being offered to the delegate.\n * @return Boolean Value which controls whether or not Braze will execute the click action. Returning YES will prevent\n *         Braze from performing the click action. Returning NO will cause Braze to follow the link.\n *\n * This delegate method is fired whenever the user clicks a link on the HTML in-app message. See\n * ABKInAppMessageHTMLBase.h for more information.\n */\n- (BOOL)onInAppMessageHTMLButtonClicked:(ABKInAppMessageHTMLBase *)inAppMessage clickedURL:(nullable NSURL *)clickedURL buttonID:(NSString *)buttonId;\n\n- (WKWebViewConfiguration *)setCustomWKWebViewConfiguration;\n\n@end\nNS_ASSUME_NONNULL_END\n\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageView.h",
    "content": "#import <UIKit/UIKit.h>\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageView : UIView\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageView.m",
    "content": "#import \"ABKInAppMessageView.h\"\n\n@implementation ABKInAppMessageView\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageWindow.h",
    "content": "#import <UIKit/UIKit.h>\n\n/*!\n * ABKInAppMessageWindow handles a subset of all touches.\n *\n * By default, touches not handled by ABKInAppMessageWindow are automatically passed to the next\n * UIWindow in the view hierarchy by UIKit.\n */\n@interface ABKInAppMessageWindow : UIWindow\n\n/*!\n * ABKInAppMessageWindow handles all touch events when enabled, no touch events are passed to a next\n * UIWindow.\n */\n@property (nonatomic) BOOL handleAllTouchEvents;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ABKInAppMessageWindow.m",
    "content": "#import \"ABKInAppMessageWindow.h\"\n#import \"ABKInAppMessageView.h\"\n#import \"ABKInAppMessageWindowController.h\"\n#import \"ABKInAppMessageHTMLBase.h\"\n#import \"ABKUIUtils.h\"\n\n@implementation ABKInAppMessageWindow\n\n// Touches handled by ABKInAppMessageWindow:\n// - all if `handleAllTouchEvents == YES`\n// - in `ABKInAppMessageView` or one of its subviews\n// - all if displaying an HTML in-app message\n- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {\n\n  // Get the view in the hierarchy that contains the point\n  UIView *hitTestResult = [super hitTest:point withEvent:event];\n\n  // Always returns the view for HTML in-app messages\n  if ([self.rootViewController isKindOfClass:[ABKInAppMessageWindowController class]]) {\n    ABKInAppMessageWindowController *controller = (ABKInAppMessageWindowController *)self.rootViewController;\n    if ([controller.inAppMessage isKindOfClass:[ABKInAppMessageHTMLBase class]]) {\n      return hitTestResult;\n    }\n  }\n\n  // Handles the touch event\n  if (self.handleAllTouchEvents ||\n      [ABKUIUtils responderChainOf:hitTestResult hasKindOfClass:[ABKInAppMessageView class]]) {\n    return hitTestResult;\n  }\n\n  return nil;\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/AppboyInAppMessage.h",
    "content": "#import \"ABKInAppMessageUIButton.h\"\n#import \"ABKInAppMessageUIController.h\"\n#import \"ABKInAppMessageUIDelegate.h\"\n#import \"ABKInAppMessageView.h\"\n#import \"ABKInAppMessageWindow.h\"\n#import \"ABKInAppMessageFullViewController.h\"\n#import \"ABKInAppMessageHTMLFullViewController.h\"\n#import \"ABKInAppMessageHTMLViewController.h\"\n#import \"ABKInAppMessageHTMLBaseViewController.h\"\n#import \"ABKInAppMessageImmersiveViewController.h\"\n#import \"ABKInAppMessageModalViewController.h\"\n#import \"ABKInAppMessageSlideupViewController.h\"\n#import \"ABKInAppMessageViewController.h\"\n#import \"ABKInAppMessageWindowController.h\"\n\n#import \"ABKUIURLUtils.h\"\n#import \"ABKUIUtils.h\"\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/ABKInAppMessageFullViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"19162\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"19144\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ABKInAppMessageFullViewController\">\n            <connections>\n                <outlet property=\"closeXButtonTopConstraint\" destination=\"mE4-Br-iud\" id=\"nYE-HG-3E2\"/>\n                <outlet property=\"graphicImageView\" destination=\"aoE-zy-xb4\" id=\"eHe-jv-srI\"/>\n                <outlet property=\"iconImageView\" destination=\"1sk-El-iBS\" id=\"4d6-YI-68y\"/>\n                <outlet property=\"inAppMessageHeaderLabel\" destination=\"ThZ-Tl-ewt\" id=\"135-Rq-I9d\"/>\n                <outlet property=\"inAppMessageMessageLabel\" destination=\"i8e-sy-Bhj\" id=\"pG6-nS-qRI\"/>\n                <outlet property=\"leftInAppMessageButton\" destination=\"22x-RJ-G5m\" id=\"9MW-BH-4pD\"/>\n                <outlet property=\"rightInAppMessageButton\" destination=\"MZR-LG-Ie5\" id=\"w9s-EY-gLd\"/>\n                <outlet property=\"textsView\" destination=\"z23-Sg-7Xr\" id=\"DHp-Eh-wR6\"/>\n                <outlet property=\"view\" destination=\"j6O-5v-jBn\" id=\"fAw-bQ-dOG\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" placeholderIntrinsicWidth=\"320\" placeholderIntrinsicHeight=\"568\" id=\"j6O-5v-jBn\" customClass=\"ABKInAppMessageView\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"aoE-zy-xb4\" customClass=\"SDAnimatedImageView\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                </imageView>\n                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"1000\" placeholderIntrinsicWidth=\"320\" placeholderIntrinsicHeight=\"284\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1sk-El-iBS\" customClass=\"SDAnimatedImageView\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"448\"/>\n                </imageView>\n                <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"1\" horizontalCompressionResistancePriority=\"1\" directionalLockEnabled=\"YES\" bounces=\"NO\" showsHorizontalScrollIndicator=\"NO\" bouncesZoom=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"z23-Sg-7Xr\">\n                    <rect key=\"frame\" x=\"25\" y=\"478\" width=\"364\" height=\"56\"/>\n                    <subviews>\n                        <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qMw-Fs-Mb1\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"364\" height=\"56\"/>\n                            <subviews>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"1000\" placeholderIntrinsicWidth=\"280\" placeholderIntrinsicHeight=\"26\" text=\"Label\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ThZ-Tl-ewt\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"364\" height=\"26\"/>\n                                    <accessibility key=\"accessibilityConfiguration\">\n                                        <accessibilityTraits key=\"traits\" staticText=\"YES\" header=\"YES\"/>\n                                    </accessibility>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleTitle3\"/>\n                                    <color key=\"textColor\" red=\"0.20000000000000001\" green=\"0.20000000000000001\" blue=\"0.20000000000000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"999\" verticalCompressionResistancePriority=\"1000\" placeholderIntrinsicWidth=\"252\" placeholderIntrinsicHeight=\"20\" text=\"Label\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"i8e-sy-Bhj\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"36\" width=\"364\" height=\"20\"/>\n                                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                                    <color key=\"textColor\" red=\"0.33333333333333331\" green=\"0.33333333333333331\" blue=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                            </subviews>\n                            <constraints>\n                                <constraint firstItem=\"ThZ-Tl-ewt\" firstAttribute=\"leading\" secondItem=\"qMw-Fs-Mb1\" secondAttribute=\"leading\" id=\"1kT-2u-k81\"/>\n                                <constraint firstAttribute=\"bottom\" secondItem=\"i8e-sy-Bhj\" secondAttribute=\"bottom\" id=\"28T-XJ-wb7\"/>\n                                <constraint firstItem=\"ThZ-Tl-ewt\" firstAttribute=\"top\" secondItem=\"qMw-Fs-Mb1\" secondAttribute=\"top\" id=\"CBJ-Lw-ryM\"/>\n                                <constraint firstAttribute=\"trailing\" secondItem=\"ThZ-Tl-ewt\" secondAttribute=\"trailing\" id=\"Kyh-gd-Lhh\"/>\n                                <constraint firstAttribute=\"trailing\" secondItem=\"i8e-sy-Bhj\" secondAttribute=\"trailing\" id=\"VkY-aT-70G\"/>\n                                <constraint firstItem=\"i8e-sy-Bhj\" firstAttribute=\"leading\" secondItem=\"qMw-Fs-Mb1\" secondAttribute=\"leading\" id=\"Xtr-mZ-Gs9\"/>\n                                <constraint firstItem=\"ThZ-Tl-ewt\" firstAttribute=\"centerX\" secondItem=\"qMw-Fs-Mb1\" secondAttribute=\"centerX\" id=\"btv-J3-c62\"/>\n                                <constraint firstItem=\"i8e-sy-Bhj\" firstAttribute=\"top\" secondItem=\"ThZ-Tl-ewt\" secondAttribute=\"bottom\" constant=\"10\" id=\"vdc-Q3-Gsm\"/>\n                            </constraints>\n                        </view>\n                    </subviews>\n                    <constraints>\n                        <constraint firstItem=\"qMw-Fs-Mb1\" firstAttribute=\"height\" secondItem=\"z23-Sg-7Xr\" secondAttribute=\"height\" priority=\"250\" id=\"0mO-Ti-UQ4\"/>\n                        <constraint firstAttribute=\"height\" priority=\"250\" constant=\"56\" id=\"9l8-3m-0rC\"/>\n                        <constraint firstItem=\"qMw-Fs-Mb1\" firstAttribute=\"width\" secondItem=\"z23-Sg-7Xr\" secondAttribute=\"width\" id=\"Es4-fd-90u\"/>\n                        <constraint firstAttribute=\"bottom\" secondItem=\"qMw-Fs-Mb1\" secondAttribute=\"bottom\" id=\"KB2-UM-GnJ\"/>\n                        <constraint firstItem=\"qMw-Fs-Mb1\" firstAttribute=\"top\" secondItem=\"z23-Sg-7Xr\" secondAttribute=\"top\" id=\"d9T-zI-gVA\"/>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"qMw-Fs-Mb1\" secondAttribute=\"trailing\" id=\"pbO-oQ-yHw\"/>\n                        <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"56\" id=\"vfa-pt-AzF\"/>\n                        <constraint firstItem=\"qMw-Fs-Mb1\" firstAttribute=\"leading\" secondItem=\"z23-Sg-7Xr\" secondAttribute=\"leading\" id=\"xh5-9b-Ek0\"/>\n                    </constraints>\n                </scrollView>\n                <button opaque=\"NO\" tag=\"50\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dmQ-gu-wor\">\n                    <rect key=\"frame\" x=\"359\" y=\"59\" width=\"40\" height=\"40\"/>\n                    <accessibility key=\"accessibilityConfiguration\" label=\"Close In App Message\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"40\" id=\"87o-uR-lPh\"/>\n                        <constraint firstAttribute=\"width\" constant=\"40\" id=\"DXr-Aa-sBG\"/>\n                    </constraints>\n                    <color key=\"tintColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <inset key=\"imageEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                    <state key=\"normal\" image=\"com_appboy_inapp_close_icon.png\">\n                        <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </state>\n                    <connections>\n                        <action selector=\"dismissInAppMessage:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"M95-RZ-cAa\"/>\n                    </connections>\n                </button>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MZR-LG-Ie5\" customClass=\"ABKInAppMessageUIButton\">\n                    <rect key=\"frame\" x=\"212\" y=\"554\" width=\"177\" height=\"44\"/>\n                    <color key=\"backgroundColor\" red=\"0.10588235294117647\" green=\"0.47058823529411764\" blue=\"0.81176470588235294\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"80\" id=\"I9Z-DV-8Hy\"/>\n                        <constraint firstAttribute=\"height\" constant=\"44\" id=\"TDS-6r-ZN2\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"14\"/>\n                    <inset key=\"contentEdgeInsets\" minX=\"12\" minY=\"0.0\" maxX=\"12\" maxY=\"0.0\"/>\n                    <state key=\"normal\" title=\"Button\">\n                        <color key=\"titleColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    </state>\n                    <userDefinedRuntimeAttributes>\n                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.borderWidth\">\n                            <integer key=\"value\" value=\"1\"/>\n                        </userDefinedRuntimeAttribute>\n                    </userDefinedRuntimeAttributes>\n                    <connections>\n                        <action selector=\"buttonClicked:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"1iK-m1-P29\"/>\n                    </connections>\n                </button>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"249\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"22x-RJ-G5m\" customClass=\"ABKInAppMessageUIButton\">\n                    <rect key=\"frame\" x=\"25\" y=\"554\" width=\"177\" height=\"44\"/>\n                    <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"44\" id=\"uLZ-Yo-2BF\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"14\"/>\n                    <inset key=\"contentEdgeInsets\" minX=\"12\" minY=\"0.0\" maxX=\"12\" maxY=\"0.0\"/>\n                    <state key=\"normal\" title=\"Button\"/>\n                    <userDefinedRuntimeAttributes>\n                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.borderWidth\">\n                            <integer key=\"value\" value=\"1\"/>\n                        </userDefinedRuntimeAttribute>\n                    </userDefinedRuntimeAttributes>\n                    <connections>\n                        <action selector=\"buttonClicked:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"H0b-kj-Bkx\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <viewLayoutGuide key=\"safeArea\" id=\"xPm-PP-bN3\"/>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"xPm-PP-bN3\" firstAttribute=\"trailing\" secondItem=\"z23-Sg-7Xr\" secondAttribute=\"trailing\" constant=\"25\" id=\"1BU-h4-VSn\"/>\n                <constraint firstItem=\"xPm-PP-bN3\" firstAttribute=\"trailing\" secondItem=\"MZR-LG-Ie5\" secondAttribute=\"trailing\" priority=\"250\" constant=\"25\" id=\"3Zh-nv-svp\"/>\n                <constraint firstItem=\"xPm-PP-bN3\" firstAttribute=\"trailing\" secondItem=\"dmQ-gu-wor\" secondAttribute=\"trailing\" constant=\"15\" id=\"8OM-Hq-hsx\"/>\n                <constraint firstItem=\"1sk-El-iBS\" firstAttribute=\"height\" secondItem=\"j6O-5v-jBn\" secondAttribute=\"height\" multiplier=\"0.5\" id=\"Ajs-ma-RTE\"/>\n                <constraint firstItem=\"22x-RJ-G5m\" firstAttribute=\"leading\" secondItem=\"xPm-PP-bN3\" secondAttribute=\"leading\" constant=\"25\" id=\"As0-a8-UYK\"/>\n                <constraint firstItem=\"z23-Sg-7Xr\" firstAttribute=\"leading\" secondItem=\"xPm-PP-bN3\" secondAttribute=\"leading\" constant=\"25\" id=\"MLg-0f-qis\"/>\n                <constraint firstItem=\"1sk-El-iBS\" firstAttribute=\"top\" secondItem=\"j6O-5v-jBn\" secondAttribute=\"top\" id=\"PIA-mR-nzy\"/>\n                <constraint firstItem=\"22x-RJ-G5m\" firstAttribute=\"width\" secondItem=\"MZR-LG-Ie5\" secondAttribute=\"width\" id=\"R6l-kW-ZV8\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"aoE-zy-xb4\" secondAttribute=\"trailing\" id=\"Ujh-Kj-Laa\"/>\n                <constraint firstItem=\"1sk-El-iBS\" firstAttribute=\"leading\" secondItem=\"j6O-5v-jBn\" secondAttribute=\"leading\" id=\"XUY-G2-bDm\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"aoE-zy-xb4\" secondAttribute=\"bottom\" id=\"Xza-Eq-sJK\"/>\n                <constraint firstItem=\"z23-Sg-7Xr\" firstAttribute=\"top\" secondItem=\"1sk-El-iBS\" secondAttribute=\"bottom\" constant=\"30\" id=\"ckf-aj-6it\"/>\n                <constraint firstItem=\"xPm-PP-bN3\" firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"MZR-LG-Ie5\" secondAttribute=\"bottom\" constant=\"30\" id=\"dN1-pD-RZF\"/>\n                <constraint firstItem=\"aoE-zy-xb4\" firstAttribute=\"top\" secondItem=\"j6O-5v-jBn\" secondAttribute=\"top\" id=\"e7l-MN-n0s\"/>\n                <constraint firstItem=\"MZR-LG-Ie5\" firstAttribute=\"leading\" secondItem=\"22x-RJ-G5m\" secondAttribute=\"trailing\" constant=\"10\" id=\"ezt-Qp-POS\"/>\n                <constraint firstItem=\"aoE-zy-xb4\" firstAttribute=\"leading\" secondItem=\"j6O-5v-jBn\" secondAttribute=\"leading\" id=\"hBb-7t-5uR\"/>\n                <constraint firstItem=\"MZR-LG-Ie5\" firstAttribute=\"top\" secondItem=\"z23-Sg-7Xr\" secondAttribute=\"bottom\" constant=\"20\" id=\"hKF-c6-84D\"/>\n                <constraint firstItem=\"dmQ-gu-wor\" firstAttribute=\"top\" secondItem=\"xPm-PP-bN3\" secondAttribute=\"top\" constant=\"15\" id=\"mE4-Br-iud\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"1sk-El-iBS\" secondAttribute=\"trailing\" id=\"mIF-dJ-aSL\"/>\n                <constraint firstItem=\"22x-RJ-G5m\" firstAttribute=\"top\" secondItem=\"z23-Sg-7Xr\" secondAttribute=\"bottom\" constant=\"20\" id=\"o2o-mq-biG\"/>\n                <constraint firstItem=\"xPm-PP-bN3\" firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"z23-Sg-7Xr\" secondAttribute=\"bottom\" constant=\"30\" id=\"pHd-NP-PFV\"/>\n                <constraint firstItem=\"MZR-LG-Ie5\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"j6O-5v-jBn\" secondAttribute=\"leading\" constant=\"25\" id=\"vxw-M7-zGT\"/>\n                <constraint firstItem=\"xPm-PP-bN3\" firstAttribute=\"bottom\" secondItem=\"MZR-LG-Ie5\" secondAttribute=\"bottom\" priority=\"250\" constant=\"30\" id=\"wWn-Bp-q1j\"/>\n                <constraint firstItem=\"xPm-PP-bN3\" firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"MZR-LG-Ie5\" secondAttribute=\"trailing\" constant=\"25\" id=\"x3r-Pl-Bin\"/>\n                <constraint firstItem=\"22x-RJ-G5m\" firstAttribute=\"centerY\" secondItem=\"MZR-LG-Ie5\" secondAttribute=\"centerY\" id=\"x9l-KZ-wik\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <point key=\"canvasLocation\" x=\"364\" y=\"265\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"com_appboy_inapp_close_icon.png\" width=\"15\" height=\"15\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/ABKInAppMessageModalViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"17701\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17703\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ABKInAppMessageModalViewController\">\n            <connections>\n                <outlet property=\"graphicImageContainerView\" destination=\"W5U-wQ-zPx\" id=\"Foa-Ya-c0Z\"/>\n                <outlet property=\"graphicImageView\" destination=\"ZQA-uk-Rlq\" id=\"rXp-Wh-oVN\"/>\n                <outlet property=\"headerBodySpaceConstraint\" destination=\"mmQ-Hr-Yct\" id=\"IfX-Hh-ugg\"/>\n                <outlet property=\"iconImageContainerView\" destination=\"bwu-K0-eX4\" id=\"uq8-sF-veg\"/>\n                <outlet property=\"iconImageView\" destination=\"YXk-fS-z8c\" id=\"jpC-zi-Jgt\"/>\n                <outlet property=\"iconLabelView\" destination=\"V7v-po-Vrj\" id=\"cv4-Jo-yhO\"/>\n                <outlet property=\"inAppMessageHeaderLabel\" destination=\"e6G-Xz-30b\" id=\"ZbG-nn-wgH\"/>\n                <outlet property=\"inAppMessageMessageLabel\" destination=\"6VM-43-DBI\" id=\"oxU-Zh-3ss\"/>\n                <outlet property=\"leftInAppMessageButton\" destination=\"4j6-35-qge\" id=\"GFl-Bd-8tS\"/>\n                <outlet property=\"rightInAppMessageButton\" destination=\"Uj6-rR-aVO\" id=\"ASY-Ht-gzT\"/>\n                <outlet property=\"textsView\" destination=\"reI-S5-zX0\" id=\"CaT-Dt-nq7\"/>\n                <outlet property=\"view\" destination=\"PnG-4k-e3g\" id=\"PSh-pA-U2l\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clipsSubviews=\"YES\" clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" verticalHuggingPriority=\"1000\" verticalCompressionResistancePriority=\"990\" placeholderIntrinsicWidth=\"290\" placeholderIntrinsicHeight=\"290\" id=\"PnG-4k-e3g\" customClass=\"ABKInAppMessageView\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"290\" height=\"290\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n            <subviews>\n                <view clipsSubviews=\"YES\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"W5U-wQ-zPx\" userLabel=\"Graphic Image Container View\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"290\" height=\"290\"/>\n                    <subviews>\n                        <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"1000\" verticalHuggingPriority=\"1000\" placeholderIntrinsicWidth=\"290\" placeholderIntrinsicHeight=\"290\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ZQA-uk-Rlq\" customClass=\"SDAnimatedImageView\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"290\" height=\"290\"/>\n                        </imageView>\n                    </subviews>\n                    <constraints>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"ZQA-uk-Rlq\" secondAttribute=\"trailing\" id=\"941-xX-5il\"/>\n                        <constraint firstItem=\"ZQA-uk-Rlq\" firstAttribute=\"leading\" secondItem=\"W5U-wQ-zPx\" secondAttribute=\"leading\" id=\"HMh-dj-g1c\"/>\n                        <constraint firstAttribute=\"bottom\" secondItem=\"ZQA-uk-Rlq\" secondAttribute=\"bottom\" id=\"M0R-Cc-UIm\"/>\n                        <constraint firstItem=\"ZQA-uk-Rlq\" firstAttribute=\"top\" secondItem=\"W5U-wQ-zPx\" secondAttribute=\"top\" id=\"vdH-65-XNs\"/>\n                    </constraints>\n                </view>\n                <view clipsSubviews=\"YES\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bwu-K0-eX4\" userLabel=\"Icon Image Container View\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"290\" height=\"70\"/>\n                    <subviews>\n                        <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"1000\" placeholderIntrinsicWidth=\"290\" placeholderIntrinsicHeight=\"100\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YXk-fS-z8c\" customClass=\"SDAnimatedImageView\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"290\" height=\"70\"/>\n                            <accessibility key=\"accessibilityConfiguration\" label=\"\">\n                                <bool key=\"isElement\" value=\"NO\"/>\n                            </accessibility>\n                            <constraints>\n                                <constraint firstAttribute=\"height\" relation=\"lessThanOrEqual\" constant=\"155.16999999999999\" id=\"puC-4M-FWf\"/>\n                            </constraints>\n                        </imageView>\n                    </subviews>\n                    <constraints>\n                        <constraint firstItem=\"YXk-fS-z8c\" firstAttribute=\"height\" secondItem=\"bwu-K0-eX4\" secondAttribute=\"height\" id=\"8tO-o3-x10\"/>\n                        <constraint firstItem=\"YXk-fS-z8c\" firstAttribute=\"centerX\" secondItem=\"bwu-K0-eX4\" secondAttribute=\"centerX\" id=\"Jnl-RA-93a\"/>\n                        <constraint firstItem=\"YXk-fS-z8c\" firstAttribute=\"top\" secondItem=\"bwu-K0-eX4\" secondAttribute=\"top\" id=\"MJ1-9k-A5g\"/>\n                        <constraint firstAttribute=\"height\" priority=\"250\" id=\"SLm-AP-ziD\"/>\n                        <constraint firstAttribute=\"bottom\" secondItem=\"YXk-fS-z8c\" secondAttribute=\"bottom\" id=\"YVa-69-Qok\"/>\n                        <constraint firstItem=\"YXk-fS-z8c\" firstAttribute=\"width\" relation=\"lessThanOrEqual\" secondItem=\"bwu-K0-eX4\" secondAttribute=\"width\" id=\"qAs-kh-dRr\"/>\n                    </constraints>\n                </view>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"15\" adjustsLetterSpacingToFitWidth=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"V7v-po-Vrj\" userLabel=\"icon label\">\n                    <rect key=\"frame\" x=\"120\" y=\"20\" width=\"50\" height=\"50\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" constant=\"50\" id=\"fRz-Od-LZ4\"/>\n                        <constraint firstAttribute=\"height\" constant=\"50\" id=\"wjA-tN-ykl\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"30\"/>\n                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" verticalHuggingPriority=\"1000\" verticalCompressionResistancePriority=\"1000\" directionalLockEnabled=\"YES\" bounces=\"NO\" showsHorizontalScrollIndicator=\"NO\" bouncesZoom=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"reI-S5-zX0\">\n                    <rect key=\"frame\" x=\"25\" y=\"100\" width=\"240\" height=\"96\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"1000\" verticalCompressionResistancePriority=\"1000\" placeholderIntrinsicWidth=\"250\" placeholderIntrinsicHeight=\"21\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"e6G-Xz-30b\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"5\" width=\"240\" height=\"21\"/>\n                            <accessibility key=\"accessibilityConfiguration\">\n                                <accessibilityTraits key=\"traits\" staticText=\"YES\" header=\"YES\"/>\n                            </accessibility>\n                            <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleTitle3\"/>\n                            <color key=\"textColor\" red=\"0.20000000000000001\" green=\"0.20000000000000001\" blue=\"0.20000000000000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"1000\" verticalCompressionResistancePriority=\"1000\" placeholderIntrinsicWidth=\"250\" placeholderIntrinsicHeight=\"18\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6VM-43-DBI\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"36\" width=\"240\" height=\"18\"/>\n                            <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                            <color key=\"textColor\" red=\"0.33333333333333331\" green=\"0.33333333333333331\" blue=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <constraints>\n                        <constraint firstItem=\"e6G-Xz-30b\" firstAttribute=\"top\" secondItem=\"reI-S5-zX0\" secondAttribute=\"top\" constant=\"5\" id=\"1YS-qG-CEJ\"/>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"6VM-43-DBI\" secondAttribute=\"trailing\" id=\"7XY-3k-5WO\"/>\n                        <constraint firstItem=\"6VM-43-DBI\" firstAttribute=\"leading\" secondItem=\"reI-S5-zX0\" secondAttribute=\"leading\" id=\"E1M-JH-0uH\"/>\n                        <constraint firstItem=\"e6G-Xz-30b\" firstAttribute=\"leading\" secondItem=\"reI-S5-zX0\" secondAttribute=\"leading\" id=\"N3A-2q-nUG\"/>\n                        <constraint firstAttribute=\"trailing\" secondItem=\"e6G-Xz-30b\" secondAttribute=\"trailing\" id=\"SFJ-Sk-Wtc\"/>\n                        <constraint firstItem=\"6VM-43-DBI\" firstAttribute=\"top\" secondItem=\"e6G-Xz-30b\" secondAttribute=\"bottom\" constant=\"10\" id=\"mmQ-Hr-Yct\"/>\n                        <constraint firstAttribute=\"bottom\" secondItem=\"6VM-43-DBI\" secondAttribute=\"bottom\" constant=\"5\" id=\"zMg-wd-UwB\"/>\n                    </constraints>\n                </scrollView>\n                <button opaque=\"NO\" tag=\"50\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DyU-8m-ANz\">\n                    <rect key=\"frame\" x=\"250\" y=\"0.0\" width=\"40\" height=\"40\"/>\n                    <accessibility key=\"accessibilityConfiguration\" label=\"Close In App Message\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" constant=\"40\" id=\"WFU-CX-cxy\"/>\n                        <constraint firstAttribute=\"height\" constant=\"40\" id=\"ZcZ-Np-R2l\"/>\n                    </constraints>\n                    <color key=\"tintColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <inset key=\"imageEdgeInsets\" minX=\"10\" minY=\"15\" maxX=\"15\" maxY=\"10\"/>\n                    <state key=\"normal\" image=\"com_appboy_inapp_close_icon.png\">\n                        <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </state>\n                    <connections>\n                        <action selector=\"dismissInAppMessage:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"5yM-e3-X5M\"/>\n                    </connections>\n                </button>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"249\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4j6-35-qge\" customClass=\"ABKInAppMessageUIButton\">\n                    <rect key=\"frame\" x=\"25\" y=\"216\" width=\"115\" height=\"44\"/>\n                    <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"44\" id=\"y0f-gv-Erg\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"14\"/>\n                    <inset key=\"contentEdgeInsets\" minX=\"12\" minY=\"0.0\" maxX=\"12\" maxY=\"0.0\"/>\n                    <state key=\"normal\" title=\"Button\">\n                        <color key=\"titleColor\" red=\"0.10588235294117647\" green=\"0.47058823529411764\" blue=\"0.81176470588235294\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    </state>\n                    <userDefinedRuntimeAttributes>\n                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.borderWidth\">\n                            <integer key=\"value\" value=\"1\"/>\n                        </userDefinedRuntimeAttribute>\n                    </userDefinedRuntimeAttributes>\n                    <connections>\n                        <action selector=\"buttonClicked:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"nUq-1q-1PM\"/>\n                    </connections>\n                </button>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Uj6-rR-aVO\" customClass=\"ABKInAppMessageUIButton\">\n                    <rect key=\"frame\" x=\"150\" y=\"216\" width=\"115\" height=\"44\"/>\n                    <color key=\"backgroundColor\" red=\"0.10588235294117647\" green=\"0.47058823529411764\" blue=\"0.81176470588235294\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" relation=\"greaterThanOrEqual\" constant=\"80\" id=\"dNm-ih-ctV\"/>\n                        <constraint firstAttribute=\"height\" constant=\"44\" id=\"g3y-hA-vff\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"14\"/>\n                    <inset key=\"contentEdgeInsets\" minX=\"12\" minY=\"0.0\" maxX=\"12\" maxY=\"0.0\"/>\n                    <state key=\"normal\" title=\"Button\">\n                        <color key=\"titleColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    </state>\n                    <userDefinedRuntimeAttributes>\n                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.borderWidth\">\n                            <integer key=\"value\" value=\"1\"/>\n                        </userDefinedRuntimeAttribute>\n                    </userDefinedRuntimeAttributes>\n                    <connections>\n                        <action selector=\"buttonClicked:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"xR4-ue-At4\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <accessibility key=\"accessibilityConfiguration\" label=\"Appboy Slideup\">\n                <bool key=\"isElement\" value=\"NO\"/>\n            </accessibility>\n            <constraints>\n                <constraint firstItem=\"e6G-Xz-30b\" firstAttribute=\"leading\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"leading\" constant=\"25\" id=\"4Vc-wD-7yu\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"Uj6-rR-aVO\" secondAttribute=\"bottom\" constant=\"30\" id=\"7Fb-3l-REe\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"W5U-wQ-zPx\" secondAttribute=\"trailing\" id=\"9DY-JH-9I9\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"Uj6-rR-aVO\" secondAttribute=\"trailing\" priority=\"250\" constant=\"25\" id=\"9wI-Fo-n3G\"/>\n                <constraint firstItem=\"reI-S5-zX0\" firstAttribute=\"top\" secondItem=\"V7v-po-Vrj\" secondAttribute=\"bottom\" constant=\"30\" id=\"AwD-uG-rdZ\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"reI-S5-zX0\" secondAttribute=\"trailing\" constant=\"25\" id=\"Dbc-pD-xgN\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"e6G-Xz-30b\" secondAttribute=\"trailing\" constant=\"25\" id=\"Igu-Xa-8l3\"/>\n                <constraint firstItem=\"Uj6-rR-aVO\" firstAttribute=\"centerY\" secondItem=\"4j6-35-qge\" secondAttribute=\"centerY\" id=\"JkQ-rM-e1g\"/>\n                <constraint firstItem=\"4j6-35-qge\" firstAttribute=\"top\" secondItem=\"reI-S5-zX0\" secondAttribute=\"bottom\" constant=\"20\" id=\"MFo-g0-2lP\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"W5U-wQ-zPx\" secondAttribute=\"bottom\" id=\"SUM-G8-zOu\"/>\n                <constraint firstItem=\"Uj6-rR-aVO\" firstAttribute=\"width\" secondItem=\"4j6-35-qge\" secondAttribute=\"width\" id=\"Svu-dM-KnR\"/>\n                <constraint firstItem=\"Uj6-rR-aVO\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"leading\" constant=\"25\" id=\"Tzc-DR-Bqo\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"DyU-8m-ANz\" secondAttribute=\"trailing\" id=\"XGM-su-R57\"/>\n                <constraint firstItem=\"YXk-fS-z8c\" firstAttribute=\"top\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"top\" id=\"ZFU-Iy-mCJ\"/>\n                <constraint firstItem=\"reI-S5-zX0\" firstAttribute=\"top\" secondItem=\"YXk-fS-z8c\" secondAttribute=\"bottom\" constant=\"30\" id=\"ZVr-bT-nmk\"/>\n                <constraint firstItem=\"DyU-8m-ANz\" firstAttribute=\"top\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"top\" id=\"acT-LM-kky\"/>\n                <constraint firstItem=\"reI-S5-zX0\" firstAttribute=\"leading\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"leading\" constant=\"25\" id=\"cMn-Qa-qtu\"/>\n                <constraint firstItem=\"bwu-K0-eX4\" firstAttribute=\"leading\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"leading\" id=\"e8n-nS-AEH\"/>\n                <constraint firstItem=\"W5U-wQ-zPx\" firstAttribute=\"leading\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"leading\" id=\"gl8-7Z-EkK\"/>\n                <constraint firstItem=\"W5U-wQ-zPx\" firstAttribute=\"top\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"top\" id=\"iCP-HQ-8xr\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"V7v-po-Vrj\" secondAttribute=\"centerX\" id=\"iT4-zB-TAW\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"6VM-43-DBI\" secondAttribute=\"trailing\" constant=\"25\" id=\"jBL-YO-ocI\"/>\n                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Uj6-rR-aVO\" secondAttribute=\"trailing\" constant=\"25\" id=\"lWm-Be-l7w\"/>\n                <constraint firstItem=\"Uj6-rR-aVO\" firstAttribute=\"top\" secondItem=\"reI-S5-zX0\" secondAttribute=\"bottom\" constant=\"20\" id=\"mej-Mm-lhh\"/>\n                <constraint firstItem=\"bwu-K0-eX4\" firstAttribute=\"top\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"top\" id=\"mqj-iQ-emT\"/>\n                <constraint firstItem=\"reI-S5-zX0\" firstAttribute=\"centerX\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"centerX\" id=\"qe4-cO-TNG\"/>\n                <constraint firstItem=\"V7v-po-Vrj\" firstAttribute=\"top\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"top\" constant=\"20\" id=\"sbV-1G-aDO\"/>\n                <constraint firstItem=\"4j6-35-qge\" firstAttribute=\"leading\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"leading\" constant=\"25\" id=\"tEm-ce-CQ5\"/>\n                <constraint firstItem=\"Uj6-rR-aVO\" firstAttribute=\"leading\" secondItem=\"4j6-35-qge\" secondAttribute=\"trailing\" constant=\"10\" id=\"tgB-US-a3p\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"bwu-K0-eX4\" secondAttribute=\"trailing\" id=\"vD0-Ev-6x7\"/>\n                <constraint firstItem=\"6VM-43-DBI\" firstAttribute=\"leading\" secondItem=\"PnG-4k-e3g\" secondAttribute=\"leading\" constant=\"25\" id=\"vI7-LX-GKQ\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"4j6-35-qge\" secondAttribute=\"bottom\" constant=\"30\" id=\"vus-NM-VeQ\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <nil key=\"simulatedTopBarMetrics\"/>\n            <nil key=\"simulatedBottomBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"256\" y=\"200.59970014992504\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"com_appboy_inapp_close_icon.png\" width=\"15\" height=\"15\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/ABKInAppMessageSlideupViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"17701\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17703\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ABKInAppMessageSlideupViewController\">\n            <connections>\n                <outlet property=\"arrowImage\" destination=\"hcN-Hg-8Rk\" id=\"YBk-89-aL8\"/>\n                <outlet property=\"iconImageView\" destination=\"6hj-eF-vTj\" id=\"exV-Vm-Txw\"/>\n                <outlet property=\"iconLabelView\" destination=\"oJe-v3-gHl\" id=\"1w2-74-AeU\"/>\n                <outlet property=\"inAppMessageMessageLabel\" destination=\"ag0-Xc-EWA\" id=\"D1z-cn-AIO\"/>\n                <outlet property=\"view\" destination=\"9Yq-Cj-Asq\" id=\"YuG-IU-14Z\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" id=\"9Yq-Cj-Asq\" userLabel=\"InAppMessage\" customClass=\"ABKInAppMessageView\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"80\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n            <subviews>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" image=\"arrow.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hcN-Hg-8Rk\">\n                    <rect key=\"frame\" x=\"288\" y=\"30\" width=\"12\" height=\"20\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"080-dj-Q8Y\"/>\n                        <constraint firstAttribute=\"width\" constant=\"12\" id=\"0vG-Ou-Rvz\"/>\n                    </constraints>\n                </imageView>\n                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6hj-eF-vTj\" customClass=\"SDAnimatedImageView\">\n                    <rect key=\"frame\" x=\"15\" y=\"15\" width=\"50\" height=\"50\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"50\" id=\"QBd-IJ-cWz\"/>\n                        <constraint firstAttribute=\"width\" constant=\"50\" id=\"cWT-9H-ccX\"/>\n                    </constraints>\n                </imageView>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"1000\" verticalCompressionResistancePriority=\"1000\" placeholderIntrinsicWidth=\"215\" placeholderIntrinsicHeight=\"50\" text=\"Hello!\" lineBreakMode=\"tailTruncation\" numberOfLines=\"3\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ag0-Xc-EWA\" userLabel=\"Label\">\n                    <rect key=\"frame\" x=\"75\" y=\"15\" width=\"195\" height=\"50\"/>\n                    <accessibility key=\"accessibilityConfiguration\">\n                        <accessibilityTraits key=\"traits\" none=\"YES\"/>\n                    </accessibility>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"30\" id=\"qaf-Ub-W83\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleSubhead\"/>\n                    <color key=\"textColor\" red=\"0.33333333333333331\" green=\"0.33333333333333331\" blue=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" adjustsLetterSpacingToFitWidth=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oJe-v3-gHl\" userLabel=\"label View\">\n                    <rect key=\"frame\" x=\"15\" y=\"15\" width=\"50\" height=\"50\"/>\n                    <accessibility key=\"accessibilityConfiguration\">\n                        <bool key=\"isElement\" value=\"NO\"/>\n                    </accessibility>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"50\" id=\"LDz-nW-9w0\"/>\n                        <constraint firstAttribute=\"width\" constant=\"50\" id=\"hgI-iN-KaA\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"30\"/>\n                    <color key=\"textColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"0.93725490196078431\" green=\"0.93725490196078431\" blue=\"0.93725490196078431\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"oJe-v3-gHl\" firstAttribute=\"top\" secondItem=\"9Yq-Cj-Asq\" secondAttribute=\"top\" priority=\"999\" constant=\"15\" id=\"1uM-hw-0b4\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"ag0-Xc-EWA\" secondAttribute=\"bottom\" constant=\"15\" id=\"9L1-re-xJS\"/>\n                <constraint firstAttribute=\"centerY\" secondItem=\"oJe-v3-gHl\" secondAttribute=\"centerY\" id=\"E8X-FN-SPO\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"6hj-eF-vTj\" secondAttribute=\"bottom\" priority=\"999\" constant=\"15\" id=\"Isw-4J-D84\"/>\n                <constraint firstAttribute=\"centerY\" secondItem=\"hcN-Hg-8Rk\" secondAttribute=\"centerY\" id=\"OcH-ZF-Vvt\"/>\n                <constraint firstItem=\"ag0-Xc-EWA\" firstAttribute=\"leading\" secondItem=\"oJe-v3-gHl\" secondAttribute=\"trailing\" constant=\"10\" id=\"VUL-VY-fNM\"/>\n                <constraint firstItem=\"hcN-Hg-8Rk\" firstAttribute=\"leading\" secondItem=\"ag0-Xc-EWA\" secondAttribute=\"trailing\" constant=\"18\" id=\"WXE-Sq-V8M\"/>\n                <constraint firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"6hj-eF-vTj\" secondAttribute=\"bottom\" constant=\"15\" id=\"X6h-qF-Vmm\"/>\n                <constraint firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"oJe-v3-gHl\" secondAttribute=\"bottom\" constant=\"15\" id=\"XKB-qR-ihy\"/>\n                <constraint firstItem=\"6hj-eF-vTj\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"9Yq-Cj-Asq\" secondAttribute=\"top\" constant=\"15\" id=\"Ylq-CP-FaV\"/>\n                <constraint firstItem=\"oJe-v3-gHl\" firstAttribute=\"leading\" secondItem=\"9Yq-Cj-Asq\" secondAttribute=\"leading\" constant=\"15\" id=\"Zas-du-6n3\"/>\n                <constraint firstItem=\"ag0-Xc-EWA\" firstAttribute=\"leading\" secondItem=\"6hj-eF-vTj\" secondAttribute=\"trailing\" constant=\"10\" id=\"eUh-ku-Frs\"/>\n                <constraint firstItem=\"6hj-eF-vTj\" firstAttribute=\"top\" secondItem=\"9Yq-Cj-Asq\" secondAttribute=\"top\" priority=\"999\" constant=\"15\" id=\"gnA-he-ykc\"/>\n                <constraint firstItem=\"6hj-eF-vTj\" firstAttribute=\"leading\" secondItem=\"9Yq-Cj-Asq\" secondAttribute=\"leading\" constant=\"15\" id=\"lVO-Tz-Cv3\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"hcN-Hg-8Rk\" secondAttribute=\"trailing\" constant=\"20\" id=\"mWR-6h-nPJ\"/>\n                <constraint firstItem=\"ag0-Xc-EWA\" firstAttribute=\"top\" secondItem=\"9Yq-Cj-Asq\" secondAttribute=\"top\" constant=\"15\" id=\"rxe-zV-lkL\"/>\n                <constraint firstAttribute=\"centerY\" secondItem=\"6hj-eF-vTj\" secondAttribute=\"centerY\" id=\"uzf-vo-Fqu\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"oJe-v3-gHl\" secondAttribute=\"bottom\" priority=\"999\" constant=\"15\" id=\"v0y-XU-okj\"/>\n                <constraint firstAttribute=\"centerY\" secondItem=\"ag0-Xc-EWA\" secondAttribute=\"centerY\" id=\"x07-7d-hfz\"/>\n                <constraint firstItem=\"oJe-v3-gHl\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"9Yq-Cj-Asq\" secondAttribute=\"top\" constant=\"15\" id=\"xPN-sD-MSt\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"171\" y=\"292\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"arrow.png\" width=\"18\" height=\"30\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/Base.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"Close\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/ar.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"لإغلاق\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/cs.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"zavřít\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/da.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"at lukke\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/de.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"schließen\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/en.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"Close\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/es-419.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"cerrar\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/es-MX.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"cerrar\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/es.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"cerrar\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/et.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"sulgema\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/fi.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"sulkea\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/fil.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"Isara\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/fr.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"fermer\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/he.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"לִסְגוֹר\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/hi.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"बंद करना\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/id.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"untuk menutup\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/it.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"chiudere\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/ja.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"閉じる\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/km.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"បិទ\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/ko.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"닫다\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/lo.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"ປິດ\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/ms.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"untuk menutup\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/my.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"ပိတ်ရန်\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/nb.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"å lukke\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/nl.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"sluiten\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/pl.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"zamknąć\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/pt-PT.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"fechar\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/pt.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"fechar\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/ru.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"закрывать\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/sv.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"stänga\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/th.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"ปิด\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/uk.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"закрити\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/vi.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"đóng\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/zh-HK.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"關閉\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/zh-Hans.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"关闭\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/zh-Hant.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"關閉\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/zh-TW.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"關閉\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/Resources/zh.lproj/AppboyInAppMessageLocalizable.strings",
    "content": "\"Appboy.in-app-message.close-button.title\" = \"关闭\";\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageFullViewController.h",
    "content": "#import \"ABKInAppMessageImmersiveViewController.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageFullViewController : ABKInAppMessageImmersiveViewController\n\n@property (weak, nonatomic) IBOutlet NSLayoutConstraint *closeXButtonTopConstraint;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageFullViewController.m",
    "content": "#import \"ABKInAppMessageFullViewController.h\"\n#import \"ABKInAppMessageViewController.h\"\n#import \"ABKInAppMessageImmersive.h\"\n#import \"ABKUIUtils.h\"\n\nstatic const CGFloat FullViewInIPadCornerRadius = 8.0f;\nstatic const CGFloat MaxLongEdge = 720.0f;\nstatic const CGFloat MaxShortEdge = 450.0f;\nstatic const CGFloat CloseXPadding = 15.0f;\n\n@implementation ABKInAppMessageFullViewController\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  \n  CGFloat maxWidth = MaxShortEdge;\n  CGFloat maxHeight = MaxLongEdge;\n  if (self.inAppMessage.orientation == ABKInAppMessageOrientationLandscape) {\n    maxWidth = MaxLongEdge;\n    maxHeight = MaxShortEdge;\n  }\n  if (self.isiPad) {\n    NSArray *widthConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@\"H:[view(<=max)]\"\n                                                                        options:0\n                                                                        metrics:@{@\"max\" : @(maxWidth)}\n                                                                          views:@{@\"view\" : self.view}];\n    NSArray *heightConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@\"V:[view(<=max)]\"\n                                                                         options:0\n                                                                         metrics:@{@\"max\" : @(maxHeight)}\n                                                                           views:@{@\"view\" : self.view}];\n    [self.view addConstraints:widthConstraints];\n    [self.view addConstraints:heightConstraints];\n    self.view.layer.cornerRadius = FullViewInIPadCornerRadius;\n    self.view.layer.masksToBounds = YES;\n    \n    [self.view.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|-(>=0)-[view]-(>=0)-|\"\n                                                                                options:0\n                                                                                metrics:nil\n                                                                                  views:@{@\"view\" : self.view}]];\n  } else {\n    NSLayoutConstraint *leadConstraint = [NSLayoutConstraint constraintWithItem:self.view\n                                                                      attribute:NSLayoutAttributeLeading\n                                                                      relatedBy:NSLayoutRelationEqual\n                                                                         toItem:self.view.superview\n                                                                      attribute:NSLayoutAttributeLeading\n                                                                     multiplier:1\n                                                                       constant:0.0];\n    NSLayoutConstraint *trailConstraint = [NSLayoutConstraint constraintWithItem:self.view.superview\n                                                                       attribute:NSLayoutAttributeTrailing\n                                                                       relatedBy:NSLayoutRelationEqual\n                                                                          toItem:self.view\n                                                                       attribute:NSLayoutAttributeTrailing\n                                                                      multiplier:1\n                                                                        constant:0.0];\n    [self.view.superview addConstraints:@[leadConstraint, trailConstraint]];\n  }\n  \n  NSString *heightVisualFormat = self.isiPad? @\"V:|-(>=0)-[view]-(>=0)-|\" : @\"V:|[view]|\";\n  NSArray *heightConstraints = [NSLayoutConstraint constraintsWithVisualFormat:heightVisualFormat\n                                                                       options:0\n                                                                       metrics:nil\n                                                                         views:@{@\"view\" : self.view}];\n  [self.view.superview addConstraints:heightConstraints];\n}\n\n- (void)viewDidLayoutSubviews {\n  [super viewDidLayoutSubviews];\n  // Close X should be equidistant from top and right in notched phones despite presence of (hidden) status bar\n  if (![ABKUIUtils isNotchedPhone]) {\n    if (!self.isiPad) {\n      CGSize statusBarSize = [ABKUIUtils getStatusBarSize];\n      self.closeXButtonTopConstraint.constant = CloseXPadding - statusBarSize.height;\n    }\n  } else {\n    // Move close x button slightly higher for notched phones in portrait\n    BOOL isPortrait = UIInterfaceOrientationIsPortrait([ABKUIUtils getInterfaceOrientation]);\n    self.closeXButtonTopConstraint.constant = isPortrait ? 0.0f : CloseXPadding;\n  }\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n  [super viewDidAppear:animated];\n  [self.textsView flashScrollIndicators];\n}\n\n- (void)loadView {\n  NSBundle *bundle = [ABKUIUtils bundle:[ABKInAppMessageFullViewController class] channel:ABKInAppMessageChannel];\n  [bundle loadNibNamed:@\"ABKInAppMessageFullViewController\"\n                 owner:self\n               options:nil];\n  self.inAppMessageHeaderLabel.font = HeaderLabelDefaultFont;\n  self.inAppMessageMessageLabel.font = MessageLabelDefaultFont;\n  \n  if (self.inAppMessage.message) {\n    NSMutableAttributedString *attributedStringMessage = [[NSMutableAttributedString alloc] initWithString:self.inAppMessage.message];\n    NSMutableParagraphStyle *messageStyle = [[NSMutableParagraphStyle alloc] init];\n    [messageStyle setLineSpacing:2];\n    [attributedStringMessage addAttribute:NSParagraphStyleAttributeName\n                                    value:messageStyle\n                                    range:NSMakeRange(0, self.inAppMessage.message.length)];\n    self.inAppMessageMessageLabel.attributedText = attributedStringMessage;\n  }\n  if ([self.inAppMessage isKindOfClass:[ABKInAppMessageImmersive class]]) {\n    if (((ABKInAppMessageImmersive *)self.inAppMessage).header) {\n      NSMutableAttributedString *attributedStringHeader = [[NSMutableAttributedString alloc] initWithString:((ABKInAppMessageImmersive *)self.inAppMessage).header];\n      NSMutableParagraphStyle *headerStyle = [[NSMutableParagraphStyle alloc] init];\n      [headerStyle setLineSpacing:2];\n      [attributedStringHeader addAttribute:NSParagraphStyleAttributeName\n                                     value:headerStyle\n                                     range:NSMakeRange(0, ((ABKInAppMessageImmersive *)self.inAppMessage).header.length)];\n      self.inAppMessageHeaderLabel.attributedText = attributedStringHeader;\n    }\n  }\n}\n\n#pragma mark - Superclass methods\n\n- (BOOL)prefersStatusBarHidden {\n  return YES;\n}\n\n- (UIView *)bottomViewWithNoButton {\n  return self.textsView;\n}\n\n- (void)setupLayoutForGraphic {\n  [super applyImageToImageView:self.graphicImageView];\n  [self.iconImageView removeFromSuperview];\n  [self.textsView removeFromSuperview];\n  self.iconImageView = nil;\n  self.textsView = nil;\n}\n\n- (void)setupLayoutForTopImage {\n  [self.graphicImageView removeFromSuperview];\n  self.graphicImageView = nil;\n  self.inAppMessageMessageLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  self.textsView.translatesAutoresizingMaskIntoConstraints = NO;\n  \n  // When there is no header, we set following two things to 0:\n  // (1) the header label's height\n  // (2) the constraint's height between header label and the message label\n  // so that the space is collapsed.\n  if (![ABKUIUtils objectIsValidAndNotEmpty:((ABKInAppMessageImmersive *)self.inAppMessage).header]) {\n    for (NSLayoutConstraint *constraint in self.inAppMessageHeaderLabel.constraints) {\n      if (constraint.firstAttribute == NSLayoutAttributeHeight) {\n        constraint.constant = 0.0f;\n        break;\n      }\n    }\n    self.headerBodySpaceConstraint.constant = 0.0f;\n  }\n  [super applyImageToImageView:self.iconImageView];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageHTMLBaseViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <WebKit/WebKit.h>\n#import \"ABKInAppMessageViewController.h\"\n\nNS_ASSUME_NONNULL_BEGIN\nstatic NSString *const ABKInAppMessageHTMLFileName = @\"message.html\";\n\n@interface ABKInAppMessageHTMLBaseViewController : ABKInAppMessageViewController <WKNavigationDelegate, WKUIDelegate>\n\n/*!\n * The WKWebView used to parse and display the HTML.\n */\n@property (nonatomic) WKWebView *webView;\n\n/*!\n * The constraints for top and bottom between view and the super view.\n */\n@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;\n@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomConstraint;\n\n/*!\n * The flag specifying if body clicks should be registered automatically. Defaults to NO.\n */\n@property (assign, nonatomic, readonly) BOOL automaticBodyClicksEnabled;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageHTMLBaseViewController.m",
    "content": "#import \"ABKInAppMessageHTMLBaseViewController.h\"\n#import \"ABKInAppMessageView.h\"\n#import \"ABKUIUtils.h\"\n#import \"ABKInAppMessageWindowController.h\"\n#import \"ABKInAppMessageWebViewBridge.h\"\n#import \"ABKUIURLUtils.h\"\n\nstatic NSString *const ABKBlankURLString = @\"about:blank\";\nstatic NSString *const ABKHTMLInAppButtonIdKey = @\"abButtonId\";\nstatic NSString *const ABKHTMLInAppAppboyKey = @\"appboy\";\nstatic NSString *const ABKHTMLInAppCloseKey = @\"close\";\nstatic NSString *const ABKHTMLInAppFeedKey = @\"feed\";\nstatic NSString *const ABKHTMLInAppCustomEventKey = @\"customEvent\";\nstatic NSString *const ABKHTMLInAppCustomEventQueryParamNameKey = @\"name\";\nstatic NSString *const ABKHTMLInAppExternalOpenKey = @\"abExternalOpen\";\nstatic NSString *const ABKHTMLInAppDeepLinkKey = @\"abDeepLink\";\nstatic NSString *const ABKHTMLInAppJavaScriptExtension = @\"js\";\n\n@interface ABKInAppMessageHTMLBaseViewController () <ABKInAppMessageWebViewBridgeDelegate>\n\n@property (nonatomic) ABKInAppMessageWebViewBridge *webViewBridge;\n\n@end\n\n@implementation ABKInAppMessageHTMLBaseViewController\n\n#pragma mark - Properties\n\n- (BOOL)automaticBodyClicksEnabled {\n  return NO;\n}\n\n#pragma mark - View Lifecycle\n\n- (void)loadView {\n  // View needs to be an ABKInAppMessageView to ensure touches register as per custom logic\n  // in ABKInAppMessageWindow. The frame is set in `beforeMoveInAppMessageViewOnScreen`.\n  self.view = [[ABKInAppMessageView alloc] initWithFrame:CGRectZero];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  self.view.translatesAutoresizingMaskIntoConstraints = NO;\n  \n  NSLayoutConstraint *leadConstraint = [self.view.leadingAnchor constraintEqualToAnchor:self.view.superview.leadingAnchor];\n  NSLayoutConstraint *trailConstraint = [self.view.trailingAnchor constraintEqualToAnchor:self.view.superview.trailingAnchor];\n\n  // Top and bottom constants will be populated with the actual frame sizes after\n  // the HTML content is fully loaded in `beforeMoveInAppMessageViewOnScreen`\n#if TARGET_OS_MACCATALYST\n  // Within safe zone\n  self.topConstraint = [self.view.topAnchor constraintEqualToAnchor:self.view.superview.layoutMarginsGuide.topAnchor];\n  self.bottomConstraint = [self.view.bottomAnchor constraintEqualToAnchor:self.view.superview.layoutMarginsGuide.bottomAnchor];\n#else\n  // Extends to the edges of the screen\n  self.topConstraint = [self.view.topAnchor constraintEqualToAnchor:self.view.superview.topAnchor];\n  self.bottomConstraint = [self.view.bottomAnchor constraintEqualToAnchor:self.view.superview.bottomAnchor];\n#endif\n\n  [self.view.superview addConstraints:@[leadConstraint, trailConstraint, self.topConstraint, self.bottomConstraint]];\n}\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  self.edgesForExtendedLayout = UIRectEdgeNone;\n  WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];\n  webViewConfiguration.allowsInlineMediaPlayback = YES;\n  webViewConfiguration.suppressesIncrementalRendering = YES;\n  if (@available(iOS 10.0, *)) {\n    webViewConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll;\n  } else {\n    webViewConfiguration.requiresUserActionForMediaPlayback = YES;\n  }\n  \n  ABKInAppMessageWindowController *parentViewController =\n    (ABKInAppMessageWindowController *)self.parentViewController;\n  if ([parentViewController.inAppMessageUIDelegate respondsToSelector:@selector(setCustomWKWebViewConfiguration)]) {\n    webViewConfiguration = [parentViewController.inAppMessageUIDelegate setCustomWKWebViewConfiguration];\n  }\n\n  WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:webViewConfiguration];\n  self.webView = webView;\n  \n  self.webViewBridge = [[ABKInAppMessageWebViewBridge alloc] initWithWebView:webView\n                                                                inAppMessage:(ABKInAppMessageHTML *)self.inAppMessage appboyInstance:[Appboy sharedInstance]];\n  self.webViewBridge.delegate = self;\n\n  self.webView.allowsLinkPreview = NO;\n  self.webView.navigationDelegate = self;\n  self.webView.UIDelegate = self;\n  self.webView.scrollView.bounces = NO;\n  \n  // Handle resizing during orientation changes\n  self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n\n  if (@available(iOS 11.0, *)) {\n    // Cover status bar when showing HTML IAMs\n    [self.webView.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];\n  }\n  if (((ABKInAppMessageHTMLBase *)self.inAppMessage).assetsLocalDirectoryPath != nil) {\n    NSString *localPath = [((ABKInAppMessageHTMLBase *)self.inAppMessage).assetsLocalDirectoryPath absoluteString];\n    // Here we must use fileURLWithPath: to add the \"file://\" scheme, otherwise the webView won't recognize the\n    // base URL and won't load the zip file resources.\n    NSURL *html = [NSURL fileURLWithPath:[localPath stringByAppendingPathComponent:ABKInAppMessageHTMLFileName]];\n    NSString *fullPath = [localPath stringByAppendingPathComponent:ABKInAppMessageHTMLFileName];\n    if (![[NSFileManager defaultManager] fileExistsAtPath:fullPath]) {\n      NSLog(@\"Can't find HTML at path %@, with file name %@. Aborting display.\", [NSURL fileURLWithPath:localPath], ABKInAppMessageHTMLFileName);\n      [self hideInAppMessage:NO];\n    }\n    [self.webView loadFileURL:html allowingReadAccessToURL:[NSURL fileURLWithPath:localPath]];\n  } else {\n    [self.webView loadHTMLString:self.inAppMessage.message baseURL:nil];\n  }\n  [self.view addSubview:self.webView];\n\n  // Sets an observer for UIKeyboardWillHideNotification. This is a workaround for the\n  // keyboard dismissal bug in iOS 12+ WKWebView filed here\n  // https://bugs.webkit.org/show_bug.cgi?id=192564. The workaround is also from the post.\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil];\n}\n\n#pragma mark - Superclass methods\n\n- (BOOL)prefersStatusBarHidden {\n  return YES;\n}\n\n#pragma mark - NSNotificationCenter selectors\n\n- (void)keyboardWillHide {\n  [self.webView setNeedsLayout];\n}\n\n#pragma mark - WKDelegate methods\n\n- (WKWebView *)webView:(WKWebView *)webView\ncreateWebViewWithConfiguration:(WKWebViewConfiguration *)configuration\n   forNavigationAction:(WKNavigationAction *)navigationAction\n        windowFeatures:(WKWindowFeatures *)windowFeatures {\n  if (navigationAction.targetFrame == nil) {\n    [webView loadRequest:navigationAction.request];\n  }\n  return nil;\n}\n\n- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction\ndecisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {\n  NSURL *url = navigationAction.request.URL;\n\n  // Handle normal html resource loading\n  BOOL isSystemOpen = [ABKUIURLUtils URLHasSystemScheme:url];\n  BOOL isIframeLoad = navigationAction.targetFrame != nil && ![navigationAction.sourceFrame isEqual:navigationAction.targetFrame];\n  NSString *assetPath = ((ABKInAppMessageHTMLBase *)self.inAppMessage).assetsLocalDirectoryPath.absoluteString;\n  BOOL isHandledByWebView =\n    !isSystemOpen &&\n    (\n      !url ||\n      isIframeLoad ||\n      [ABKUIUtils string:url.absoluteString isEqualToString:ABKBlankURLString] ||\n      [ABKUIUtils string:url.path isEqualToString:assetPath] ||\n      [ABKUIUtils string:url.lastPathComponent isEqualToString:ABKInAppMessageHTMLFileName]\n    );\n  \n  if (isHandledByWebView) {\n    decisionHandler(WKNavigationActionPolicyAllow);\n    return;\n  }\n  \n  // Handle Braze specific actions\n  NSDictionary *queryParams = [self queryParameterDictionaryFromURL:url];\n  NSString *buttonId = [self parseButtonIdFromQueryParams:queryParams];\n  ABKInAppMessageWindowController *parentViewController =\n    (ABKInAppMessageWindowController *)self.parentViewController;\n  \n  [self setClickActionBasedOnURL:url];\n  parentViewController.clickedHTMLButtonId = buttonId;\n  \n  // - Delegate handling\n  if ([self delegateHandlesHTMLButtonClick:parentViewController.inAppMessageUIDelegate\n                                       URL:url\n                                  buttonId:buttonId]) {\n    decisionHandler(WKNavigationActionPolicyCancel);\n    return;\n  }\n  \n  // - Custom event handling\n  if ([self isCustomEventURL:url]) {\n    [self handleCustomEventWithQueryParams:queryParams];\n    decisionHandler(WKNavigationActionPolicyCancel);\n    return;\n  }\n  \n  // - Body click handling\n  if (![ABKUIUtils objectIsValidAndNotEmpty:buttonId]) {\n    if (self.automaticBodyClicksEnabled) {\n      parentViewController.inAppMessageIsTapped = YES;\n      NSLog(@\"In-app message body click registered. Automatic body clicks are enabled.\");\n    } else {\n      NSLog(@\"In-app message body click not registered. Automatic body clicks are disabled.\");\n    }\n  }\n  [parentViewController inAppMessageClickedWithActionType:self.inAppMessage.inAppMessageClickActionType\n                                                      URL:url\n                                         openURLInWebView:[self getOpenURLInWebView:queryParams]];\n  decisionHandler(WKNavigationActionPolicyCancel);\n}\n\n- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {\n  self.webView.backgroundColor = [UIColor clearColor];\n  self.webView.opaque = NO;\n  if (self.inAppMessage.animateIn) {\n    [UIView animateWithDuration:InAppMessageAnimationDuration\n                          delay:0\n                        options:UIViewAnimationOptionBeginFromCurrentState\n                     animations:^{\n                      self.topConstraint.constant = 0;\n                      self.bottomConstraint.constant = 0;\n                      [self.view.superview layoutIfNeeded];\n                    }\n                     completion:^(BOOL finished){\n                    }];\n  } else {\n    self.topConstraint.constant = 0;\n    self.bottomConstraint.constant = 0;\n    [self.view.superview layoutIfNeeded];\n  }\n  \n  // Disable touch callout from displaying link information\n  [self.webView evaluateJavaScript:@\"document.documentElement.style.webkitTouchCallout='none';\" completionHandler:nil];\n}\n\n- (void)webView:(WKWebView *)webView\nrunJavaScriptAlertPanelWithMessage:(nonnull NSString *)message\n                  initiatedByFrame:(nonnull WKFrameInfo *)frame\n                 completionHandler:(nonnull void (^)(void))completionHandler {\n  [self presentAlertWithMessage:message\n               andConfiguration:^(UIAlertController *alert) {\n    // Action labels matches Safari implementation\n    // Close\n    [alert addAction:[UIAlertAction actionWithTitle:@\"Close\"\n                                              style:UIAlertActionStyleDefault\n                                            handler:^(UIAlertAction * _Nonnull action) {\n      completionHandler();\n    }]];\n  }];\n}\n\n- (void)webView:(WKWebView *)webView\nrunJavaScriptConfirmPanelWithMessage:(NSString *)message\n                    initiatedByFrame:(WKFrameInfo *)frame\n                   completionHandler:(void (^)(BOOL))completionHandler {\n  [self presentAlertWithMessage:message andConfiguration:^(UIAlertController *alert) {\n    // Action labels matches Safari implementation\n    // Cancel\n    [alert addAction:[UIAlertAction actionWithTitle:@\"Cancel\"\n                                              style:UIAlertActionStyleCancel\n                                            handler:^(UIAlertAction * _Nonnull action) {\n      completionHandler(NO);\n    }]];\n    \n    // OK\n    [alert addAction:[UIAlertAction actionWithTitle:@\"OK\"\n                                              style:UIAlertActionStyleDefault\n                                            handler:^(UIAlertAction * _Nonnull action) {\n      completionHandler(YES);\n    }]];\n  }];\n}\n\n- (void)webView:(WKWebView *)webView\nrunJavaScriptTextInputPanelWithPrompt:(NSString *)prompt\n                          defaultText:(NSString *)defaultText\n                     initiatedByFrame:(WKFrameInfo *)frame\n                    completionHandler:(void (^)(NSString * _Nullable))completionHandler {\n  [self presentAlertWithMessage:prompt\n               andConfiguration:^(UIAlertController *alert) {\n    // Action labels matches Safari implementation\n    // Text field\n    [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {\n      textField.text = defaultText;\n    }];\n    \n    // Cancel\n    [alert addAction:[UIAlertAction actionWithTitle:@\"Cancel\"\n                                              style:UIAlertActionStyleCancel\n                                            handler:^(UIAlertAction * _Nonnull action) {\n      completionHandler(nil);\n    }]];\n    \n    // OK\n    [alert addAction:[UIAlertAction actionWithTitle:@\"OK\"\n                                              style:UIAlertActionStyleDefault\n                                            handler:^(UIAlertAction * _Nonnull action) {\n      completionHandler(alert.textFields[0].text);\n    }]];\n  }];\n}\n\n- (BOOL)isCustomEventURL:(NSURL *)url {\n  return ([ABKUIUtils string:url.scheme.lowercaseString isEqualToString:ABKHTMLInAppAppboyKey] &&\n          [ABKUIUtils string:url.host isEqualToString:ABKHTMLInAppCustomEventKey]);\n}\n\n- (BOOL)getOpenURLInWebView:(NSDictionary *)queryParams {\n  if ([queryParams[ABKHTMLInAppDeepLinkKey] boolValue] | [queryParams[ABKHTMLInAppExternalOpenKey] boolValue]) {\n    return NO;\n  }\n  return self.inAppMessage.openUrlInWebView;\n}\n\n#pragma mark - Delegate\n\n- (BOOL)delegateHandlesHTMLButtonClick:(id<ABKInAppMessageUIDelegate>)delegate\n                                   URL:(NSURL *)url\n                              buttonId:(NSString *)buttonId {\n  if ([delegate respondsToSelector:@selector(onInAppMessageHTMLButtonClicked:clickedURL:buttonID:)]) {\n    if ([delegate onInAppMessageHTMLButtonClicked:(ABKInAppMessageHTMLBase *)self.inAppMessage\n                                       clickedURL:url\n                                         buttonID:buttonId]) {\n      NSLog(@\"No in-app message click action will be performed by Braze as in-app message delegate %@ returned YES in onInAppMessageHTMLButtonClicked:\", delegate);\n      return YES;\n    }\n  }\n  return NO;\n}\n\n#pragma mark - Custom Event Handling\n\n- (void)handleCustomEventWithQueryParams:(NSDictionary *)queryParams {\n  NSString *customEventName = [self parseCustomEventNameFromQueryParams:queryParams];\n  NSMutableDictionary *eventProperties = [self parseCustomEventPropertiesFromQueryParams:queryParams];\n  [[Appboy sharedInstance] logCustomEvent:customEventName withProperties:eventProperties];\n}\n\n- (NSString *)parseCustomEventNameFromQueryParams:(NSDictionary *)queryParams {\n  return queryParams[ABKHTMLInAppCustomEventQueryParamNameKey];\n}\n\n- (NSMutableDictionary *)parseCustomEventPropertiesFromQueryParams:(NSDictionary *)queryParams {\n  NSMutableDictionary *eventProperties = [queryParams mutableCopy];\n  [eventProperties removeObjectForKey:ABKHTMLInAppCustomEventQueryParamNameKey];\n  return eventProperties;\n}\n\n#pragma mark - Button Click Handling\n\n- (NSString *)parseButtonIdFromQueryParams:(NSDictionary *)queryParams {\n  return queryParams[ABKHTMLInAppButtonIdKey];\n}\n\n// Set the inAppMessage's click action type based on given URL. It's going to be three types:\n// * URL is appboy://close: set click action to be ABKInAppMessageNoneClickAction\n// * URL is appboy://feed: set click action to be ABKInAppMessageDisplayNewsFeed\n// * URL is anything else: set click action to be ABKInAppMessageRedirectToURI and the uri is the URL.\n- (void)setClickActionBasedOnURL:(NSURL *)url {\n  if ([ABKUIUtils string:url.scheme.lowercaseString isEqualToString:ABKHTMLInAppAppboyKey]) {\n    if ([ABKUIUtils string:url.host.lowercaseString isEqualToString:ABKHTMLInAppCloseKey]) {\n      [self.inAppMessage setInAppMessageClickAction:ABKInAppMessageNoneClickAction withURI:nil];\n      return;\n    } else if ([ABKUIUtils string:url.host.lowercaseString isEqualToString:ABKHTMLInAppFeedKey]) {\n      [self.inAppMessage setInAppMessageClickAction:ABKInAppMessageDisplayNewsFeed withURI:nil];\n      return;\n    }\n  }\n  [self.inAppMessage setInAppMessageClickAction:ABKInAppMessageRedirectToURI withURI:url];\n}\n\n#pragma mark - Utility Methods\n\n- (NSDictionary *)queryParameterDictionaryFromURL:(NSURL *)url {\n  NSMutableDictionary *dict = [NSMutableDictionary dictionary];\n  NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];\n  for (NSURLQueryItem *queryItem in components.queryItems) {\n    dict[queryItem.name] = queryItem.value;\n  }\n\n  return [dict copy];\n}\n\n- (void)presentAlertWithMessage:(NSString *)message\n               andConfiguration:(void (^)(UIAlertController *alert))configure {\n  UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil\n                                                                 message:message\n                                                          preferredStyle:UIAlertControllerStyleAlert];\n  configure(alert);\n  [self presentViewController:alert animated:YES completion:nil];\n}\n\n#pragma mark - Animation\n\n- (void)beforeMoveInAppMessageViewOnScreen {\n  self.topConstraint.constant = self.view.frame.size.height;\n  self.bottomConstraint.constant = self.view.frame.size.height;\n}\n\n- (void)moveInAppMessageViewOnScreen {\n  // Do nothing - moving the in-app message is handled in didFinishNavigation\n  // though that logic should probably be gated by a call here. In a perfect world,\n  // ABKInAppMessageWindowController would \"request\" VC's to show themselves,\n  // and the VC's would report when they were shown so ABKInAppMessageWindowController\n  // could log impressions.\n}\n\n- (void)beforeMoveInAppMessageViewOffScreen {\n  self.topConstraint.constant = self.view.frame.size.height;\n  self.bottomConstraint.constant = self.view.frame.size.height;\n}\n\n- (void)moveInAppMessageViewOffScreen {\n  [self.view.superview layoutIfNeeded];\n}\n\n#pragma mark - ABKInAppMessageWebViewBridgeDelegate\n\n- (void)webViewBridge:(ABKInAppMessageWebViewBridge *)webViewBridge\n  receivedClickAction:(ABKInAppMessageClickActionType)clickAction {\n  ABKInAppMessageWindowController *parentViewController =\n    (ABKInAppMessageWindowController *)self.parentViewController;\n\n  [self.inAppMessage setInAppMessageClickAction:clickAction withURI:nil];\n  [parentViewController inAppMessageClickedWithActionType:self.inAppMessage.inAppMessageClickActionType\n                                                      URL:nil\n                                         openURLInWebView:false];\n}\n\n- (void)closeMessageWithWebViewBridge:(ABKInAppMessageWebViewBridge *)webViewBridge {\n  ABKInAppMessageWindowController *parentViewController =\n    (ABKInAppMessageWindowController *)self.parentViewController;\n  if ([parentViewController.inAppMessageUIDelegate respondsToSelector:@selector(onInAppMessageDismissed:)]) {\n    [parentViewController.inAppMessageUIDelegate onInAppMessageDismissed:self.inAppMessage];\n  }\n  [super hideInAppMessage:self.inAppMessage.animateOut];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageHTMLFullViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKInAppMessageHTMLBaseViewController.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface ABKInAppMessageHTMLFullViewController : ABKInAppMessageHTMLBaseViewController\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageHTMLFullViewController.m",
    "content": "#import \"ABKInAppMessageHTMLFullViewController.h\"\n\n/*!\n * Custom implementation for the zip-based HTML IAM type\n */\n@implementation ABKInAppMessageHTMLFullViewController\n\n- (BOOL)automaticBodyClicksEnabled {\n  return YES;\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageHTMLViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKInAppMessageHTMLBaseViewController.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface ABKInAppMessageHTMLViewController : ABKInAppMessageHTMLBaseViewController\n\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageHTMLViewController.m",
    "content": "#import \"ABKInAppMessageHTMLViewController.h\"\n\n/*!\n * Custom implementation for the file-based HTML IAM type\n */\n@implementation ABKInAppMessageHTMLViewController\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageImmersiveViewController.h",
    "content": "#import \"ABKInAppMessageViewController.h\"\n#import \"ABKInAppMessageUIButton.h\"\n\n// Customize this to set the font for the in-app message header.\n#define HeaderLabelDefaultFont [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleTitle3 weight:UIFontWeightBold]\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageImmersiveViewController : ABKInAppMessageViewController\n\n/*!\n * The UILabel for the in-app message header.\n */\n@property (weak, nonatomic) IBOutlet UILabel *inAppMessageHeaderLabel;\n\n/*!\n * The UIImageView for the in-app message image.\n */\n@property (weak, nonatomic, nullable) IBOutlet UIImageView *graphicImageView;\n\n/*!\n * The NSLayoutConstraint that specifies the space between the header and rest of the in-app message.\n */\n@property (nonatomic) IBOutlet NSLayoutConstraint *headerBodySpaceConstraint;\n\n/*!\n * The UIButton on the left of the in-app message.\n */\n@property (retain, nonatomic, nullable) IBOutlet ABKInAppMessageUIButton *leftInAppMessageButton;\n\n/*!\n * The UIButton on the right of the in-app message.\n * When there is only one button in the in-app message, this right button is the one that is used.\n */\n@property (retain, nonatomic, nullable) IBOutlet ABKInAppMessageUIButton *rightInAppMessageButton;\n\n/*!\n * The UIScrollView for the message of the in-app message.\n */\n@property (nonatomic, nullable) IBOutlet UIScrollView *textsView;\n\n/*!\n * @discussion This method is used for setting up the layout for ABKInAppMessageGraphic image style.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)setupLayoutForGraphic;\n\n/*!\n * @discussion This method is used for setting up the layout for ABKInAppMessageTopImage image style.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)setupLayoutForTopImage;\n\n/*!\n * @discussion This method is used for setting the color of the close button.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)changeCloseButtonColor;\n\n/*!\n * @discussion The touch up inside action for the close button. The default behavior is to close the\n *             in-app message.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (IBAction)dismissInAppMessage:(id)sender;\n\n/*!\n * @discussion The touch up inside action for the in-app message buttons.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (IBAction)buttonClicked:(ABKInAppMessageUIButton *)button;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageImmersiveViewController.m",
    "content": "#import \"ABKInAppMessageImmersiveViewController.h\"\n#import \"ABKInAppMessageWindowController.h\"\n#import \"ABKUIUtils.h\"\n\nstatic NSInteger const CloseButtonTag = 50;\n\n@implementation ABKInAppMessageImmersiveViewController\n\n#pragma mark - Immersive In-App Message View UI Initialization\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.inAppMessageMessageLabel];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  \n  self.view.translatesAutoresizingMaskIntoConstraints = NO;\n  ABKInAppMessageImmersive *inAppMessage = [self getInAppMessage];\n  \n  self.inAppMessageHeaderLabel.text = inAppMessage.header;\n  self.inAppMessageHeaderLabel.textAlignment = inAppMessage.headerTextAlignment;\n  self.graphicImageView.contentMode = self.inAppMessage.imageContentMode;\n  \n  if (inAppMessage.headerTextColor != nil) {\n    [self.inAppMessageHeaderLabel setTextColor:inAppMessage.headerTextColor];\n  }\n  [self changeCloseButtonColor];\n  [self setCloseButtonAccessibilityLabel];\n  \n  if (inAppMessage.imageStyle == ABKInAppMessageGraphic) {\n    [self setupLayoutForGraphic];\n  } else {\n    [self setupLayoutForTopImage];\n  }\n  [self setupButtons];\n  if (![inAppMessage isKindOfClass:[ABKInAppMessageFull class]]) {\n    if (inAppMessage.frameColor != nil) {\n      self.view.superview.backgroundColor = inAppMessage.frameColor;\n    } else {\n      self.view.superview.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:.3];\n    }\n  }\n  \n  NSLayoutConstraint *centerYConstraint = [NSLayoutConstraint constraintWithItem:self.view\n                                                                       attribute:NSLayoutAttributeCenterY\n                                                                       relatedBy:NSLayoutRelationEqual\n                                                                          toItem:self.view.superview\n                                                                       attribute:NSLayoutAttributeCenterY\n                                                                      multiplier:1\n                                                                        constant:0];\n  centerYConstraint.priority = 999;\n  [self.view.superview addConstraint:centerYConstraint];\n  \n  [self.view.superview addConstraint:[NSLayoutConstraint constraintWithItem:self.view\n                                                                  attribute:NSLayoutAttributeCenterX\n                                                                  relatedBy:NSLayoutRelationEqual\n                                                                     toItem:self.view.superview\n                                                                  attribute:NSLayoutAttributeCenterX\n                                                                 multiplier:1\n                                                                   constant:0]];\n  \n  self.view.alpha = 0.0f;\n}\n\n- (nullable UIButton *)getCloseButton {\n  UIView *buttonView = [self.view viewWithTag:CloseButtonTag];\n  if ([buttonView isKindOfClass:[UIButton class]]) {\n    return (UIButton *) buttonView;\n  }\n  return nil;\n}\n\n- (void)changeCloseButtonColor {\n  UIButton *closeButton = [self getCloseButton];\n  if (closeButton != nil) {\n    UIColor *closeButtonColor = [self getInAppMessage].closeButtonColor ?\n      [self getInAppMessage].closeButtonColor :\n      [UIColor colorWithRed:(155.0/255.0) green:(155.0/255.0) blue:(155.0/255.0) alpha:1.0];\n    UIImageView *closeButtonImageView = closeButton.imageView;\n    closeButtonImageView.image = [closeButtonImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];\n    closeButtonImageView.tintColor = closeButtonColor;\n    [closeButton setImage:closeButtonImageView.image forState:UIControlStateNormal];\n\n    // Copy of the imageView for the Selected state\n    UIImageView *closeButtonSelectedImageView = [[UIImageView alloc] initWithImage:closeButton.imageView.image];\n    closeButtonSelectedImageView.tintColor = [closeButtonColor colorWithAlphaComponent:InAppMessageSelectedOpacity];\n    [closeButton setImage:closeButtonSelectedImageView.image forState:UIControlStateSelected];\n  }\n}\n\n- (void)setCloseButtonAccessibilityLabel {\n  UIButton *closeButton = [self getCloseButton];\n  if (closeButton != nil) {\n    closeButton.accessibilityLabel = [self localizedAppboyInAppMessageString:@\"Appboy.in-app-message.close-button.title\"];\n  }\n}\n\n- (NSString *)localizedAppboyInAppMessageString:(NSString *)key {\n  return [ABKUIUtils getLocalizedString:key\n                         inAppboyBundle:[ABKUIUtils bundle:[ABKInAppMessageImmersiveViewController class] channel:ABKInAppMessageChannel]\n                                   table:@\"AppboyInAppMessageLocalizable\"];\n}\n\n- (void)setupLayoutForGraphic {\n  NSLog(@\"Please override method setupLayoutForGraphic: to create proper layout for graphic image style.\");\n}\n\n- (void)setupLayoutForTopImage {\n  NSLog(@\"Please override method setupLayoutForTopImage: to create proper layout for top image style.\");\n}\n\n- (void)setupButtons {\n  NSArray<ABKInAppMessageButton *> *buttons = [self getInAppMessage].buttons;\n  if (![ABKUIUtils objectIsValidAndNotEmpty:buttons]) {\n    [self.leftInAppMessageButton removeFromSuperview];\n    [self.rightInAppMessageButton removeFromSuperview];\n    self.leftInAppMessageButton = nil;\n    self.rightInAppMessageButton = nil;\n    if (([[self getInAppMessage] isKindOfClass:[ABKInAppMessageModal class]]\n         || [[self getInAppMessage] isKindOfClass:[ABKInAppMessageFull class]])\n        && [self getInAppMessage].imageStyle != ABKInAppMessageGraphic) {\n      UIView *bottomView = [self bottomViewWithNoButton];\n      if ([ABKUIUtils objectIsValidAndNotEmpty:bottomView]) {\n        NSArray *bottomConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@\"V:[view]-30-|\"\n                                                                             options:0\n                                                                             metrics:nil\n                                                                               views:@{@\"view\" : bottomView}];\n        [self.view addConstraints:bottomConstraints];\n      }\n    }\n  } else if (buttons.count == 1) {\n    [self.leftInAppMessageButton removeFromSuperview];\n    self.leftInAppMessageButton = nil;\n    self.rightInAppMessageButton.inAppButtonModel = buttons[0];\n    NSLayoutConstraint *constraintHorizontal = [NSLayoutConstraint constraintWithItem:self.rightInAppMessageButton\n                                                                            attribute:NSLayoutAttributeCenterX\n                                                                            relatedBy:NSLayoutRelationEqual\n                                                                               toItem:self.view\n                                                                            attribute:NSLayoutAttributeCenterX\n                                                                           multiplier:1.0f\n                                                                             constant:0.0f];\n    [self.view addConstraint:constraintHorizontal];\n  } else {\n    self.leftInAppMessageButton.inAppButtonModel = buttons[0];\n    self.rightInAppMessageButton.inAppButtonModel = buttons[1];\n  }\n}\n\n- (void)setInAppMessage:(ABKInAppMessage *)inAppMessage {\n  if ([inAppMessage isKindOfClass:[ABKInAppMessageImmersive class]]) {\n    super.inAppMessage = inAppMessage;\n  } else {\n    NSLog(@\"ABKInAppMessageImmersiveViewController only accepts in-app message with type ABKInAppMessageImmersive. Setting in-app message fails.\");\n  }\n}\n\n- (UIView *)bottomViewWithNoButton {\n  return nil;\n}\n\n#pragma mark - Animation\n\n- (void)moveInAppMessageViewOnScreen {\n  self.view.alpha = 1.0f;\n}\n\n- (void)moveInAppMessageViewOffScreen {\n  self.view.alpha = 0.0f;\n}\n\n#pragma mark - Button Actions\n\n- (IBAction)dismissInAppMessage:(id)sender {\n  ABKInAppMessageWindowController *parentViewController = (ABKInAppMessageWindowController *)self.parentViewController;\n  if ([parentViewController.inAppMessageUIDelegate respondsToSelector:@selector(onInAppMessageDismissed:)]) {\n    [parentViewController.inAppMessageUIDelegate onInAppMessageDismissed:self.inAppMessage];\n  }\n  [super hideInAppMessage:self.inAppMessage.animateOut];\n}\n\n- (IBAction)buttonClicked:(ABKInAppMessageUIButton *)button {\n  ABKInAppMessageWindowController *parentViewController = (ABKInAppMessageWindowController *)self.parentViewController;\n  parentViewController.clickedButtonId = button.inAppButtonModel.buttonID;\n  // Calls the delegate method for button click if it has been implemented.\n  if ([parentViewController.inAppMessageUIDelegate respondsToSelector:@selector(onInAppMessageButtonClicked:button:)]) {\n    if ([parentViewController.inAppMessageUIDelegate\n           onInAppMessageButtonClicked:(ABKInAppMessageImmersive *)self.inAppMessage\n                                button:button.inAppButtonModel]) {\n      NSLog(@\"No in-app message click action will be performed by Braze as inAppMessageUIDelegate %@ returned YES in onInAppMessageButtonClicked:\", parentViewController.inAppMessageUIDelegate);\n      return;\n    }\n  }\n  [parentViewController inAppMessageClickedWithActionType:button.inAppButtonModel.buttonClickActionType\n                                                      URL:button.inAppButtonModel.buttonClickedURI\n                                         openURLInWebView:button.inAppButtonModel.buttonOpenUrlInWebView];\n}\n\n#pragma mark - Get In-App Message\n\n- (ABKInAppMessageImmersive *)getInAppMessage {\n  return (ABKInAppMessageImmersive *)self.inAppMessage;\n}\n\n#pragma mark - Dealloc\n\n- (void)dealloc {\n  if ([ABKUIUtils objectIsValidAndNotEmpty:[self getInAppMessage].buttons]) {\n    [self.leftInAppMessageButton removeTarget:self action:nil forControlEvents:UIControlEventAllEvents];\n    [self.rightInAppMessageButton removeTarget:self action:nil forControlEvents:UIControlEventAllEvents];\n  }\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageModalViewController.h",
    "content": "#import \"ABKInAppMessageImmersiveViewController.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageModalViewController : ABKInAppMessageImmersiveViewController\n\n/*!\n * This boolean determines if the modal in-app message will be dismissed when the user taps outside of the\n * in-app message.\n *\n * @discussion The default of this value is NO but can be overriden by setting the value of ABKEnableDismissModalOnOutsideTapKey in\n *             appboyOptions or in the Braze dictionary in your Info.plist file.\n */\n@property (nonatomic, assign) BOOL enableDismissOnOutsideTap;\n\n/*!\n * The NSLayoutConstraint that specifies the height of the part of the in-app message which houses\n * the image.\n */\n@property (retain, nonatomic) IBOutlet NSLayoutConstraint *iconImageHeightConstraint;\n\n@property (retain, nonatomic) IBOutlet NSLayoutConstraint *textsViewWidthConstraint;\n\n@property (strong, nonatomic) IBOutlet UIView *iconImageContainerView;\n@property (strong, nonatomic) IBOutlet UIView *graphicImageContainerView;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageModalViewController.m",
    "content": "#import \"ABKInAppMessageModalViewController.h\"\n#import \"ABKUIUtils.h\"\n#import \"ABKInAppMessageViewController.h\"\n#import \"ABKInAppMessageImmersive.h\"\n#import \"Appboy.h\"\n#import \"ABKInAppMessageController.h\"\n#import \"ABKImageDelegate.h\"\n\nstatic const CGFloat ModalViewCornerRadius = 8.0f;\nstatic const CGFloat MaxModalViewWidth = 450.0f;\nstatic const CGFloat MinModalViewWidth = 320.0f;\nstatic const CGFloat MaxModalViewHeight = 720.0f;\n\n@implementation ABKInAppMessageModalViewController\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  self.enableDismissOnOutsideTap = [Appboy sharedInstance].inAppMessageController.enableDismissModalOnOutsideTap;\n  \n  if (((ABKInAppMessageImmersive *)self.inAppMessage).imageStyle == ABKInAppMessageTopImage) {\n    [self.view.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"V:|-(>=15)-[view]-(>=15)-|\"\n                                                                                options:0\n                                                                                metrics:nil\n                                                                                  views:@{@\"view\" : self.view}]];\n    [self.view.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|-(>=15)-[view]-(>=15)-|\"\n                                                                                options:0\n                                                                                metrics:nil\n                                                                                  views:@{@\"view\" : self.view}]];\n  } else {\n    @try {\n      UIImage *inAppImage = [[Appboy sharedInstance].imageDelegate imageFromCacheForURL:self.inAppMessage.imageURI];\n      CGFloat imageAspectRatio = 1.0;\n      if (inAppImage != nil) {\n        imageAspectRatio = inAppImage.size.width / inAppImage.size.height;\n      }\n      NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.graphicImageView\n                                                                    attribute:NSLayoutAttributeWidth\n                                                                    relatedBy:NSLayoutRelationEqual\n                                                                       toItem:self.graphicImageView\n                                                                    attribute:NSLayoutAttributeHeight\n                                                                   multiplier:imageAspectRatio\n                                                                     constant:0];\n      [self.graphicImageView addConstraint:constraint];\n      NSArray *maxWidthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@\"H:[view(<=max)]\"\n                                                                          options:0\n                                                                          metrics:@{@\"max\" : @(MaxModalViewWidth)}\n                                                                            views:@{@\"view\" : self.graphicImageView}];\n      NSArray *maxHeightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@\"V:[view(<=max)]\"\n                                                                           options:0\n                                                                           metrics:@{@\"max\" : @(MaxModalViewHeight)}\n                                                                             views:@{@\"view\" : self.graphicImageView}];\n      [self.graphicImageView addConstraints:maxWidthConstraint];\n      [self.graphicImageView addConstraints:maxHeightConstraint];\n      \n      [self.view.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"V:|-(>=15)-[view]-(>=15)-|\"\n                                                                                  options:0\n                                                                                  metrics:nil\n                                                                                    views:@{@\"view\" : self.view}]];\n      [self.view.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|-(>=15)-[view]-(>=15)-|\"\n                                                                                  options:0\n                                                                                  metrics:nil\n                                                                                    views:@{@\"view\" : self.view}]];\n    } @catch (NSException *exception) {\n      NSLog(@\"Braze cannot display this message because it has a height or width of 0. The graphic image has width %f and height %f and image URI %@.\",\n            self.graphicImageView.image.size.width, self.graphicImageView.image.size.height,\n            self.inAppMessage.imageURI.absoluteString);\n      [self hideInAppMessage:NO];\n    }\n  }\n}\n\n\n- (void)viewDidAppear:(BOOL)animated {\n  [super viewDidAppear:animated];\n  [self.textsView flashScrollIndicators];\n}\n\n- (void)viewDidLayoutSubviews {\n  [super viewDidLayoutSubviews];\n  if (![self isKindOfClass:[ABKInAppMessageModalViewController class]]) {\n    return;\n  }\n\n  [self drawShadows];\n  if (self.iconImageView) {\n    // Clips the top corners if the image is wide enough in the VC\n    CAShapeLayer * maskLayer = [CAShapeLayer layer];\n    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.view.bounds\n                                                   byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight)\n                                                         cornerRadii:CGSizeMake(ModalViewCornerRadius, ModalViewCornerRadius)];\n    maskLayer.path = maskPath.CGPath;\n    self.iconImageContainerView.layer.mask = maskLayer;\n    self.iconImageContainerView.clipsToBounds = YES;\n  }\n\n  if (self.textsView && !self.textsViewWidthConstraint) {\n    [self addTextViewConstraints];\n  }\n  [self.view layoutIfNeeded];\n}\n\n- (void)loadView {\n  NSBundle *bundle = [ABKUIUtils bundle:[ABKInAppMessageModalViewController class] channel:ABKInAppMessageChannel];\n  [bundle loadNibNamed:@\"ABKInAppMessageModalViewController\"\n                 owner:self\n               options:nil];\n  self.view.layer.cornerRadius = ModalViewCornerRadius;\n  self.inAppMessageHeaderLabel.font = HeaderLabelDefaultFont;\n  self.inAppMessageMessageLabel.font = MessageLabelDefaultFont;\n  \n  if (self.inAppMessage.message) {\n    NSMutableAttributedString *attributedStringMessage = [[NSMutableAttributedString alloc] initWithString:self.inAppMessage.message];\n    NSMutableParagraphStyle *messageStyle = [[NSMutableParagraphStyle alloc] init];\n    [messageStyle setLineSpacing:2];\n    [attributedStringMessage addAttribute:NSParagraphStyleAttributeName\n                                    value:messageStyle\n                                    range:NSMakeRange(0, self.inAppMessage.message.length)];\n    self.inAppMessageMessageLabel.attributedText = attributedStringMessage;\n  }\n  if ([self.inAppMessage isKindOfClass:[ABKInAppMessageImmersive class]]) {\n    if (((ABKInAppMessageImmersive *)self.inAppMessage).header) {\n      NSMutableAttributedString *attributedStringHeader = [[NSMutableAttributedString alloc] initWithString:((ABKInAppMessageImmersive *)self.inAppMessage).header];\n      NSMutableParagraphStyle *headerStyle = [[NSMutableParagraphStyle alloc] init];\n      [headerStyle setLineSpacing:2];\n      [attributedStringHeader addAttribute:NSParagraphStyleAttributeName\n                                     value:headerStyle\n                                     range:NSMakeRange(0, ((ABKInAppMessageImmersive *)self.inAppMessage).header.length)];\n      self.inAppMessageHeaderLabel.attributedText = attributedStringHeader;\n    }\n  }\n}\n\n#pragma mark - Private methods\n\n- (void)drawShadows {\n  UIBezierPath *dropShadowPath = [UIBezierPath bezierPathWithRoundedRect:self.view.bounds\n                                                            cornerRadius:self.view.layer.cornerRadius];\n  self.view.layer.masksToBounds = NO;\n  self.view.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);\n  self.view.layer.shadowRadius = InAppMessageShadowBlurRadius;\n  self.view.layer.shadowColor = [[UIColor blackColor] colorWithAlphaComponent:InAppMessageShadowOpacity].CGColor;\n  self.view.layer.shadowPath = dropShadowPath.CGPath;\n\n  // Make opacity of shadow match opacity of the In-App Message background\n  CGFloat alpha = 0;\n  [self.view.backgroundColor getRed:nil green:nil blue:nil alpha:&alpha];\n  self.view.layer.shadowOpacity = alpha;\n}\n\n- (void)addTextViewConstraints {\n  [self.view layoutIfNeeded];\n  NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.textsView\n                                                                     attribute:NSLayoutAttributeWidth\n                                                                     relatedBy:NSLayoutRelationEqual\n                                                                        toItem:nil\n                                                                     attribute:NSLayoutAttributeNotAnAttribute\n                                                                    multiplier:1\n                                                                      constant:self.textsView.contentSize.width];\n  self.textsViewWidthConstraint = widthConstraint;\n  NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.textsView\n                                                                      attribute:NSLayoutAttributeHeight\n                                                                      relatedBy:NSLayoutRelationEqual\n                                                                         toItem:nil\n                                                                      attribute:NSLayoutAttributeNotAnAttribute\n                                                                     multiplier:1\n                                                                       constant:self.textsView.contentSize.height];\n  widthConstraint.priority = 999;\n  heightConstraint.priority = 999;\n  [self.textsView addConstraint:widthConstraint];\n  [self.textsView addConstraint:heightConstraint];\n}\n\n#pragma mark - Superclass methods\n\n- (UIView *)bottomViewWithNoButton {\n  return self.textsView;\n}\n\n- (void)setupLayoutForGraphic {\n  [super applyImageToImageView:self.graphicImageView];\n  self.graphicImageContainerView.layer.cornerRadius = self.view.layer.cornerRadius;\n  \n  [self.iconImageView removeFromSuperview];\n  [self.iconImageContainerView removeFromSuperview];\n  [self.iconLabelView removeFromSuperview];\n  [self.textsView removeFromSuperview];\n  self.iconImageView = nil;\n  self.iconLabelView = nil;\n  self.inAppMessageHeaderLabel = nil;\n  self.inAppMessageMessageLabel = nil;\n  self.textsView = nil;\n}\n\n- (void)setupLayoutForTopImage {\n  self.textsView.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.graphicImageView removeFromSuperview];\n  [self.graphicImageContainerView removeFromSuperview];\n  self.graphicImageView = nil;\n  \n  // Set up the icon image/label view\n  if ([super applyImageToImageView:self.iconImageView]) {\n    [self.iconLabelView removeFromSuperview];\n    self.iconLabelView = nil;\n    \n    @try {\n      UIImage *inAppImage = [[Appboy sharedInstance].imageDelegate imageFromCacheForURL:self.inAppMessage.imageURI];\n      CGFloat imageAspectRatio = 1.0;\n      if (inAppImage != nil) {\n        imageAspectRatio = inAppImage.size.width / inAppImage.size.height;\n      }\n      NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.iconImageView\n                                                                    attribute:NSLayoutAttributeWidth\n                                                                    relatedBy:NSLayoutRelationEqual\n                                                                       toItem:self.iconImageView\n                                                                    attribute:NSLayoutAttributeHeight\n                                                                   multiplier:imageAspectRatio\n                                                                     constant:0];\n      [self.iconImageView addConstraint:constraint];\n    } @catch (NSException *exception) {\n      NSLog(@\"Braze cannot display this message because the image has a height or width of 0. The image has width %f and height %f and image URI %@.\",\n            self.iconImageView.image.size.width, self.iconImageView.image.size.height,\n            self.inAppMessage.imageURI.absoluteString);\n      [self hideInAppMessage:NO];\n    }\n  } else {\n    self.iconImageView.hidden = YES;\n    self.iconImageHeightConstraint.constant = self.iconLabelView.frame.size.height + 20.0f;\n    \n    if (![super applyIconToLabelView:self.iconLabelView]) {\n      // When there is no image or icon, remove the iconLabelView to free up the space of the image view\n      [self.iconLabelView removeFromSuperview];\n      self.iconLabelView = nil;\n      self.iconImageHeightConstraint.constant = 20.0f;\n    }\n  }\n  \n  if (![ABKUIUtils objectIsValidAndNotEmpty:((ABKInAppMessageImmersive *)self.inAppMessage).header]) {\n    for (NSLayoutConstraint *constraint in self.inAppMessageHeaderLabel.constraints) {\n      if (constraint.firstAttribute == NSLayoutAttributeHeight) {\n        constraint.constant = 0.0f;\n        break;\n      }\n    }\n    self.headerBodySpaceConstraint.constant = 0.0f;\n  }\n  \n  NSArray *maxWidthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@\"H:[view(<=max)]\"\n                                                                        options:0\n                                                                        metrics:@{@\"max\" : @(MaxModalViewWidth)}\n                                                                          views:@{@\"view\" : self.view}];\n  NSArray *minWidthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@\"H:[view(>=min)]\"\n                                                                        options:0\n                                                                        metrics:@{@\"min\" : @(MinModalViewWidth)}\n                                                                          views:@{@\"view\" : self.view}];\n  NSArray *maxHeightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@\"V:[view(<=max)]\"\n                                                                         options:0\n                                                                         metrics:@{@\"max\" : @(MaxModalViewHeight)}\n                                                                           views:@{@\"view\" : self.view}];\n  [self.view addConstraints:maxWidthConstraint];\n  [self.view addConstraints:minWidthConstraint];\n  [self.view addConstraints:maxHeightConstraint];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageSlideupViewController.h",
    "content": "#import \"ABKInAppMessageViewController.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageSlideupViewController : ABKInAppMessageViewController\n\n/*!\n * The UIImageView for the arrow of the in-app message.\n */\n@property (weak, nonatomic, nullable) IBOutlet UIImageView *arrowImage;\n\n/*!\n * The offset which controls the slideup in-app message vertical position once visible.\n */\n@property (assign, nonatomic) CGFloat offset;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageSlideupViewController.m",
    "content": "#import \"ABKInAppMessageSlideupViewController.h\"\n#import \"ABKInAppMessageSlideup.h\"\n#import \"ABKUIUtils.h\"\n\nstatic CGFloat const AssetSideMargin = 20.0f;\nstatic CGFloat const DefaultViewRadius = 15.0f;\nstatic CGFloat const DefaultVerticalMarginHeight = 10.0f;\n\n@interface ABKInAppMessageSlideupViewController()\n\n@property (strong, nonatomic) NSLayoutConstraint *slideConstraint;\n@property (nonatomic, readonly) BOOL animatesFromTop;\n@property (nonatomic, readonly) CGFloat safeAreaOffset;\n\n@end\n\n@implementation ABKInAppMessageSlideupViewController\n\n- (void)loadView {\n  NSBundle *bundle = [ABKUIUtils bundle:[ABKInAppMessageSlideupViewController class] channel:ABKInAppMessageChannel];\n  [bundle loadNibNamed:@\"ABKInAppMessageSlideupViewController\"\n                 owner:self\n               options:nil];\n  self.inAppMessageMessageLabel.font = MessageLabelDefaultFont;\n  if (self.inAppMessage.message) {\n    NSMutableAttributedString *attributedStringMessage = [[NSMutableAttributedString alloc] initWithString:self.inAppMessage.message];\n    NSMutableParagraphStyle *messageStyle = [[NSMutableParagraphStyle alloc] init];\n    [messageStyle setLineSpacing:2];\n    [messageStyle setLineBreakMode:NSLineBreakByTruncatingTail];\n    [attributedStringMessage addAttribute:NSParagraphStyleAttributeName\n                                    value:messageStyle\n                                    range:NSMakeRange(0, self.inAppMessage.message.length)];\n    self.inAppMessageMessageLabel.attributedText = attributedStringMessage;\n  }\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  self.view.translatesAutoresizingMaskIntoConstraints = NO;\n\n  [self setupChevron];\n  [self setupImageOrLabelView];\n\n  self.view.layer.cornerRadius = DefaultViewRadius;\n  self.view.layer.masksToBounds = NO;\n}\n\n- (void)viewWillLayoutSubviews {\n  [super viewWillLayoutSubviews];\n\n  // Setup the constraints once UIKit has set the layoutMargins / safeAreaInsets\n  if (!self.slideConstraint) {\n    [self setupConstraintsWithSuperView];\n  }\n}\n\n- (void)viewDidLayoutSubviews {\n  [super viewDidLayoutSubviews];\n\n  // Redraw the shadow when the layout is changed.\n  UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.view.bounds cornerRadius:DefaultViewRadius];\n  self.view.layer.shadowColor = [[UIColor blackColor] colorWithAlphaComponent:InAppMessageShadowOpacity].CGColor;\n  self.view.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);\n  self.view.layer.shadowRadius = InAppMessageShadowBlurRadius;\n  self.view.layer.shadowPath = shadowPath.CGPath;\n\n  // Make opacity of shadow match opacity of the In-App Message background\n  CGFloat alpha = 0;\n  [self.view.backgroundColor getRed:nil green:nil blue:nil alpha:&alpha];\n  self.view.layer.shadowOpacity = alpha;\n}\n\n#pragma mark - Public methods\n\n- (CGFloat)offset {\n  return self.slideConstraint.constant - self.safeAreaOffset;\n}\n\n- (void)setOffset:(CGFloat)offset {\n  self.slideConstraint.constant = offset + self.safeAreaOffset;\n}\n\n#pragma mark - Private methods\n\n- (void)setupChevron {\n  if (((ABKInAppMessageSlideup *)self.inAppMessage).hideChevron) {\n    [self.arrowImage removeFromSuperview];\n    self.arrowImage = nil;\n    NSLayoutConstraint *inAppMessageLabelTrailingConstraint =\n        [self.inAppMessageMessageLabel.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor\n                                                                     constant:-AssetSideMargin];\n    [self.view addConstraint:inAppMessageLabelTrailingConstraint];\n\n  } else {\n    if (((ABKInAppMessageSlideup *)self.inAppMessage).chevronColor != nil) {\n      UIColor *arrowColor = ((ABKInAppMessageSlideup *)self.inAppMessage).chevronColor;\n      self.arrowImage.image = [self.arrowImage.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];\n      self.arrowImage.tintColor = arrowColor;\n    } else {\n      UIColor *defaultArrowColor = [UIColor colorWithRed:(155.0/255.0) green:(155.0/255.0) blue:(155.0/255.0) alpha:1.0];\n      self.arrowImage.image = [self.arrowImage.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];\n      self.arrowImage.tintColor = defaultArrowColor;\n    }\n  }\n}\n\n- (void)setupImageOrLabelView {\n  if (![super applyImageToImageView:self.iconImageView]) {\n    [self.iconImageView removeFromSuperview];\n    self.iconImageView = nil;\n\n    if (![super applyIconToLabelView:self.iconLabelView]) {\n      [self.iconLabelView removeFromSuperview];\n      self.iconLabelView = nil;\n      NSLayoutConstraint *inAppMessageLabelLeadingConstraint =\n          [self.inAppMessageMessageLabel.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor\n                                                                       constant:AssetSideMargin];\n      [self.view addConstraint:inAppMessageLabelLeadingConstraint];\n    }\n  }\n}\n\n- (void)setupConstraintsWithSuperView {\n  NSLayoutConstraint *leadConstraint = [self.view.leadingAnchor constraintEqualToAnchor:self.view.superview.layoutMarginsGuide.leadingAnchor];\n  NSLayoutConstraint *trailConstraint = [self.view.trailingAnchor constraintEqualToAnchor:self.view.superview.layoutMarginsGuide.trailingAnchor];\n  NSLayoutConstraint *offscreenConstraint;\n\n  if (self.animatesFromTop) {\n    offscreenConstraint = [self.view.bottomAnchor constraintEqualToAnchor:self.view.superview.topAnchor];\n    self.slideConstraint = [self.view.topAnchor constraintEqualToAnchor:self.view.superview.layoutMarginsGuide.topAnchor\n                                                               constant:self.safeAreaOffset];\n  } else {\n    offscreenConstraint = [self.view.topAnchor constraintEqualToAnchor:self.view.superview.bottomAnchor];\n    self.slideConstraint = [self.view.bottomAnchor constraintEqualToAnchor:self.view.superview.layoutMarginsGuide.bottomAnchor\n                                                                  constant:self.safeAreaOffset];\n  }\n\n  offscreenConstraint.priority = UILayoutPriorityDefaultLow;\n  [NSLayoutConstraint activateConstraints:@[leadConstraint, trailConstraint, offscreenConstraint]];\n}\n\n- (BOOL)animatesFromTop {\n  return ((ABKInAppMessageSlideup *)self.inAppMessage).inAppMessageSlideupAnchor == ABKInAppMessageSlideupFromTop;\n}\n\n- (CGFloat)safeAreaOffset {\n  BOOL hasSafeArea = self.animatesFromTop\n    ? self.view.superview.layoutMargins.top != 0\n    : self.view.superview.layoutMargins.bottom != 0;\n\n  if (hasSafeArea) {\n    return 0;\n  }\n\n  return self.animatesFromTop\n    ? DefaultVerticalMarginHeight\n    : -DefaultVerticalMarginHeight;\n}\n\n#pragma mark - Superclass methods\n\n- (void)beforeMoveInAppMessageViewOnScreen {\n  self.slideConstraint.active = YES;\n}\n\n- (void)moveInAppMessageViewOnScreen {\n  [self.view.superview layoutIfNeeded];\n}\n\n- (void)beforeMoveInAppMessageViewOffScreen {\n  self.slideConstraint.active = NO;\n}\n\n- (void)moveInAppMessageViewOffScreen {\n  [self.view.superview layoutIfNeeded];\n}\n\n- (void)setInAppMessage:(ABKInAppMessage *)inAppMessage {\n  if ([inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n    super.inAppMessage = inAppMessage;\n  } else {\n    NSLog(@\"ABKInAppMessageSlideupViewController only accepts in-app message with type ABKInAppMessageSlideup. Setting in-app message fails.\");\n  }\n}\n\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {\n  if (self.inAppMessage.inAppMessageClickActionType != ABKInAppMessageNoneClickAction) {\n    self.view.alpha = InAppMessageSelectedOpacity;\n  }\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKInAppMessage.h\"\n\n// Customize this to set the font for the in-app message message.\n#define MessageLabelDefaultFont [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]\n\nstatic const CGFloat InAppMessageShadowBlurRadius = 4.0f;\nstatic const CGFloat InAppMessageShadowOpacity = 0.3f;\nstatic const CGFloat InAppMessageSelectedOpacity = 0.8f;\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ABKInAppMessageViewController : UIViewController\n\n/*!\n * The in-app message that is being displayed in the view controller.\n */\n@property (strong) ABKInAppMessage *inAppMessage;\n\n/*!\n * The UIImageView for the in-app message image.\n */\n@property (weak, nonatomic) IBOutlet UIImageView *iconImageView;\n\n/*!\n * The UILabel for the in-app message icon.\n */\n@property (weak, nonatomic) IBOutlet UILabel *iconLabelView;\n\n/*!\n * The UILabel for the in-app message message.\n */\n@property (weak, nonatomic) IBOutlet UILabel *inAppMessageMessageLabel;\n\n/*!\n * This is YES if the device being used is an iPad, and NO if the device is not an iPad.\n */\n@property BOOL isiPad;\n\n/*!\n * @discussion This method is used for passing the in-app message property to any custom view\n *             controller.\n */\n- (instancetype)initWithInAppMessage:(ABKInAppMessage *)inAppMessage;\n\n/*!\n * @discussion This method is used to decide whether the in-app message will be animated off the screen.\n *             If YES, the in-app message will animate off the screen. If NO, the in-app message will\n *             disappear immediately without animation.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)hideInAppMessage:(BOOL)animated;\n\n/*\n * @discussion This method is called right before an in-app message view is going to be animated and\n *             removed from screen. You can use this method to change the in-app message view's\n *             constraints and call the `layoutIfNeeded` method in the `moveInAppMessageViewOffScreen`\n *             method to animate the constraint changes.\n *\n * For customization, please use a subclass or category to override this method.\n * You must implement this method in a custom view controller.\n * The default implementation of the method does nothing.\n */\n- (void)beforeMoveInAppMessageViewOffScreen;\n\n/*\n * @discussion This method is called when an in-app message view is going to be removed from the\n *             screen. You can use this method to control the in-app message view's\n *             animation by setting the off-screen position and status of the in-app message view, for\n *             example, by setting the alpha of the view to 0.\n *\n * For customization, please use a subclass or category to override this method.\n * You must implement this method in a custom view controller.\n * The default implementation of the method does nothing.\n */\n- (void)moveInAppMessageViewOffScreen;\n\n/*\n * @discussion This method is called right before the in-app message view is going to be animated and\n *             displayed on the screen. You can use this method to change the in-app message view's\n *             constraints and call the `layoutIfNeeded` method in the `moveInAppMessageViewOnScreen`\n *             method to animate the constraint changes.\n *\n * For customization, please use a subclass or category to override this method.\n * You must implement this method in a custom view controller.\n * The default implementation of the method does nothing.\n */\n- (void)beforeMoveInAppMessageViewOnScreen;\n\n/*\n * @discussion This method is called when in-app message view is going to displayed on the screen. You\n *             can use this method to control the in-app message view's animation by setting the on-\n *             screen position and status of the in-app message view, for example by moving the in-app\n *             message view to the center of the screen or setting the alpha of the view to 1.\n *\n * For customization, please use a subclass or category to override this method.\n * You must implement this method in a custom view controller.\n * The default implementation of the method does nothing.\n */\n- (void)moveInAppMessageViewOnScreen;\n\n/*\n * @discussion This method sets the image of the in-app message.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (BOOL)applyImageToImageView:(UIImageView *)iconImageView;\n\n/*\n * @discussion This method sets the icon of the in-app message.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (BOOL)applyIconToLabelView:(UILabel *)iconLabelView;\n\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageViewController.m",
    "content": "#import <CoreText/CoreText.h>\n#import \"ABKInAppMessageViewController.h\"\n#import \"ABKInAppMessageView.h\"\n#import \"ABKInAppMessageWindowController.h\"\n#import \"ABKUIUtils.h\"\n#import \"Appboy.h\"\n\nstatic const float InAppMessageIconLabelCornerRadius_iPhone = 10.0f;\nstatic const float InAppMessageIconLabelCornerRadius_iPad = 15.0f;\nstatic NSString *const FontAwesomeName = @\"FontAwesome\";\n\n@implementation ABKInAppMessageViewController\n\n- (instancetype)initWithInAppMessage:(ABKInAppMessage *)inAppMessage {\n  if (self = [super init]) {\n    _inAppMessage = inAppMessage;\n    _isiPad = [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad;\n    return self;\n  } else {\n    return nil;\n  }\n}\n\n#pragma mark - Lifecycle Methods\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.inAppMessageMessageLabel];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  [ABKInAppMessageView class];\n\n  // Set colors of the IAM view at display time\n  self.inAppMessageMessageLabel.text = self.inAppMessage.message;\n  self.inAppMessageMessageLabel.textAlignment = self.inAppMessage.messageTextAlignment;\n  if (self.inAppMessage.backgroundColor != nil) {\n    self.view.backgroundColor = self.inAppMessage.backgroundColor;\n  }\n  if (self.inAppMessage.textColor != nil) {\n    [self.inAppMessageMessageLabel setTextColor:self.inAppMessage.textColor];\n  }\n  self.iconImageView.contentMode = self.inAppMessage.imageContentMode;\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n  [super viewDidAppear:animated];\n  UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,\n                                  self.inAppMessageMessageLabel);\n}\n\n- (void)viewDidDisappear:(BOOL)animated {\n  [super viewDidDisappear:animated];\n  UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,\n                                  nil);\n  [[ABKUIUtils activeApplicationViewController] setNeedsStatusBarAppearanceUpdate];\n}\n\n- (BOOL)prefersStatusBarHidden {\n  return ABKUIUtils.applicationStatusBarHidden;\n}\n\n- (UIStatusBarStyle)preferredStatusBarStyle {\n  return ABKUIUtils.applicationStatusBarStyle;\n}\n\n#pragma mark - UIViewController Methods\n\n// Inherit the supported orientations from the currently active application view\n// controller (the one immediately under the in-app message window)\n- (UIInterfaceOrientationMask)supportedInterfaceOrientations {\n  return ABKUIUtils.activeApplicationViewController.supportedInterfaceOrientations;\n}\n\n#pragma mark - In-app Message Initialization\n\n- (BOOL)applyIconToLabelView:(UILabel *)iconLabelView {\n  if ([ABKUIUtils objectIsValidAndNotEmpty:self.inAppMessage.icon]) {\n    // Check if font awesome is already registered in the application. If not, register it.\n    // The size can be any number here.\n    if ([UIFont fontWithName:FontAwesomeName size:30] == nil) {\n      NSString *fontPath = [[ABKUIUtils bundle:[ABKInAppMessageViewController class] channel:ABKInAppMessageChannel]\n                                     pathForResource:FontAwesomeName\n                                              ofType:@\"otf\"];\n      NSData *fontData = [NSData dataWithContentsOfFile:fontPath];\n      CFErrorRef error;\n      CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)fontData);\n      CGFontRef font = CGFontCreateWithDataProvider(provider);\n      BOOL failedToRegisterFont = NO;\n      if (!CTFontManagerRegisterGraphicsFont(font, &error)) {\n        CFStringRef errorDescription = CFErrorCopyDescription(error);\n        NSLog(@\"Error: Cannot load Font Awesome\");\n        CFBridgingRelease(errorDescription);\n        failedToRegisterFont = YES;\n      }\n      CFRelease(font);\n      CFRelease(provider);\n      if (failedToRegisterFont) {\n        return NO;\n      }\n    }\n    iconLabelView.font = [UIFont fontWithName:FontAwesomeName size:self.iconLabelView.font.pointSize];\n    // The icon here is a Unicode string, so we use a text label instead of an image view\n    iconLabelView.text = self.inAppMessage.icon;\n    iconLabelView.textColor = self.inAppMessage.iconColor == nil ? [UIColor whiteColor] : self.inAppMessage.iconColor;\n    iconLabelView.backgroundColor = self.inAppMessage.iconBackgroundColor == nil ?\n      [UIColor colorWithRed:RedValueOfDefaultIconColorAndButtonBgColor\n                      green:GreenValueOfDefaultIconColorAndButtonBgColor\n                       blue:BlueValueOfDefaultIconColorAndButtonBgColor\n                      alpha:AlphaValueOfDefaultIconColorAndButtonBgColor]\n      : self.inAppMessage.iconBackgroundColor;\n    iconLabelView.layer.cornerRadius = self.isiPad ? InAppMessageIconLabelCornerRadius_iPad :\n      InAppMessageIconLabelCornerRadius_iPhone;\n    iconLabelView.layer.masksToBounds = YES;\n    return YES;\n  }\n  return NO;\n}\n\n// Here we try to find the icon image and set it to the given image view. We will first try to find if the icon image\n// is one of the default Braze icon images. If not, we try to check the icon URI and download the image\n// asynchronously.\n// This method returns YES if we can find a default icon image, or there is a valid icon image URL. It returns NO when\n// we cannot find any icon from the in-app message, and won't do anything to the given image view.\n- (BOOL)applyImageToImageView:(UIImageView *)iconImageView {\n  if ([ABKUIUtils objectIsValidAndNotEmpty:self.inAppMessage.imageURI]) {\n    if ([Appboy sharedInstance].imageDelegate) {\n      [[Appboy sharedInstance].imageDelegate setImageForView:iconImageView\n                      showActivityIndicator:NO\n                                    withURL:self.inAppMessage.imageURI\n                           imagePlaceHolder:nil\n                                  completed:nil];\n      return YES;\n    } else {\n      [self hideInAppMessage:NO];\n      return NO;\n    }\n  }\n  return NO;\n}\n\n#pragma mark - Animation\n\n- (void)hideInAppMessage:(BOOL)animated {\n  ABKInAppMessageWindowController *parentInAppMessageWindowController = (ABKInAppMessageWindowController *)self.parentViewController;\n  [parentInAppMessageWindowController hideInAppMessageViewWithAnimation:animated];\n}\n\n- (void)beforeMoveInAppMessageViewOnScreen {}\n\n- (void)moveInAppMessageViewOnScreen {}\n\n- (void)beforeMoveInAppMessageViewOffScreen {}\n\n- (void)moveInAppMessageViewOffScreen {}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageWindowController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"Appboy.h\"\n#import \"ABKInAppMessageUIDelegate.h\"\n#import \"ABKInAppMessageWindowController.h\"\n#import \"ABKInAppMessageWindow.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n// This notification is used to let the InAppMessageUIController know that the InAppMessageWindowController\n// was dismissed.\nstatic NSString * const ABKNotificationInAppMessageWindowDismissed = @\"inAppMessageWindowDismissedNotification\";\n\nstatic double const InAppMessageAnimationDuration = 0.4;\n\n/*!\n * ABKInAppMessageWindowController is the view controller responsible for housing and displaying\n * ABKInAppMessageViewControllers and performing actions after the in-app message is clicked. Instances \n * of ABKInAppMessageWindowController are deallocated after the in-app message is dismissed.\n *\n * It will display the given in-app message view controller by animating it onto the screen, and\n * dismiss it by animating it off the screen, by calling the ABKInAppMessageViewController's\n * moveInAppMessageViewOffScreen: and moveInAppMessageViewOnScreen: methods, and log an impression\n * of the in-app message.\n * If the in-app message view controller is an instance of ABKInAppMessageSlideupViewController,\n * ABKInAppMessageModalViewController, or ABKInAppMessageFullViewController, it'll also handle the\n * following behaviors:\n *   * For ABKInAppMessageSlideupViewController:\n *       * set the width of the view controller based on slideup UI style and iPhone devices.\n *       * add a tap gesture recognizer to the in-app message view controller, and handle the clicks on it.\n *       * add a pan gesture recognizer to the in-app message view controller, and handle the panning on it.\n *   * For ABKInAppMessageModalViewController:\n *       * set the background color to be black with alpha 0.9.\n *       * move the in-app view controller to the center.\n *       * when the in-ap message has no buttons, add a tap gesture recognizer to the in-app message\n *         view controller, and handle the clicks on it.\n *       * block the clicks outside of the in-app message view.\n *   * For ABKInAppMessageFullViewController:\n *       * set the in-app message's frame to be full screen.\n *       * when the in-app message has no buttons, add a tap gesture recognizer to the in-app message\n *         view controller, and handle the clicks on it.\n *\n * Additionally, the view controller is responsible for executing that in-app message's specified\n * behavior on click or performing a \"custom action\", which can be specified through a delegate for\n * the in-app message.\n *\n * After the in-app message is dismissed, ABKInAppMessageWindowController will set the inAppMessageWindow\n * property to nil, and inform ABKInAppMessageUIController to set it's windowController property to\n * nil as well. At that point, the in-app message window's retainer count will drop to 0 and the\n * system will clean it out from the UIApplication's windows array.\n */\n@interface ABKInAppMessageWindowController : UIViewController <UIGestureRecognizerDelegate>\n\n/*!\n * The UI window used to display the in-app message.\n */\n@property (nonatomic, nullable) IBOutlet ABKInAppMessageWindow *inAppMessageWindow;\n\n/*!\n * The timer used to know when to slide the in-app message off the screen.\n */\n@property (nullable) NSTimer *slideAwayTimer;\n\n/*!\n * The in-app message that is being displayed.\n */\n@property ABKInAppMessage *inAppMessage;\n\n/*!\n * The optional ABKInAppMessageUIDelegate that can be used to customize display and behavior of the\n * in-app message.\n */\n@property (weak, nullable) id<ABKInAppMessageUIDelegate> inAppMessageUIDelegate;\n\n/*!\n * The view controller used to display the in-app message.\n */\n@property ABKInAppMessageViewController *inAppMessageViewController;\n\n/*!\n * Properties used to properly place the slideup in-app messages with pan gestures.\n */\n@property CGFloat slideupConstraintMaxValue;\n@property CGPoint inAppMessagePreviousPanPosition;\n\n/*!\n * The orientation mask that the in-app message supports.\n * The default value is UIInterfaceOrientationMaskAll\n */\n@property UIInterfaceOrientationMask supportedOrientationMask;\n\n/*!\n * The preferred orientation for in-app message display.\n * The default is unknown, which means the orientation would be set as Status Bar current orientation.\n */\n@property UIInterfaceOrientation preferredOrientation;\n\n/*!\n * The variable that shows if the device is being rotated.\n */\n@property BOOL isInRotation;\n\n/*!\n * The variable that shows if the in-app message has been clicked.\n */\n@property BOOL inAppMessageIsTapped;\n\n/*!\n * The ID of a button that has been clicked.\n */\n@property NSInteger clickedButtonId;\n\n/*!\n * The ID of an HTML button that has been clicked.\n */\n@property (nullable) NSString *clickedHTMLButtonId;\n\n- (instancetype)initWithInAppMessage:(ABKInAppMessage *)inAppMessage\n          inAppMessageViewController:(ABKInAppMessageViewController *)inAppMessageViewController\n                inAppMessageDelegate:(id<ABKInAppMessageUIDelegate>)delegate;\n/*!\n * @discussion This method is called when the keyboard is shown when an in-app message is being displayed.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)keyboardWasShown;\n\n/*!\n * @discussion This method is called to display the in-app message.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)displayInAppMessageViewWithAnimation:(BOOL)withAnimation;\n\n/*!\n * @discussion These methods are called to hide the in-app message.\n *\n * For customization, please use a subclass or category to override one of these methods.\n */\n- (void)hideInAppMessageViewWithAnimation:(BOOL)withAnimation;\n- (void)hideInAppMessageViewWithAnimation:(BOOL)withAnimation\n                        completionHandler:(void (^ __nullable)(void))completionHandler;\n\n/*!\n * @discussion This method is called when an in-app message button is clicked.\n *\n * For customization, please use a subclass or category to override this method.\n */\n- (void)inAppMessageClickedWithActionType:(ABKInAppMessageClickActionType)actionType\n                                      URL:(nullable NSURL *)url\n                         openURLInWebView:(BOOL)openUrlInWebView;\n  \nNS_ASSUME_NONNULL_END\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKInAppMessage/ViewControllers/ABKInAppMessageWindowController.m",
    "content": "#import \"ABKInAppMessageWindowController.h\"\n#import \"ABKInAppMessageWindow.h\"\n#import \"ABKInAppMessageView.h\"\n#import \"ABKInAppMessageModal.h\"\n#import \"ABKInAppMessageFull.h\"\n#import \"ABKInAppMessageHTMLFull.h\"\n#import \"ABKInAppMessageHTML.h\"\n#import \"ABKInAppMessageHTMLBase.h\"\n#import \"ABKInAppMessageHTMLBaseViewController.h\"\n#import \"ABKInAppMessageImmersiveViewController.h\"\n#import \"ABKInAppMessageSlideupViewController.h\"\n#import \"ABKInAppMessageModalViewController.h\"\n#import \"ABKInAppMessageViewController.h\"\n#import \"ABKURLDelegate.h\"\n#import \"ABKUIURLUtils.h\"\n#import \"ABKUIUtils.h\"\n\nstatic CGFloat const MinimumInAppMessageDismissVelocity = 20.0;\nstatic CGFloat const SlideUpDragResistanceFactor = 0.055;\nstatic NSInteger const KeyWindowRetryMaxCount = 10;\n\n@interface ABKInAppMessageWindowController ()\n\n@property (nonatomic, assign) NSInteger keyWindowRetryCount;\n\n@property (nonatomic, assign) BOOL isRemovingWindow;\n\n@end\n\n@implementation ABKInAppMessageWindowController\n\n- (instancetype)initWithInAppMessage:(ABKInAppMessage *)inAppMessage\n          inAppMessageViewController:(ABKInAppMessageViewController *)inAppMessageViewController\n                inAppMessageDelegate:(id<ABKInAppMessageUIDelegate>)delegate {\n  if (self = [super init]) {\n    _inAppMessage = inAppMessage;\n    _inAppMessageViewController = inAppMessageViewController;\n    _inAppMessageUIDelegate = (id<ABKInAppMessageUIDelegate>)delegate;\n    \n    _inAppMessageWindow = [self createInAppMessageWindow];\n    _inAppMessageWindow.backgroundColor = [UIColor clearColor];\n    _inAppMessageWindow.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;\n    _inAppMessageIsTapped = NO;\n    _clickedButtonId = -1;\n    _keyWindowRetryCount = 0;\n    _isRemovingWindow = NO;\n  }\n  return self;\n}\n\n#pragma mark - Lifecycle Methods\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  [self addChildViewController:self.inAppMessageViewController];\n  [self.inAppMessageViewController didMoveToParentViewController:self];\n  self.view.backgroundColor = [UIColor clearColor];\n\n  if ([self.inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n    \n    // Note: this gestureRecognizer won't catch taps which occur during the animation.\n    UITapGestureRecognizer *inAppSlideupTapGesture = [[UITapGestureRecognizer alloc]\n                                                      initWithTarget:self\n                                                              action:@selector(inAppMessageTapped:)];\n    [self.inAppMessageViewController.view addGestureRecognizer:inAppSlideupTapGesture];\n    UIPanGestureRecognizer *inAppSlideupPanGesture = [[UIPanGestureRecognizer alloc]\n                                                      initWithTarget:self\n                                                              action:@selector(inAppSlideupWasPanned:)];\n    [self.inAppMessageViewController.view addGestureRecognizer:inAppSlideupPanGesture];\n    // We want to detect the pan gesture first, so we only recognize a tap when the pan recognizer fails.\n    [inAppSlideupTapGesture requireGestureRecognizerToFail:inAppSlideupPanGesture];\n  } else if ([self.inAppMessage isKindOfClass:[ABKInAppMessageImmersive class]]) {\n    UITapGestureRecognizer *inAppImmersiveInsideTapGesture = [[UITapGestureRecognizer alloc]\n                                                              initWithTarget:self\n                                                                      action:@selector(inAppMessageTapped:)];\n    [self.inAppMessageViewController.view addGestureRecognizer:inAppImmersiveInsideTapGesture];\n\n    if ([self.inAppMessage isKindOfClass:[ABKInAppMessageModal class]]) {\n      self.inAppMessageWindow.handleAllTouchEvents = YES;\n      UITapGestureRecognizer *inAppModalOutsideTapGesture = [[UITapGestureRecognizer alloc]\n                                                              initWithTarget:self\n                                                                      action:@selector(inAppMessageTappedOutside:)];\n      [self.view addGestureRecognizer:inAppModalOutsideTapGesture];\n    }\n  }\n\n  if ([self.inAppMessageViewController isKindOfClass:[ABKInAppMessageImmersiveViewController class]] ||\n      [self.inAppMessageViewController isKindOfClass:[ABKInAppMessageHTMLBaseViewController class]]) {\n    self.inAppMessageWindow.accessibilityViewIsModal = YES;\n  }\n\n  [self.view addSubview:self.inAppMessageViewController.view];\n}\n\n- (UIViewController *)childViewControllerForStatusBarHidden {\n  return self.inAppMessageViewController;\n}\n\n- (UIViewController *)childViewControllerForStatusBarStyle {\n  return self.inAppMessageViewController;\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  \n  // When the in-app message first become visible, monitor windows changes in the view hierarchy to\n  // ensure that the in-app message stays visible.\n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(handleWindowDidBecomeKeyNotification:)\n                                               name:UIWindowDidBecomeKeyNotification\n                                             object:nil];\n}\n\n- (void)viewDidDisappear:(BOOL)animated {\n  [super viewDidDisappear:animated];\n  \n  [[NSNotificationCenter defaultCenter] removeObserver:self\n                                                  name:UIWindowDidBecomeKeyNotification\n                                                object:nil];\n}\n\n#pragma mark - Rotation\n\n- (UIInterfaceOrientationMask)supportedInterfaceOrientations {\n  return self.supportedOrientationMask;\n}\n\n- (BOOL)shouldAutorotate {\n  if ([UIDevice currentDevice].userInterfaceIdiom != UIUserInterfaceIdiomPad &&\n      self.inAppMessage.orientation != ABKInAppMessageOrientationAny &&\n      !self.inAppMessageWindow.hidden) {\n    return NO;\n  } else {\n    return YES;\n  }\n}\n\n- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {\n  if (self.preferredOrientation != UIInterfaceOrientationUnknown) {\n    return self.preferredOrientation;\n  }\n  return [ABKUIUtils getInterfaceOrientation];\n}\n\n#pragma mark - Gesture Recognizers\n\n- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {\n  return ![touch.view isKindOfClass:[ABKInAppMessageView class]];\n}\n\n- (void)inAppSlideupWasPanned:(UIPanGestureRecognizer *)panGestureRecognizer {\n  ABKInAppMessageSlideupViewController *slideupVC = (ABKInAppMessageSlideupViewController *)self.inAppMessageViewController;\n  BOOL animatesFromTop = ((ABKInAppMessageSlideup *)self.inAppMessage).inAppMessageSlideupAnchor == ABKInAppMessageSlideupFromTop;\n  CGFloat offset = [panGestureRecognizer translationInView:self.view].y;\n  CGFloat velocity = [panGestureRecognizer velocityInView:self.view].y;\n  \n  switch (panGestureRecognizer.state) {\n    case UIGestureRecognizerStateChanged: {\n      if (animatesFromTop) {\n        slideupVC.offset = offset <= 0 ? offset : (SlideUpDragResistanceFactor * offset);\n      } else {\n        slideupVC.offset = offset >= 0 ? offset : (SlideUpDragResistanceFactor * offset);\n      }\n      break;\n    }\n      \n    case UIGestureRecognizerStateEnded:\n    case UIGestureRecognizerStateCancelled: {\n      // Reset position\n      if ((animatesFromTop && slideupVC.offset > 0) ||\n          (!animatesFromTop && slideupVC.offset < 0) ||\n          (fabs(velocity) < MinimumInAppMessageDismissVelocity && fabs(offset) < 16)) {\n        slideupVC.offset = 0;\n        [UIView animateWithDuration:0.2 animations:^{\n          [self.view layoutIfNeeded];\n        }];\n        return;\n      }\n\n      // Dismiss\n      [self invalidateSlideAwayTimer];\n\n      if ([self.inAppMessageUIDelegate respondsToSelector:@selector(onInAppMessageDismissed:)]) {\n        [self.inAppMessageUIDelegate onInAppMessageDismissed:self.inAppMessage];\n      }\n\n      [slideupVC beforeMoveInAppMessageViewOffScreen];\n      [UIView animateWithDuration:0.2\n                       animations:^{\n                         [slideupVC moveInAppMessageViewOffScreen];\n                       }\n                       completion:^(BOOL finished) {\n                         if (finished) {\n                           [self hideInAppMessageWindow];\n                         }\n                       }];\n      break;\n    }\n      \n    default:\n      break;\n  }\n}\n\n- (void)inAppMessageTapped:(id)sender {\n  if ([self.inAppMessage isKindOfClass:[ABKInAppMessageImmersive class]] &&\n      [ABKUIUtils objectIsValidAndNotEmpty:((ABKInAppMessageImmersive *)self.inAppMessage).buttons]) {\n    return;\n  }\n  [self invalidateSlideAwayTimer];\n  self.inAppMessageIsTapped = YES;\n  \n  if (![self delegateHandlesInAppMessageClick]) {\n    [self inAppMessageClickedWithActionType:self.inAppMessage.inAppMessageClickActionType\n                                        URL:self.inAppMessage.uri\n                           openURLInWebView:self.inAppMessage.openUrlInWebView];\n  }\n}\n\n- (void)inAppMessageTappedOutside:(id)sender {\n  if (![self.inAppMessage isKindOfClass:[ABKInAppMessageModal class]]) {\n    return;\n  }\n  if ([self.inAppMessageViewController isKindOfClass:ABKInAppMessageModalViewController.class]) {\n    ABKInAppMessageModalViewController *viewController = (ABKInAppMessageModalViewController *)self.inAppMessageViewController;\n    if (viewController.enableDismissOnOutsideTap) {\n      [viewController dismissInAppMessage:self.inAppMessage];\n    }\n  }\n}\n\n#pragma mark - Timer\n\n- (void)invalidateSlideAwayTimer {\n  if (self.slideAwayTimer != nil) {\n    [self.slideAwayTimer invalidate];\n    self.slideAwayTimer = nil;\n  }\n}\n\n- (void)inAppMessageTimerFired:(NSTimer *)timer {\n  if ([self.inAppMessageUIDelegate respondsToSelector:@selector(onInAppMessageDismissed:)]) {\n    [self.inAppMessageUIDelegate onInAppMessageDismissed:self.inAppMessage];\n  }\n  [self hideInAppMessageViewWithAnimation:self.inAppMessage.animateOut];\n}\n\n#pragma mark - Keyboard\n\n- (void)keyboardWasShown {\n  if (![self.inAppMessageViewController isKindOfClass:[ABKInAppMessageHTMLBaseViewController class]]\n      && !self.inAppMessageWindow.hidden) {\n    // If the keyboard is shown while an in-app message is on the screen, we hide the in-app message\n    [self hideInAppMessageWindow];\n  }\n}\n\n#pragma mark - Windows\n\n- (void)resetKeyWindowRetryCount {\n  self.keyWindowRetryCount = 0;\n}\n\n/*!\n * React to windows changes in the view hierarchy. This is needed to ensure that the in-app message\n * stays visible in cases where the host app decides to display a window (possibly the app's main\n * window) over our in-app message.\n *\n * This method tries to make the in-app message window visible up to 10 times — debounced with a\n * 0.1s timeout. The in-app message is dismissed when reaching that value to prevent infinite loops\n * when another window in the view hierarchy has a similar behavior.\n *\n * e.g. Some clients have extra logic when bootstrapping their app that can lead to the app's main\n * window being made key and visible after a delay at startup. In the case of test in-app messages\n * delivered via push notifications, our in-app messages would be displayed before the host app\n * window being made key and visible. Soon after, the host app window takes over and hides our\n * in-app message.\n */\n- (void)handleWindowDidBecomeKeyNotification:(NSNotification *)notification {\n  UIWindow *window = notification.object;\n\n  // Cancel debounced reset\n  [NSObject cancelPreviousPerformRequestsWithTarget:self\n                                           selector:@selector(resetKeyWindowRetryCount)\n                                             object:nil];\n\n  // Skip if this in-app message is already removing the window\n  if (self.isRemovingWindow) {\n    return;\n  }\n  // Skip for any in-app message window\n  if ([window isKindOfClass:[ABKInAppMessageWindow class]]) {\n    return;\n  }\n  // Skip if the new key window is meant to be displayed above the in-app message (alert, sheet,\n  // host app toast)\n  if (window.windowLevel > UIWindowLevelNormal) {\n    return;\n  }\n\n  // Dismiss in-app message if we can't guarantee its visibility.\n  self.keyWindowRetryCount += 1;\n  if (self.keyWindowRetryCount >= KeyWindowRetryMaxCount) {\n    NSLog(@\"Error: Failed to make in-app message window key and visible %ld times, dismissing the in-app message.\", (long)self.keyWindowRetryCount);\n    [self hideInAppMessageViewWithAnimation:YES];\n    return;\n  }\n  \n  // Force in-app message window to be displayed\n  [self.inAppMessageWindow makeKeyAndVisible];\n\n  // Debounced reset, use NSRunLoopCommonModes as NSDefaultRunLoopMode does not update during\n  // scroll events.\n  [self performSelector:@selector(resetKeyWindowRetryCount)\n             withObject:nil\n             afterDelay:0.1\n                inModes:@[NSRunLoopCommonModes]];\n}\n\n#pragma mark - Display and Hide In-app Message\n\n- (void)displayInAppMessageViewWithAnimation:(BOOL)withAnimation {\n  dispatch_async(dispatch_get_main_queue(), ^{\n    // Set the root view controller after the inAppMessagewindow becomes the key window so it gets the\n    // correct window size during and after rotation.\n    self.keyWindowRetryCount = 0;\n    [self.inAppMessageWindow makeKeyWindow];\n    self.inAppMessageWindow.rootViewController = self;\n    self.inAppMessageWindow.hidden = NO;\n\n    if (self.inAppMessage.inAppMessageDismissType == ABKInAppMessageDismissAutomatically) {\n      self.slideAwayTimer = [NSTimer scheduledTimerWithTimeInterval:self.inAppMessage.duration + InAppMessageAnimationDuration\n                                                             target:self\n                                                           selector:@selector(inAppMessageTimerFired:)\n                                                           userInfo:nil repeats:NO];\n    }\n    [self.view layoutIfNeeded];\n    [self.inAppMessageViewController beforeMoveInAppMessageViewOnScreen];\n    if (withAnimation) {\n      [UIView animateWithDuration:InAppMessageAnimationDuration\n                            delay:0\n                          options:UIViewAnimationOptionBeginFromCurrentState\n                       animations:^{\n                         [self.inAppMessageViewController moveInAppMessageViewOnScreen];\n                       }\n                       completion:^(BOOL finished){\n                         [self.inAppMessage logInAppMessageImpression];\n                       }];\n    } else {\n      [self.inAppMessageViewController moveInAppMessageViewOnScreen];\n      [self.inAppMessage logInAppMessageImpression];\n    }\n  });\n}\n\n- (void)hideInAppMessageViewWithAnimation:(BOOL)withAnimation {\n  [self hideInAppMessageViewWithAnimation:withAnimation completionHandler:nil];\n}\n\n- (void)hideInAppMessageViewWithAnimation:(BOOL)withAnimation\n                        completionHandler:(void (^ __nullable)(void))completionHandler {\n  [self.slideAwayTimer invalidate];\n  self.slideAwayTimer = nil;\n  [self.view layoutIfNeeded];\n  [self.inAppMessageViewController beforeMoveInAppMessageViewOffScreen];\n  if (withAnimation) {\n    [UIView animateWithDuration:InAppMessageAnimationDuration\n                          delay:0\n                        options:UIViewAnimationOptionBeginFromCurrentState\n                     animations:^{\n                       [self.inAppMessageViewController moveInAppMessageViewOffScreen];\n                     }\n                     completion:^(BOOL finished){\n                       if (completionHandler) {\n                         completionHandler();\n                       }\n                       [self hideInAppMessageWindow];\n                     }];\n  } else {\n    [self.inAppMessageViewController moveInAppMessageViewOffScreen];\n    [self hideInAppMessageWindow];\n  }\n}\n\n- (void)hideInAppMessageWindow {\n  if (self.isRemovingWindow) {\n    return;\n  }\n  self.isRemovingWindow = YES;\n\n  [self.slideAwayTimer invalidate];\n  self.slideAwayTimer = nil;\n\n  self.inAppMessageWindow.rootViewController = nil;\n  if (@available(iOS 13.0, *)) {\n    self.inAppMessageWindow.windowScene = nil;\n  }\n  self.inAppMessageWindow = nil;\n  [[NSNotificationCenter defaultCenter] postNotificationName:ABKNotificationInAppMessageWindowDismissed\n                                                      object:self\n                                                    userInfo:nil];\n  if (self.clickedButtonId >= 0) {\n    [(ABKInAppMessageImmersive *)self.inAppMessage logInAppMessageClickedWithButtonID:self.clickedButtonId];\n  } else if (self.inAppMessageIsTapped) {\n    [self.inAppMessage logInAppMessageClicked];\n  } else if ([ABKUIUtils objectIsValidAndNotEmpty:self.clickedHTMLButtonId]) {\n    [(ABKInAppMessageHTMLBase *)self.inAppMessage logInAppMessageHTMLClickWithButtonID:self.clickedHTMLButtonId];\n  }\n}\n\n#pragma mark - In-app Message and Button Clicks\n\n- (BOOL)delegateHandlesInAppMessageClick {\n  if ([self.inAppMessageUIDelegate respondsToSelector:@selector(onInAppMessageClicked:)]) {\n    if ([self.inAppMessageUIDelegate onInAppMessageClicked:self.inAppMessage]) {\n      NSLog(@\"No in-app message click action will be performed by Braze as inAppMessageDelegate %@ returned YES in onInAppMessageClicked:\", self.inAppMessageUIDelegate);\n      return YES;\n    }\n  }\n  return NO;\n}\n\n- (void)inAppMessageClickedWithActionType:(ABKInAppMessageClickActionType)actionType\n                                      URL:(NSURL *)url\n                         openURLInWebView:(BOOL)openUrlInWebView {\n  [self invalidateSlideAwayTimer];\n  switch (actionType) {\n    case ABKInAppMessageNoneClickAction:\n      break;\n    case ABKInAppMessageDisplayNewsFeed:\n      [self displayModalFeedView];\n      break;\n    case ABKInAppMessageRedirectToURI:\n      if ([ABKUIUtils objectIsValidAndNotEmpty:url]) {\n        [self handleInAppMessageURL:url inWebView:openUrlInWebView];\n      }\n      break;\n  }\n  [self hideInAppMessageViewWithAnimation:self.inAppMessage.animateOut];\n}\n\n#pragma mark - Display News Feed\n\n- (void)displayModalFeedView {\n  Class ModalFeedViewControllerClass = [ABKUIUtils getModalFeedViewControllerClass];\n  if (ModalFeedViewControllerClass != nil) {\n    UIViewController *topmostViewController =\n      [ABKUIURLUtils topmostViewControllerWithRootViewController:ABKUIUtils.activeApplicationViewController];\n    [topmostViewController presentViewController:[[ModalFeedViewControllerClass alloc] init]\n                                                 animated:YES\n                                               completion:nil];\n  }\n}\n\n#pragma mark - URL Handling\n\n- (void)handleInAppMessageURL:(NSURL *)url inWebView:(BOOL)openUrlInWebView {\n  // URL Delegate\n  if ([ABKUIURLUtils URLDelegate:Appboy.sharedInstance.appboyUrlDelegate\n                      handlesURL:url\n                     fromChannel:ABKInAppMessageChannel\n                      withExtras:self.inAppMessage.extras]) {\n    return;\n  }\n\n  // WebView\n  if ([ABKUIURLUtils URL:url shouldOpenInWebView:openUrlInWebView]) {\n    UIViewController *topmostViewController =\n    [ABKUIURLUtils topmostViewControllerWithRootViewController:ABKUIUtils.activeApplicationViewController];\n    [ABKUIURLUtils displayModalWebViewWithURL:url topmostViewController:topmostViewController];\n    return;\n  }\n\n  // System\n  [ABKUIURLUtils openURLWithSystem:url];\n}\n\n#pragma mark - Helpers\n\n/*!\n * Creates and setups the ABKInAppMessageWindow used to display the in-app message\n *\n * @discussion First tries to create the window with the current UIWindowScene if available, then fallbacks\n *             to create the window with a frame.\n */\n- (ABKInAppMessageWindow *)createInAppMessageWindow {\n  ABKInAppMessageWindow *window;\n  \n  if (@available(iOS 13.0, *)) {\n    UIWindowScene *windowScene = ABKUIUtils.activeWindowScene;\n    if (windowScene) {\n      window = [[ABKInAppMessageWindow alloc] initWithWindowScene:windowScene];\n    }\n  }\n  \n  if (!window) {\n    window = [[ABKInAppMessageWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];\n  }\n  \n  window.backgroundColor = UIColor.clearColor;\n  window.autoresizingMask = UIViewAutoresizingFlexibleWidth |\n                            UIViewAutoresizingFlexibleHeight;\n  \n  return window;\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/AppboyNewsFeed.h",
    "content": "// Braze News Feed View Controllers\n#import \"ABKFeedWebViewController.h\"\n#import \"ABKNewsFeedTableViewController.h\"\n#import \"ABKNewsFeedViewController.h\"\n\n// Braze News Feed Cells\n#import \"ABKNFBannerCardCell.h\"\n#import \"ABKNFBaseCardCell.h\"\n#import \"ABKNFCaptionedMessageCardCell.h\"\n#import \"ABKNFClassicCardCell.h\"\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/Base.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Done\";\n\"Appboy.feed.no-card.text\" = \"We have no updates.\\nPlease check again later.\";\n\"Appboy.feed.no-connection.title\" = \"Connection Error\";\n\"Appboy.feed.no-connection.message\" = \"Cannot establish network connection.\\nPlease try again later.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/ar.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"تم\";\n\"Appboy.feed.no-card.text\" = \"ليس لدينا أي تحديث. يرجى التحقق مرة أخرى لاحقاً.\";\n\"Appboy.feed.no-connection.title\" = \"خلل في الاتصال\";\n\"Appboy.feed.no-connection.message\" = \"لا يمكن إجراء الاتصال بالشبكة. يرجى تكرار المحاولة لاحقا. \";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/cs.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Hotovo\";\n\"Appboy.feed.no-card.text\" = \"Nemáme žádné aktualizace.\\nZkontrolujte prosím znovu později.\";\n\"Appboy.feed.no-connection.title\" = \"Chyba připojení\";\n\"Appboy.feed.no-connection.message\" = \"Nelze navázat síťové připojení.\\nProsím zkuste to znovu později.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/da.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Afsluttet\";\n\"Appboy.feed.no-card.text\" = \"Vi har ingen updates. Prøv venligst senere\";\n\"Appboy.feed.no-connection.title\" = \"Netværksfejl\";\n\"Appboy.feed.no-connection.message\" = \"Kan ikke etablere netværksforbindelse. Prøv venligst senere.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/de.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Fertig\";\n\"Appboy.feed.no-card.text\" = \"Derzeit sind keine Updates verfügbar.\\nBitte später noch einmal versuchen.\";\n\"Appboy.feed.no-connection.title\" = \"Verbindungsfehler\";\n\"Appboy.feed.no-connection.message\" = \"Netzwerkverbindung kann nicht aufgebaut werden.\\nBitte später noch einmal versuchen.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/en.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Done\";\n\"Appboy.feed.no-card.text\" = \"We have no updates.\\nPlease check again later.\";\n\"Appboy.feed.no-connection.title\" = \"Connection Error\";\n\"Appboy.feed.no-connection.message\" = \"Cannot establish network connection.\\nPlease try again later.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/es-419.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Listo\";\n\"Appboy.feed.no-card.text\" = \"No tenemos ninguna actualización. Vuelva a verificar más tarde.\";\n\"Appboy.feed.no-connection.title\" = \"Error de conexión\";\n\"Appboy.feed.no-connection.message\" = \"No se puede establecer conexión con la red. Por favor, vuelva a intentarlo más tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/es-MX.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Listo\";\n\"Appboy.feed.no-card.text\" = \"No tenemos ninguna actualización. Vuelva a verificar más tarde.\";\n\"Appboy.feed.no-connection.title\" = \"Error de conexión\";\n\"Appboy.feed.no-connection.message\" = \"No se puede establecer conexión con la red. Por favor, vuelva a intentarlo más tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/es.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Finalizado\";\n\"Appboy.feed.no-card.text\" = \"No tenemos actualizaciones. Por favor compruébelo más tarde.\";\n\"Appboy.feed.no-connection.title\" = \"Error de conexión\";\n\"Appboy.feed.no-connection.message\" = \"No se puede establecer conexión de red. Por favor inténtelo más tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/et.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Valmis\";\n\"Appboy.feed.no-card.text\" = \"Uuendusi pole praegu saadaval. Proovige hiljem uuesti.\";\n\"Appboy.feed.no-connection.title\" = \"Üheduse viga\";\n\"Appboy.feed.no-connection.message\" = \"Võrguühenduse loomine ebaõnnestus. Proovige hiljem uuesti.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/fi.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Valmis\";\n\"Appboy.feed.no-card.text\" = \"Päivityksiä ei ole saatavilla. Tarkista myöhemmin uudelleen.\";\n\"Appboy.feed.no-connection.title\" = \"Yhteysvirhe\";\n\"Appboy.feed.no-connection.message\" = \"Verkkoyhteyttä ei voida luoda. Yritä myöhemmin uudelleen.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/fil.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Gawa na\";\n\"Appboy.feed.no-card.text\" = \"Wala kaming mga update. Mangyaring suriin muli sa ibang pagkakataon.\";\n\"Appboy.feed.no-connection.title\" = \"May Error sa Koneksyon\";\n\"Appboy.feed.no-connection.message\" = \"Hindi makapagtatag ng koneksyon sa network. Mangyaring subukan muli mamaya.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/fr.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Fini\";\n\"Appboy.feed.no-card.text\" = \"Aucune mise à jour disponible. Veuillez vérifier ultérieurement.\";\n\"Appboy.feed.no-connection.title\" = \"Erreur de connexion.\";\n\"Appboy.feed.no-connection.message\" = \"Impossible d'établir la connexion réseau. Veuillez réessayer ultérieurement.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/he.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"סיום\";\n\"Appboy.feed.no-card.text\" = \".אין לנו עדכונים. בבקשה בדוק שוב בקרוב\";\n\"Appboy.feed.no-connection.title\" = \"שגיאת חיבור רשת\";\n\"Appboy.feed.no-connection.message\" = \".לא ניתן לקבוע חיבור רשת. בבקשה נסה שוב בקרוב\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/hi.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"कर दिया गया\";\n\"Appboy.feed.no-card.text\" = \"हमारे पास कोई अपडेट नहीं हैं। कृपया बाद में फिर से जाँच करें.।\";\n\"Appboy.feed.no-connection.title\" = \"कनेक्शन की त्रुटि\";\n\"Appboy.feed.no-connection.message\" = \"नेटवर्क कनेक्शन स्थापित नहीं हो रहा है। कृपया बाद में दोबारा प्रयास करें।.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/id.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Selesai\";\n\"Appboy.feed.no-card.text\" = \"Kami tidak memiliki pembaruan. Coba lagi nanti.\";\n\"Appboy.feed.no-connection.title\" = \"Kesalahan Koneksi\";\n\"Appboy.feed.no-connection.message\" = \"Tidak bisa melakukan koneksi jaringan. Coba lagi nanti.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/it.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Fatto\";\n\"Appboy.feed.no-card.text\" = \"Non ci sono aggiornamenti. Ricontrollare più tardi.\";\n\"Appboy.feed.no-connection.title\" = \"Errore di connessione\";\n\"Appboy.feed.no-connection.message\" = \"Impossibile stabilire una connessione di rete. Riprovare più tardi.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/ja.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"完了\";\n\"Appboy.feed.no-card.text\" = \"アップデートはありません。後でもう一度確認してください。\";\n\"Appboy.feed.no-connection.title\" = \"接続エラー\";\n\"Appboy.feed.no-connection.message\" = \"ネットワークに接続できません。後でもう一度試してください。\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/km.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"បានសម្រេច\";\n\"Appboy.feed.no-card.text\" = \"យើងមិនមានការធ្វើបច្ចុប្បន្នភាពទេ។ សូមពិនិត្យមើលម្តងទៀតនៅពេលក្រោយ.\";\n\"Appboy.feed.no-connection.title\" = \"កំហុសឆ្គងក្នុងការតភ្ជាប់\";\n\"Appboy.feed.no-connection.message\" = \"មិនអាចបង្កើតបណ្តាញតភ្ជាប់បានទេ។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/ko.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"완료 \";\n\"Appboy.feed.no-card.text\" = \"업데이트가 없습니다. 다음에 다시 확인해 주십시오.\";\n\"Appboy.feed.no-connection.title\" = \"연결 오류\";\n\"Appboy.feed.no-connection.message\" = \"네트워크 연결을 할 수 없습니다. 나중에 다시 시도해 주십시오.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/lo.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"ສຳ​ເລັດ\";\n\"Appboy.feed.no-card.text\" = \"ພວກ​ເຮົາ​ບໍ່​ມີ​ການ​ອັບ​ເດດ. ກະ​ລຸ​ນາ​ລອງ​ໃໝ່​ພາຍ​ຫຼັງ.\";\n\"Appboy.feed.no-connection.title\" = \"ການ​ເຊື່ອມ​ຕໍ່​ຜິດ​ພາດ\";\n\"Appboy.feed.no-connection.message\" = \"ບໍ່​ສາ​ມາດ​ຕັ້ງ​ການ​ເຊື່ອມ​ຕໍ່​ເຄືອ​ຂ່າຍ​ໄດ້. ກະ​ລຸ​ນາ​ລອງ​ໃໝ່​ພາຍ​ຫຼັງ.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/ms.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Selesai\";\n\"Appboy.feed.no-card.text\" = \"Tiada kemas kini. Sila periksa kemudian.\";\n\"Appboy.feed.no-connection.title\" = \"Ralat Sambungan\";\n\"Appboy.feed.no-connection.message\" = \"Tidak boleh membuat sambungan rangkaian. Sila cuba kemudian.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/my.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"ျပီးျပီ\";\n\"Appboy.feed.no-card.text\" = \"ကၽႊႏု္ပ္ တို႕တြင္ အသစ္တင္ျပရန္မရွိပါ။ ေက်းဇူးျပဳ၍ ေနာင္တြင္ ထပ္စစ္ပါ။ .\";\n\"Appboy.feed.no-connection.title\" = \"ဆက္သြယ္ေရး အမွား\";\n\"Appboy.feed.no-connection.message\" = \"ကြန္ယက္ဆက္သြယ္ျခင္း မျပဳလုပ္ႏိုင္ပါ။ ေက်းဇူးျပဳ၍ ထပ္မံၾကိဳးစားၾကည္႕ပါ။.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/nb.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Ferdig\";\n\"Appboy.feed.no-card.text\" = \"Vi har ingen oppdateringer. Vennligst sjekk igjen senere.\";\n\"Appboy.feed.no-connection.title\" = \"Tilkoblingsfeil\";\n\"Appboy.feed.no-connection.message\" = \"Kan ikke etablere nettverkstilkobling. Vennligst prøv igjen senere.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/nl.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Gereed\";\n\"Appboy.feed.no-card.text\" = \"Er zijn geen updates. Probeer het later opnieuw.\";\n\"Appboy.feed.no-connection.title\" = \"Verbindingsfout\";\n\"Appboy.feed.no-connection.message\" = \"Kan geen netwerkverbinding maken. Probeer het later opnieuw.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/pl.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Gotowe\";\n\"Appboy.feed.no-card.text\" = \"Brak aktualizacji. Proszę sprawdzić ponownie później.\";\n\"Appboy.feed.no-connection.title\" = \"Błąd połączenia\";\n\"Appboy.feed.no-connection.message\" = \"Nie można ustanowić połączenia z siecią. Proszę spróbować ponownie później.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/pt-PT.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Concluído\";\n\"Appboy.feed.no-card.text\" = \"Não temos atualizações. Por favor, verifique mais tarde.\";\n\"Appboy.feed.no-connection.title\" = \"Erro de Ligação\";\n\"Appboy.feed.no-connection.message\" = \"Não é possível estabelecer a ligação à rede. Por favor, tente mais tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/pt.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Concluído\";\n\"Appboy.feed.no-card.text\" = \"Não temos nenhuma atualização.\\nVerifique novamente mais tarde.\";\n\"Appboy.feed.no-connection.title\" = \"Erro de conexão\";\n\"Appboy.feed.no-connection.message\" = \"Não foi possível estabelecer uma\\nconexão. Tente novamente mais tarde.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/ru.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Готово\";\n\"Appboy.feed.no-card.text\" = \"Обновления недоступны. Пожалуйста, проверьте снова позже.\";\n\"Appboy.feed.no-connection.title\" = \"Ошибка подключения\";\n\"Appboy.feed.no-connection.message\" = \"Невозможно установить сетевое подключение. Пожалуйста, повторите попытку позже.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/sv.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Klar\";\n\"Appboy.feed.no-card.text\" = \"Det finns inga uppdateringar. Försök igen senare.\";\n\"Appboy.feed.no-connection.title\" = \"Anslutningsfel\";\n\"Appboy.feed.no-connection.message\" = \"Det gick inte att skapa en nätverksanslutning. Försök igen senare.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/th.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"เสร็จสิ้น\";\n\"Appboy.feed.no-card.text\" = \"เราไม่มีการอัพเดต กรุณาตรวจสอบภายหลัง.\";\n\"Appboy.feed.no-connection.title\" = \"ผิดพลาดการเชื่อมต่อ\";\n\"Appboy.feed.no-connection.message\" = \"ไม่สามารถสร้างการเชื่อมต่อเครือข่าย กรุณาลองใหม่ภายหลัง.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/uk.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Готово\";\n\"Appboy.feed.no-card.text\" = \"Оновлення недоступні.\\nБудь ласка, перевірте знову пізніше.\";\n\"Appboy.feed.no-connection.title\" = \"Помилка підключення\";\n\"Appboy.feed.no-connection.message\" = \"неможливо встановити з'єднання з мережею.\\nБудь ласка, спробуйте ще раз пізніше.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/vi.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"Hoàn tất\";\n\"Appboy.feed.no-card.text\" = \"Chúng tôi không có cập nhật nào. Vui lòng kiểm tra lại sau.\";\n\"Appboy.feed.no-connection.title\" = \"Lỗi Kết Nối\";\n\"Appboy.feed.no-connection.message\" = \"Không thể thiết lập kết nối mạng. Vui lòng thử lại sau.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/zh-HK.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"完成\";\n\"Appboy.feed.no-card.text\" = \"暫時沒有更新.\\n請稍候再試.\";\n\"Appboy.feed.no-connection.title\" = \"連線錯誤\";\n\"Appboy.feed.no-connection.message\" = \"無法建立網路連線.\\n請稍候再試.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/zh-Hans.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"完成\";\n\"Appboy.feed.no-card.text\" = \"暂时没有更新.\\n请稍后再试.\";\n\"Appboy.feed.no-connection.title\" = \"连接错误\";\n\"Appboy.feed.no-connection.message\" = \"无法建立网络连接.\\n请稍候再试.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/zh-Hant.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"完成\";\n\"Appboy.feed.no-card.text\" = \"暫時沒有更新.\\n請稍候再試.\";\n\"Appboy.feed.no-connection.title\" = \"連線錯誤\";\n\"Appboy.feed.no-connection.message\" = \"無法建立網路連線.\\n請稍候再試.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/zh-TW.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"完成\";\n\"Appboy.feed.no-card.text\" = \"暫時沒有更新.\\n請稍候再試.\";\n\"Appboy.feed.no-connection.title\" = \"連線錯誤\";\n\"Appboy.feed.no-connection.message\" = \"無法建立網路連線.\\n請稍候再試.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/Resources/zh.lproj/AppboyFeedLocalizable.strings",
    "content": "/* News Feed Context Labels */\n\"Appboy.feed.done-button.title\" = \"完成\";\n\"Appboy.feed.no-card.text\" = \"暂时没有更新.\\n请稍后再试.\";\n\"Appboy.feed.no-connection.title\" = \"连接错误\";\n\"Appboy.feed.no-connection.message\" = \"无法建立网络连接.\\n请稍候再试.\";\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/ABKFeedWebViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <WebKit/WebKit.h>\n\n@interface ABKFeedWebViewController : UIViewController <WKNavigationDelegate>\n\n/*!\n * The URL the modal web view controller should open. Please note that this is the initial URL and\n * won't be updated if the initial URL re-directs to another URL.\n */\n@property NSURL *url;\n\n/*!\n * The WKWebView which displays the web page.\n */\n@property (nonatomic) IBOutlet WKWebView *webView;\n\n/*!\n * The UIProgressView which shows the web view loading process. It will be on top of the web view and\n * will disappear as soon as the page is loaded.\n */\n@property (nonatomic) IBOutlet UIProgressView *progressBar;\n\n/*!\n * The property tells the web view controller to add a Done button or not. The default value is NO.\n * Please set this property before displaying the web view controller.\n */\n@property (nonatomic) BOOL showDoneButton;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/ABKFeedWebViewController.m",
    "content": "#import \"ABKFeedWebViewController.h\"\n#import \"ABKNoConnectionLocalization.h\"\n#import \"ABKUIUtils.h\"\n\nstatic NSString *const EstimatedProgressKeyPath = @\"estimatedProgress\";\nstatic NSString *const LocalizedNoConnectionKey = @\"Appboy.no-connection.message\";\n\n@implementation ABKFeedWebViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n\n  self.webView.navigationDelegate = self;\n  self.webView = [self getWebView];\n  self.view = self.webView;\n\n#if !TARGET_OS_TV\n  if (@available(iOS 15.0, *)) {\n    self.view.backgroundColor = UIColor.systemGroupedBackgroundColor;\n  }\n#endif\n\n  [self setupProgressBar];\n  \n  if (self.showDoneButton) {\n    UIBarButtonItem *closeBarButton = [self getDoneBarButtonItem];\n    [self.navigationItem setRightBarButtonItem:closeBarButton];\n  }\n  \n  [self.webView addObserver:self\n                 forKeyPath:EstimatedProgressKeyPath\n                    options:NSKeyValueObservingOptionNew\n                    context:nil];\n  \n  [self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath\n                      ofObject:(id)object\n                        change:(NSDictionary<NSKeyValueChangeKey,id> *)change\n                       context:(void *)context {\n  if ([ABKUIUtils string:EstimatedProgressKeyPath isEqualToString:keyPath]) {\n    if (self.webView.estimatedProgress == 1.0) {\n      [UIView animateWithDuration:1 animations:^{\n        self.progressBar.alpha = 0.0;\n      }];\n    } else if (self.webView.estimatedProgress < 1.0) {\n      self.progressBar.alpha = 1.0;\n      [self.progressBar setProgress:self.webView.estimatedProgress animated:YES];\n    }\n  }\n}\n\n- (void)dealloc {\n  [self.webView removeObserver:self forKeyPath:EstimatedProgressKeyPath];\n}\n\n#pragma mark - Customization Methods\n\n/*!\n * @discussion Returns a WKWebView object, whose navigationDelegate is this ABKFeedWebViewController instance.\n *\n * If you want to do any customization to the WKWebView, please override this method in an ABKFeedWebViewController\n * category and return the customized WKWebView. All instances of ABKFeedWebViewController will then\n * call the category's `getWebView` implementation instead of this method.\n *\n */\n- (WKWebView *)getWebView {\n  WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero];\n  webView.navigationDelegate = self;\n  return webView;\n}\n\n/*!\n *\n * @discussion Creates a UIProgressView and puts it on top of the web view.\n *\n * If you want to do any customization to the progress bar, please override this method in an ABKFeedWebViewController\n * category and set up the progress bar. All instances of ABKFeedWebViewController will then\n * call the category's `setupProgressBar:` implementation instead of this method.\n *\n */\n- (void)setupProgressBar{\n  UIProgressView *progressBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];\n  progressBar.alpha = 0;\n  self.progressBar = progressBar;\n  \n  [self.view addSubview:self.progressBar];\n  self.progressBar.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.progressBar\n                                                        attribute:NSLayoutAttributeTop\n                                                        relatedBy:NSLayoutRelationEqual\n                                                           toItem:self.topLayoutGuide\n                                                        attribute:NSLayoutAttributeBottom\n                                                       multiplier:1.0\n                                                         constant:0.0]];\n  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|[progressBar]|\"\n                                                                    options:NSLayoutFormatDirectionLeadingToTrailing\n                                                                    metrics:nil\n                                                                      views:@{@\"progressBar\" : self.progressBar}]];\n}\n\n/*!\n * @discussion Returns the Done UIBarButtonItem, which allows the user to dismiss the modal web view.\n *\n * If you want to do any customization to the Done button, please override this method in an ABKFeedWebViewController\n * category and return the customized UIBarButtonItem. All instances of ABKFeedWebViewController will then\n * call the category's `getDoneBarButtonItem` implementation instead of this method.\n *\n */\n- (UIBarButtonItem *)getDoneBarButtonItem {\n  return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone\n                                                       target:self\n                                                       action:@selector(closeButtonPressed:)];\n}\n\n- (void)closeButtonPressed:(id)sender {\n  [self dismissViewControllerAnimated:YES completion:nil];\n}\n\n#pragma mark - WKNavigationDelegate methods\n\n- (void)webView:(WKWebView *)webView\n    decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction\n    decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {\n  NSString *urlString = [[navigationAction.request.mainDocumentURL absoluteString] lowercaseString];\n  NSArray *stringComponents = [urlString componentsSeparatedByString:@\":\"];\n  if ([stringComponents[1] hasPrefix:@\"//itunes.apple.com\"]  ||\n      (![stringComponents[0] isEqual:@\"http\"] &&\n       ![stringComponents[0] isEqual:@\"https\"])) {\n        // Dismiss the modal web view and let the system handle the deep links\n    if ([[UIApplication sharedApplication] openURL:navigationAction.request.URL]) {\n      decisionHandler(WKNavigationActionPolicyCancel);\n      [self.navigationController popViewControllerAnimated:NO];\n      return;\n    }\n  }\n  decisionHandler(WKNavigationActionPolicyAllow);\n}\n\n- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {\n  self.progressBar.alpha = 0.0;\n}\n\n- (void)webView:(WKWebView *)webView\n    didFailProvisionalNavigation:(WKNavigation *)navigation\n      withError:(NSError *)error {\n  self.progressBar.alpha = 0.0;\n  \n  // Display localized \"No Connection\" message\n  UILabel *label = [[UILabel alloc] init];\n  label.textAlignment = NSTextAlignmentCenter;\n  label.numberOfLines = 0;\n  NSString *localizedNoConectionMessage = NSLocalizedString(@\"Appboy.no-connection.message\",\n                                                            @\"No connection error message for URL loading failure\");\n  if (localizedNoConectionMessage.length == 0 || [ABKUIUtils string:LocalizedNoConnectionKey isEqualToString:localizedNoConectionMessage]) {\n    localizedNoConectionMessage = [ABKNoConnectionLocalization getNoConnectionLocalizedString];\n  }\n  label.text = localizedNoConectionMessage;\n  [self.webView addSubview:label];\n  label.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.webView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|-10-[noConnectionLabel]-10-|\"\n                                                                       options:NSLayoutFormatDirectionLeadingToTrailing\n                                                                       metrics:nil\n                                                                         views:@{@\"noConnectionLabel\" : label}]];\n  [self.webView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"V:|[noConnectionLabel]|\"\n                                                                       options:NSLayoutFormatAlignAllCenterY\n                                                                       metrics:nil\n                                                                         views:@{@\"noConnectionLabel\" : label}]];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/ABKNewsFeedTableViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"AppboyKit.h\"\n#import \"ABKNFBaseCardCell.h\"\n\n@interface ABKNewsFeedTableViewController : UITableViewController <ABKBaseNewsFeedCellDelegate>\n\n/*!\n * @discussion Initialization that is done for all ABKNewsFeedTableViewControllers with or without storyboard/XIB.\n */\n- (void)setUp;\n\n/*!\n * @discussion Initialization that is done for ABKNewsFeedTableViewControllers with programmatic layout only.\n */\n- (void)setUpUI;\n\n/*!\n * @discussion Registers Cell classes with the tableview, override this method when implementing custom\n * cell classes to register the new subclasses.\n */\n- (void)registerTableViewCellClasses;\n\n/*!\n * @param tableView The table view which need the cell to diplay the card UI.\n * @param indexPath The index path of the card UI in the table view.\n * @param card The card model for the cell.\n *\n * @discussion This method dequeues and returns the corresponding card cell based on card type from\n * the given table view.\n */\n- (ABKNFBaseCardCell *)dequeueCellFromTableView:(UITableView *)tableView\n                                   forIndexPath:(NSIndexPath *)indexPath\n                                        forCard:(ABKCard *)card;\n\n/*!\n * UI elements which are used in the News Feed table view. You can find them in the News Feed Card Storyboard.\n */\n@property (nonatomic) IBOutlet UIView *emptyFeedView;\n@property (nonatomic) IBOutlet UILabel *emptyFeedLabel;\n\n/*!\n *  This property allows you to enable or disable the unread indicator on the news feed. The default\n *  value is NO, which will enable the displaying of the unread indicator on cards.\n */\n@property (nonatomic) BOOL disableUnreadIndicator;\n\n/*!\n * This property indicates which categories of cards the news feed is displaying.\n * Setting this property will automatically update the news feed page and only display cards in the given categories.\n * This method won't request refresh of cards from the Braze server, but only look into cards that are cached in the SDK.\n */\n@property (nonatomic) ABKCardCategory categories;\n\n/*!\n * This property shows the cards displayed in the News Feed. Please note that the News Feed view\n * controller listens to the ABKFeedUpdatedNotification notification from the Braze SDK, which will\n * update the value of this property.\n */\n@property (nonatomic) NSArray<ABKCard *> *cards;\n\n/*!\n * This set stores the card IDs for which the impressions have been logged.\n */\n@property (nonatomic) NSMutableSet<NSString *> *cardImpressions;\n\n/*!\n * This property defines the timeout for stored News Feed cards in the Braze SDK. If the cards in the\n * Braze SDK are older than this value, the News Feed view controller will request a News Feed update.\n *\n * The default value is 60 seconds.\n */\n@property NSTimeInterval cacheTimeout;\n\n@property id constraintWarningValue;\n\n/*!\n * @discussion This method returns an instance of ABKNewsFeedTableViewController. You can call it\n * to get a News Feed view controller for your navigation controller.\n * @warning To use a custom News Feed view controller, instantiate your own subclass instead\n * (e.g. via alloc / init).\n */\n+ (instancetype)getNavigationFeedViewController;\n\n /*!\n  * @discussion Given a content card return the type identifier for the above\n  * registration.\n  */\n - (NSString *)findCellIdentifierWithCard:(ABKCard *)card;\n\n/*!\n * @discussion This method returns the localized string from AppboyFeedLocalizable.strings file.\n * You can easily override the localized string by adding the keys and the translations to your own\n * Localizable.strings file.\n *\n * To do custom handling with the Appboy localized string, you can override this method in a\n * subclass.\n */\n- (NSString *)localizedAppboyFeedString:(NSString *)key;\n\n/*!\n * @discussion This method handles the user's click on the card.\n *\n * To do custom handling with the card clicks, you can override this method in a\n * subclass. You also need to call [card logCardClicked] manually inside of your new method\n * to send the click event to the Braze server.\n */\n- (void)handleCardClick:(ABKCard *)card;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/ABKNewsFeedTableViewController.m",
    "content": "#import \"ABKNewsFeedTableViewController.h\"\n#import \"ABKNFBannerCardCell.h\"\n#import \"ABKNFCaptionedMessageCardCell.h\"\n#import \"ABKNFClassicCardCell.h\"\n#import \"ABKUIUtils.h\"\n#import \"ABKFeedWebViewController.h\"\n#import \"ABKUIURLUtils.h\"\n\n@implementation ABKNewsFeedTableViewController\n\n#pragma mark - Initialization\n\n- (instancetype)init {\n  self = [super init];\n  if (self) {\n    [self setUp];\n    [self setUpUI];\n    [self registerTableViewCellClasses];\n  }\n  return self;\n}\n\n- (instancetype)initWithCoder:(NSCoder *)aDecoder {\n  self = [super initWithCoder:aDecoder];\n  if (self) {\n    [self setUp];\n  }\n  return self;\n}\n\n#pragma mark - SetUp\n\n- (void)setUp {\n  _categories = ABKCardCategoryAll;\n  _cacheTimeout = 60.0;\n  _cardImpressions = [NSMutableSet set];\n\n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(feedUpdated:)\n                                               name:ABKFeedUpdatedNotification\n                                             object:nil];\n}\n\n- (void)setUpUI {\n#if !TARGET_OS_TV\n   if (@available(iOS 15.0, *)) {\n     self.view.backgroundColor = UIColor.systemGroupedBackgroundColor;\n   }\n#endif\n  self.emptyFeedView = [[UIView alloc] init];\n  self.emptyFeedView.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.view addSubview:self.emptyFeedView];\n  [self.emptyFeedView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = YES;\n  [self.emptyFeedView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES;\n\n  self.emptyFeedLabel = [[UILabel alloc] init];\n  self.emptyFeedLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  self.emptyFeedLabel.text = [self localizedAppboyFeedString:@\"Appboy.feed.no-card.text\"];\n  [self.emptyFeedView addSubview:self.emptyFeedLabel];\n\n  [self.emptyFeedLabel.topAnchor constraintEqualToAnchor:self.emptyFeedView.topAnchor].active = YES;\n  [self.emptyFeedLabel.bottomAnchor constraintEqualToAnchor:self.emptyFeedView.bottomAnchor].active = YES;\n  [self.emptyFeedLabel.trailingAnchor constraintEqualToAnchor:self.emptyFeedView.trailingAnchor].active = YES;\n  [self.emptyFeedLabel.leadingAnchor constraintEqualToAnchor:self.emptyFeedView.leadingAnchor].active = YES;\n  \n  self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;\n  self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n  self.tableView.backgroundView = nil;\n  if (@available(iOS 13.0, *)) {\n    self.tableView.backgroundColor = [UIColor systemGroupedBackgroundColor];\n  } else {\n    self.tableView.backgroundColor = [UIColor groupTableViewBackgroundColor];\n  }\n\n  UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];\n  [refreshControl addTarget:self action:@selector(refreshNewsFeed:)\n           forControlEvents:UIControlEventValueChanged];\n  self.refreshControl = refreshControl;\n  self.navigationItem.title = @\"News Feed\";\n}\n\n# pragma mark - View Controller Life Cycle Methods\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  self.cards = [[Appboy sharedInstance].feedController getCardsInCategories:self.categories];\n\n  self.tableView.rowHeight = UITableViewAutomaticDimension;\n  self.tableView.estimatedRowHeight = 160;\n\n  [self requestNewCardsIfTimeout];\n\n  self.emptyFeedLabel.text = [self localizedAppboyFeedString:@\"Appboy.feed.no-card.text\"];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  [self updateAndDisplayCardsFromCache];\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n  [super viewDidAppear:animated];\n  [[Appboy sharedInstance] logFeedDisplayed];\n}\n\n- (void)viewWillTransitionToSize:(CGSize)size\n       withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {\n  [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];\n  [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {\n    [self.tableView reloadData];\n  }];\n}\n\n- (void)dealloc {\n  [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n#pragma mark - Update And Display Cached Cards\n\n- (IBAction)refreshNewsFeed:(UIRefreshControl *)sender {\n  [[Appboy sharedInstance] requestFeedRefresh];\n}\n\n- (void)requestNewCardsIfTimeout {\n  NSTimeInterval passedTime = fabs([[Appboy sharedInstance].feedController.lastUpdate timeIntervalSinceNow]);\n  if (passedTime > self.cacheTimeout) {\n    [[Appboy sharedInstance] requestFeedRefresh];\n  }\n}\n\n- (void)feedUpdated:(NSNotification *)notification {\n  BOOL isSuccessful = [notification.userInfo[ABKFeedUpdatedIsSuccessfulKey] boolValue];\n  if (isSuccessful) {\n    [self updateAndDisplayCardsFromCache];\n  }\n  [self.refreshControl endRefreshing];\n}\n\n- (void)updateAndDisplayCardsFromCache {\n  self.cards = [[Appboy sharedInstance].feedController getCardsInCategories:self.categories];\n  if (self.cards == nil || self.cards.count == 0) {\n    [self hideTableViewAndShowViewInHeader:self.emptyFeedView];\n  } else {\n    [self showTableViewAndHideHeaderViews];\n  }\n  [self.tableView reloadData];\n}\n\n- (void)hideTableViewAndShowViewInHeader:(UIView *)view {\n  view.hidden = NO;\n  view.frame = self.view.bounds;\n  [view layoutIfNeeded];\n  self.tableView.sectionHeaderHeight = self.tableView.frame.size.height;\n  self.tableView.tableHeaderView = view;\n  self.tableView.scrollEnabled = NO;\n}\n\n- (void)showTableViewAndHideHeaderViews {\n  self.emptyFeedView.hidden = YES;\n  self.tableView.tableHeaderView = nil;\n  self.tableView.sectionHeaderHeight = 0;\n  self.tableView.scrollEnabled = YES;\n}\n\n#pragma mark - Configuration Update\n\n- (void)setDisableUnreadIndicator:(BOOL)disableUnreadIndicator {\n  if (disableUnreadIndicator != _disableUnreadIndicator) {\n    _disableUnreadIndicator = disableUnreadIndicator;\n    [self updateAndDisplayCardsFromCache];\n  }\n}\n\n- (void)setCategories:(ABKCardCategory)categories {\n  if (categories != _categories) {\n    _categories = categories;\n    [self updateAndDisplayCardsFromCache];\n  }\n}\n\n#pragma mark - Table view data source\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {\n    return 1;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n    return self.cards.count;\n}\n\n- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {\n  BOOL cellVisible = [[tableView indexPathsForVisibleRows] containsObject:indexPath];\n  if (cellVisible) {\n    ABKCard *card = self.cards[indexPath.row];\n    [self logCardImpressionIfNeeded:card];\n  }\n}\n\n- (void)logCardImpressionIfNeeded:(ABKCard *)card {\n  if ([self.cardImpressions containsObject:card.idString]) {\n    // do nothing if we have already logged an impression\n    return;\n  }\n\n  [card logCardImpression];\n  [self.cardImpressions addObject:card.idString];\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  ABKCard *card = self.cards[indexPath.row];\n  ABKNFBaseCardCell *cell = [self dequeueCellFromTableView:tableView\n                                              forIndexPath:indexPath\n                                                   forCard:card];\n  [cell applyCard:card];\n  cell.delegate = self;\n  cell.hideUnreadIndicator = self.disableUnreadIndicator;\n  return cell;\n}\n\n- (void)registerTableViewCellClasses {\n  [self.tableView registerClass:[ABKNFBannerCardCell class]\n          forCellReuseIdentifier:@\"ABKBannerCardCell\"];\n  [self.tableView registerClass:[ABKNFCaptionedMessageCardCell class]\n          forCellReuseIdentifier:@\"ABKNFCaptionedMessageCardCell\"];\n  [self.tableView registerClass:[ABKNFClassicCardCell class]\n          forCellReuseIdentifier:@\"ABKNFNewsCardCell\"];\n}\n\n- (ABKNFBaseCardCell *)dequeueCellFromTableView:(UITableView *)tableView\n                                   forIndexPath:(NSIndexPath *)indexPath\n                                        forCard:(ABKCard *)card {\n  NSString *cellIdentifier = [self findCellIdentifierWithCard:card];\n  return [tableView dequeueReusableCellWithIdentifier:cellIdentifier\n                                         forIndexPath:indexPath];\n}\n\n- (NSString *)findCellIdentifierWithCard:(ABKCard *)card {\n  if ([card isKindOfClass:[ABKBannerCard class]]) {\n    return @\"ABKBannerCardCell\";\n  } else if ([card isKindOfClass:[ABKCaptionedImageCard class]]) {\n    return @\"ABKNFCaptionedMessageCardCell\";\n  } else if ([card isKindOfClass:[ABKClassicCard class]]) {\n    return @\"ABKNFNewsCardCell\";\n  } else if ([card isKindOfClass:[ABKTextAnnouncementCard class]]) {\n    return @\"ABKNFCaptionedMessageCardCell\";\n  }\n  return nil;\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {\n  ABKCard *card = self.cards[indexPath.row];\n  [self handleCardClick:card];\n}\n\n#pragma mark - Card Click Actions\n\n- (void)handleCardClick:(ABKCard *)card {\n  [card logCardClicked];\n\n  NSURL *cardURL = [ABKUIURLUtils getEncodedURIFromString:card.urlString];\n\n  // URL Delegate\n  if ([ABKUIURLUtils URLDelegate:Appboy.sharedInstance.appboyUrlDelegate\n                      handlesURL:cardURL\n                     fromChannel:ABKNewsFeedChannel\n                      withExtras:nil]) {\n    return;\n  }\n\n  // WebView\n  if ([ABKUIURLUtils URL:cardURL shouldOpenInWebView:card.openUrlInWebView]) {\n    [self openURLInWebView:cardURL];\n    return;\n  }\n\n  // System\n  [ABKUIURLUtils openURLWithSystem:cardURL];\n}\n\n- (void)openURLInWebView:(NSURL *)url {\n  ABKFeedWebViewController *webViewController = [[ABKFeedWebViewController alloc] init];\n  webViewController.url = url;\n  webViewController.showDoneButton = self.navigationItem.rightBarButtonItem != nil;\n  [self.navigationController pushViewController:webViewController animated:YES];\n}\n\n# pragma mark - Utility Methods\n\n+ (instancetype)getNavigationFeedViewController {\n  return [[ABKNewsFeedTableViewController alloc] init];\n}\n\n- (NSString *)localizedAppboyFeedString:(NSString *)key {\n  return [ABKUIUtils getLocalizedString:key\n                         inAppboyBundle:[ABKUIUtils bundle:[ABKNewsFeedTableViewController class] channel:ABKNewsFeedChannel]\n                                  table:@\"AppboyFeedLocalizable\"];\n}\n\n# pragma mark - ABKBaseNewsFeedCellDelegate\n\n- (void)refreshTableViewCellHeights {\n  [UIView performWithoutAnimation:^{\n    [self.tableView beginUpdates];\n    [self.tableView endUpdates];\n  }];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/ABKNewsFeedViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKNewsFeedTableViewController.h\"\n\n@interface ABKNewsFeedViewController : UINavigationController\n\n/*!\n * This property is the table view controller which displays all the cards. It's also the root view\n * controller.\n */\n@property (nonatomic) ABKNewsFeedTableViewController *newsFeed;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/ABKNewsFeedViewController.m",
    "content": "#import \"ABKNewsFeedViewController.h\"\n#import \"ABKNewsFeedTableViewController.h\"\n#import \"ABKUIUtils.h\"\n\n@implementation ABKNewsFeedViewController\n\n- (instancetype)init {\n  self = [super init];\n  if (self) {\n    self.newsFeed = [[ABKNewsFeedTableViewController alloc] init];\n    [self pushViewController:self.newsFeed animated:NO];\n    [self addDoneButton];\n#if !TARGET_OS_TV\n    if (@available(iOS 15.0, *)) {\n      self.view.backgroundColor = UIColor.systemGroupedBackgroundColor;\n    }\n#endif\n  }\n  return self;\n}\n\n- (void)awakeFromNib {\n  [super awakeFromNib];\n  self.newsFeed = self.viewControllers.firstObject;\n  [self addDoneButton];\n}\n\n- (void)addDoneButton {\n  UIBarButtonItem *closeBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone\n                                                                                  target:self\n                                                                                  action:@selector(dismissNewsFeed:)];\n  [self.newsFeed.navigationItem setRightBarButtonItem:closeBarButton];\n}\n\n- (IBAction)dismissNewsFeed:(id)sender {\n  [self dismissViewControllerAnimated:YES completion:nil];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/Cells/ABKNFBannerCardCell.h",
    "content": "#import \"ABKNFBaseCardCell.h\"\n#import \"ABKBannerCard.h\"\n\n@interface ABKNFBannerCardCell : ABKNFBaseCardCell\n\n@property (nonatomic) IBOutlet UIImageView *bannerImageView;\n@property (nonatomic) IBOutlet NSLayoutConstraint *imageRatioConstraint;\n\n/*!\n * @discussion Programmatic initialization and layout of the banner imageView, exposed for customization.\n */\n- (void)setUpBannerImageView;\n\n- (void)applyCard:(ABKCard *)bannerCard;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/Cells/ABKNFBannerCardCell.m",
    "content": "#import \"ABKNFBannerCardCell.h\"\n#import \"Appboy.h\"\n#import \"ABKImageDelegate.h\"\n\n@implementation ABKNFBannerCardCell\n\n#pragma mark - SetUp\n\n- (void)setUpUI {\n  [super setUpUI];\n  [self setUpBannerImageView];\n}\n\n- (void)setUpBannerImageView {\n  self.bannerImageView =  [[[self imageViewClass] alloc] init];\n  self.bannerImageView.contentMode = UIViewContentModeScaleAspectFit;\n  self.bannerImageView.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.bannerImageView setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical];\n  [self.bannerImageView setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];\n  [self.bannerImageView setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical];\n  [self.rootView addSubview:self.bannerImageView];\n  [self.bannerImageView.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor].active = YES;\n  [self.bannerImageView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor].active = YES;\n  [self.bannerImageView.topAnchor constraintEqualToAnchor:self.rootView.topAnchor].active = YES;\n  [self.bannerImageView.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor].active = YES;\n\n  NSLayoutConstraint *estimatedWidth = [self.bannerImageView.widthAnchor constraintEqualToAnchor:self.rootView.widthAnchor];\n  estimatedWidth.priority = UILayoutPriorityDefaultHigh;\n  estimatedWidth.active = YES;\n  self.imageRatioConstraint = [self.bannerImageView.widthAnchor constraintEqualToAnchor:self.bannerImageView.heightAnchor multiplier:355.0/79.0];\n  self.imageRatioConstraint.priority = UILayoutPriorityRequired-1;\n  self.imageRatioConstraint.active = YES;\n  NSLayoutConstraint *estimatedHeight = [self.rootView.heightAnchor constraintGreaterThanOrEqualToConstant:100];\n  estimatedHeight.priority = UILayoutPriorityDefaultLow;\n  estimatedHeight.active = YES;\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKCard *)card {\n  if (![card isKindOfClass:[ABKBannerCard class]]) {\n    return;\n  }\n  \n  [super applyCard:card];\n  ABKBannerCard *bannerCard = (ABKBannerCard *)card;\n  \n  [self updateImageRatioConstraintToRatio:bannerCard.imageAspectRatio];\n  [self setNeedsUpdateConstraints];\n  [self setNeedsLayout];\n\n  if (![Appboy sharedInstance].imageDelegate) {\n    NSLog(@\"[APPBOY][WARN] %@ %s\",\n          @\"ABKImageDelegate on Appboy is nil. Image loading may be disabled.\",\n          __PRETTY_FUNCTION__);\n    return;\n  }\n  typeof(self) __weak weakSelf = self;\n  [[Appboy sharedInstance].imageDelegate setImageForView:self.bannerImageView\n                                   showActivityIndicator:NO\n                                                 withURL:[NSURL URLWithString:bannerCard.image]\n                                        imagePlaceHolder:nil\n                                               completed:^(UIImage * _Nullable image,\n                                                           NSError * _Nullable error,\n                                                           NSInteger cacheType,\n                                                           NSURL * _Nullable imageURL) {\n    if (weakSelf == nil) {\n      return;\n    }\n    if (image) {\n      dispatch_async(dispatch_get_main_queue(), ^{\n        CGFloat newRatio = image.size.width / image.size.height;\n        if (fabs(newRatio - weakSelf.imageRatioConstraint.multiplier) > 0.1f) {\n          [weakSelf updateImageRatioConstraintToRatio:newRatio];\n          [weakSelf setNeedsUpdateConstraints];\n          [weakSelf setNeedsLayout];\n        }\n      });\n    } else {\n      dispatch_async(dispatch_get_main_queue(), ^{\n        weakSelf.bannerImageView.image = [weakSelf getPlaceHolderImage];\n      });\n    }\n  }];\n}\n\n- (void)updateImageRatioConstraintToRatio:(CGFloat)newRatio {\n  if (self.imageRatioConstraint) {\n    self.imageRatioConstraint.active = NO;\n  }\n  self.imageRatioConstraint = [self.bannerImageView.widthAnchor constraintEqualToAnchor:self.bannerImageView.heightAnchor multiplier:newRatio];\n  self.imageRatioConstraint.priority = UILayoutPriorityRequired-1;\n  NSLayoutConstraint *estimatedHeight = [self.rootView.heightAnchor constraintGreaterThanOrEqualToConstant:ceil(self.rootView.frame.size.width/self.imageRatioConstraint.multiplier)];\n  estimatedHeight.priority = UILayoutPriorityDefaultLow;\n  estimatedHeight.active = YES;\n  self.imageRatioConstraint.active = YES;\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/Cells/ABKNFBaseCardCell.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKCard.h\"\n\n@protocol ABKBaseNewsFeedCellDelegate <NSObject>\n\n- (void)refreshTableViewCellHeights;\n\n@end\n\nextern CGFloat ABKNFLabelHorizontalSpace;\nextern CGFloat ABKNFLabelVerticalSpace;\nextern CGFloat ABKNFTopSpace;\n\n@interface ABKNFBaseCardCell : UITableViewCell\n\n+ (UIColor *)ABKNFDescriptionLabelColor;\n+ (UIColor *)ABKNFTitleLabelColor;\n+ (UIColor *)ABKNFTitleLabelColorOnGray;\n\n/*!\n * This view displays the card contents and is the base view container for each card. To change or\n * configure the outline of the card like card width, background color board width, etc, you can\n * update this property accordingly.\n */\n@property (nonatomic) IBOutlet UIView *rootView;\n\n/*!\n * This is the triangle image which shows if a card has been viewed by the user.\n */\n@property (nonatomic) IBOutlet UIImageView *unreadIndicatorView;\n\n@property (nonatomic) id <ABKBaseNewsFeedCellDelegate> delegate;\n\n/*!\n * Card root view related constraints\n */\n@property (nonatomic) IBOutlet NSLayoutConstraint *rootViewLeadingConstraint;\n@property (nonatomic) IBOutlet NSLayoutConstraint *rootViewTrailingConstraint;\n@property (nonatomic) IBOutlet NSLayoutConstraint *rootViewTopConstraint;\n@property (nonatomic) IBOutlet NSLayoutConstraint *rootViewBottomConstraint;\n\n/*!\n * These are basic UI configuration for the News Feed. They are set to the default value in `setUp`\n * method.\n *\n * It's recommended to set the values before the view is displayed.\n */\n@property CGFloat cardSidePadding;\n@property CGFloat cardSpacing;\n@property (nonatomic) BOOL hideUnreadIndicator;\n\n/*!\n * @discussion Initialization of cell called even with storyboard/XIB, exposed for customization.\n */\n- (void)setUp;\n\n/*!\n * @discussion Programmatic initialization and layout cell, exposed for customization.\n */\n- (void)setUpUI;\n\n/*!\n * @discussion Programmatic initialization and layout of cell rootView, exposed for customization.\n */\n- (void)setUpRootView;\n\n/*!\n * @discussion Programmatic initialization and layout of cell border, exposed for customization.\n */\n- (void)setUpRootViewBorder;\n\n/*!\n * @discussion Programmatic initialization and layout of unread indicator image, exposed for customization.\n */\n- (void)setUpUnreadIndicatorView;\n\n/*!\n * @param card The card model for the cell.\n *\n * @discussion Apply the data from the given card to the card cell. \n */\n- (void)applyCard:(ABKCard *)card;\n\n/*!\n * @discussion This is a utility method to return the place holder image.\n */\n- (UIImage *)getPlaceHolderImage;\n\n/*!\n * @discussion This is a utility method to return the image view class from the ABKImageDelegate.\n */\n- (Class)imageViewClass;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/Cells/ABKNFBaseCardCell.m",
    "content": "#import \"ABKNFBaseCardCell.h\"\n#import \"ABKBannerCard.h\"\n#import \"ABKTextAnnouncementCard.h\"\n#import \"ABKCaptionedImageCard.h\"\n#import \"ABKClassicCard.h\"\n#import \"ABKUIUtils.h\"\n#import \"ABKImageDelegate.h\"\n\nCGFloat ABKNFLabelHorizontalSpace = 22.0;\nCGFloat ABKNFLabelVerticalSpace = 13.0;\nCGFloat ABKNFTopSpace = 7.0;\n\nstatic CGFloat AppboyCardSidePadding = 10.0;\nstatic CGFloat AppboyCardSpacing = 20.0;\nstatic CGFloat AppboyCardBorderWidth = 0.5;\nstatic CGFloat AppboyCardCornerRadius = 3.0;\n\n@implementation ABKNFBaseCardCell\n\n+ (UIColor *)ABKNFDescriptionLabelColor {\n  return [ABKUIUtils dynamicColorForLightColor:[UIColor colorWithRed:0.1747547901  green:0.1760663777 blue:0.1758382755 alpha:1] darkColor:[UIColor lightTextColor]];\n}\n\n+ (UIColor *)ABKNFTitleLabelColor {\n  return [ABKUIUtils dynamicColorForLightColor:[UIColor colorWithRed:0.25098039220000001 green:0.27657390510000002 blue:0.32259352190000001 alpha:1] darkColor:[UIColor lightTextColor]];\n}\n\n+ (UIColor *)ABKNFTitleLabelColorOnGray {\n  return [ABKUIUtils dynamicColorForLightColor:[UIColor colorWithRed:0.25327896900000002 green:0.28065123180000001 blue:0.32005588499999998 alpha:1] darkColor:[UIColor lightTextColor]];\n}\n\n#pragma mark - Initialization\n\n- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {\n  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];\n  if (self) {\n    [self setUp];\n    [self setUpUI];\n  }\n  return self;\n}\n\n- (instancetype)initWithCoder:(NSCoder *)aDecoder {\n  if (self = [super initWithCoder:aDecoder]) {\n    [self setUp];\n  }\n  return self;\n}\n\n#pragma mark - SetUp\n\n- (void)setUp {\n  _cardSidePadding = AppboyCardSidePadding;\n  _cardSpacing = AppboyCardSpacing;\n}\n\n- (void)setUpUI {\n  [self setUpRootView];\n  [self setUpRootViewBorder];\n  [self setUpUnreadIndicatorView];\n}\n\n- (void)setUpRootView {\n  self.backgroundColor = [UIColor clearColor];\n  self.contentView.backgroundColor = [UIColor clearColor];\n  self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight;\n  self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;\n  self.selectionStyle = UITableViewCellSelectionStyleNone;\n\n  self.rootView = [[UIView alloc] init];\n  self.rootView.translatesAutoresizingMaskIntoConstraints = NO;\n  [[self contentView] addSubview:self.rootView];\n  if (@available(iOS 13.0, *)) {\n    self.rootView.backgroundColor = [UIColor systemBackgroundColor];\n  } else {\n    self.rootView.backgroundColor = [UIColor whiteColor];\n  }\n\n  self.rootViewTopConstraint = [self.rootView.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:AppboyCardSpacing / 2.0];\n  self.rootViewBottomConstraint = [self.contentView.bottomAnchor constraintEqualToAnchor:self.rootView.bottomAnchor constant:AppboyCardSpacing / 2.0];\n  self.rootViewLeadingConstraint = [self.rootView.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor constant:AppboyCardSidePadding];\n  self.rootViewTrailingConstraint = [self.contentView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor constant:AppboyCardSidePadding];\n  [NSLayoutConstraint activateConstraints:@[self.rootViewTopConstraint,\n                          self.rootViewBottomConstraint,\n                          self.rootViewLeadingConstraint,\n                          self.rootViewTrailingConstraint]];\n}\n\n- (void)setUpRootViewBorder {\n  self.rootView.layer.cornerRadius = AppboyCardCornerRadius;\n  self.rootView.layer.masksToBounds = YES;\n  self.rootView.layer.borderColor = [UIColor colorWithWhite:0.75f alpha:1.0].CGColor;\n  self.rootView.layer.borderWidth = AppboyCardBorderWidth;\n  \n  self.rootViewTopConstraint.constant = AppboyCardSpacing / 2.0;\n  self.rootViewBottomConstraint.constant = AppboyCardSpacing / 2.0;\n  self.rootViewLeadingConstraint.constant = AppboyCardSidePadding;\n  self.rootViewTrailingConstraint.constant = AppboyCardSidePadding;\n}\n\n- (void)setUpUnreadIndicatorView {\n  self.unreadIndicatorView = [[UIImageView alloc] initWithImage:[ABKUIUtils imageNamed:@\"Icons_Read\"\n                                                                                bundle:[ABKNFBaseCardCell class]\n                                                                               channel:ABKNewsFeedChannel]];\n  self.unreadIndicatorView.translatesAutoresizingMaskIntoConstraints = NO;\n  self.unreadIndicatorView.highlightedImage = [ABKUIUtils imageNamed:@\"Icons_Unread\"\n                                                              bundle:[ABKNFBaseCardCell class]\n                                                             channel:ABKNewsFeedChannel];\n  [self.rootView addSubview:self.unreadIndicatorView];\n\n  [self.unreadIndicatorView.heightAnchor constraintEqualToConstant:20].active = YES;\n  [self.unreadIndicatorView.widthAnchor constraintEqualToConstant:20].active = YES;\n  [self.unreadIndicatorView.topAnchor constraintEqualToAnchor:self.rootView.topAnchor].active = YES;\n  [self.rootView.trailingAnchor constraintEqualToAnchor:self.unreadIndicatorView.trailingAnchor].active = YES;\n  self.unreadIndicatorView.image = [self.unreadIndicatorView.image imageFlippedForRightToLeftLayoutDirection];\n}\n\n# pragma mark - Cell UI Configuration\n\n- (void)setHideUnreadIndicator:(BOOL)hideUnreadIndicator {\n  if(self.hideUnreadIndicator != hideUnreadIndicator) {\n    _hideUnreadIndicator = hideUnreadIndicator;\n    self.unreadIndicatorView.hidden = hideUnreadIndicator;\n  }\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKCard *)card {\n  if(!self.hideUnreadIndicator) {\n    self.unreadIndicatorView.highlighted = !card.viewed;\n  }\n}\n\n#pragma mark - Utiliy Methods\n\n- (UIImage *)getPlaceHolderImage {\n  return [ABKUIUtils imageNamed:@\"img-noimage-lrg\"\n                         bundle:[ABKNFBaseCardCell class]\n                        channel:ABKNewsFeedChannel];\n}\n\n- (Class)imageViewClass {\n   if ([Appboy sharedInstance].imageDelegate) {\n     return [[Appboy sharedInstance].imageDelegate imageViewClass];\n   }\n   return [UIImageView class];\n }\n\n- (void)awakeFromNib {\n  [super awakeFromNib];\n  [self setUpRootViewBorder];\n  self.unreadIndicatorView.image = [self.unreadIndicatorView.image imageFlippedForRightToLeftLayoutDirection];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/Cells/ABKNFCaptionedMessageCardCell.h",
    "content": "#import \"ABKNFBaseCardCell.h\"\n#import \"ABKCaptionedImageCard.h\"\n#import \"ABKTextAnnouncementCard.h\"\n\n@interface ABKNFCaptionedMessageCardCell : ABKNFBaseCardCell\n\n@property (class, nonatomic) UIColor *titleLabelColor;\n@property (class, nonatomic) UIColor *descriptionLabelColor;\n@property (class, nonatomic) UIColor *linkLabelColor;\n\n@property (nonatomic) IBOutlet UIImageView *captionedImageView;\n@property (nonatomic) IBOutlet UILabel *titleLabel;\n@property (nonatomic) IBOutlet UILabel *descriptionLabel;\n@property (nonatomic) IBOutlet UIView *titleBackgroundView;\n@property (nonatomic) IBOutlet UILabel *linkLabel;\n@property (nonatomic) IBOutlet NSLayoutConstraint *imageHeightConstraint;\n@property (nonatomic) IBOutlet NSLayoutConstraint *bodyAndLinkConstraint;\n\n/*!\n * @discussion Programmatic initialization and layout of the title background view, grey bar that the title label is in.\n * Exposed for customization.\n */\n- (void)setUpTitleBackgroundView;\n\n/*!\n * @discussion Programmatic initialization and layout of the title label. Exposed for customization.\n */\n- (void)setUpTitleLabel;\n\n/*!\n * @discussion Programmatic initialization and layout of the description label. Exposed for customization.\n */\n- (void)setUpDescriptionLabel;\n\n/*!\n * @discussion Programmatic initialization and layout of the link label. Exposed for customization.\n */\n- (void)setUpLinkLabel;\n\n/*!\n * @discussion Programmatic initialization and layout of image view. Exposed for customization.\n */\n- (void)setUpCaptionedImageView;\n\n/*!\n * @discussion Configures fonts of labels with dynamic type on supported versions of iOS uses older font style\n * on earlier versions. Exposed for customization.\n */\n- (void)setUpFonts;\n\n/*!\n * This method adjusts the bodyAndLinkConstraint and hides or shows the link label.\n */\n- (void)hideLinkLabel:(BOOL)hide;\n- (void)applyCard:(ABKCaptionedImageCard *)captionedImageCard;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/Cells/ABKNFCaptionedMessageCardCell.m",
    "content": "#import \"ABKNFCaptionedMessageCardCell.h\"\n#import \"Appboy.h\"\n#import \"ABKImageDelegate.h\"\n#import \"ABKUIUtils.h\"\n\n@implementation ABKNFCaptionedMessageCardCell\n\nstatic UIColor *_titleLabelColor = nil;\nstatic UIColor *_descriptionLabelColor = nil;\nstatic UIColor *_linkLabelColor = nil;\n\n+ (UIColor *)titleLabelColor {\n  if (_titleLabelColor == nil) {\n    _titleLabelColor = [ABKNFBaseCardCell ABKNFTitleLabelColor];\n  }\n  return _titleLabelColor;\n}\n\n+ (void)setTitleLabelColor:(UIColor *)titleLabelColor {\n  _titleLabelColor = titleLabelColor;\n}\n\n+ (UIColor *)descriptionLabelColor {\n  if (_descriptionLabelColor == nil) {\n    _descriptionLabelColor = [ABKNFBaseCardCell ABKNFDescriptionLabelColor];\n  }\n  return _descriptionLabelColor;\n}\n\n+ (void)setDescriptionLabelColor:(UIColor *)descriptionLabelColor {\n  _descriptionLabelColor = descriptionLabelColor;\n}\n\n+ (UIColor *)linkLabelColor {\n  if (_linkLabelColor == nil) {\n    _linkLabelColor = [ABKUIUtils dynamicColorForLightColor:[UIColor blackColor] darkColor:[UIColor whiteColor]];\n  }\n  return _linkLabelColor;\n}\n\n+ (void)setLinkLabelColor:(UIColor *)linkLabelColor{\n  _linkLabelColor = linkLabelColor;\n}\n\n#pragma mark - SetUp\n\n- (void)setUpUI {\n  [super setUpUI];\n  [self setUpTitleBackgroundView];\n  [self setUpTitleLabel];\n  [self setUpDescriptionLabel];\n  [self setUpLinkLabel];\n  [self setUpCaptionedImageView];\n  [self setUpFonts];\n}\n\n- (void)setUpTitleBackgroundView {\n  self.titleBackgroundView = [[UIView alloc] init];\n  self.titleBackgroundView.translatesAutoresizingMaskIntoConstraints = NO;\n  if (@available(iOS 13.0, *)) {\n    self.titleBackgroundView.backgroundColor = [UIColor systemGroupedBackgroundColor];\n  } else {\n    self.titleBackgroundView.backgroundColor = [UIColor groupTableViewBackgroundColor];\n  }\n  [self.rootView addSubview:self.titleBackgroundView];\n  [self.titleBackgroundView.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor].active = YES;\n  [self.titleBackgroundView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor].active = YES;\n  [self.unreadIndicatorView removeFromSuperview];\n  [self.titleBackgroundView addSubview:self.unreadIndicatorView];\n  [self.unreadIndicatorView.topAnchor constraintEqualToAnchor:self.titleBackgroundView.topAnchor].active = YES;\n  [self.unreadIndicatorView.trailingAnchor constraintEqualToAnchor:self.titleBackgroundView.trailingAnchor].active = YES;\n}\n\n- (void)setUpTitleLabel {\n  self.titleLabel = [[UILabel alloc] init];\n  self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  self.titleLabel.textColor = [self class].titleLabelColor;\n  self.titleLabel.text = @\"Title\";\n  self.titleLabel.numberOfLines = 2;\n  self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;\n  [self.titleBackgroundView addSubview:self.titleLabel];\n  [self.titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];\n  [self.titleLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];\n  [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.titleBackgroundView.leadingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.titleBackgroundView.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.titleLabel.topAnchor constraintEqualToAnchor:self.titleBackgroundView.topAnchor constant:10].active = YES;\n  [self.titleBackgroundView.bottomAnchor constraintEqualToAnchor:self.titleLabel.bottomAnchor constant:10].active = YES;\n}\n\n- (void)setUpDescriptionLabel {\n  self.descriptionLabel = [[UILabel alloc] init];\n  self.descriptionLabel.textColor = [self class].descriptionLabelColor;\n  self.descriptionLabel.text = @\"Description\";\n  self.descriptionLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  self.descriptionLabel.numberOfLines = 0;\n  self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;\n  [self.descriptionLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];\n  [self.rootView addSubview:self.descriptionLabel];\n  [self.descriptionLabel.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.rootView.trailingAnchor constraintEqualToAnchor:self.descriptionLabel.trailingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.descriptionLabel.topAnchor constraintEqualToAnchor:self.titleBackgroundView.bottomAnchor constant:ABKNFLabelVerticalSpace].active = YES;\n  [self.rootView.bottomAnchor constraintGreaterThanOrEqualToAnchor:self.descriptionLabel.bottomAnchor constant:ABKNFLabelVerticalSpace].active = YES;\n}\n\n- (void)setUpLinkLabel {\n  self.linkLabel = [[UILabel alloc] init];\n  self.linkLabel.textColor = [self class].linkLabelColor;\n  self.linkLabel.text = @\"Link\";\n  self.linkLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  self.linkLabel.numberOfLines = 0;\n  self.linkLabel.lineBreakMode = NSLineBreakByCharWrapping;\n  [self.rootView addSubview:self.linkLabel];\n  [self.linkLabel.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.rootView.trailingAnchor constraintEqualToAnchor:self.linkLabel.trailingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.linkLabel.topAnchor constraintEqualToAnchor:self.descriptionLabel.bottomAnchor constant:ABKNFLabelVerticalSpace].active = YES;\n  self.bodyAndLinkConstraint = [self.rootView.bottomAnchor constraintEqualToAnchor:self.linkLabel.bottomAnchor constant:ABKNFLabelVerticalSpace];\n  self.bodyAndLinkConstraint.active = YES;\n}\n\n- (void)setUpCaptionedImageView {\n  self.captionedImageView = [[[self imageViewClass] alloc] init];\n  self.captionedImageView.contentMode = UIViewContentModeScaleAspectFit;\n  self.captionedImageView.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.rootView addSubview:self.captionedImageView];\n  [self.captionedImageView setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];\n  [self.captionedImageView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];\n  [self.captionedImageView.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor].active = YES;\n  [self.captionedImageView.trailingAnchor constraintEqualToAnchor:self.rootView.trailingAnchor].active = YES;\n  [self.captionedImageView.topAnchor constraintEqualToAnchor:self.rootView.topAnchor].active = YES;\n  NSLayoutConstraint *bottom = [self.captionedImageView.bottomAnchor constraintEqualToAnchor:self.titleBackgroundView.topAnchor];\n  bottom.priority = UILayoutPriorityDefaultHigh;\n  bottom.active = YES;\n  self.imageHeightConstraint = [self.captionedImageView.heightAnchor constraintEqualToConstant:223];\n  self.imageHeightConstraint.active = YES;\n}\n\n- (void)setUpFonts {\n  // DynamicType\n  self.titleLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleTitle3 weight:UIFontWeightBold];\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.titleLabel];\n  self.descriptionLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.descriptionLabel];\n  self.linkLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleSubheadline weight:UIFontWeightBold];\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.linkLabel];\n\n  // Bug: On Mac Catalyst 13, allowsDefaultTighteningForTruncation defaults to YES\n  // - Occurs only if numberOfLine is not 0\n  // - Default value should be NO (see documentation – https://apple.co/3bZFc8q)\n  // - Might be fixed in a later version\n  self.titleLabel.allowsDefaultTighteningForTruncation = NO;\n}\n\n- (void)hideLinkLabel:(BOOL)hide {\n  self.linkLabel.hidden = hide;\n  self.bodyAndLinkConstraint.constant = hide ? 0 : ABKNFLabelVerticalSpace;\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKCard *)card {\n  [super applyCard:card];\n  if ([card isKindOfClass:[ABKCaptionedImageCard class]]) {\n    [self applyCaptionedImageCard:(ABKCaptionedImageCard *)card];\n  } else if ([card isKindOfClass:[ABKTextAnnouncementCard class]]) {\n    [self applyTextAnnouncementCard:(ABKTextAnnouncementCard *)card];\n  }\n}\n\n- (void)applyCaptionedImageCard:(ABKCaptionedImageCard *)captionedImageCard {\n  self.titleLabel.text = captionedImageCard.title;\n  self.descriptionLabel.text = captionedImageCard.cardDescription;\n  self.linkLabel.text = captionedImageCard.domain;\n  BOOL shouldHideLink = captionedImageCard.domain == nil || captionedImageCard.domain.length == 0;\n  [self hideLinkLabel:shouldHideLink];\n  \n  CGFloat currImageHeightConstraint = self.captionedImageView.frame.size.width / captionedImageCard.imageAspectRatio;\n  self.imageHeightConstraint.constant = currImageHeightConstraint;\n  [self setNeedsUpdateConstraints];\n  [self setNeedsDisplay];\n  \n  if (![Appboy sharedInstance].imageDelegate) {\n    NSLog(@\"[APPBOY][WARN] %@ %s\",\n          @\"ABKImageDelegate on Appboy is nil. Image loading may be disabled.\",\n          __PRETTY_FUNCTION__);\n    return;\n  }\n  typeof(self) __weak weakSelf = self;\n  [[Appboy sharedInstance].imageDelegate setImageForView:self.captionedImageView\n                                   showActivityIndicator:NO\n                                                 withURL:[NSURL URLWithString:captionedImageCard.image]\n                                        imagePlaceHolder:nil\n                                               completed:^(UIImage * _Nullable image,\n                                                           NSError * _Nullable error,\n                                                           NSInteger cacheType,\n                                                           NSURL * _Nullable imageURL) {\n    if (weakSelf == nil) {\n      return;\n    }\n    if (image) {\n      dispatch_async(dispatch_get_main_queue(), ^{\n        CGFloat newImageHeightConstraint = weakSelf.captionedImageView.frame.size.width * image.size.height / image.size.width;\n        if (fabs(newImageHeightConstraint - currImageHeightConstraint) > 5e-1) {\n          weakSelf.imageHeightConstraint.constant = newImageHeightConstraint;\n          [weakSelf setNeedsUpdateConstraints];\n          [weakSelf setNeedsDisplay];\n          // Force a redraw, as SDWebImage 5+ consistently gets the original constraint wrong.\n          [weakSelf.delegate refreshTableViewCellHeights];\n        }\n      });\n    } else {\n      dispatch_async(dispatch_get_main_queue(), ^{\n        weakSelf.captionedImageView.image = [weakSelf getPlaceHolderImage];\n      });\n    }\n  }];\n}\n\n- (void)applyTextAnnouncementCard:(ABKTextAnnouncementCard *)textAnnouncementCard {\n  self.titleLabel.text = textAnnouncementCard.title;\n  self.descriptionLabel.text = textAnnouncementCard.cardDescription;\n  self.linkLabel.text = textAnnouncementCard.domain;\n  BOOL shouldHideLink = textAnnouncementCard.domain == nil || textAnnouncementCard.domain.length == 0;\n  [self hideLinkLabel:shouldHideLink];\n  \n  self.imageHeightConstraint.constant = 0;\n  [self setNeedsLayout];\n}\n\n- (void)awakeFromNib {\n  [super awakeFromNib];\n  [self setUpFonts];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/Cells/ABKNFClassicCardCell.h",
    "content": "#import \"ABKNFBaseCardCell.h\"\n#import \"ABKClassicCard.h\"\n\n@interface ABKNFClassicCardCell : ABKNFBaseCardCell\n\n@property (class, nonatomic) UIColor *titleLabelColor;\n@property (class, nonatomic) UIColor *descriptionLabelColor;\n@property (class, nonatomic) UIColor *linkLabelColor;\n\n@property (nonatomic) IBOutlet UIImageView *classicImageView;\n@property (nonatomic) IBOutlet UILabel *titleLabel;\n@property (nonatomic) IBOutlet UILabel *descriptionLabel;\n@property (nonatomic) IBOutlet UILabel *linkLabel;\n\n/*!\n * @discussion Programmatic initialization and layout of image view. Exposed for customization.\n */\n- (void)setUpClassicImageView;\n\n/*!\n * @discussion Programmatic initialization and layout of the title label. Exposed for customization.\n */\n- (void)setUpTitleLabel;\n\n/*!\n * @discussion Programmatic initialization and layout of the description label. Exposed for customization.\n */\n- (void)setUpDescriptionLabel;\n\n/*!\n * @discussion Programmatic initialization and layout of the link label. Exposed for customization.\n */\n- (void)setUpLinkLabel;\n\n/*!\n * @discussion Configures fonts of labels with dynamic type on supported versions of iOS uses older font style\n * on earlier versions. Exposed for customization.\n */\n- (void)setUpFonts;\n\n- (void)applyCard:(ABKClassicCard *)classicCard;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKNewsFeed/ViewControllers/Cells/ABKNFClassicCardCell.m",
    "content": "#import \"ABKNFClassicCardCell.h\"\n#import \"Appboy.h\"\n#import \"ABKImageDelegate.h\"\n#import \"ABKUIUtils.h\"\n\n@implementation ABKNFClassicCardCell\n\nstatic UIColor *_titleLabelColor = nil;\nstatic UIColor *_descriptionLabelColor = nil;\nstatic UIColor *_linkLabelColor = nil;\n\n+ (UIColor *)titleLabelColor {\n  if (_titleLabelColor == nil) {\n    _titleLabelColor = [ABKNFBaseCardCell ABKNFTitleLabelColor];\n  }\n  return _titleLabelColor;\n}\n\n+ (void)setTitleLabelColor:(UIColor *)titleLabelColor {\n  _titleLabelColor = titleLabelColor;\n}\n\n+ (UIColor *)descriptionLabelColor {\n  if (_descriptionLabelColor == nil) {\n    _descriptionLabelColor = [ABKNFBaseCardCell ABKNFDescriptionLabelColor];\n  }\n  return _descriptionLabelColor;\n}\n\n+ (void)setDescriptionLabelColor:(UIColor *)descriptionLabelColor {\n  _descriptionLabelColor = descriptionLabelColor;\n}\n\n+ (UIColor *)linkLabelColor {\n  if (_linkLabelColor == nil) {\n    _linkLabelColor = [ABKNFBaseCardCell ABKNFDescriptionLabelColor];\n  }\n  return _linkLabelColor;\n}\n\n+ (void)setLinkLabelColor:(UIColor *)linkLabelColor{\n  _linkLabelColor = linkLabelColor;\n}\n\n#pragma mark - SetUp\n\n- (void)setUpUI {\n  [super setUpUI];\n  [self setUpClassicImageView];\n  [self setUpTitleLabel];\n  [self setUpDescriptionLabel];\n  [self setUpLinkLabel];\n  [self setUpFonts];\n}\n\n- (void)setUpClassicImageView {\n  self.classicImageView = [[[self imageViewClass] alloc] init];\n  self.classicImageView.translatesAutoresizingMaskIntoConstraints = NO;\n  [self.rootView addSubview:self.classicImageView];\n  [self.classicImageView.heightAnchor constraintEqualToAnchor:self.classicImageView.widthAnchor multiplier:1.0].active = YES;\n  [self.classicImageView.leadingAnchor constraintEqualToAnchor:self.rootView.leadingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.classicImageView.topAnchor constraintEqualToAnchor:self.rootView.topAnchor constant:ABKNFLabelVerticalSpace].active = YES;\n  [self.rootView.bottomAnchor constraintGreaterThanOrEqualToAnchor:self.classicImageView.bottomAnchor constant:ABKNFLabelVerticalSpace].active = YES;\n  [self.classicImageView.widthAnchor constraintEqualToAnchor:self.rootView.widthAnchor multiplier:0.177].active = YES;\n}\n\n- (void)setUpTitleLabel {\n  self.titleLabel = [[UILabel alloc] init];\n  self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  self.titleLabel.numberOfLines = 0;\n  self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;\n  self.titleLabel.textColor =  [self class].titleLabelColor;\n  self.titleLabel.text = @\"Title\";\n  [self.rootView addSubview:self.titleLabel];\n  [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.classicImageView.trailingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.rootView.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor constant:ABKNFLabelHorizontalSpace].active = YES;\n  [self.titleLabel.topAnchor constraintEqualToAnchor:self.rootView.topAnchor constant:ABKNFTopSpace].active = YES;\n}\n\n- (void)setUpDescriptionLabel {\n  self.descriptionLabel = [[UILabel alloc] init];\n  self.descriptionLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  self.descriptionLabel.numberOfLines = 0;\n  self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;\n  self.descriptionLabel.textColor = [self class].descriptionLabelColor;\n  self.descriptionLabel.text = @\"Description\";\n  [self.rootView addSubview:self.descriptionLabel];\n  [self.titleLabel.bottomAnchor constraintEqualToAnchor:self.descriptionLabel.topAnchor].active = YES;\n  \n  [self.descriptionLabel.leadingAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor].active = YES;\n  [self.descriptionLabel.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor].active = YES;\n}\n\n- (void)setUpLinkLabel {\n  self.linkLabel = [[UILabel alloc] init];\n  self.linkLabel.translatesAutoresizingMaskIntoConstraints = NO;\n  self.linkLabel.numberOfLines = 0;\n  self.linkLabel.lineBreakMode = NSLineBreakByCharWrapping;\n  self.linkLabel.textColor = [self class].linkLabelColor;\n  self.linkLabel.text = @\"Link\";\n  [self.rootView addSubview:self.linkLabel];\n  [self.linkLabel.leadingAnchor constraintEqualToAnchor:self.titleLabel.leadingAnchor].active = YES;\n  [self.linkLabel.trailingAnchor constraintEqualToAnchor:self.titleLabel.trailingAnchor].active = YES;\n  [self.linkLabel.topAnchor constraintGreaterThanOrEqualToAnchor:self.descriptionLabel.bottomAnchor constant:5].active = YES;\n  [self.rootView.bottomAnchor constraintEqualToAnchor:self.linkLabel.bottomAnchor constant:ABKNFTopSpace].active = YES;\n}\n\n- (void)setUpFonts {\n  // DynamicType\n  self.titleLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleTitle3 weight:UIFontWeightBold];\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.titleLabel];\n  self.descriptionLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.descriptionLabel];\n  self.linkLabel.font = [ABKUIUtils preferredFontForTextStyle:UIFontTextStyleSubheadline weight:UIFontWeightBold];\n  [ABKUIUtils enableAdjustsFontForContentSizeCategory:self.linkLabel];\n\n  // Bug: On Mac Catalyst 13, allowsDefaultTighteningForTruncation defaults to YES\n  // - Occurs only if numberOfLine is not 0\n  // - Default value should be NO (see documentation – https://apple.co/3bZFc8q)\n  // - Might be fixed in a later version\n  self.titleLabel.allowsDefaultTighteningForTruncation = NO;\n}\n\n#pragma mark - ApplyCard\n\n- (void)applyCard:(ABKCard *)card {\n  [super applyCard:card];\n  if (![card isKindOfClass:[ABKClassicCard class]]) {\n    return;\n  }\n  ABKClassicCard *classicCard = (ABKClassicCard *)card;\n  self.titleLabel.text = classicCard.title;\n  self.descriptionLabel.text = classicCard.cardDescription;\n  self.linkLabel.text = classicCard.domain;\n  \n  if (![Appboy sharedInstance].imageDelegate) {\n    NSLog(@\"[APPBOY][WARN] %@ %s\",\n          @\"ABKImageDelegate on Appboy is nil. Image loading may be disabled.\",\n          __PRETTY_FUNCTION__);\n    return;\n  }\n  [[Appboy sharedInstance].imageDelegate setImageForView:self.classicImageView\n                                   showActivityIndicator:NO\n                                                 withURL:[NSURL URLWithString:classicCard.image]\n                                        imagePlaceHolder:[self getPlaceHolderImage]\n                                               completed:nil];\n}\n\n- (void)awakeFromNib {\n  [super awakeFromNib];\n  [self setUpFonts];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKUIUtils/ABKSDWebImageImageDelegate.h",
    "content": "#import \"ABKImageDelegate.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface ABKSDWebImageImageDelegate : NSObject<ABKImageDelegate>\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "AppboyUI/ABKUIUtils/ABKSDWebImageImageDelegate.m",
    "content": "#import \"ABKSDWebImageImageDelegate.h\"\n#import \"ABKSDWebImageProxy.h\"\n#import <SDWebImage/SDAnimatedImageView+WebCache.h>\n\n@implementation ABKSDWebImageImageDelegate\n\n- (void)setImageForView:(UIImageView *)imageView\n  showActivityIndicator:(BOOL)showActivityIndicator\n                withURL:(nullable NSURL *)imageURL\n       imagePlaceHolder:(nullable UIImage *)placeHolder\n              completed:(nullable void (^)(UIImage * _Nullable image, NSError * _Nullable error, NSInteger cacheType, NSURL * _Nullable imageURL))completion {\n  [ABKSDWebImageProxy setImageForView:imageView\n                showActivityIndicator:showActivityIndicator\n                              withURL:imageURL\n                     imagePlaceHolder:placeHolder\n                            completed:completion];\n}\n\n- (void)loadImageWithURL:(nullable NSURL *)url\n                 options:(ABKImageOptions)options\n               completed:(nullable void(^)(UIImage *image, NSData *data, NSError *error, NSInteger cacheType, BOOL finished, NSURL *imageURL))completion {\n  [ABKSDWebImageProxy loadImageWithURL:url\n                               options:options\n                             completed:completion];\n}\n\n- (void)diskImageExistsForURL:(nullable NSURL *)url\n                    completed:(nullable void (^)(BOOL isInCache))completion {\n  [ABKSDWebImageProxy diskImageExistsForURL:url\n                                  completed:completion];\n}\n\n- (nullable UIImage *)imageFromCacheForURL:(nullable NSURL *)url {\n  return [ABKSDWebImageProxy imageFromCacheForKey:[ABKSDWebImageProxy cacheKeyForURL:url]];\n}\n\n- (Class)imageViewClass {\n  return [SDAnimatedImageView class];\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKUIUtils/ABKUIURLUtils.h",
    "content": "#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import \"ABKURLDelegate.h\"\n\n@interface ABKUIURLUtils : NSObject\n\n+ (BOOL)URLDelegate:(id<ABKURLDelegate>)urlDelegate\n         handlesURL:(NSURL *)url\n        fromChannel:(ABKChannel)channel\n         withExtras:(NSDictionary *)extras;\n+ (BOOL)URL:(NSURL *)url shouldOpenInWebView:(BOOL)openUrlInWebView;\n+ (BOOL)URLHasSystemScheme:(NSURL *)url;\n+ (void)openURLWithSystem:(NSURL *)url;\n+ (UIViewController *)topmostViewControllerWithRootViewController:(UIViewController *)viewController;\n+ (void)displayModalWebViewWithURL:(NSURL *)url\n             topmostViewController:(UIViewController *)topmostViewController;\n+ (NSURL *)getEncodedURIFromString:(NSString *)uriString;\n@end\n"
  },
  {
    "path": "AppboyUI/ABKUIUtils/ABKUIURLUtils.m",
    "content": "#import \"ABKUIURLUtils.h\"\n#import \"ABKUIUtils.h\"\n#import \"ABKModalWebViewController.h\"\n#import \"Appboy.h\"\n\n@interface ABKUIURLUtils ()\n\n+ (NSString *)trim:(NSString *)string;\n\n@end\n\n@implementation ABKUIURLUtils\n\n+ (BOOL)URLDelegate:(id<ABKURLDelegate>)urlDelegate\n         handlesURL:(NSURL *)url\n        fromChannel:(ABKChannel)channel\n         withExtras:(NSDictionary *)extras {\n  if (![ABKUIURLUtils URLDelegateIsValid:urlDelegate]) {\n    NSLog(@\"Not handling URL %@ with invalid ABKURLDelegate %@.\",\n          url.absoluteString, urlDelegate);\n    return NO;\n  }\n  if ([urlDelegate handleAppboyURL:url fromChannel:channel withExtras:extras]) {\n    NSLog(@\"Handled URL %@ with external ABKURLDelegate %@.\",\n          url.absoluteString, urlDelegate);\n    return YES;\n  }\n  return NO;\n}\n\n+ (BOOL)URLDelegateIsValid:(id<ABKURLDelegate>)urlDelegate {\n  return [urlDelegate respondsToSelector:@selector(handleAppboyURL:fromChannel:withExtras:)];\n}\n\n+ (BOOL)URL:(NSURL *)url shouldOpenInWebView:(BOOL)openUrlInWebView {\n  if ([ABKUIUtils objectIsValidAndNotEmpty:url.absoluteString] && openUrlInWebView) {\n    if ([ABKUIURLUtils URLHasValidWebScheme:url]) {\n      return YES;\n    } else {\n      NSLog(@\"Unsupported web URL scheme received: %@. Not opening URL in web view.\", url.absoluteString);\n    }\n  }\n  return NO;\n}\n\n+ (BOOL)URLHasValidWebScheme:(NSURL *)url {\n  return ([ABKUIUtils string:[url.scheme lowercaseString] isEqualToString:@\"http\"] ||\n          [ABKUIUtils string:[url.scheme lowercaseString] isEqualToString:@\"https\"]);\n}\n\n+ (BOOL)URLHasSystemScheme:(NSURL *)url {\n  static dispatch_once_t once;\n  static NSSet<NSString *> *systemSchemes;\n  dispatch_once(&once, ^{\n    systemSchemes = [NSSet setWithArray:@[\n      @\"mailto\",\n      @\"tel\",\n      @\"facetime\",\n      @\"facetime-audio\",\n      @\"sms\"\n    ]];\n  });\n\n  return [systemSchemes containsObject:[url.scheme lowercaseString]];\n}\n\n+ (void)openURLWithSystem:(NSURL *)url {\n  if (![NSThread isMainThread]) {\n    dispatch_sync(dispatch_get_main_queue(), ^{\n      [self openURL:url];\n    });\n  } else {\n    [self openURL:url];\n  }\n}\n\n+ (void)openURL:(NSURL *)url {\n  if (@available(iOS 13.0, *)) {\n    UIWindowScene *windowScene = ABKUIUtils.activeWindowScene;\n    if (windowScene) {\n      [windowScene openURL:url options:nil completionHandler:nil];\n      return;\n    }\n  }\n  \n  if (@available(iOS 10.0, *)) {\n    [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];\n    return;\n  }\n  \n  [[UIApplication sharedApplication] openURL:url];\n}\n\n+ (UIViewController *)topmostViewControllerWithRootViewController:(UIViewController *)viewController {\n  while (viewController.presentedViewController) {\n    viewController = viewController.presentedViewController;\n  }\n  return viewController;\n}\n\n+ (void)displayModalWebViewWithURL:(NSURL *)URL\n             topmostViewController:(UIViewController *)topmostViewController {\n  ABKModalWebViewController *webViewController = [[ABKModalWebViewController alloc] init];\n  webViewController.url = URL;\n  [topmostViewController presentViewController:webViewController animated:YES completion:nil];\n}\n\n+ (NSURL *)getEncodedURIFromString:(NSString *)uriString {\n  if (![ABKUIUtils objectIsValidAndNotEmpty:uriString]) {\n    return nil;\n  }\n  uriString = [ABKUIURLUtils trim:uriString];\n  NSURL *parsedUrl = [NSURL URLWithString:uriString];\n  // If the uriString is an invalid uri, e.g. an uri with unicode, URLWithString: will return nil.\n  if (!parsedUrl) {\n    // When the uriString has unicode, we have to escape those characters\n    uriString = [uriString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];\n    parsedUrl = [NSURL URLWithString:uriString];\n  }\n  return parsedUrl;\n}\n\n+ (NSString *)trim:(NSString *)string {\n  if ([string isKindOfClass:[NSString class]]) {\n    return [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n  }\n\n  NSLog(@\"Calling `trim` with invalid class: %@, value: %@. Returning nil.\",\n        [string class], string);\n  return nil;\n}\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKUIUtils/ABKUIUtils.h",
    "content": "#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import \"Appboy.h\"\n\n#define ABK_CGFLT_EQ(lhs, rhs) (fabs(lhs - rhs) < 10 * FLT_EPSILON * fabs(lhs + rhs))\n\n@interface ABKUIUtils : NSObject\n\n/*!\n * The currently active UIWindowScene.\n */\n@property (class, nonatomic, readonly) UIWindowScene *activeWindowScene API_AVAILABLE(ios(13.0));\n\n/*!\n * The currently active application UIWindow.\n */\n@property (class, nonatomic, readonly) UIWindow *activeApplicationWindow;\n\n/*!\n * The currently active application UIViewController.\n */\n@property (class, nonatomic, readonly) UIViewController *activeApplicationViewController;\n\n/*!\n * The current application status bar hidden state.\n */\n@property (class, readonly) BOOL applicationStatusBarHidden;\n\n/*!\n * The current application status bar style.\n */\n@property (class, readonly) UIStatusBarStyle applicationStatusBarStyle;\n\n/*!\n * Given a class and a channel, this method searches across multiple locations and returns the appropriate\n * bundle.\n * @param bundleClass The class associated with the bundle.\n * @param channel The channel associated with the bundle.\n * @returns The bundle if available, nil otherwise.\n */\n+ (NSBundle *)bundle:(Class)bundleClass channel:(ABKChannel)channel;\n\n+ (UIImage *)imageNamed:(NSString *)name bundle:(Class)bundleClass channel:(ABKChannel)channel;\n\n+ (NSString *)getLocalizedString:(NSString *)key inAppboyBundle:(NSBundle *)appboyBundle table:(NSString *)table;\n+ (BOOL)objectIsValidAndNotEmpty:(id)object;\n+ (Class)getModalFeedViewControllerClass;\n+ (BOOL)isNotchedPhone;\n\n+ (UIInterfaceOrientation)getInterfaceOrientation;\n+ (CGSize)getStatusBarSize;\n+ (UIColor *)dynamicColorForLightColor:(UIColor *)lightColor\n                             darkColor:(UIColor *)darkColor;\n+ (BOOL)string:(NSString *)string1 isEqualToString:(NSString *)string2;\n\n/*!\n * Verifies that one of the responders in the responder chain is kind of class aClass.\n * @param responder The start of the UIResponder chain.\n * @param aClass The UIResponder subclass looked for in the responder chain.\n * @return YES if aClass is found in the responder chain, NO otherwise.\n */\n+ (BOOL)responderChainOf:(UIResponder *)responder hasKindOfClass:(Class)aClass;\n\n/*!\n * Verifies that one of the responders in the responder chain is prefixed by prefix.\n * @param responder The start of the UIResponder chain.\n * @param prefix The prefix looked for in the responder chain.\n * @return YES if a class prefixed by prefix is found in the responder chain, NO otherwise.\n */\n+ (BOOL)responderChainOf:(UIResponder *)responder hasClassPrefixedWith:(NSString *)prefix;\n\n/*!\n * Creates an instance of the font associated with the text style and scaled appropriately for the\n * user's selected content size category.\n *\n * @warning On iOS 10 / tvOS 10 and below, this method does not apply the text style to the\n * resulting font. The font size is chosen according to https://apple.co/3snncd9 (Large / Default).\n *\n * @param textStyle The text style to use\n * @param weight The weight of the font\n * @return The font corresponding to the text style with weight applied to it.\n */\n+ (UIFont *)preferredFontForTextStyle:(UIFontTextStyle)textStyle weight:(UIFontWeight)weight;\n\n/*!\n * Enables `adjustsFontForContentSizeCategory` on the label if available (iOS 10+).\n *\n * This method has no effect on iOS / tvOS versions prior to 10.0.\n *\n * @param label Any object conforming to `UIContentSizeCategoryAdjusting`\n */\n+ (void)enableAdjustsFontForContentSizeCategory:(id)label;\n\n@end\n"
  },
  {
    "path": "AppboyUI/ABKUIUtils/ABKUIUtils.m",
    "content": "#import \"ABKUIUtils.h\"\n#import \"ABKSDWebImageProxy.h\"\n\nstatic NSString *const LocalizedAppboyStringNotFound = @\"not found\";\nstatic NSUInteger const iPhoneXHeight = 2436.0; // iPhone 12 mini simulator is also this size\nstatic NSUInteger const iPhoneXRHeight = 1792.0;\nstatic NSUInteger const iPhoneXSMaxHeight = 2688.0;\nstatic NSUInteger const iPhoneXRScaledHeight = 1624.0;\nstatic NSUInteger const iPhone12 = 2532.0; // iPhone 12 pro is also this size\nstatic NSUInteger const iPhone12ProMax = 2778.0;\nstatic NSUInteger const iPhone12Mini = 2340.0;\n\n// Bundles\nstatic NSString * const ABKUIPodCCBundleName = @\"AppboyUI.ContentCards.bundle\";\nstatic NSString * const ABKUIPodIAMBundleName = @\"AppboyUI.InAppMessage.bundle\";\nstatic NSString * const ABKUIPodNFBundleName = @\"AppboyUI.NewsFeed.bundle\";\n\n@implementation ABKUIUtils\n\n#pragma mark - Bundle Helper\n\n+ (NSBundle *)bundle:(Class)bundleClass channel:(ABKChannel)channel {\n  NSBundle *bundle;\n\n  // SPM\n#if SWIFT_PACKAGE\n  bundle = SWIFTPM_MODULE_BUNDLE;\n  if (bundle != nil) {\n    return bundle;\n  }\n#endif\n\n  // Cocoapods\n  switch (channel) {\n    case ABKContentCardChannel:\n      bundle = [self bundleForName:ABKUIPodCCBundleName class:bundleClass];\n      break;\n      \n    case ABKInAppMessageChannel:\n      bundle = [self bundleForName:ABKUIPodIAMBundleName class:bundleClass];\n      break;\n      \n    case ABKNewsFeedChannel:\n      bundle = [self bundleForName:ABKUIPodNFBundleName class:bundleClass];\n      break;\n      \n    default:\n      NSLog(@\"Warning: Received bundle request for unsupported channel: %ld\", (long)channel);\n      break;\n  }\n  \n  if (bundle != nil) {\n    return bundle;\n  }\n  \n  return [NSBundle bundleForClass:bundleClass];\n}\n\n+ (nullable NSBundle *)bundleForName:(NSString *)name class:(Class)bundleClass {\n  NSURL *bundleURL = [[NSBundle bundleForClass:bundleClass].resourceURL URLByAppendingPathComponent:name];\n\n  if ([bundleURL checkResourceIsReachableAndReturnError:nil]) {\n    return [NSBundle bundleWithURL:bundleURL];\n  }\n\n  return nil;\n}\n\n#pragma mark - View Hierarchy Helpers\n\n// Used in unit tests to mock the UIApplication instance used.\n+ (UIApplication *)application {\n  return UIApplication.sharedApplication;\n}\n\n+ (UIWindowScene *)activeWindowScene {\n  UIWindowScene *windowScene;\n  UIWindowScene *activeWindowScene;\n  \n  // Loop over the connected window scenes to find the last foreground active\n  // one. If no scene is currently in foreground state, fallback to last window\n  // scene in hierarchy.\n  for (UIScene *scene in [self application].connectedScenes) {\n    if (![scene isKindOfClass:[UIWindowScene class]]) {\n      continue;\n    }\n    \n    windowScene = (UIWindowScene *)scene;\n    if (scene.activationState == UISceneActivationStateForegroundActive) {\n      activeWindowScene = windowScene;\n    }\n  }\n  return activeWindowScene ?: windowScene;\n}\n\n+ (UIWindow *)activeApplicationWindow {\n  if (@available(iOS 13.0, tvOS 13.0, *)) {\n    UIWindow *window = [self selectApplicationWindow:ABKUIUtils.activeWindowScene.windows];\n    if (window) {\n      return window;\n    }\n  }\n  \n  return [self selectApplicationWindow:[self application].windows];\n}\n\n+ (UIViewController *)activeApplicationViewController {\n  return ABKUIUtils.activeApplicationWindow.rootViewController;\n}\n\n+ (BOOL)applicationStatusBarHidden {\n  UIViewController *viewController = self.activeApplicationViewController;\n  while (viewController.childViewControllerForStatusBarHidden) {\n    viewController = viewController.childViewControllerForStatusBarHidden;\n  }\n  return viewController.prefersStatusBarHidden;\n}\n\n+ (UIStatusBarStyle)applicationStatusBarStyle {\n  UIViewController *viewController = self.activeApplicationViewController;\n  while (viewController.childViewControllerForStatusBarStyle) {\n    viewController = viewController.childViewControllerForStatusBarStyle;\n  }\n  return viewController.preferredStatusBarStyle;\n}\n\n/*!\n * Selects the window most likely to be the application window among an array of windows.\n *\n * @discussion The application window should most likely be the bottommost window with a windowLevel\n *             set to UIWindowLevelNormal (excluding a potential ABKInAppMessageWindow currently\n *             being displayed). If no window respecting that condition is found, fallback to the first\n *             window in the hierarchy.\n *\n * @param windows An array of UIWindow\n * @returns The UIWindow most likely to be the application window, nil if windows param is empty\n */\n+ (UIWindow *)selectApplicationWindow:(NSArray<UIWindow *> *)windows {\n  // Dynamically gets ABKInAppMessageWindow class as it is part of AppboyUI\n  Class ABKInAppMessageWindow = NSClassFromString(@\"ABKInAppMessageWindow\");\n  \n  // Holds all windows excluding any `ABKInAppMessageWindow`\n  NSMutableArray<UIWindow *> *filteredWindows = [NSMutableArray array];\n  \n  for (UIWindow *window in windows) {\n    // Ignores ABKInAppMessageWindow\n    if (ABKInAppMessageWindow && [window isKindOfClass:[ABKInAppMessageWindow class]]) {\n      continue;\n    }\n    // Assumes that the application window has a windowLevel set to\n    // UIWindowLevelNormal\n    if (window.windowLevel == UIWindowLevelNormal) {\n      return window;\n    }\n    \n    [filteredWindows addObject:window];\n  }\n  \n  // Fallback to first window in hierarchy\n  return filteredWindows.firstObject;\n}\n\n#pragma mark - Methods\n\n+ (NSString *)getLocalizedString:(NSString *)key inAppboyBundle:(NSBundle *)appboyBundle table:(NSString *)table {\n  // Check if the app has a customized localization for the given key\n  NSString *localizedString = [[NSBundle mainBundle] localizedStringForKey:key\n                                                                     value:LocalizedAppboyStringNotFound\n                                                                     table:nil];\n  if ([ABKUIUtils string:localizedString isEqualToString:LocalizedAppboyStringNotFound]) {\n    // Check Braze's localization in the given bundle\n    for (NSString *language in [[NSBundle mainBundle] preferredLocalizations]) {\n      if ([[appboyBundle localizations] containsObject:language]) {\n        NSBundle *languageBundle = [NSBundle bundleWithPath:[appboyBundle pathForResource:language ofType:@\"lproj\"]];\n        localizedString = [languageBundle localizedStringForKey:key\n                                                          value:LocalizedAppboyStringNotFound\n                                                          table:table];\n        break;\n      }\n    }\n    if ([ABKUIUtils string:localizedString isEqualToString:LocalizedAppboyStringNotFound]) {\n      // Couldn't find Braze's localization for the given key, fetch the default value for the key\n      // from Base.lproj.\n      NSBundle *appboyBaseBundle = [NSBundle bundleWithPath:[appboyBundle pathForResource:@\"Base\" ofType:@\"lproj\"]];\n      localizedString = [appboyBaseBundle localizedStringForKey:key\n                                                          value:LocalizedAppboyStringNotFound\n                                                          table:table];\n    }\n  }\n  return localizedString;\n}\n\n+ (BOOL)objectIsValidAndNotEmpty:(id)object {\n  if (object != nil && object != [NSNull null]) {\n    if ([object isKindOfClass:[NSArray class]] || [object isKindOfClass:[NSDictionary class]] || [object isKindOfClass:[NSString class]]) {\n      return ![ABKUIUtils isEmpty:object];\n    }\n    if ([object isKindOfClass:[NSURL class]]) {\n      NSString *string = [(NSURL *)object absoluteString];\n      return [string length] != 0;\n    }\n    return YES;\n  }\n  return NO;\n}\n\n// Calls AppboyKit private abk_isEmpty method on object\n+ (BOOL)isEmpty:(id)object {\n  SEL sel = NSSelectorFromString(@\"abk_isEmpty\");\n  IMP imp = [object methodForSelector:sel];\n  return ((BOOL (*)(id, SEL))imp)(object, sel);\n}\n\n+ (Class)getModalFeedViewControllerClass {\n  return NSClassFromString(@\"ABKNewsFeedViewController\");\n}\n\n+ (BOOL)isNotchedPhone {\n  return ([[UIScreen mainScreen] nativeBounds].size.height == iPhoneXHeight ||\n          [[UIScreen mainScreen] nativeBounds].size.height == iPhoneXRHeight ||\n          [[UIScreen mainScreen] nativeBounds].size.height == iPhoneXSMaxHeight ||\n          [[UIScreen mainScreen] nativeBounds].size.height == iPhoneXRScaledHeight ||\n          [[UIScreen mainScreen] nativeBounds].size.height == iPhone12 ||\n          [[UIScreen mainScreen] nativeBounds].size.height == iPhone12ProMax ||\n          [[UIScreen mainScreen] nativeBounds].size.height == iPhone12Mini);\n}\n\n+ (UIImage *)imageNamed:(NSString *)name bundle:(Class)bundleClass channel:(ABKChannel)channel {\n  NSBundle *bundle = [ABKUIUtils bundle:bundleClass channel:channel];\n  return [UIImage imageNamed:name inBundle:bundle compatibleWithTraitCollection:nil];\n}\n\n+ (UIInterfaceOrientation)getInterfaceOrientation {\n  if (@available(iOS 13.0, *)) {\n    UIWindowScene *windowScene = ABKUIUtils.activeWindowScene;\n    if (windowScene) {\n      return windowScene.interfaceOrientation;\n    }\n  }\n  return UIApplication.sharedApplication.statusBarOrientation;\n}\n\n+ (CGSize)getStatusBarSize {\n  if (@available(iOS 13.0, *)) {\n    UIWindowScene *windowScene = ABKUIUtils.activeWindowScene;\n    if (windowScene) {\n      return windowScene.statusBarManager.statusBarFrame.size;\n    }\n  }\n  return UIApplication.sharedApplication.statusBarFrame.size;\n}\n\n#pragma mark - Dark Theme\n\n+ (UIColor *)dynamicColorForLightColor:(UIColor *)lightColor\n                             darkColor:(UIColor *)darkColor {\n  if (lightColor == nil || darkColor == nil) {\n    return lightColor;\n  }\n\n#if !TARGET_OS_TV\n  if (@available(iOS 13.0, *)) {\n    // Crashes if either darkColor or lightColor is nil\n    return [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {\n      if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {\n        return darkColor;\n      } else {\n        return lightColor;\n      }\n    }];\n  } else {\n    return lightColor;\n  }\n#else\n  return lightColor;\n#endif\n}\n\n/*!\n * Unlike NSString's :isEqualToString method, this method returns true rather than throwing an exception if the first or both inputs are nil\n * OR the first or both inputs are NSNull.\n */\n+ (BOOL)string:(NSString *)string1 isEqualToString:(NSString *)string2 {\n  if ((string1 == nil && string2 == nil) || ([string1 isKindOfClass:[NSNull class]] && [string2 isKindOfClass:[NSNull class]])) {\n    return YES;\n  }\n  if (string1 == nil || [string1 isKindOfClass:[NSNull class]] || string2 == nil || [string2 isKindOfClass:[NSNull class]]) {\n    return NO;\n  }\n  return [string1 isEqualToString:string2];\n}\n\n+ (BOOL)responderChainOf:(UIResponder *)responder hasKindOfClass:(Class)aClass {\n  UIResponder *resp = responder;\n  \n  while (resp && ![resp isKindOfClass:aClass]) {\n    resp = resp.nextResponder;\n  }\n  \n  return resp != nil;\n}\n\n+ (BOOL)responderChainOf:(UIResponder *)responder hasClassPrefixedWith:(NSString *)prefix {\n  UIResponder *resp = responder;\n  \n  while (resp && ![NSStringFromClass(resp.class) hasPrefix:prefix]) {\n    resp = resp.nextResponder;\n  }\n  \n  return resp != nil;\n}\n\n+ (UIFont *)preferredFontForTextStyle:(UIFontTextStyle)textStyle weight:(UIFontWeight)weight {\n  if (@available(iOS 11.0, tvOS 11.0, *)) {\n    UIFontMetrics *metrics = [UIFontMetrics metricsForTextStyle:textStyle];\n    UIFontDescriptor *descriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:textStyle];\n    UIFont *font = [UIFont systemFontOfSize:descriptor.pointSize weight:weight];\n    return [metrics scaledFontForFont:font];\n  } else {\n    // https://apple.co/3snncd9 (Large / Default)\n    static dispatch_once_t once;\n    static NSDictionary *textStyleMap;\n    dispatch_once(&once, ^{\n      textStyleMap = @{\n        UIFontTextStyleTitle1: @(28.0),\n        UIFontTextStyleTitle2: @(22.0),\n        UIFontTextStyleTitle3: @(20.0),\n        UIFontTextStyleHeadline: @(17.0),\n        UIFontTextStyleBody: @(17.0),\n        UIFontTextStyleCallout: @(16.0),\n        UIFontTextStyleSubheadline: @(15.0),\n        UIFontTextStyleFootnote: @(13.0),\n        UIFontTextStyleCaption1: @(12.0),\n        UIFontTextStyleCaption2: @(11.0)\n      };\n    });\n\n    return [UIFont systemFontOfSize:[textStyleMap[textStyle] doubleValue]\n                             weight:weight];\n  }\n}\n\n+ (void)enableAdjustsFontForContentSizeCategory:(id)label {\n  if (@available(iOS 10.0, tvOS 10.0, *)) {\n    id<UIContentSizeCategoryAdjusting> adjustableLabel = label;\n    if ([adjustableLabel respondsToSelector:@selector(setAdjustsFontForContentSizeCategory:)]) {\n      adjustableLabel.adjustsFontForContentSizeCategory = YES;\n    }\n  }\n}\n\n@end\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "#### ⚠️ The New Braze [Swift SDK](https://github.com/braze-inc/braze-swift-sdk) is now available!\n\n## 4.7.0\n\n#### Breaking\n- Updates the minimum required version of SDWebImage from 5.8.2 to [5.18.7](https://github.com/SDWebImage/SDWebImage/releases/tag/5.18.7).\n  - This version includes the privacy manifest for SDWebImage, which appears on the [privacy-impacting SDKs list](https://developer.apple.com/support/third-party-SDK-requirements/).\n\n#### Added\n- Adds the privacy manifest to describe data usage collected by Braze. For more details, refer to the [Apple documentation on privacy manifests](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files).\n- Adds code signatures to all XCFrameworks in the Braze iOS SDK, signed by `Braze, Inc.`.\n\n##### Fixed\n- Fixes an issue in Full or Modal in-app messages where the header text would be duplicated in place of the body text under certain conditions.\n\n## 4.6.0\n\nThis release requires Xcode `14.x`.\n\n#### Breaking\n- Drops support for iOS 9 and iOS 10.\n- Removes support for the outdated `.framework` assets when importing via Carthage in favor of the modern `.xcframework` assets.\n  - Use the command `carthage update --use-xcframeworks` to import the appropriate Braze asset.\n  - Removes support for `appboy_ios_sdk_full.json` in favor of using `appboy_ios_sdk.json` by including these lines in your `Cartfile`:\n    ```\n    binary \"https://raw.githubusercontent.com/Appboy/appboy-ios-sdk/master/appboy_ios_sdk.json\"\n    github \"SDWebImage/SDWebImage\"\n    ```\n\n##### Fixed\n- Improves resilience when triggering in-app messages with date property filters.\n\n##### Added\n- Adds a new option `ABKReenqueueInAppMessage` to enum `ABKInAppMessageDisplayChoice`.\n  - Return this option in `beforeInAppMessageDisplayed:` of an `ABKInAppMessageControllerDelegate` to ensure that an in-app message is not displayed and becomes eligible to trigger again.\n  - This option will reset any trigger times and re-eligibility rules as if it was never triggered. It will not add the message to the in-app message stack.\n\n## 4.5.4\n\n##### Fixed\n- Improves reliability of custom event property type validation.\n- Fixes an issue where the status bar would not restore to its original state after a full in-app message was dismissed.\n\n## 4.5.3\n\n##### Fixed\n- Fixes a crash that occurs when receiving custom event properties of numeric types under certain conditions.\n- Fixes UI responsiveness warnings when requesting location authorization status.\n\n## 4.5.2\n\n##### Fixed\n- Improves reliability when validating trigger properties.\n- Improves the `NSURLSessionConfiguration` disk and memory cache capacities for file downloads. This change enables larger file downloads to be cached if needed.\n\n## 4.5.1\n\n##### Fixed\n- Improves eligibility checks around the minimum trigger timeout for in-app messages by now checking at _trigger time_ in addition to _display time_.\n- Fixes an issue where purchases would not trigger certain templated in-app messages.\n\n##### Added\n- Adds the delegate method `noMatchingTriggerForEvent:name:` to `ABKInAppMessageControllerDelegate`, which is called if no Braze in-app message was triggered for a given event.\n\n## 4.5.0\n\n##### Added\n- Adds support for Content Cards to evaluate Retry-After headers.\n\n## 4.4.4\n\n##### Fixed\n- Calling `appboyBridge.closeMessage()` or `brazeBridge.closeMessage()` from an HTML in-app message now correctly triggers `ABKInAppMessageUIDelegate.onInAppMessageDismissed:` when implemented.\n- Fixes an issue in `4.4.3` where the tvOS SDK incorrectly referenced an older SDK version.\n\n## 4.4.3\n\n##### Fixed\n- Fixes an issue introduced in `4.4.0` which prevented custom events or purchases with an empty dictionary of properties from being logged.\n- Improves handling of `ABKInAppMessageWindow`'s dismissal to promptly remove it from the view hierarchy.\n- Fixes the position of the pinned indicator for _Captioned Image_ Content Cards when using the default UI.\n- Fixes an issue introduced in `4.3.2` and limited to users of `Appboy-tvOS-SDK`, which prevented custom events with properties or purchases with properties from being logged.\n\n##### Added\n- Adds a `padding` property to `ABKCaptionedImageContentCardCell` to support modifying the default value.\n\n## 4.4.2\n\n##### Fixed\n- Fixes a bug for HTML in-app messages using the _HTML Upload with Preview_ option to improve the reliability of in-app message display.\n- Fixes a bug preventing integration via Swift Package Manager in specific contexts.\n- Fixes an issue in the default Content Cards UI where the empty feed label was truncated if it was too large for the screen, for example due to accessibility or localization.\n- Fixes an issue where Slideup in-app messages would be automatically dismissed after multiple interaction with the app's main window.\n\n##### Changed\n- If `changeUser:sdkAuthSignature:` is called with the current user's ID, but with a new and valid SDK Authentication signature, the new signature will be used.\n- Improves push tracking accuracy for apps making use of `UISceneDelegate` (UIKit) or `Scene` (SwiftUI).\n\n## 4.4.1\n\n##### Fixed\n- Fixes an issue in which `input` elements with `type=\"date\"` in HTML in-app messages do not respond to some user interactions on iOS 14 and iOS 15.\n- Fixes `ABKSdkMetadata` availability when using the dynamic variant of the SDK.\n- Fixes an issue in which the default content cards UI's empty feed label does not wrap properly when the device is using Larger Accessibility Sizes for its text size.\n\n##### Changed\n- Changed `ABKInAppMessageUIDelegate.inAppMessageViewControllerWithInAppMessage:` to accept a `nil` return value.\n\n##### Added\n- Adds support for the `playsinline` attribute on HTML `<video>` elements within webpages that are opened in the app by Braze.\n- Adds XCFramework support for the Core integration via Carthage. Please follow the [Carthage migration guide](https://github.com/Carthage/Carthage#migrating-a-project-from-framework-bundles-to-xcframeworks) when transitioning to the new artifact.\n\n## 4.4.0\n\n##### Breaking\n- Adds XCFramework support to Carthage. This allows projects integrated via Carthage to support Apple Silicon simulators and Mac Catalyst.\n  - When migrating from the original `.framework` to the new `.xcframework`, follow [the official Carthage migration guide](https://github.com/Carthage/Carthage#migrating-a-project-from-framework-bundles-to-xcframeworks).\n  - For those using the Full integration, use the following lines in your `Cartfile`. Note that it references the file `appboy_ios_sdk.json`:\n    ```\n    binary \"https://raw.githubusercontent.com/Appboy/appboy-ios-sdk/master/appboy_ios_sdk.json\"\n    github \"SDWebImage/SDWebImage\"\n    ```\n    - To continue using the original Full `.framework` file, include the `Cartfile` lines above but reference `appboy_ios_sdk_full.json`. Then, run `carthage update`.\n  - For those using the Thin integration, use the same `Cartfile` above but exclude the line with `SDWebImage`.\n  - The Core integration does not support XCFrameworks, and you can use the original `.framework` files as before.\n\n##### Added\n- Adds a new attachment to the release called `Appboy_iOS_SDK.xcframework.zip`.\n  - This artifact has the all-in-one XCFramework containing the full SDK code including all of the assets.\n  - When importing this code manually, drag-and-drop the XCFramework into your project and select `Embed & Sign`. Then, add `-ObjC` under `Build Settings > Other Linker Flags` in your app's target.\n- Adds localization support for the close button's accessibility label in modal and full in-app messages.\n- Adds the ability to set the SDK's log level at runtime by setting `ABKLogLevelKey` to an integer in `appboyOptions`. Descriptions of the available log levels can be found [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/other_sdk_customizations/#description-of-log-levels).\n- Adds `Appboy.addSdkMetadata:` to allow self reporting of SDK Metadata fields via the `ABKSdkMetadata` enum.\n\n## 4.3.4\n\nThis release requires Xcode 13.\n\n##### Fixed\n- Fixes an issue in which the pinned indicator for a Banner Content Card would not display in the default Content Cards UI.\n- Fixes an issue which prevented custom events and purchases with properties larger than 50 KB to be properly discarded.\n\n## 4.3.3\n\n##### Fixed\n- Fixes a race-condition occasionally preventing HTML in-app messages with assets from being displayed from a test push.\n- Fixes an issue which prevented HTML in-app messages from opening `sms:`, `mailto:`, `tel:`, `facetime:` and `facetime-audio:` urls.\n  - Previously, those urls would fail to open silently.\n- Fixes an issue where `ABKContentCardsTableViewController` was not displaying the \"no update\" label after the last card was deleted from the feed.\n\n##### Added\n- Adds methods `addToSubscriptionGroupWithGroupId:` and `removeFromSubscriptionGroupWithGroupId:` to `ABKUser` to manage SMS/Email Subscription Groups.\n  - Also adds `appboyBridge.getUser().addToSubscriptionGroup(groupId)` and `appboyBridge.getUser().removeFromSubscriptionGroup(groupId)` to the javascript interface for HTML in-app messages.\n\n## 4.3.2\n\n##### Fixed\n- Iframes embedded in an HTML in-app message are now displayed as part of the same in-app message. Previously, iframes would be loaded in a separate webview.\n\n##### Added\n- Adds support for navigation bar transparency changes introduced in iOS 15. Apps using Braze default UIs for Content Cards, the News Feed, and the modal WebView should upgrade to this version as soon as possible ahead of iOS 15's release.\n\n## 4.3.1\n\n##### Fixed\n- The `sdkAuthenticationDelegate` now works as expected when setting the property directly.\n- VoiceOver no longer reads content beneath the displayed in-app message.\n\n##### Changed\n- The number of unviewed Content Cards in `ABKContentCardsController`'s `unviewedContentCardCount` now excludes control cards.\n- The default Content Cards UI now allows swipe-to-refresh gestures when empty.\n- Deprecates `ABKInAppMessageController`'s method `displayNextInAppMessageWithDelegate:` in favor of `displayNextInAppMessage`.\n\n##### Added\n- Custom events and purchases now support nested properties.\n  - In addition to integers, floats, booleans, dates, or strings, a JSON object can be provided containing dictionaries of arrays or nested dictionaries. All properties combined can be up to 50 KB in total length.\n\n## 4.3.0\n\n##### Breaking\n- Refined Content Cards UI public api changes introduced in `4.2.0`.\n\n##### Fixed\n- Fixes an issue introduced in `4.2.0` that caused Content Card type `ABKClassicImageContentCardCell` to crash on display when not using Storyboard.\n\n## 4.2.0\n\n##### ⚠️ Known Issues\n- This release contains a known issue with the Content Cards default UI on iOS, where showing a \"Classic\" type card with an image causes a crash. If you are using the default Content Cards UI, do not upgrade to this version.\n\n##### Breaking\n- Content Cards and News Feed are now more extensible!\n  - Class level API methods have changed to instance methods to make subclassing easier, however `getNavigationContentCardsViewController` and `getNavigationFeedViewController` are left in as class methods for backwards compatibility.\n  - Subclassing views is now fully supported for customizations. See the [Content Card sample code for examples](https://github.com/Appboy/appboy-ios-sdk/tree/master/Samples/ContentCards/BrazeContentCardsSampleApp).\n  - Alternatively, you can bring your own storyboard with customizations. See our [example custom storyboard implementation](https://github.com/Appboy/appboy-ios-sdk/tree/master/Example/Stopwatch/Sources/ViewControllers/Braze%20UI/FeedUIViewController.m).\n  - See the [Content Cards documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/content_cards/) for more information.\n\n##### Fixed\n- Fixes an issue with Dynamic Type support introduced in [3.34.0](#3340) to be compatible with iOS 9.\n\n##### Added\n- Adds support for new SDK Authentication feature.\n- Exposes `window.brazeBridge` in HTML in-app messages which replaces `window.appboyBridge`. `appboyBridge` is deprecated and will be removed in a future version of the SDK.\n\n##### Changed\n- Makes in-app message window handling more resilient:\n  - The in-app message window tries to display up to 10 times when another window competes for visibility. If the in-app message is not guaranteed visibility, it is dismissed and an error is logged.\n- Improves `Appboy`'s `wipeDataAndDisableForAppRun` and `disableSDK` to handle additional use cases.\n- Deprecates `flushDataAndProcessRequestQueue` in favor of `requestImmediateDataFlush`.\n\n## 4.1.0\n\n##### Breaking\n- `ABKURLDelegate` method `handleAppboyURL:fromChannel:withExtras:` is now invoked for all urls.\n  - Previously, this delegate method was not invoked for urls opened in a WebView or the default browser when originating from the News Feed or Content Cards.\n- Removes `ABKUIURLUtils` method `openURLWithSystem:fromChannel:`. Use `openURLWithSystem:` as a replacement.\n\n##### Fixed\n- Fixes a case where the `ABKURLDelegate` method `handleAppboyURL:fromChannel:withExtras:` was being called twice when opening a push notification with an url.\n\n##### Changed\n- Deprecates `ABKUnknownChannel`.\n\n## 4.0.2\n\n##### Fixed\n- Fixes a double redirection bug in Push Stories when the app is in a terminated state and `application:didReceiveRemoteNotification:fetchCompletionHandler:` is not implemented.\n\n##### Changed\n- Improves the Swift Package Manager bundle lookup to be more flexible.\n\n##### Added\n- Adds support to use a dictionary named `Braze` instead of `Appboy` when adding customization in the `Info.plist`. After adding the `Braze` dictionary, please remove the previous `Appboy` dictionary.\n\n## 4.0.1\n\n##### Fixed\n- Sets `CFBundleSupportedPlatforms` in _.plist_ files to the correct non-simulator value.\n- Removes the Dynamic Type support warnings.\n\n## 4.0.0\n\n##### Breaking\n- `AppboyKit` is now distributed as an XCFramework when integrating with Cocoapods. Cocoapods 1.10.0+ is required.\n  - This removes the need for integrators to exclude the `arm64` architecture when building for the simulator. Please undo any of the changes that may have been made when upgrading to [3.27.0 (_Integrators will now be required to exclude ..._)](#3.27.0_4.0.0).\n\n##### Fixed\n- Fixes the Swift Package Manager cleanup script to remove only the necessary files.\n\n##### Added\n- Adds Mac Catalyst support for apps integrating with Cocoapods.\n\n## 3.34.0\n\n##### Breaking\n- Replaces `ABKInAppMessageSlideupViewController`'s `slideConstraint` by `offset`.\n\n##### Added\n- Adds a new Github repo to optimize import speeds for applications integrating with Swift Package Manager.\n  - To use this repo, follow these steps:\n    - Remove the existing package in your application that points to the url: `https://github.com/Appboy/Appboy-ios-sdk`.\n    - Add a new package using the new url: `https://github.com/braze-inc/braze-ios-sdk`.\n    - Follow the rest of [the setup instructions here](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/swift_package_manager/).\n- Adds support for Right-to-Left languages in the News Feed.\n- Adds support for scaling fonts automatically with [Dynamic Type](https://apple.co/3jSe9hc) for in-app messages and the News Feed.\n\n##### Changed\n- Improves accessibility handling for modal and full in-app messages.\n- Improves Slideup in-app message animations.\n\n## 3.33.1\n\n##### Fixed\n- Fixes Swift Package Manager integration.\n  - In Xcode, select _File ▸ Swift Packages ▸ Update to Latest Package Versions_ to update.\n- Fixes Push Story integration via CocoaPods for applications that have `use_frameworks!` in their Podfile.\n\n## 3.33.0\n\n##### Breaking\n- Changed Push Story integration to use XCFrameworks for Cocoapods and manual integration. Applications currently integrating Push Stories via Cocoapods or manual integration must follow these steps when updating:\n  - In your Notification Content Extension target:\n    - Remove `AppboyPushStory.framework` from `Frameworks and Libraries` under the `General` tab.\n  - In your application target:\n    - Delete the `Copy File` build phase copying the `AppboyPushStory.framework` to the `Frameworks` destination.\n    - Delete the `Run Script` build phase that starts with:\n      ```\n      APP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n\n      find \"$APP_PATH\" -name 'AppboyPushStory.framework' -type d | while read -r FRAMEWORK\n      ...\n      ```\n\n- Removed `ABKSDWebImageProxy`'s `prefetchURLs:` method.\n\n##### Fixed\n- Fixes a double redirection bug in Push Stories when the app is in a terminated state and the `UNUserNotificationCenter` delegate is not the `AppDelegate`.\n\n## 3.32.0\n\n##### Added\n- Adds Mac Catalyst support for apps integrating with Swift Package Manager (SPM).\n  - Please follow [the instructions here](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/swift_package_manager/) to import the SDK with SPM. The SDK does not currently support Mac Catalyst when integrated through Cocoapods or Carthage.\n  - To add Mac Catalyst support, update the `Run Script Action` described in the [3.31.0 section of the Changelog](#3310).\n    - Replace the existing script with the following:\n      ```\n      # iOS\n      bash \"$BUILT_PRODUCTS_DIR/Appboy_iOS_SDK_AppboyKit.bundle/Appboy.bundle/appboy-spm-cleanup.sh\"\n      # macOS\n      bash \"$BUILT_PRODUCTS_DIR/Appboy_iOS_SDK_AppboyKit.bundle/Contents/Resources/Appboy.bundle/appboy-spm-cleanup.sh\"\n      ```\n\n## 3.31.2\n\n##### Fixed\n- Fixes the formatting of Full and Slideup in-app messages when displaying on iPhone 12 mini.\n\n##### Changed\n- Improves Push Story click tracking handling.\n\n## 3.31.1\n\n##### Breaking\n- Removes the method `getSDWebImageProxyClass` from `ABKUIUtils`.\n  - You can access the public class `ABKSDWebImageProxy` directly by importing `ABKSDWebImageProxy.h`.\n\n##### Fixed\n- Fixes a bug in the Cocoapods integration that would lead to SDK localizations being embedded for languages not explicitly supported in the app.\n- Fixes a rare crash that would occur when no windows exist at `UIWindowLevelNormal` while an in-app message is being displayed and `UIKit` requests UI updates (orientation change, etc.).\n- Fixes a bug in modal in-app messages where some languages (such as Burmese) may have clipped text.\n\n## 3.31.0\n\n##### Breaking\n- For apps that have previously integrated through Swift Package Manager, please perform the following steps:\n  - In the Xcode menu, click `Product > Scheme > Edit Scheme...`\n      - Click the expand ▶️ next to `Build` and select `Post-actions`. Press `+` and select `New Run Script Action`.\n      - In the dropdown next to `Provide build settings from`, select your app's target.\n      - Copy this script into the open field:\n        ```\n        bash \"$BUILT_PRODUCTS_DIR/Appboy_iOS_SDK_AppboyKit.bundle/Appboy.bundle/appboy-spm-cleanup.sh\"\n        ```\n  - If you are updating from 3.29.0 or 3.29.1, remove the `Run Script Action` previously specified in the [3.29.0 section of this changelog](#3290).\n\n##### Added\n- Adds Push Stories support for apps integrating with Swift Package Manager.\n  - In your app content extension's target, under `Build Settings > Other Linker Flags`, add the `-ObjC` linker flag.\n\n##### Changed\n- Updates the email validation on the SDK to be more lenient in favor of more accurate validation by the Braze backend. Valid emails with uncommon patterns or international characters that were previously rejected will now be accepted.\n- Deprecates `ABKDeviceWhitelistKey` in favor of `ABKDeviceAllowlistKey`.\n\n##### Fixed\n- Fixes a bug in HTML in-app messages where some native WebKit UI elements could be unresponsive.\n\n## 3.30.0\n\n##### Breaking\n- Body click analytics will no longer automatically be collected for HTML in-app messages created using the _HTML Upload with Preview_ option in the platform.\n  - To continue to receive body click analytics, you must log body clicks explicitly from your message via Javascript using `appboyBridge.logClick()`.\n\n##### Fixed\n- Fixes a bug with Full in-app messages where the button positions did not match the preview on the Braze dashboard.\n- Fixes a bug where in-app messages would be displayed below the application window under specific conditions.\n  - Apps that set up their window asynchronously at startup could accidentally hide the in-app message window if one was being displayed (e.g. as a result of clicking on a test in-app message notification).\n\n##### Added\n- Adds support for custom endpoints with a scheme included (`https`, `http`, etc.). For example, `http://localhost:3001` will no longer result in `https://http://localhost:3001` as the resolved endpoint.\n\n## 3.29.1\n\n#### Added\n- Adds improved support for in-app message display on iPhone 12 models.\n\n## 3.29.0\n\n##### Added\n- Adds initial support for Swift Package Manager. There are 2 new packages that have been added: `AppboyKit` for the core SDK and `AppboyUI` for the full SDK (including UI elements), which correspond to the `Appboy-iOS-SDK/Core` and `Appboy-iOS-SDK` pods, respectively.\n  - Note that tvOS support is not available via Swift Package Manager for this release. Push Stories is only available through a side-by-side integration with Cocoapods.\n  - To add the package to your project follow these steps:\n    - Select `File > Swift Packages > Add Package Dependency`.\n      - In the search bar, enter `https://github.com/Appboy/Appboy-ios-sdk`.\n      - Select _one_ of `AppboyKit` or `AppboyUI`. Note that `AppboyUI` includes `AppboyKit` automatically.\n    - In your app's target, under `Build Settings > Other Linker Flags`, add the `-ObjC` linker flag.\n    - In the Xcode menu, click `Product > Scheme > Edit Scheme...`\n      - Click the expand ▶️ next to `Build` and select `Post-actions`. Press `+` and select `New Run Script Action`.\n      - In the dropdown next to `Provide build settings from`, select your app's target.\n      - Copy this script into the open field:\n        ```\n        rm -rf \"${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app/Frameworks/libAppboyKitLibrary.a\"\n        rm -rf \"${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app/Plugins/libAppboyKitLibrary.a\"\n        ```\n\n## 3.28.0\n\n##### Breaking\n- Removes `userNotificationWasSentFromAppboy:` and `pushNotificationWasSentFromAppboy:` on `Appboy`. Use `isAppboyUserNotification:` and `isAppboyRemoteNotification:` in `ABKPushUtils` instead.\n- Updates `ABKURLDelegate`'s method signature for `handleAppboyURL:fromChannel:withExtras:` to include nullability annotations required for proper Swift support.\n\n##### Fixed\n- Fixes a race condition in `Appboy` method `wipeDataAndDisableForAppRun` where certain persisted fields would still be available immediately after calling the method. These fields now are removed synchronously.\n\n##### Changed\n- Updated SDWebImage to use version 5.9.x.\n\n## 3.27.0\n\n##### Breaking\n- Adds support for iOS 14. Requires Xcode 12.\n- Removes the `ABK_ENABLE_IDFA_COLLECTION` preprocessor macro from the SDK.\n  - If you wish to send IDFA to Braze, please use the [`ABKIDFADelegate`](https://appboy.github.io/appboy-ios-sdk/docs/protocol_a_b_k_i_d_f_a_delegate-p.html). For more information, reference [our documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/other_sdk_customizations/#implementing-idfa-collection).\n- Updates the `ABKIDFADelegate` protocol by renaming `isAdvertisingTrackingEnabled` to `isAdvertisingTrackingEnabledOrATTAuthorized` to reflect the addition of the `AppTrackingTransparency` framework in iOS 14.\n  - If you use the `Ad Tracking Enabled` segment filter on the Braze dashboard or are implementing `AppTrackingTransparency`, you must update your integration to use `AppTrackingTransparency` to read the correct user status. Please see our [sample app](https://github.com/Appboy/appboy-ios-sdk/blob/master/Example/Stopwatch/Sources/Utils/IDFADelegate.h) for implementation details.\n  - If you do not use the `Ad Tracking Enabled` segment filter and are not implementing `AppTrackingTransparency` yet, your implementation of `isAdvertisingTrackingEnabledOrATTAuthorized` may temporarily continue to use `isAdvertisingTrackingEnabled`. However, [the returned value will always be `NO` in iOS 14](https://developer.apple.com/documentation/adsupport/asidentifiermanager/1614148-isadvertisingtrackingenabled), regardless of actual IDFA availability.\n  - Note that Apple announced that they will delay the enforcement of upcoming IDFA changes until early 2021. Please reference our [iOS 14 upgrade guide](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/ios_14/) for more details.\n- Updates the minimum required version of SDWebImage from 5.0 to 5.8.2.\n- <a name=\"3.27.0_4.0.0\"></a>Integrators will now be required to exclude the `arm64` simulator slice in their entire project.\n  - This is done automatically when integrating via Cocoapods.\n  - For other cases:\n    - If you are using `xcconfig` files to build your app, please set:\n      - For iOS targets: `EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64`\n      - For tvOS targets: `EXCLUDED_ARCHS[sdk=appletvsimulator*] = arm64`\n    - If you are using the Xcode _Build Settings_ panel, enable _Build Active Architecture Only_ for the configuration you use to run your app on the simulator. (`ONLY_ACTIVE_ARCH = YES`)\n\n## 3.26.1\n\n##### Changed\n- Deprecates the compilation macro `ABK_ENABLE_IDFA_COLLECTION` in favor of the `ABKIDFADelegate` implementation.\n  - `ABK_ENABLE_IDFA_COLLECTION` will not function properly in iOS 14. To continue collecting IDFA on iOS 14 devices, please upgrade to Xcode 12 and implement `App Tracking Transparency` and Braze's `ABKIDFADelegate` (see the [iOS 14 upgrade guide](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/ios_14/#idfa-and-app-tracking-transparency) for more information).\n\n##### Added\n- Adds improved support for iOS 14 Approximate Location tracking.\n\n## 3.26.0\n\n##### Breaking\n- Removed readonly property `overrideApplicationStatusBarHiddenState` in `ABKInAppMessageViewController.h`.\n\n##### Fixed\n- Fixes an issue with in-app messages not respecting the application's status bar style when _View controller-based status bar appearance_ (`UIViewControllerBasedStatusBarAppearance`) is set to `YES` in the Info.plist.\n- Fixes an issue which can lead to text being cut off in Content Cards for specific iPhone models.\n- Fixes an issue preventing test Content Cards from displaying under specific conditions.\n\n##### Changed\n- Added Binary Project Specification file for more efficient Carthage integration of the full SDK.\n  - Update your Cartfile to use `binary \"https://raw.githubusercontent.com/Appboy/appboy-ios-sdk/master/appboy_ios_sdk_full.json\"`\n  - Support for this integration method was added starting with version 3.24.0 of the SDK.\n\n##### Added\n- Adds support for specifying `PushStoryAppGroup` in the `Appboy` dictionary in your app's `Info.plist`. This [Apple App Group](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups?language=objc) will share the [Braze Push Story](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_story/) information such as Campaign IDs between applications from a single Apple Developer account.\n- Adds `appboyBridge.getUser().addAlias(alias, label)` to the javascript interface for HTML in-app messages.\n- Adds the property `overrideUserInterfaceStyle` to `ABKInAppMessage` that allows forcing Light or Dark mode in the same way as Apple's [`UIViewController.overrideUserInterfaceStyle`](https://developer.apple.com/documentation/uikit/uiviewcontroller/3238087-overrideuserinterfacestyle?language=objc).\n  - You can set this property in the `beforeInAppMessageDisplayed:` method of an [ABKInAppMessageControllerDelegate](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/in-app_messaging/customization/#setting-delegates).\n- Adds the ability to dismiss modal in-app messages when the user clicks outside of the in-app message.\n  - This feature is disabled by default.\n  - You can enable the feature by adding the `Appboy` dictionary to your `Info.plist` file. Inside the `Appboy` dictionary, add the `DismissModalOnOutsideTap` boolean subentry and set the value to `YES`.\n  - You can also enable the feature at runtime by setting `ABKEnableDismissModalOnOutsideTapKey` to `YES` in `appboyOptions`.\n\n## 3.25.0\n\n##### Breaking\n- Removes the `arm64e` architecture when building with Cocoapods.\n- Removes the deprecated property `appWindow` from `ABKInAppMessageWindowController`.\n\n## 3.24.2\n\n##### Fixed\n- Fixes an issue with post-dismissal view hierarchy restoration for in-app messages under specific conditions.\n\n##### Changed\n- Deprecates `ABKInAppMessageWindowController` property `appWindow`.\n\n## 3.24.1\n\n##### Fixed\n- Fixes an issue introduced in 3.24.0 breaking the SDK compatibility with Cocoapods.\n\n## 3.24.0\n\n**Important** This release is not compatible with Cocoapods. Do not upgrade to this version and upgrade to 3.24.1 and above instead.\n\n##### Breaking\n- Renames `ABKInAppMessageWindow`'s `catchClicksOutsideInAppMessage` to `handleAllTouchEvents`.\n\n##### Fixed\n- Fixes an issue where the unread indicator on a Content Card would persist even after being read.\n- Fixes an issue preventing long texts from displaying correctly in Full in-app messages.\n- Fixes an issue where appboyBridge would not work in an Ajax callback within HTML In-App Messages.\n\n##### Changed\n- Changes the manual integration steps for versions 3.24.0 and newer. Please follow the updated integration steps [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/manual_integration_options/).\n\n##### Added\n- Adds support for JavaScript functions `window.alert()`, `window.confirm()` and `window.prompt()` in HTML in-app messages.\n- Adds the `ABKContentCardsTableViewControllerDelegate` protocol to more intricately handle Content Card clicks using the methods `contentCardTableViewController:shouldHandleCardClick:` and `contentCardTableViewController:didHandleCardClick:`.\n\n## 3.23.0\n\n##### Fixed\n- Fixes an issue with regex based event property triggers not working as expected. Previously on iOS they had to match the entire string, now they will search for matches as expected.\n- Improves resiliency when handling multiple background requests.\n\n##### Added\n- Adds support for upcoming HTML In-App Message templates.\n- Adds support for applications using [scenes](https://developer.apple.com/documentation/uikit/app_and_environment/scenes) (`UIWindowSceneDelegate`). In-app messages are now properly displayed in that context.\n\n## 3.22.0\n\n##### Breaking\n- Removes the key `ABKInAppMessageHideStatusBarKey` from `appboyOptions` and the property `forceHideStatusBar` from `ABKInAppMessageController`. Full screen in-app messages are now always displayed with the status bar hidden.\n- Adds Dark Mode support to Content Cards. This feature is enabled by default and can be disabled by setting `enableDarkTheme` property to `NO` on `ABKContentCardsTableViewController` before the view controller is presented.\n\n##### Fixed\n- Fixes an issue in HTML in-app messages where button clicks weren't correctly being attributed for `mailto:` and `tel:` links.\n- Fixes an issue in HTML in-app messages where videos would be displayed underneath the in-app message when full screen playback was enabled. The in-app message `UIWindow`'s `windowLevel` is now set to `UIWindowLevelNormal` instead of being above `UIWindowLevelStatusBar`.\n- Fixes an issue in Content Cards where `ABKURLDelegate` was not being respected when opening links.\n\n##### Added\n- Adds `appboyBridge.logClick(id)`, `appboyBridge.logClick()` and `appboyBridge.getUser().setCustomLocationAttribute(key, latitude, longitude)` to the javascript interface for HTML in-app messages.\n- Adds Czech and Ukrainian language support for Braze UI elements.\n- Adds the ability to unset the current user's email attribute by setting the `email` property of the current `ABKUser` instance to `nil` (e.g. `[Appboy sharedInstance].user.email = nil;`).\n- Adds Dark Mode support to Push Stories.\n- Adds the ability to set maximum width of Content Cards by using the `maxContentCardWidth` property of `ABKContentCardsTableViewController`.\n\n## 3.21.3\n\n##### Added\n- Adds an option to disable automatic geofence requests.\n  - You can do this in the plist by adding the `Appboy` dictionary to your Info.plist file. Inside the `Appboy` dictionary, add the `DisableAutomaticGeofenceRequests` boolean subentry and set the value to `YES`.\n  - You can also disable automatic geofence requests at runtime by setting `ABKDisableAutomaticGeofenceRequestsKey` to `YES` in `appboyOptions`.\n- Adds the method `requestGeofencesWithLongitude:latitude:` to `Appboy.h`. This method can be called whenever you explicitly want Braze to send a request for updated Geofences information. This call is rate limited to once per user session.\n\n## 3.21.2\n\n##### Fixed\n- Fixes an issue in HTML in-app messages where, during display, the viewport would shift down if the keyboard was opened but not shift back up when the keyboard was closed.\n- Fixes an issue introduced in 3.17.0 where the SDK would give precedence to the endpoint passed in `Info.plist` if given both an endpoint from the `Info.plist` and `appboyOptions`.\n\n##### Added\n- Adds the ability to set a custom `WKWebViewConfiguration` for HTML in-app messages. You can set it using the method `setCustomWKWebViewConfiguration` in `ABKInAppMessageUIDelegate`.\n\n##### Changed\n- Removes calls to deprecated APIs `statusBarOrientation` and `statusBarFrame`.\n- Un-deprecates the following push utility methods: `isUninstallTrackingUserNotification:`, `isUninstallTrackingRemoteNotification:`, `isGeofencesSyncUserNotification:`, `isGeofencesSyncRemoteNotification:`, and `isPushStoryRemoteNotification:` from `ABKPushUtils`. These APIs were originally deprecated in 3.16.0.\n\n## 3.21.1\n\n##### Fixed\n- Fixes an issue for Modal and Full in-app messages where the opacity value of the close X button was not being respected.\n\n##### Changed\n- `ABKContentCard.m` will now log a click event when `logContentCardClicked` is called and no URL field is populated.\n\n##### Added\n- Adds the ability to force the status bar to hide when a Full or HTML in-app message is being actively displayed. To opt in to this feature, set `ABKInAppMessageHideStatusBarKey` to `YES` in `appboyOptions`.\n\n## 3.21.0\n\n##### Breaking\n- Requires XCode 11.\n\n##### Fixed\n- Fixes an issue in the animate-in behavior of HTML in-app messages that could cause a brief flicker before the message displayed on older devices and simulators.\n- Fixes an issue with Slideup in-app messages where they would cover part of the status bar when animating from the top on non-notched devices.\n- Fixes an issue introduced in 3.14.1 where boolean-typed event properties would be improperly cast to numbers.\n\n##### Changed\n- Updates the logging format for debug, warn, and error `ABKLogger` messages to now print their log level.\n\n##### Added\n- Adds support for the upcoming feature, in-app messages with Dark Mode support.\n  - Dark Mode enabled messages must be created from the dashboard. Braze does not dynamically theme in-app messages for Dark Mode.\n  - This feature is enabled by default for all new `ABKInAppMessage` instances. To prevent Braze from automatically applying a Dark Theme when the fields are available on Braze's servers, set the `enableDarkTheme` flag on `ABKInAppMessage` to `NO` in the `beforeInAppMessageDisplayed:` method of your `ABKInAppMessageControllerDelegate` delegate implementation.\n- Adds the ability to reference the Braze iOS SDK API from Swift when using the `Appboy-tvOS-SDK` pod. Adding `import AppboyTVOSKit` to the top of your Swift file while using the `Appboy-tvOS-SDK` pod will give you equivalent behavior to adding `import Appboy_iOS_SDK` while using the `Appboy-iOS-SDK` pod.\n- Adds the `populateContentCards:` method and the `cards` property to `ABKContentCardsTableViewController`'s public interface. By setting the `cards` property from within `populateContentCards:`, you may manipulate `ABKContentCard` field data and/or control which `ABKContentCard` instances are displayed from the context of a custom `ABKContentCardsTableViewController` subclass.\n\n## 3.20.4\n\n##### Fixed\n- Fixed an issue with Content Cards where the header and description text fields would appear to be missing in Dark Mode.\n\n##### Added\n- Adds a `TEALIUM` SDK flavor option.\n\n## 3.20.3\n\n##### Added\n- If Automatic Braze location collection is enabled, the SDK now submits a session start location request if location hasn't already been sent up for the session after any affirmative location permission prompt. This also applies to the new \"Allow Once\" option in iOS 13.\n\n## 3.20.2\n\n**Important** If you are on Braze iOS SDK 3.19.0 or below, we recommend upgrading to this version immediately to ensure uninterrupted collection of new push tokens as users upgrade to iOS 13.\n- In `application:didRegisterForRemoteNotificationsWithDeviceToken:`, replace\n```\n[[Appboy sharedInstance] registerPushToken:\n                [NSString stringWithFormat:@\"%@\", deviceToken]];\n```\nwith\n```\n[[Appboy sharedInstance] registerDeviceToken:deviceToken];\n```\n- If you are on Braze iOS SDK 3.19.0 or below and unable to upgrade, you must ensure your `[Appboy registerPushToken]` implementation does not rely on `stringWithFormat` or `description` for parsing the `deviceToken` passed in from `application:didRegisterForRemoteNotificationsWithDeviceToken:`. Please reach out to your Customer Success Manager for more information.\n\n- **Important** In Braze iOS SDK 3.19.0, we updated our HTML in-app message container from `UIWebview` to `WKWebView`, however, the initial releases have known issues displaying HTML in-app messages. If you are currently using 3.19.0, 3.20.0, or 3.20.1, you are strongly encouraged to upgrade if you make use of HTML in-app messages. Please see the following for more important information about the transition to `WKWebView`:\n  -  If you are utilizing customization for HTML in-app messages (such as customizing `ABKInAppMessageHTMLFullViewController` or `ABKInAppMessageHTMLViewController`), we strongly recommend testing to ensure your in-app messages continue to display correctly and interactions function as intended.\n  - The following javascript methods are now no-ops: `alert`, `confirm`, `prompt`.\n  - Deep links without schemes are no longer supported. Ensure that your in-app message deep links contain schemes.\n\n##### Fixed\n- Fixes an issue introduced in 3.19.0 where HTML in-app messages would not register user clicks when the `.xib` failed to load.\n- Fixes an issue introduced in 3.19.0 where HTML in-app messages with select special characters and an assets zip would cause display irregularities.\n\n##### Changed\n- Updates the `WKWebView` which displays HTML in-app messages with the following attributes:\n  - `suppressesIncrementalRendering` is set to true\n  - `mediaTypesRequiringUserActionForPlayback` is set to `WKAudiovisualMediaTypeAll`\n- Updates the background color of the `WKWebView` which displays HTML in-app messages from `[[UIColor blackColor] colorWithAlphaComponent:.3]` to `[UIColor clearColor]`.\n\n## 3.20.1\n\n**Important** This release has known issues displaying HTML in-app messages. Do not upgrade to this version and upgrade to 3.20.2 and above instead. If you are using this version, you are strongly encouraged to upgrade to 3.20.2 or above if you make use of HTML in-app messages.\n\n##### Fixed\n- Fixes an issue introduced in 3.19.0 which changed the background of HTML in-app messages to a non-transparent color.\n- Improves the robustness of push token collection code for iOS 13 introduced in 3.20.0.\n\n## 3.20.0\n\n**Important** This release has known issues displaying HTML in-app messages and a known issue with push token collection. Do not upgrade to this version and upgrade to 3.20.2 and above instead. If you are using this version, you are strongly encouraged to upgrade to 3.20.2 or above if you make use of HTML in-app messages.\n\n##### Breaking\n- Introduced a signature change for push token collection methods:\n```\n[[Appboy sharedInstance] registerPushToken:\n                [NSString stringWithFormat:@\"%@\", deviceToken]];\n```\nwith\n```\n[[Appboy sharedInstance] registerDeviceToken:deviceToken];\n```\n\n## 3.19.0\n\n**Important** This release has known issues displaying HTML in-app messages. Do not upgrade to this version and upgrade to 3.20.2 and above instead. If you are using this version, you are strongly encouraged to upgrade to 3.20.2 or above if you make use of HTML in-app messages.\n\n##### Breaking\n- Replaces `UIWebView` with `WKWebView` for HTML in-app messages.\n  -  If you are utilizing customization for HTML in-app messages (such as customizing `ABKInAppMessageHTMLFullViewController` or `ABKInAppMessageHTMLViewController`), you must test to ensure your in-app messages continue to display correctly and interactions function as intended.\n  - The following javascript methods are now no-ops: `alert`, `confirm`, `prompt`.\n  - Deep links without schemes are no longer supported. Please ensure that your in-app message deep links contain schemes.\n\n## 3.18.0\n\n##### Breaking\n- Automatic Braze location collection is now disabled by default. If you choose to use our location collection, you must explicitly enable location collection.\n  - You can do this in the plist by adding the `Appboy` dictionary to your Info.plist file. Inside the `Appboy` dictionary, add the `EnableAutomaticLocationCollection` boolean subentry and set the value to `YES`.\n  - You can also enable location at runtime by setting `ABKEnableAutomaticLocationCollectionKey` to `YES` in `appboyOptions`.\n- Removes the Feedback feature from the SDK. The `Feedback` subspec and all Feedback methods on the SDK, including `[[Appboy sharedInstance] submitFeedback]` and `[[Appboy sharedInstance] logFeedbackDisplayed]`, are removed.\n\n##### Changed\n- Improves support for in-app messages on “notched” devices (for example, iPhone X, Pixel 3XL). Full-screen messages now expand to fill the entire screen of any phone, while covering the status bar.\n\n##### Added\n- Adds the ability to enable Braze Geofences without enabling Braze location collection. You can set this in the plist by adding the `Appboy` dictionary to your Info.plist file. Inside the `Appboy` dictionary, add the `EnableGeofences` boolean subentry and set the value to `YES` to enable Braze Geofences. You can also enable geofences at runtime by setting `ABKEnableGeofencesKey` to `YES` in `appboyOptions`.\n  - If this key is not set, it will default to the status of automatic location collection (see breaking change above).\n  - Note that Braze Geofences will continue to work on existing integrations if location collection is enabled and this new configuration is not present. This new configuration is intended for integrations that want Braze Geofences, but not location collection enabled as well.\n\n## 3.17.0\n\n##### Breaking\n- Removes `ABKAppboyEndpointDelegate`.\n  - You can now set the endpoint at runtime by setting the value of `ABKEndpointKey` in `appboyOptions` to your custom endpoint (ex. `sdk.api.braze.eu`) at initialization.\n\n## 3.16.0\n\n- **Important:** If you are using `ABKAppboyEndpointDelegate`, you will need to replace `dev.appboy.com` with `sdk.iad-01.braze.com` in the `getApiEndpoint` method.\n\n##### Breaking\n- Removes the methods: `allowRequestWhenInUseLocationPermission` and `allowRequestAlwaysPermission` from `ABKLocationManager`.\n  - To request when in use location permission, use the following code:\n  ```\n  CLLocationManager *locationManager = [[CLLocationManager alloc] init];\n  [locationManager requestWhenInUseAuthorization];\n  ```\n  - To request always location permission, use the following code:\n  ```\n  CLLocationManager *locationManager = [[CLLocationManager alloc] init];\n  [locationManager requestAlwaysAuthorization];\n  ```\n  - The preprocessor macro `ABK_DISABLE_LOCATION_SERVICES` is no longer needed.\n  - __Important:__ Configuring geofences to request always location permissions remotely from the Braze dashboard is no longer supported. If you are using Geofences, you will need to ensure that your app requests always location permission from your users manually.\n- `ABKAutomaticRequestProcessingExceptForDataFlush` is deprecated. Users using `ABKAutomaticRequestProcessingExceptForDataFlush` should switch to `ABKManualRequestProcessing`, as the new behavior of `ABKManualRequestProcessing` is identical to the previous behavior of `ABKAutomaticRequestProcessingExceptForDataFlush`\n\n##### Changed\n- Deprecates the push utility methods: `isUninstallTrackingUserNotification:`, `isUninstallTrackingRemoteNotification:`, `isGeofencesSyncUserNotification:`, `isGeofencesSyncRemoteNotification:`, and `isPushStoryRemoteNotification:` from `ABKPushUtils`. Please use the function `isAppboyInternalRemoteNotification:`.\n- Minor changes to the logic of `ABKManualRequestProcessing`. The original `ABKManualRequestProcessing` had specific exceptions and behaved more like `ABKAutomaticRequestProcessingExceptForDataFlush` in practice. As a result, the two policies have been merged into `ABKManualRequestProcessing`. Note that the new definition of `ABKManualRequestProcessing` is that periodic automatic data flushes are disabled. Other requests important to basic Braze functionality will still occur.\n\n## 3.15.0\n\n- **Important:** If you are using `ABKAppboyEndpointDelegate`, you will need to replace `dev.appboy.com` with `sdk.iad-01.braze.com` in the `getApiEndpoint` method.\n\n##### Breaking\n- Adds support for SDWebImage version 5.0.\n  - Note that upgrading to SDWebImage 5.0 also removed the FLAnimatedImage transitive dependency from the SDK.\n\n## 3.14.1\n\n- **Important:** If you are using `ABKAppboyEndpointDelegate`, you will need to replace `dev.appboy.com` with `sdk.iad-01.braze.com` in the `getApiEndpoint` method.\n\n##### Changed\n- Changed in-app message trigger behavior to not perform trigger events until after any pending trigger sync requests to the server have finished.\n\n##### Fixed\n- Fixed a serialization issue that could cause improper type conversions for certain decimal values.\n- Fixed a behavior introduced in 3.12.0 which caused in-app messages to not be considered triggered locally if `ABKDiscardInAppMessage` was returned by the host app in `beforeInAppMessageDisplayed:`.\n\n##### Added\n- Added the ability to set the session timeout via the Info.plist.\n  - Add the `Appboy` dictionary to your Info.plist file. Inside the `Appboy` Dictionary, add the `SessionTimeout` Number subentry and set the value to your session timeout.\n- Added the ability to disable location tracking via the Info.plist.\n  - Add the `Appboy` dictionary to your Info.plist file. Inside the `Appboy` Dictionary, add the `DisableAutomaticLocation` Boolean subentry and set the value to `YES`.\n- Added dynamic cell resizing for Content Cards cells with templated images in our default Content Cards UI.\n- Added validation to the local filename's canonical path during zip file extraction.\n\n## 3.14.0\n\n- **Important:** If you are using `ABKAppboyEndpointDelegate` and plan to upgrade to 3.14.1, you will need to replace `dev.appboy.com` with `sdk.iad-01.braze.com` in the `getApiEndpoint` method.\n\n##### Added\n- Improves the look and feel of In-App Messages to adhere to the latest UX and UI best practices. Changes affect font sizes, padding, and responsiveness across all message types. Now supports button border styling.\n\n## 3.13.0\n\n##### Breaking\n- Upgrades the delivery mechanism of Push Stories to allow delivery even after a user’s app has been force closed..\n  - ***Required:*** Please change your integration to use `ab_cat_push_story_v2` instead of `ab_cat_push_story` for the `UNNotificationExtensionCategory` in your content extension. See [documentation for more details.](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_story/#step-8-set-the-notification-content-extension-plist)\n\n##### Changed\n- Improves in-app message triggering logic to fall back to lower priority messages when the Braze server aborts templating (e.g. from a Connected Content abort in the message body, or because the user is no longer in the correct Segment for the message).\n- Updates German translations to improve formatting.\n\n## 3.12.0\n\n##### Breaking\n- Drops support for iOS 8.\n- Adds support for the `arm64e` architecture when building with Cocoapods. Requires Xcode 10.1.\n\n##### Fixed\n- Fixes bitcode support for the Push Story framework when using Xcode 10.\n- Improves triggered in-app message re-eligibility logic to better handle templating failures.\n\n##### Changed\n- Changes the behavior of News Feed so that only one impression is logged for each card per News Feed open.\n\n##### Added\n- Adds HTML IAM `appboyBridge` ready event to know precisely when the `appboyBridge` has finished loading.\n  - Example below:\n    ```javascript\n     <script type=\"text/javascript\">\n       function logMyCustomEvent() {\n         appboyBridge.logCustomEvent('My Custom Event');\n       }\n       window.addEventListener('ab.BridgeReady', logMyCustomEvent, false);\n     </script>\n    ```\n\n##### Removed\n- Removes Cross-Promotion cards from the News Feed.\n  - Cross-Promotion cards have also been removed as a card model and will thus no longer be returned.\n\n## 3.11.0\n\n##### Added\n- Adds the ability to set or remove custom location attributes for a specific user from within HTML IAMs.\n- Updates the SDK to report users who disable banner notifications but are still opted-in to push notifications as push enabled. Note this change does not affect provisionally authorized users on iOS 12, who were considered push enabled before this release regardless of their banner notification settings.\n- Adds Carthage Core support which allows for integration with the core Braze SDK without any UI components. To implement the core SDK, add `binary \"https://raw.githubusercontent.com/Appboy/appboy-ios-sdk/master/appboy_ios_sdk_core.json\"` to your `Cartfile`.\n\n##### Changed\n- Deprecates the Feedback feature.\n\n##### Fixed\n- Fixes an issue with the JS bridge when trying to set a custom attribute with the character '&'.\n\n## 3.10.0\n\n##### Added\n- Adds the ability to specify a whitelist for device fields that are collected by the Braze SDK.\n  - Configurable device fields are defined in the `ABKDeviceOptions` enum.\n  - To specify whitelisted device fields, assign the bitwise `OR` of desired fields to `ABKDeviceWhitelistKey` in the `appboyOptions` of `startWithApiKey:inApplication:withAppboyOptions:`.\n    - For example, to specify timezone and locale collection to be whitelisted, set `appboyOptions[ABKDeviceWhitelistKey] = @(ABKDeviceOptionTimezone | ABKDeviceOptionLocale);`.\n  - To turn off all fields, set `appboyOptions[ABKDeviceWhitelistKey] = @(ABKDeviceOptionNone);`.\n  - By default, all fields are enabled.\n- Added the `clicked` property to `ABKContentCard`. Clicks made through `[ABKContentCard logContentCardClicked]` are now saved locally on the device.\n\n##### Breaking\n- Removes `ABKSignificantChangeCollectionEnabledOptionKey`, `ABKSignificantChangeCollectionDistanceFilterOptionKey`, and `ABKSignificantChangeCollectionTimeFilterOptionKey` from the `Appboy` interface.\n\n##### Removed\n- Removes the ability to optionally track locations in the background.\n\n##### Fixed\n- Fixes an issue where Slideup and Full In-App Message content could be obscured by the notch on iPhone XR and iPhone XS Max.\n\n## 3.9.0\n\n##### Breaking\n- Adds support for iOS 12. Requires Xcode 10.\n\n##### Fixed\n- Fixes minor issues with subclassing `ABKInAppMessageModalViewController` and News Feed request timeouts.\n  - Thanks @datkinnguyen for your contribution.\n\n## 3.8.4\n\n##### Fixed\n- Fixes a regression introduced in version 3.8.3 that caused background tasks to extend beyond execution time.\n\n## 3.8.3\n\n##### Fixed\n- Fixes an issue where `ABKContentCardsController unviewedContentCardCount` would always return 0.\n\n##### Changed\n- Updates the Content Cards UI with minor layout improvements.\n\n## 3.8.2\n\n##### Fixed\n- Fixes an issue with possible build failure when using Content Cards related to duplicate image names in Content Cards and News Feed pods. Please use this version if integrating Content Cards.\n\n##### Changed\n- Updates the Content Cards UI with minor layout improvements.\n\n## 3.8.1\n\n##### Fixed\n- **Important**: Fixes an issue with Content Cards syncing. Note: As additional fixes were added in later versions, please use Braze iOS SDK version 3.8.2 or above if integrating Content Cards.\n\n## 3.8.0\n\n##### Added\n- In `ABKUser` class, `addLocationCustomAttributeWithKey:latitude:longitude:` and `removeLocationCustomAttributeWithKey:` methods are added to manage location custom attributes.\n- Introduces support for the upcoming Content Cards feature, which will eventually replace the existing News Feed feature and adds significant capability. This feature is currently in closed beta testing; if you're interested in joining the beta, please reach out to your Customer Success Manager or Account Manager.\n\n##### Changed\n- Status bar is not obscured when displaying a full screen in-app message.\n\n## 3.7.1\n\n##### Changed\n- Improves data handling immediately following a user change to bring behavioral parity with the Android and Web SDKs.\n\n## 3.7.0\n\n##### Breaking\n- In `ABKInAppMessageUIControlling` protocol, `getCurrentDisplayChoiceForControlInAppMessage` method is added to define whether the control in-app message impression should be logged now, later or discarded.\n- In `ABKInAppMessageControllerDelegate` protocol, `beforeControlMessageImpressionLogged` method is added to define whether the control in-app message impression should be logged now, later or discarded.\n\n##### Added\n- `CLLocationManager` authorization requests can now be prevented from compiling by setting a Preprocessor flag `ABK_DISABLE_LOCATION_SERVICES`.\n\n##### Fixed\n- Fixes an issue where in-app messages triggered on session start could potentially be templated with the old user's attributes.\n\n## 3.6.0\n\n##### Breaking\n- In `ABKSDWebImageProxy.h`, renames `removeImageForKey` to `removeSDWebImageForKey` and `clearCache` to `clearSDWebImageCache` to avoid conflicts with internal Apple API. **Important:** We have received reports of sporadic App Store rejection stemming from Apple's static checks mistaking our APIs for an invalid usage of the internal Apple API. We recommend new App Store submissions integrating the Braze iOS SDK ship with this version or above to decrease the likelihood of rejection.\n\n##### Added\n- Exposes `handleCardClick` on `ABKNewsFeedTableViewController.h` to enable custom handling via subclassing.\n- Improves News Feed image handling on iPad.\n\n## 3.5.1\n\n##### Fixed\n- Fixes an issue with integrating the NewsFeed subspec in Swift projects via Cocoapods.\n\n## 3.5.0\n\n##### Breaking\n- Open sources the News Feed UI code and moves it into a new subspec named \"NewsFeed\".\n  - Manual integrators must now add the `AppboyUI` folder of this repository to their projects as a group, in addition to `AppboyKit`.\n  - The \"NewsFeed\" subspec contains the Braze News Feed UI and the Core SDK. It does not include the Feedback or In-App Message UI.\n  - The \"UI\" subspec contains all Braze UI and the Core SDK subpsec.\n  - `ABKFeedViewControllerDelegate` was removed.\n  - To integrate a navigation context News Feed, use the following code:\n  ```\n  ABKNewsFeedTableViewController *newsFeed = [ABKNewsFeedTableViewController getNavigationFeedViewController];\n  [self.navigationController pushViewController:newsFeed animated:YES];\n  ```\n  - To integrate a modal context News Feed, use the following code:\n  ```\n  ABKNewsFeedViewController *newsFeed = [[ABKNewsFeedViewController alloc] init];\n  [self.navigationController presentViewController:newsFeed animated:YES completion:nil];\n  ```\n  - See our [News Feed Sample app](https://github.com/Appboy/appboy-ios-sdk/tree/master/Samples/NewsFeed/BrazeNewsFeedSample) for sample implementations and customizations.\n- Removes NUI support for Feedback, In-App Messages, and the News Feed.\n  - All customization can now be done by using categories or by extending our open sourced view controllers.\n- Removes deprecated `ABKPushURIDelegate` from the SDK. Use `ABKURLDelegate` instead.\n\n\n## 3.4.0\n\n##### Breaking\n- Adds `preferredOrientation` to `ABKInAppMessageUIController` and `ABKInAppMessageWindowController`.\n- Removes `supportedOrientations` from `ABKInAppMessageUIController` and `ABKInAppMessageWindowController`.\n- Renames `supportedOrientationMasks` to `supportedOrientationMask` in `ABKInAppMessageUIController` and `ABKInAppMessageWindowController`.\n\n##### Fixed\n- Fixes an issue that caused GIFs to not animate on SDWebImage versions above or equal to 4.3.0\n\n## 3.3.4\n\n##### Added\n- Adds the ability to view verbose logs from the SDK for debugging.\n  - To enable verbose logging, add a dictionary named `Appboy` to your `Info.plist` file. Inside the `Appboy` Dictionary, add the `LogLevel` String subentry and set the value to \"0\".\n\n## 3.3.3\n\n##### Added\n- Adds `wipeDataAndDisableForAppRun:` on the `Appboy` interface to support wiping all customer data created by the Braze SDK.\n- Adds `disableSDK:` and `requestEnableSDKOnNextAppRun:` to the `Appboy` interface to disable and re-enable the Braze SDK.\n\n##### Fixed\n- Fixes an issue where events setting custom attribute arrays to `nil` would persist on the SDK beyond their useful life.\n\n## 3.3.2\n\n##### Changed\n- Updates the SDK with internal, non-functional improvements.\n\n## 3.3.1\n\n##### Added\n- Adds `Other`, `Unknown`, `Not Applicable`, and `Prefer not to Say` options for user gender.\n- Adds umbrella header files `AppboyFeedback.h` and `AppboyInAppMessage.h` for the `Feedback` and `InAppMessage` subspecs.\n\n##### Fixed\n- Fixes an issue where the method `beforeInAppMessageDisplayed:` in class `ABKInAppMessageControllerDelegate` is not called when the host app is using the `Core` subspec.\n\n## 3.3.0\n\n##### Breaking\n- Open sources the In-App Message UI code and moves it into a new subspec named \"InAppMessage\".\n  - Manual integrators must now add the `AppboyUI` folder of this repository to their projects as a group, in addition to `AppboyKit`.\n  - The \"InAppMessage\" subspec contains the Braze In-App Message UI and the Core SDK. It does not include Feedback or the News Feed UI.\n  - The \"UI\" subspec contains all Braze UI and the Core SDK subpsec.\n  - The open-sourced In-App Message view controllers offer backward compatible NUI support, although we recommend using categories or subclassing the In-App Message view controllers for customization as the NUI library isn't actively maintained any more. Support for NUI customization will be removed in a future release.\n  - Most delegate customization methods are moved from ABKInAppMessageControllerDelegate to ABKInAppMessageUIDelegate.\n  - See our [In-App Message Sample app](https://github.com/Appboy/appboy-ios-sdk/tree/master/Samples/InAppMessage/BrazeInAppMessageSample) for sample implementations and customizations.\n - Removes support for original in-app messages. Moving forward, triggered in-app messages must be used.\n  - Removes `requestInAppMessageRefresh` method from `Appboy`.\n\n##### Changed\n- Removes the current behavior of displaying an in-app message from the stack on app open, if the stack is non-empty\n\n##### Fixed\n- Adds Macros for methods which are only available from iOS 10.\n  - Addresses https://github.com/Appboy/appboy-ios-sdk/issues/128.\n- Stops using deprecated `openURL:` method when in iOS 10 and above.\n  - Addresses https://github.com/Appboy/appboy-ios-sdk/issues/132.\n\n## 3.2.3\n\n##### Fixed\n- Fixes an issue introduced in version 3.0.0 which caused detailed device model information to not be collected by the SDK.\n- Fixes an issue where Braze's Carthage framework did not support simulators.\n\n## 3.2.2\n\n##### Fixed\n- Fixes an issue where Slideup and Full In-App Message content could be obscured by the notch on iPhone X.\n\n## 3.2.1\n\n##### Fixed\n- Fixes an issue where Push Story Framework did not support bitcode.\n\n## 3.2.0\n\n##### Added\n- Adds Push Stories, a new push type that uses UNNotificationContentExtension to display multiple images in a single notification.\n  - This feature requires iOS 10 and above.\n\n##### Fixed\n- Fixes an issue where tvOS SDK did not support bitcode.\n\n## 3.1.1\n\n##### Added\n- Adds a new property `language` to `ABKUser` to allow explicit control over the user's language in the Braze dashboard. Note that this is separate and independent from the language settings on the user's device.\n- Adds an Objective-C sample app for the Core subspec of the SDK. See `Samples/Core/ObjCSample`.\n\n##### Fixed\n - Fixes a bug introduced in version 2.30 where crashes could occur if the SDK was directed to handle a custom scheme deep link inside a WebView.\n   - Addresses https://github.com/Appboy/appboy-ios-sdk/issues/122.\n - Fixes a bug introduced in version 3.0 where new custom attributes were not being flushed if custom attributes had been previously flushed in the same foregrounded session.\n - Fixes a bug introduced in version 3.0 where previously flushed custom attributes were being re-sent.\n - Fixes an issue where slow image fetching blocked image-only modal in-app messages from displaying.\n   - Addresses https://github.com/Appboy/appboy-ios-sdk/issues/118.\n\n## 3.1.0\n\n##### Breaking\n- Adds support for iOS 11. Requires Xcode 9.\n\n## 3.0.2\n\n##### Added\n- Adds the ability to set a custom API endpoint via the Info.plist.\n   - Add the `Appboy` dictionary to your Info.plist file. Inside the `Appboy` Dictionary, add the `Endpoint` String subentry and set the value to your custom endpoint (e.g., `sdk.api.braze.eu`).\n\n##### Fixed\n- Fixes an issue where changing the IDFA settings through a third party wrapper could cause a crash.\n\n## 3.0.1\n\n##### Fixed\n- Fixes an issue where calling `incrementCustomUserAttribute:` on `ABKUser` could cause a crash.\n\n## 3.0.0\n\n##### Breaking\n- Removes the deprecated `foursquareAccessToken` property from `ABKUser`. To associate a Foursquare access token with a user profile, use `setCustomAttributeWithKey:andStringValue:` instead.\n- Note: Braze iOS SDK version 3.0.0 will **only support downgrading to iOS SDK version 2.31.0**. Downgrading to versions prior to 2.31.0 may result in app crashes.\n\n##### Added\n- Adds a major performance upgrade that reduces CPU usage, memory footprint, and network traffic.\n\n## 2.31.0\n\n##### Breaking\n - Open sources the Feedback view controllers and moves them into a new subspec \"Feedback\".\n   - The \"Feedback\" subspec has the Braze Feedback UI and the Core SDK. It will not include in-app messages or News Feed UI.\n   - Removes the popover context for Feedback due to the deprecation of `UIPopoverViewController` in iOS.\n   - Renames the `ABKFeedbackViewControllerModalContext` and `ABKFeedbackViewControllerNavigationContext` class to `ABKModalFeedbackViewController` and `ABKNavigationFeedbackViewController`.\n   - The open-sourced Feedback view controllers offer backward compatible NUI support, although we recommend using categories or subclassing the Feedback view controllers for customization as NUI library isn't actively maintained any more. See [here](https://github.com/Appboy/appboy-ios-sdk/tree/master/AppboyUI/ABKFeedbackViewController/FeedbackViewController/ABKFeedbackViewController.h) for customization details.\n   - See our [Feedback Sample app](https://github.com/Appboy/appboy-ios-sdk/tree/master/Samples/Feedback/AppboyFeedbackSample) for sample implementations and customizations.\n\n##### Added\n- Adds user aliasing capability. Aliases can be used in the API and dashboard to identify users in addition to their ID. See the `addAlias:withLabel:` method on `ABKUser` for more information.\n\n##### Changed\n - Updates the `AppboyKit.h` to include all the public header files in the SDK.\n\n## 2.30.0\n\n##### Breaking\n - Open sources the `ABKModalWebViewController` class, which is used to display the web URLs from push or in-app message clicks.\n   - Drops NUI customization support for the navigation bar and navigation bar button item on `ABKModalWebViewController`. To customize the UI, create an ABKModalWebViewController category and override the corresponding method(s) exposed.\n - Open sources the `ABKNoConnectionLocalization` class, which provides Braze's default localized string for \"No Connection\" error.\n   - You can customize the localization by adding `Appboy.no-connection.message` as the key in your `Localizable.strings` files.\n - Removes the `Appboy.bundle` from the Core subspec of the SDK.\n   - If you use the Core subspec, the in-app messages will not display, and trying to display Braze's News Feed and Feedback UI will lead to unpredictable behavior.\n\n## 2.29.1\n\n##### Added\n - Adds a new property `buttonTextFont` to `ABKInAppMessageButton`. It allows clients to set customized fonts on in-app message buttons before the in-app message is displayed.\n\n##### Fixed\n - Makes class `ABKInAppMessageWindowController.h` public.\n   - Addresses https://github.com/Appboy/appboy-ios-sdk/issues/105.\n - Fixes an issue where device information was not flushed for a new user when server requests were queued for two or more users.\n\n##### Changed\n - Removes the warnings in `ABKSDWebImageProxy`.\n\n## 2.29.0\n\n##### Breaking\n - Drops support for iOS 7.\n - Removes the `shouldOpenURIExternally` field from `ABKInAppMessage`.\n - Requires XCode 8.3.\n - Changes the behavior of the `onCardClicked:feedViewController:` method in `ABKFeedViewControllerDelegate` to let Braze handle the card click action if the delegate method returns `NO`.\n   - Previously, Braze would handle the card click action if `onCardClicked:feedViewController:` returned `YES`.\n   - This change standardizes delegate behavior with `ABKInAppMessageControllerDelegate` and `ABKURLDelegate`.\n\n##### Added\n - Adds the property `openUrlInWebView` to `ABKInAppMessage`, `ABKInAppMessageButton` and `ABKCard`. This property determines if the URL associated with the object will be opened in a `UIWebView`.\n - Adds a Javascript interface to HTML in-app messages with ability to log custom events, log purchases, set user attributes, navigate users, and close the message.\n - Adds an `abDeepLink` query field to HTML in-app messages, which defaults to false. To prevent the SDK from opening deep links in a `UIWebView`, specify `abDeepLink=true` in your link (e.g., `https://www.braze.com?abDeepLink=true`).\n - Adds the `ABKURLDelegate` protocol for customizing URL handling across channels. Set the `ABKURLDelegate` by passing a delegate object to the `ABKURLDelegateKey` in the `appboyOptions` of `startWithApiKey:inApplication:withAppboyOptions:`. See our [Stopwatch sample application](https://github.com/Appboy/appboy-ios-sdk/blob/master/Example/Stopwatch/AppDelegate.m) for a Universal Link implementation sample.\n - Adds the following utility methods to `ABKPushUtils` for detecting if a push notification was sent by Braze for internal feature purposes:\n   - `+ (BOOL)isAppboyInternalUserNotification:(UNNotificationResponse *)response;`\n   - `+ (BOOL)isAppboyInternalRemoteNotification:(NSDictionary *)userInfo;`\n   - `+ (BOOL)isUninstallTrackingUserNotification:(UNNotificationResponse *)response;`\n   - `+ (BOOL)isGeofencesSyncUserNotification:(UNNotificationResponse *)response;`\n   - `+ (BOOL)isGeofencesSyncRemoteNotification:(NSDictionary *)userInfo;`\n   - These methods can be used to ensure that your app does not take any undesired or unnecessary actions upon receiving Braze's internal content-available notifications (e.g., pinging your server for content).\n\n##### Changed\n - Deprecates `ABKPushURIDelegate`. If you were previously using `ABKPushURIDelegate`, use `ABKURLDelegate` instead.\n - Deprecates `userNotificationWasSentFromAppboy:` and `pushNotificationWasSentFromAppboy:` on `Appboy`. Use `isAppboyUserNotification:` and `isAppboyRemoteNotification:` on `ABKPushUtils` instead.\n - Deprecates `shouldFetchTestTriggersFlagContainedInPayload:` on `ABKPushUtils`.\n\n## 2.28.0\n\n##### Breaking:\n - Removes support for watchOS 1, including Braze WatchKit SDK and all public APIs for watchOS in Braze iOS SDK.\n\n##### Added\n - Adds `ABKSDWebImageProxy` to access the SDWebImage framework. This will prevent the Core subspec of the SDK from calling any SDWebImage methods directly.\n\n## 2.27.0\n\n##### Breaking\n - Removes the following deprecated items:  the `bio` field of `ABKUser`, the `setIsSubscribedToEmails:` method of `ABKUser`, and the `getResourceEndpoint:` method of the `ABKAppboyEndpointDelegate` protocol.\n\n##### Added\n - Adds support for registering geofences and messaging on geofence events. Please reach out to success@braze.com for more information about this feature.\n - Adds Braze default push categories which can be fetched from `ABKPushUtils`.\n   - To use the Braze default push categories, you need to manually add the Braze categories when you register for push. You can get the Braze categories from `[ABKPushUtils getAppboyUNNotificationCategorySet]` or `[ABKPushUtils getAppboyUIUserNotificationCategorySet]`.\n   - In this version, we add four sets of push action buttons: accept/decline, yes/no, confirm/cancel, more. These will be available as button sets on the dashboard when creating an iOS push campaign.\n   - All Braze push action buttons support localization.\n - Adds support for web link and deep link handling of push action buttons.\n\n##### Fixed\n - Fixes the issue where the combination of the Core subspec of the SDK and a non-supported version of SDWebImage framework can cause apps to crash.\n   - Addresses https://github.com/Appboy/appboy-ios-sdk/issues/104.\n\n##### Changed\n - HTML in-app messages now log body click analytics on all links that are not `appboy://customEvent` and do not include the `abButtonId` query field. Previously, no body click analytics were logged.\n\n##### Removed\n - Removes deprecated method `- (NSString *)getResourceEndpoint:(NSString *)appboyResourceEndpoint` from `ABKAppboyEndpointDelegate`.\n - Removes deprecated property `bio` and deprecated method `- (BOOL)setIsSubscribedToEmails:(BOOL)subscribed` from `ABKUser`.\n\n## 2.26.0\n\n##### Breaking\n - Adds support for SDWebImage version 4.0.0 with GIF support. SDWebImage version 3.x will not be supported from this version on. Please make sure you are using the correct version of SDWebImage.framework.  Note: SDWebImage 4.0.0 relies on FLAnimatedImage - users integrating in ways besides CocoaPods should ensure they link the FLAnimatedImage framework if they want GIF support.\n - Removes the `url` property from subclasses of `ABKCard`. This property has been renamed to `urlString` and moved onto the `ABKCard` superclass.\n\n##### Added\n - Adds Cocoapods subspecs \"Core\" and \"UI\".\n   - The \"UI\" subspsec has the full feature set of the current SDK. This is the default subspec when no subspec is specified in the Podfile.\n   - The \"Core\" subspec removes the SDWebImage framework dependency. This is for apps who do not use any Braze UI that leverages images (News Feed, in-app messages). If you use the \"Core\" subspec, in-app messages with images will not display, and the News Feed will render with plain white images.\n - Makes `ABKThemableFeedNavigationBar.h` and `ABKNavigationBar.h` public.\n   - Addresses https://github.com/Appboy/appboy-ios-sdk/issues/68\n - Adds an `unsafeInstance` method that returns a nonoptional `Appboy` instance. If used before calling `startWithApiKey:` an exception will be thrown.\n   - Addresses https://github.com/Appboy/appboy-ios-sdk/issues/45.\n - Adds `ABKIDFADelegate` protocol that can be used to create a delegate to pass Braze the IDFA in `startWithApiKey:` in the `appboyOptions` dictionary under the `ABKIDFADelegateKey` key.  Alternative to existing `ABKIdentifierForAdvertisingProvider` compile flag solution.\n\n##### Changed\n - Disables the `-webkit-touch-callout` property on HTML in-app messages. Long presses and 3D Touch on links will no longer display pop-ups with additional link information.\n\n## 2.25.0\n\n##### Added\n- Adds the ability to set the `ABKInAppMessageControllerDelegate` when the SDK starts by passing a delegate object to the `ABKInAppMessageControllerDelegateKey` in the `appboyOptions` of `startWithApiKey:inApplication:withAppboyOptions:`.\n  - This is the recommended way to set the `ABKInAppMessageControllerDelegate` and circumvents a potential race condition where in-app messages can be shown before the delegate has been set.\n- Exposes the ABKFeedback object and adds a new method `- (void)submitFeedback:(ABKFeedback *)feedback withCompletionHandler:(nullable void (^)(ABKFeedbackSentResult feedbackSentResult))completionHandler;` in `Appboy`. The new method accepts a completion handler which receives an ABKFeedbackSentResult enum as feedback sending result.\n  - The possible feedback sending results are: invalid feedback object(ABKInvalidFeedback), fail to send feedback(ABKNetworkIssue), and feedback sent successfully(ABKFeedbackSentSuccessfully).\n- Adds the utility method `- (BOOL)userNotificationWasSentFromAppboy:(UNNotificationResponse *)response;` to `Appboy`. This method is compatible with the `UserNotifications` framework and returns whether a push notification was sent from Braze's server.\n  - Those using `- (BOOL)pushNotificationWasSentFromAppboy:(NSDictionary *)options;` who have integrated the `UserNotifications` framework should use this method instead.\n\n##### Fixed\n - Changes the ABKInAppMessageButton from a `UIButton` object to a pure data model class in `NSObject`.\n   - This resolves the issue https://github.com/Appboy/appboy-ios-sdk/issues/97.\n\n##### Changed\n - Adds more protection around triggered in-app message display.\n\n## 2.24.5\n\n##### Fixed\n - Fixes an issue where in-app messages triggered off of push clicks wouldn't fire when the push click happened before the in-app message configuration was synced to the device.\n\n##### Changed\n - Updates push registration to flush the token to the server immediately.\n - Improves the accessibility of in-app messages and news feed cards.\n   - When in voiceOver mode, the SDK auto-focuses on in-app messages when they appear and resets focus on dismissal.\n   - VoiceOver no longer reads Braze internal labels.\n   - News feed cards are enhanced to be more accessible.\n\n## 2.24.4\n\n##### Added\n - Adds protection around in-app message UI code to avoid displaying in-app messages with corrupted images.\n\n##### Fixed\n - Fixes the iOS version number in the deprecation warnings in Appboy.h.\n\n## 2.24.3\n\n##### Breaking\n - Update REQUIRED for apps using Braze SDK 2.24.0, 2.24.1 or 2.24.2 with UserNotifications.framework\n\n##### Fixed\n - Fixes an issue where a user's foreground push enabled status could erroneously be marked as disabled.\n   - This issue can occur when opening the app from suspended mode. At that time, the foreground push enabled status was defaulted to disabled until the UserNotifications.framework returned the user's push authorization status. If the user closed the app within a few seconds, the SDK would not flush the updated push status and the user would mistakenly be marked as \"push disabled\".\n   - This issue only affected apps using UserNotifications.framework to register for push notifications.\n   - The updated code stores the push authorization status on disk to fix the issue.\n - Fixes an issue where triggered in-app messages with event property templating did not respect re-eligibility settings.\n\n##### Changed\n - Updates the Podspecs for iOS and tvOS SDK.\n - Updates deprecation warnings to specify iOS version.\n - Updates the ABKFeedController with more generic nullability.\n - Disables all data detectors on HTML in-app messages. Phone numbers, web URLs, addresses and calendar events will no longer be automatically converted.\n - Disables scrolling bounces on HTML in-app messages.\n\n## 2.24.2\n\n##### Fixed\n - Fixes an issue where HTML in-app messages loaded JavaScript more than once.\n - Fixes the Appboy.inAppMessage.webview.done-button.title string in the French localization file, which was named incorrectly and wasn't being found.\n\n## 2.24.1\n\n##### Added\n - Adds nullability annotation for the completionHandler in `userNotificationCenter :didReceiveNotificationResponse:withCompletionHandler`.\n\n## 2.24.0\n\n##### Breaking\n - Updates the SDK to require XCode 8.\n - iOS 10 changes behavior of `application:didReceiveRemoteNotification:fetchCompletionHandler` and subsequently breaks open tracking and deep link handling on most existing Braze iOS integrations. If you don't currently implement `application:didReceiveRemoteNotification:` you need to modify your integration, and we recommend that all users update.\n\n##### Added\n - Updates the iOS and tvOS SDKs to support iOS 10.\n - Adds a new method `- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler`. This method supports the new delegate method for push notification handling in `UserNotification` framework.\n\n##### Changed\n - Deprecates two push delegate methods:\n  `- (void)registerApplication:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification` and\n  `- (void)getActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(nullable void (^)())completionHandler`.\n\n## 2.23.0\n\n##### Added\n - Adds support for upgraded in-app messages including image-only messages, improved image sizing/cropping, text scrolling, text alignment, configurable orientation, and configurable frame color.\n - Adds support for in-app messages triggered on custom event properties, purchase properties, and in-app message clicks.\n - Adds support for templating event properties within in-app messages.\n\n##### Removed\n - Removes the deprecated method `logSocialShare` from `Appboy` class.\n\n## 2.22.1\n\n##### Changed\n - Updates tvOS bitcode support, patching an error introduced by an Xcode bug.\n\n## 2.22.0\n\n##### Added\n - Adds tvOS support for logging analytics; adds sample applications for tvOS and TVML.\n - Adds Hebrew localization support.\n\n## 2.21.0\n\n##### Breaking\n - Drops support for iOS 6.\n\n##### Added\n - Adds support for deep links with non-URL-encoded characters. The SDK will encode unencoded url strings to create valid deep link NSURLs.\n\n##### Fixed\n - Fixes a bug where the background of a slideup in-app message remained transparent when configured with 100% opacity.\n\n##### Changed\n - Updates the podspec SDWebImage dependency to fetch the latest version.\n - Replaces SDK usage of NSURLConnection with NSURLSession.\n - Updates the SDK to always call `canOpenURL:` before opening a deep link. After this change, the SDK will only direct deep links whose schemes are whitelisted.\n - Updates push registration to immediately, asynchronously send up the push token.\n\n## 2.20.1\n\n##### Fixed\n - Fixes an issue where in certain conditions NSUserDefault blocking would cause custom events logged in the main thread to result in UI freezing.\n\n##### Changed\n - Implements an optimization in push handling to not prefetch the News Feed when a push arrives and the app is in the background.\n\n## 2.20.0\n\n##### Added\n - Adds Carthage support.\n\n##### Fixed\n - Fixes a multithreading issue where logging custom events from different threads would sporadically cause errors.\n - Fixes the issue where a close button's color on modal and full in-app messages didn't respect the opacity value.\n - Fixes an issue where failure to download HTML in-app message assets mid-download resulted in display without assets.\n\n##### Changed\n - Now the `onInAppMessageHTMLButtonClicked:clickedURL:buttonID:` delegate method will be called every time a URL is clicked. The method used to be only called when there was a button ID in the URL link.\n - Updates the feedback element to reject messages that contain only whitespace.\n - Updates remote push handling to call the completion handler passed in every time (a code path previously existed that would return without calling it).\n\n##### Removed\n - Removes the delegate method `onInAppMessageHTMLButtonClicked:buttonID:` from `ABKInAppMessageControllerDelegate` protocol.\n\n## 2.19.3\n\n##### Added\n - Adds a new feature allowing manual control of deep link handling in push notications. To use this, add a `ABKPushURIDelegate` value for the `ABKPushURIDelegate` key in the `appboyOptions` dictionary of `startWithApiKey:inApplication:inApplication:withAppboyOptions:`. Also updates the `ABKPushURIDelegate` integration to be initialized through that integration point.\n - Adds guarding against a possible crash caused by a user's offline state being corrupted and not including an active session when a network request\noccurred.\n\n##### Fixed\n - Fixes an issue where duplicate data could be recorded when a force quit or crash occurs after a network request completed successfully, but before any other activity (such as leaving the app, putting it to sleep, updating an attribute or firing some other event or purchase) occurred.\n\n## 2.19.2\n\n##### Added\n - Adds warning when messaging doesn't succeed because SDWebImage is not integrated.\n\n##### Fixed\n - Fixes a bug where users who went from being eligible for triggered messages to not being eligible for any triggered messages didn't see their local triggers configuration get updated.  This has already been fixed with a server-side update for affected versions; this update fixes the issue client-side.\n\n##### Changed\n - Updates headers to be compatible with Swift 2.2.\n\n\n## 2.19.1\n\n##### Added\n - Adds sample code for a universal link in Stopwatch.\n\n##### Fixed\n - Fixes the benign issue that caused the log message `*** -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL`.\n - Fixes an issue where NULL campaign IDs in push messages (e.g. from a REST API push message without a specified campaign id) resulted in push-clicked triggers for triggered in-app messages not firing.\n - Fixes an issue where calling `changeUser` between identified users caused the read/unread state of the news feed cards of the old user to be set as the new user's read/unread states.\n - Fixes an issue where a user attribute value that had been set to multiple different values created a state that would not let you set the original value again. The bug was introduced in version 2.17.1.\n\n##### Changed\n - Analytics are now logged for in-app messages and in-app message buttons with 'ABKInAppMessageNoneClickAction' click actions.  `ABKInAppMessageNoneClickAction` is set when an in-app message on the dashboard has a click action that only closes the in-app message; formerly this did not count as a click.\n\n## 2.19.0\n\n##### Added\n - Adds support for action-based, locally triggered in-app messages. In-app messages are now sent to the device at session start with associated trigger events. The SDK will display in-app messages in near real-time when the trigger event associated with a message occurs. Trigger events can be app opens, push opens, purchases, and custom events.\n\n##### Changed\n - Deprecates the old system of requesting in-app message display, now collectively known as 'original' in-app messaging, where messages were limited to displaying at app start.\n\n## 2.18.4\n\n##### Fixed\n - Fixes a Cocoapods issue that emerged during the release of 2.8.13.\n\n## 2.18.3\n\n##### Changed\n - Makes an internal update to provide functionality for SDKs that embed this library.\n\n## 2.18.2\n\n##### Added\n - Adds warning logging if `[Appboy sharedInstance]` is called while in an uninitialized state.\n\n##### Changed\n - Deprecates the delegate method `getResourceEndpoint:` in ABKAppboyEndpointDelegate. The SDK will no longer call this delegate method.\n\n## 2.18.1\n\n##### Fixed\n - Fixes the nullability annotation warnings in the public header files.\n\n##### Changed\n - Updates HelloSwift sample app to adopt swift 2.0.\n\n## 2.18\n\n##### Added\n - Adds nullability annotations to all Braze public APIs.\n - Adds a new delegate method to support custom push URI handle. For more detail, please see [ABKPushURIDelegate.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/headers/AppboyKitLibrary/ABKPushURIDelegate.h);\n\n##### Changed\n - Updates to auto-dismiss the Braze web view when a user returns to the app after following a link out of the app from an Braze web view.\n\n##### Removed\n - Removes the deprecated method `requestSlideupRefresh` from Braze class.\n\n## 2.17.1\n\n##### Fixed\n - Fixes a bug where in certain conditions the SDK would resend user attributes that had already synced with the server.\n\n## 2.17\n\n##### Added\n - Adds a new button clicked delegate method for HTML in-app message. The new delegate method also passes the URL of the clicked button.\n\n##### Fixed\n - Fixes the crash caused by inserting a nil object into an NSDictionary when parsing an event object.\n\n##### Changed\n - Makes the WebView background for HTML in-app messages transparent.  Ensure HTML in-app messages you send to the device are created expecting a transparent background.\n - Applies the Braze endpoint delegate methods to in-app messages' resource(zip and image) fetching.\n\n##### Removed\n - Removes the Facebook button from Feedback page.\n\n## 2.16.1\n\n##### Added\n - Adds the ability to log a custom event from an HTML in-app message. To log a custom event from an HTML in-app message, navigate a user to a url of the form `appboy://customEvent?name=customEventName&p1=v2`, where the `name` URL parameter is the name of the event, and the remaining parameters are logged as String properties on the event.\n - Adds the support for customization of the background color of modal in-app messages.\n\n##### Fixed\n - Fixes an issue where daylight savings changes were not reflected in the user profile timezone.\n\n##### Changed\n - Enables users to input text into HTML in-app messages by allowing HTML in-app messages to be displayed with a keyboard on screen. For all other in-app messages, the in-app message will be dismissed when a keyboard is displayed.\n\n## 2.16\n\n##### Added\n - Adds HTML In-App Message types.\n   - HTML In-App Messages consist of HTML and a url of a zipped archive of assets (e.g. images, css) to download locally which the HTML can reference. See [InAppMessageUIViewController](https://github.com/Appboy/appboy-ios-sdk/blob/master/Example/Stopwatch/InAppMessageUIViewController.m#213) in our Stopwatch sample app for an example for the callbacks on the actions inside the WebView hosting the HTML In-App Message.\n\n##### Changed\n - Deprecates the method `- (void) logSocialShare:(ABKSocialNetwork)socialNetwork` and enum `ABKSocialNetwork` in the `Appboy` class. If you use `logSocialShare:` to track user's social account sharing, you can use `logCustomEvent:` instead.\n - Deprecates the property `bio` in the `ABKUser` class.\n\n## 2.15.1\n\n##### Fixed\n - Fixes the warning \"full bitcode bundle could not be generated because XXX was built only with bitcode marker\".\n\n## 2.15\n\n##### Changed\n - Updates the SDK to support iOS 9.  In iOS9, previous versions of the SDK:  1) did not have bitcode support, 2) had a minor UI issue in in-app messages where the slideup messages were not docked on the bottom of the screen if they had one line of text, 3) failed to localize for zh-HK and zh-TW.\n\n## 2.14\n\n##### Breaking\n - Migrates the SDK to ARC.  If you are using our Apple Watch Extension and not using ARC, you must apply -fobjc-arc to the extension files.\n\n##### Added\n - Adds configurable session timeout feature.\n - Adds feedbackViewControllerBeforeFeedbackSent method to the feedback delegate protocols, which can be used to modify the feedback message before it's sent to Braze.\n - Adds a `setAttributionData` method to `ABKUser` that sets an `ABKAttributionData` object for the user.  To be used with attribution provider SDKs when attribution events are fired.\n\n## 2.13.2\n\n##### Changed\n - Increases the number of supported currency codes from 22 to 171. All common currency codes are now supported. The full list of supported codes is available at `Appboy.h`.\n\n## 2.13.1\n\n##### Changed\n - Updates the `isUninstallTrackingNotification` method in `ABKPushUtils` to return the correct value.\n\n## 2.13\n\n##### Added\n - Adds an open-source Watch SDK to support data analytics on watchKit apps. You can use the Appboy-WatchKit SDK by downloading and adding the \"Appboy-WatchKit\" folder in your watchKit extension target. For more detail, please refer to [ABWKUser.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/Appboy-WatchKit/ABWKUser.h) and [AppboyWatchKit.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/Appboy-WatchKit/AppboyWatchKit.h).\n - Adds an opt-in location service that logs background location events; adds ABKLocationManager with methods for allowing Braze to request location permission on your behalf and logging the current location.  More information on the background location capabilities will be made available when dashboard support is released.\n - Adds client side blocking of blacklisted attributes and events.\n - Adds ABKPushUtils with method `+ (BOOL) isUninstallTrackingNotification:(NSDictionary *)userInfo;` that can be used to detect if a content-available push is from Braze uninstall tracking (and shouldn't be acted upon).\n - Adds a new property `expiresAt` in class ABKCard. The property is the unix timestamp of the card's expiration time. For more detail, please refer to ABKCard.h.\n\n##### Changed\n - Stops collecting user's Twitter data automatically. You can pass a user's Twitter information to Braze by initialzing a ABKTwitterUser object with the twitter data, and setting it to `[Appboy sharedInstance].user.twitterUser`. For more information, please refer to `ABKUser.h` and `ABKTwitterUser.h`.\n - Stops logging foreground push as a push open as it is not delivered by the system.\n\n##### Removed\n - Removes the feature of prompting a user to connect his/her social account. You can refer to the method `promptUserToConnectTwitterAccountOnDeviceAndFetchAccountData` in [TwitterViewController.m](https://github.com/Appboy/appboy-ios-sdk/blob/master/Example/Stopwatch/TwitterViewController.m) to continue prompting the user to connect the Twitter account.\n\n## 2.12.2\n\n##### Fixed\n - Fixes the slideup in-app message display issue. When the host app sets the launch screen file, slideup in-app message from bottom sometimes didn't dock at the bottom of the screen on iPhone 6 and iPhone 6 Plus.\n\n## 2.12.1\n\n##### Added\n - Adds font and font size customization to all in-app message's header and message text through NUI. You can customize in-app message's font by adding `ABKInAppMessageSlideupMessageLabel`, `ABKInAppMessageeModalHeaderLabel`,`ABKInAppMessageModalMessageLabel`, `ABKInAppMessageFullHeaderLabel`, `ABKInAppMessageFullMessageLabel` to your NUI nss style sheet.\n\n##### Fixed\n - Fixes news feed issue where no news feed cards resulted in the loading spinner remaining on screen.\n\n##### Changed\n - Cleans up the console logging in Class ABKIdentifierForAdvertisingProvider.\n\n## 2.12.0\n\n##### Fixed\n - Fixes the incorrect path runtime error for users who integrate our pod as a dynamic framework. For SDK versions before 2.12, when you integrate Braze with `use_frameworks!` in the Podfile, the library is integrated as a dynamic framework and the Appboy.bundle is stored in a different path.\n\n##### Changed\n - Changes HelloSwift sample app to integrate Braze SDK as a dynamic framework.\n\n##### Removed\n - Removes the subspecs from the podspec. This fixes the duplicate symbol error https://github.com/Appboy/appboy-ios-sdk/issues/24. If you are still using subspec like `pod 'Appboy-iOS-SDK/AppboyKit'` in your podfile, please make sure to change it to `pod 'Appboy-iOS-SDK'`.\n\n## 2.11.3\n\n##### Added\n - Adds the ability to send and retrieve extra key-value pairs via a News Feed card.\n - Adds the ability to define custom key-value properties on a custom event or purchase. Property keys are strings and values may be NSString, NSDate, or NSNumber objects.\n - Added the fix for an edge case when there are extra UIWindows at the time in-app message is going to display, the in-app message would have issue during dismissing.\n\n## 2.11.2\n\n##### Changed\n - Updates the serialize and deserialize methods for in-app message classes. This is for use by wrappers such as Braze's Unity SDK for iOS.\n\n## 2.11.1\n\n##### Fixed\n - Fixes a UI issue in modal in-app messages displayed on iPads running iOS 6/7.\n\n## 2.11\n\n##### Added\n - Adds support for modal and full screen style in-app messages. Also adds support for including fontawesome icons and images with in-app messages, changing colors on in-app message UI elements, expanded customization options, and message resizing for tablets. Please visit our documentation for more information.\n\n##### Changed\n - Updates the completionHandler signature in getActionWithIdentifier:forRemoteNotification:completionHandler: to match the comletionHandler passed by the system in method `- (void) application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler`.\n\n## 2.10.2\n\n##### Added\n - Adds the fix for an edge case when there are extra UIWindows at the time in-app message is going to display, the in-app message would have issue during dismissing.\n\n## 2.10.1\n\n##### Fixed\n - Fixes a bug which would cause the host app to crash when a deep link was launched from a push notification. In versions 2.10.0 and 2.9.4, if the host app used `[[Appboy sharedInstance] registerApplication: didReceiveRemoteNotification:];` instead of `[[Appboy sharedInstance] registerApplication: didReceiveRemoteNotification: fetchCompletionHandler:];`, opening a push with a deep link would crash the host app in some circumstances.\n\n## 2.10.0\n\n##### Changed\n - Updates the minimum deployment targets of Braze iOS SDK to iOS 6.0.  For apps supporting lower iOS versions, please continue to use 2.9.+ versions of the Braze SDK.\n - Stops collecting user's Facebook data automatically. You can pass a user's Facebook information to Braze by initializing a ABKFacebookUser object with the facebook data, and set it to `[Appboy sharedInstance].user.facebookUser`. For more information, please refer to `ABKUser.h` and `ABKFacebookUser.h`.\n\n##### Removed\n - Removes Facebook SDK dependent builds.  Now there is a single library - AppboyKit - and a single Pod without functional subspecs - Appboy-iOS-SDK (note we now have both the subspecs pointing at the same library). Please update your Podfile to `pod 'Appboy-iOS-SDK` if you are integrating Braze with Cocoapods.\n - Removes the feature of prompting a user to connect his/her Facebook account. You can refer to the method `promptUserToConnectFacebookAccountOnDeviceAndFetchAccountData` in [FacebookViewController.m](https://github.com/Appboy/appboy-ios-sdk/blob/master/Example/Stopwatch/FacebookViewController.m) to continue prompting the user to connect the Facebook account.\n\n## 2.9.6\n\n##### Added\n - Adds the fix for an edge case when there are extra UIWindows at the time in-app message is going to display, the in-app message would have issue during dismissing.\n\n## 2.9.5\n\n##### Fixed\n - Fixes a bug which would cause the host app to crash when a deep link was launched from a push notification. In versions 2.9.4, if the host app used `[[Appboy sharedInstance] registerApplication: didReceiveRemoteNotification:];` instead of `[[Appboy sharedInstance] registerApplication: didReceiveRemoteNotification: fetchCompletionHandler:];`, opening a push with a deep link would crash the host app in some circumstances.\n\n## 2.9.4\n\n##### Added\n - Adds a major performance upgrade that reduces CPU usage, memory footprint, and network traffic.\n - Adds 26 additional languages to localization support for Braze UI elements.\n - Adds support for deep linking from APNS push notification clicks.\n - Adds ability to customize the font of Feedback text using NUI with NUI class name `ABKFeedbackTextView`.\n\n##### Fixed\n - Fixes the feedback page UI issues in iOS 8: when the device's orientation is UIInterfaceOrientationPortraitUpsideDown, the contact info bar was off.\n - Fixes in-app messages to display correctly in landscape mode in iOS 8.\n\n##### Changed\n - Updates the SDK to adopt the latest SDWebImage protocol methods.\n\n##### Removed\n - Removes the \"required\" labels on the feedback page.\n\n## 2.9.3\n\n##### Added\n - Adds a new method `- (void) registerApplication:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler` to support push with background fetch. This method should be called in `- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler`. For more details, please refer to [Appboy.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/Appboy.h).\n - Adds a HelloSwift sample app to demo how to use Braze in a swift app.\n - Adds a new NSString property \"displayPrice\" in ABKCrossPromotionCard to enable server side price localization.\n\n##### Fixed\n - Fixes a bug of when sessions were being created when the app opened in the background.\n - Fixes a bug where requesting the news feed with a news feed open led to card impressions not updating until the next feed refresh.\n\n## 2.9.2\n\n##### Added\n - Adds the ability to turn off Braze's automatic location collection by setting the ABKDisableAutomaticLocationCollectionKey boolean in AppboyOptions in startWithApiKey:inApplication:inApplication:withAppboyOptions:.\n - Adds the ability to send location tracking events to Braze manually using setLastKnownLocationWithLatitude:longitude:horizontalAccuracy: and setLastKnownLocationWithLatitude:longitude:horizontalAccuracy:altitude:verticalAccuracy: on the ABKUser. this is intended to be used with ABKDisableAutomaticLocationCollectionKey set to true in the AppboyOptions so that locations are only being recorded from a single source.\n\n##### Fixed\n - Fixes a news feed bug: sometimes the spinner keeps spinning on the screen even after the news feed card image is displayed.\n\n##### Changed\n - Updates sample app core location fetching code based on the changes in iOS 8.\n\n## 2.9.1\n\n##### Fixed\n - Fixes a news feed bug: When a user refreshed the news feed by swiping down, if the total number of cards in the feed was going to be reduced by the refresh, the app would crash.\n\n## 2.9.0\n\n##### Fixed\n - Fixes an App Store validation error introduced when the App Store started accepting submissions for iOS8. This was done by changing the packaging of the Braze framework to include a universal binary and a resource bundle (instead of combining them both together in a universal framework). Due to this change, Cocoapod integration is even more highly recommended than before to fully automate integration.\n\n## 2.8.1\n\n##### Added\n - Adds a new method `- (void) getActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo` to collect analytics data for push actions in iOS 8. It should be called in the UIApplication delegate method `- (void) application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler`. For more details, please refer to [Appboy.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/Appboy.h).\n - New Custom Attribute Data Type (Array): Braze now supports custom attributes which contain an array of string elements. In addition, we also provide methods for adding or removing an string element from an array type custom attribute. For more information, please refer to [ABKUser.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/ABKUser.h).\n - Users can now pull down on the Braze Newsfeed to refresh the content on iOS version 6.0 or later.\n\n##### Changed\n - Restricts product identifier string to 255 characters for method `- (void) logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price` and `- (void) logPurchase:(NSString *)productIdentifier inCurrency:(NSString *)currencyCode atPrice:(NSDecimalNumber *)price withQuantity:(NSUInteger)quantity`.\n - News feed card now can update the card height and display a full image based on the image ratio. Card image ratio used to be a fix number and images were aspect stretched to fit in the views.\n - The right and left margins in the news feed are now touchable areas for scrolling.\n - Card titles have been improved and will now truncate with \"...\" when they are more than 2 lines.\n\n## 2.8\n\n##### Breaking\n - Renames the class names of news feed cards to match the names on dashboard:\n\n | v2.8                    | v2.7 |\n | ------------------------| ---------------------------|\n | ABKBannerCard           | ABKCardBanner              |\n | ABKCaptionedImageCard   | ABKCardCaptionedMessage    |\n | ABKCrossPromotionCard   | ABKCardCrossPromotionSmall |\n | ABKClassicCard          | ABKCardNews                |\n | ABKTextAnnouncementCard | ABKCardTextAnnouncement    |\n\n##### Added\n - Adds email and push notification subscription types for a user. Subscription types are explicitly opted in, subscribed, and unsubscribed. The previous email boolean subscribe method has been deprecated.\n - Adds custom slideup orientation support. You can now ask the slideup to only support certain orientations. For more details on slideup custom orientation support, please refer to [ABKSlideupController.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/ABKSlideupController.h).\n - Adds quantity parameter as an option when logging purchase. The quanlity should be an unsigned interger greater than 0 and no larger than 100. For more information, please refer to [Appboy.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/Appboy.h).\n - Adds a class method in ABKCard to deserialize a given dictionary to a card. This is for use by wrappers such as Braze's Unity SDK for iOS. Please refer to [ABKCard.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/ABKSlideupController.h) for more information.\n\n## 2.7\n\n### News Feed Update\n- Exposes raw card data in ABKFeedController\n  - Developers can use the raw card data to creat custom user interfaces for the news feed. For more details on the card data, please refer to ABKFeedController.h.\n- Addes support for categories on cards and news feed view controllers.\n  - Categories include Announcement, Advertising, Social, News and No Category. You can get cards of certain categories from ABKFeedController, or you can make ABKFeedViewController only display certain categories of cards.\n- Uses SDWebImage to handle images downloading and caching in the news feed, display a spinner while downloading images and show a default image when no image available.\n  - Adds support for asynchronous image downloading in the news feed, asynchronous memory and disk image caching with automatic cache expiration handling.\n- Adds news feed view controller delegate to support custom handling of card clicks on news feed.\n  - The app can customize click actions from the feed and display any card link in their own user interface.\n\n### Slideup Changes\n- Updates ABKSlideupControllerDelegate method onSlideupClicked to return a BOOL value to indicate if Braze should continue to execute the click action.\n- Stops logging slideup click when the slideup click action is ABKSlideupNoneClickAction.\n\n### Feedback Changes\n- Updates the ABKFeedbackViewControllerPopoverContext so now it should be used in all cases where the feedback page displayed in a popover, including the case that the feedback is push on a navigation controller in a popover.\n- Fixes the ABKFeedbackVIewControllerModalContext cancel button delegate issue.\n- Fixes the form sheet style ABKFeedbackViewControllerModalContext layout issue.\n\n### Other Changes\n- Adds API to request feed and slideup refresh.\n- Adds API to log news feed displayed and feedback displayed.\n  - Allows updating analytics data even using customized news feed or feedback user interfaces.\n- Updates badge count policy to only update when app is foreground.\n- Adds clearTwitterDataWhenNoDataOfTwitterIdentifier to ABKUser, allowing developer to clear user data when a user disconnectes their twitter accounts.\n- Updates custom key and string value for custom attributes to automatically trim.\n\n## 2.6.3\n\n##### Changed\n - Updates the SDK to authenticate with the Twitter API using SSL.\n\n## 2.6.2\n\n##### Fixed\n - Fixes a news feed card click tracking issue.\n\n##### Changed\n - Updates data flush time interval.\n\n## 2.6.1\n\n##### Fixed\n - Fixes a minor display problem that affected news items with no image or link for version 2.6.\n\n## 2.6\n\n##### Breaking\n - Braze iOS SDK now supports 64 bit as well. The minimum deployment targets that Braze iOS SDK supports is iOS 5.1.1.\n   - The Braze iOS SDK will now allow function with 64-bit apps. This version of the SDK only supports iOS 5.1.1+. Legacy iOS apps should continue to use version 2.5 of the SDK.\n   - You can install legacy versions of our SDK via [CocoaPods](http://guides.cocoapods.org/) by following changing the [podfile](http://guides.cocoapods.org/syntax/podfile.html) to include something like the following example `pod 'Appboy-iOS-SDK/AppboyKit', '~> 2.5'`.\n\n## 2.5.1\n\n##### Fixed\n - Fixes a minor display problem that affected news items with no image or link for version 2.5.\n\n## 2.5\n### Localization\n\nLocalization is now supported in version 2.5 of the Braze SDK. We have provided `.string` files for English, Simplified Chinese and Traditional Chinese. You can also optionally override our Braze's default `LocalizedAppboyUIString.strings` right within your app's `Localizable.Strings` file in much the same way you would do an override in CSS. To do so, copy the key and string pair into your `Localizable.Strings` file and edit the string as you so desire.\n\nFor your convenience our CocoaPod integrates the `LocalizedAppboyUIString.strings` files for the three aforementioned languages. If you do not wish to use one or more of these languages, you can feel free to delete these files from your project.\n\n###  Slideup Upgrade\n\nBraze version 2.5 provides a substantial upgrade to the slideup code and reorganization for better flexibility moving forward, but at the expense of a number of breaking changes. We've detailed the changes in this changelog and hope that you'll love the added power, increased flexibility, and improved UI that the new Braze slideup provides. If you have any trouble with these changes, feel free to reach out to success@braze.com for help, but most migrations to the new code structure should be relatively painless.\n\n#### New Slideup Controller\n- The property `slideupController` has been added to the Braze object. Please see [ABKSlideupController.h](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/ABKSlideupController.h) for details.\n  - The `delegate` property allows you to specify a delegate for the slideup.\n    - This replaces `slideupDelegate` which has been removed.\n  - The `displayNextSlideupWithDelegate:` method displays the next available slideup with the specified delegate.\n    - This replaces `provideSlideupToDelegate:` which has been removed from Braze.\n  - The `slideupsRemainingOnStack` method returns the number of slideups that are waiting locally to be displayed.\n  - The `addSlideup:` method allows you to display a slideup object with custom content. This is useful in testing or if you want to use the Braze slideup's UI/UX with another notification system that you are using.\n    - Clicks and impressions of slideups added by this method will not be collected by Braze.\n  - `hideCurrentSlideup:` method will remove any slideup currently on screen, with or without animation.\n\n#### New Slideup Properties and Methods in `ABKSlideup.h`\nThe following properties and methods all belong to the `ABKSlideup` object. Please see [`ABKSlideup.h`](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/ABKSlideup.h) for more information.\n\n##### New Properties\n\n- The `extras` property carries additional data within key value pairs that have been defined on the dashboard, just like a push notification. Braze does nothing with the extras property, any additional behavior is at your discretion.\n- The `slideupAnchor` property defines whether the slideup originates from the top or the bottom of the screen.\n- The `slideupDismissType` property controls whether the slideup will dismiss automatically after a period of time has lapsed, or if it will wait for interaction with the user before disappearing.\n  - The slideup will be dismissed automatically after the number of seconds defined by the newly added `duration` property if the slideup's `slideupDismissType` is `ABKSlideupDismissAutomatically`.\n- The `slideupClickActionType` property defines the action behavior after the slideup is clicked: displaying a news feed, redirect to a uri, or nothing but dismissing the slideup. This property is read only. If you want to change the slideup's click behavior, you can call one of the following method: `setSlideupClickActionToNewsFeed`, `setSlideupClickActionToUri:` or `setSlideupClickActionToNone`.\n- The `uri` property defines the uri string that the slide up will open when the slideupClickActionType is ABKSlideupRedirectToURI. This is a read only property, you can call `setSlideupClickActionToUri:` to change it's value.\n\n##### New Methods\n- `logSlideupImpression` and `logSlideupClicked` have been added to allow you to report user interactions with the slideup in the case that you've fully customized the slideup experience and Braze is not handling the interactions.\n- `setSlideupClickActionToNewsFeed`, `setSlideupClickActionToUri:` and `setSlideupClickActionToNone` have been added to allow you to change the slideup's click action behavior. `setSlideupClickActionToUri:` accepts a uri string as parameter and required the given uri string is valid.\n\n#### Delegate Method Changes\n\nAll former Braze slideup delegate methods have been depreciated and removed. In their place Braze has added new slideup delegate methods within [`ABKSlideupControllerDelegate.h`](https://github.com/Appboy/appboy-ios-sdk/blob/master/AppboyKit/AppboyKit.framework/Headers/ABKSlideupControllerDelegate.h).\n\n- `onSlideupReceived:` is called when slideup objects are received from the Braze server.\n- `beforeSlideupDisplayed:withKeyboardIsUp:` is called before slideup objects are displayed, the return value determines whether the slideup will be displayed, queued or discarded.\n- `slideupViewControllerWithSlideup:` This delegate method allows you to specify custom view controllers in which your slideups will be displayed.\n  - The custom view controller should be a subclass of `ABKSlideupViewController`.\n    - Alternatively, it can also be an instance of `ABKSlideupViewController`.\n  - The view of the returned view controller should be an instance of `ABKSlideupView` or its subclass.\n  - For integration examples of a custom slideup view controller, see the `CustomSlideupViewController` class in Braze's sample app Stopwatch.\n- `onSlideupClicked:` is called when a user clicks on a slideup. We recommend that you specify behavior on click via the dashboard, but you can additionally specify behavior on click by defining this delegate method.\n- `onSlideupDismissed:` is called whenever the slideup is dismissed regardless of whether the dismissal occurs automatically or via swipe. This method is not called if the user clicks on the slideup. If the user clicks or taps on the slideup, `onSlideupClicked` is called instead.\n\n#### New Options on the Dashboard\n- Slideup behavior on click can now be set within the dashboard to open a modal news feed, open a URI within a modal, or do nothing.\n- The following properties can be set remotely from the Braze Dashboard:\n  - `extras`\n  - `slideupAnchor`\n  - `slideupDismissType`\n  - `slideupClickActionType`\n  - `uri`\n\n### News Feed Changes\n- News feed items are now cached in offline storage, allowing the news feed to render even when no internet connectivity is available. Braze will still automatically try to pull down a new news feed when a session opens, even if an offline feed is available.\n- Each card now has a maximum height of no more than 2009 points to avoid any performance issues as recommended by iOS developer guidelines.\n- The entirety of captioned image cards are now clickable. Formerly, only the link itself was clickable.\n- When the news feed is brought to the foreground, it will now automatically check for new content if the cached version of the feed was received more than 60 seconds ago.\n— The width of news feed cards as well as the minimum margin between any card and the left & right edges of the view controller can now be customized. These values can be set separately for both iPad and iPhone. This allows for a larger news feed to render on larger screen sizes. All card images will scale proportionally. Please see `ABKFeedViewControllerContext.h` and `ABKFeedViewController.h` for more information.\n\n### Other Changes\n- Various internal and news feed display optimizations.\n\n## 2.4\n* IDFA Collection is now optional.\n  * By default, IDFA collection is now disabled by the Braze SDK.\n    * There will be no loss of continuity on user profiles or loss of functionality whatsoever as a result of this change.\n    * If you’re using advertising elsewhere in the app or through our in-app news feed, we recommend continuing to collect the IDFA through Braze. You should be able to do so safely without fear of rejection from the iOS App Store.\n    * The future availability of IDFAs will enable functionality like integrating with other third-party systems, including your own servers, and enabling re-targeting of existing users outside of Braze. If you continue to record them we will store IDFAs free of charge so you can take advantage of these options immediately when they are released without additional development work.\n  * Necessary Project Changes\n    * ABKIdentifierForAdvertisingProvider.m and ABKIdentifierForAdvertisingProvider.h must be added to your project regardless of whether or not you enable collection. This occurs automatically if you integrate/update via the CocoaPod.\n  * Enabling Braze IDFA Collection\n    * IDFA collection can be enabled via adding the following PreProcessor Macro to the Build Settings of your app:\n      * `ABK_ENABLE_IDFA_COLLECTION`\n\n## 2.3.1\n* The Braze SDK for iOS now has two versions, one for use with apps which incorporate the official Facebook SDK and one for those which do not. In November of 2013, the App Store Validation Process started generating warnings about the usage of isOpen and setActiveSession in the Braze SDK. These selectors were being sent to instances of classes in the Facebook SDK and are generally able to be used without generating warnings. However because of the way that the classes were initialized in Braze (a result of building a single Braze binary to fully support apps with and without the Facebook SDK), the App Store Validation Process started generating warnings the Facebook SDK methods share a name with private selectors elsewhere in iOS. Although none of our customers have been denied App Store approval yet, to protect against potential validation policy changes by Apple, Braze now provides two versions of its SDK, neither of which generate warnings. Going forward, the appboy-ios-sdk repository will provide both versions of the SDK in the folders 'AppboySDK' (as before) and 'AppboySDKWithoutFacebookSupport'. The 'AppboySDKWithoutFacebookSupport' does not require the host app to include the Facebook SDK, but as a result does not include all of the Braze features for Facebook data fetching. More information is available here within the [Braze documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/).\n* Fixed a bug that repeatedly updated the push token of some users unnecessarily.\n* The \"Reporting an Issue?\" box within the UI layout of the Feedback Page has been moved to the left side of the label away from the \"Send\" button. This change was made to reduce the number of misclicks of the \"Send\" button. The \"Reporting an Issue?\" label is now clickable as well.\n* Cross Promotion Cards for apps with long titles will now render appropriately in iOS5. Before the title would render abnormally large on these devices.\n* Fixed a bug where view recycling would cause incorrect card images to appear for newly rendered cards (until the image for that card finished downloading). Card images for newly rendered cards will now remain empty until the correct image is downloaded.\n* Internal changes to enable future support for a 64 bit library release.\n* Improvements to the Braze Sample App.\n* Internal code structure and performance improvements including the move of more offline caching to background tasks.\n\n## 2.3\n* BREAKING CHANGE: The ABKSlideupControllerDelegate interface has been changed to work with ABKSlideup objects instead of simply the slideup message. This provides you with more control over the click actions and display of slideups and is also being made in anticipation of the augmentation of the ABKSlideup object with more data properties in future releases. To access the message previously sent to shouldDisplaySlideup, simply access the message property on the provided ABKSlideup argument.\n* displayNextAvailableSlideup has been deprecated and will be removed in the next minor release, it has been replaced by provideSlideupToDelegate, see Appboy.h documentation for more information.\n* provideSlideupToDelegate has been added to Braze to allow for more fine grained control over slideup display.\n* Fixes a bug where the slideupDelegate property getter on Braze would always return nil.\n* Changes the slideupDelegate property on Braze to be retained, instead of assigned.\n\n## 2.2.1\n* Adds a startup option to appboyOptions to control the automatic capture of social network data. See the documentation on ABKSocialAccountAcquisitionPolicy in Appboy.h for more information.\n* Changes a table cell's default background color to clear, from the white value that became default in iOS7.\n* Adds support for developer to send up image_url for user avatars, allowing for custom images to be included in user profiles on the dashboard.\n\n## 2.2\n* Adds support for new banner and captioned image card types.\n* Adds support for submitting feedback programmatically through an Appboy.h method without using Braze feedback form. This allows you to create your own feedback form.\n* Fixes an issue where the the news feed's web view would display \"Connection Error\" when a user came back into the app after a card had directed him or her to a protocol URL. Now when users come back from a redirected protocol URL, the feed is properly displayed.\n* Fixes an issue where the SDK might have incorrectly sent both read and write Facebook permissions at the same time, instead preferring to request only those read permissions that Braze is interested in and have already been requested by the incorporating app.\n* Fixes a corner case where card impressions could be miscounted when the feed view controller is the master view controller of a split view.\n* Makes cards truncate properly at two lines.\n\n## 2.1.1\n* URGENT BUGFIX: This fixes an issue which exists in all previous versions of the v2 SDK which is causing crashes on the just release iPhone 5c and iPhone 5s. All users of v2 are recommended to upgrade the Braze SDK to 2.1.1 immediately and re-submit to the app store.\n\n## 2.1.0\n* Adds support for iOS 7. You will need to use Xcode 5 to use this and future versions of the Braze iOS SDK.\n* Updates internal usage of NUI. If you're using NUI, please ensure that you are at least using version 0.3.3 (the most up to date as of this writing is 0.3.4).\n* Removes support for iOS 4.3.\n* Optimizes news feed rendering for faster start up times and smoother scrolling of long feeds.\n* Removes the deprecated - (void) logPurchase:(NSString *)productId priceInCents:(NSUInteger)price method in favor of the new multi-currency tracking method. Conversion of old method calls is straightforward. `[[Appboy sharedInstance] logPurchase:@\"powerups\" priceInCents:99];` should turn into `[[Appboy sharedInstance] logPurchase:@\"powerups\" inCurrency:@\"USD\" atPrice:[[[NSDecimalNumber alloc] initWithFloat:.99f] autorelease]];`\n* Any references to the `delegate` property of ABKFeedbackViewControllerModalContext should be updated to the new property name `feedbackDelegate`.\n* Following the removal of support for 4.3, removes SBJson parsing and uses built-in parsing added in iOS5 to improve performance and lower the SDK footprint.\n\n## 2.0.4\n* Adds support for reporting purchases in multiple currencies. Also, changes the price reporting object type to NSDecimalNumber for consistency with StoreKit.\n* Adds additional space savings optimizations to image assets.\n* Minor fix to orientation change handling in the example app code.\n\n## 2.0.3\n* Adds the ability to assign a Foursquare access token for each user. Doing so will cause the Braze backend to make Foursquare data available in user profiles on the dasbhard.\n* Adds more fine grained control options for Braze's network activity. See Appboy.h for more information.\n\n## 2.0.2\n* Fixes a bug where Braze might reopen a Facebook read session when a publish session already exists\n\n## 2.0.1\n* UI Improvements\n  * Fixed a bug when using the nav context feedback in a popover window that would cause the email bar to disappear\n  * Updated news feed's close button when opened from a slide up\n  * Added a loading spinner on the feedback page when fetching email address from Facebook\n  * Fixed the bug where the modal context feed page's navigation bar would not adhere to NUI theming\n  * Improved the look of the popover content feedback page\n  * Enabled resizable webpages when clicking on to a web URL through a card\n* API updates\n  * Updated custom user attribute setting methods to return a boolean value indicating if the setting is successful\n  * Added methods for incrementing custom user attributes\n  * Added support for device push tokens as NSData when registering the token to Braze\n  * More detailed error messages logged in console\n  * Removed the enable/disable Braze methods from `Appboy.h`\n\n## 2.0\n* Initial release\n"
  },
  {
    "path": "Example/Podfile",
    "content": "source 'https://cdn.cocoapods.org/'\n\ntarget :Stopwatch do\n  platform :ios, '11.0'\n   pod 'Appboy-iOS-SDK'\n  pod 'KKColorListPicker', :git => 'https://github.com/leoru/KKColorListPicker.git', :inhibit_warnings => true\n  pod 'Branch'\nend\n\ntarget :tvOS_Stopwatch do\n  platform :tvos, '11.0'\n  pod 'Appboy-tvOS-SDK'\nend\n\ntarget :tvOS_TVML_Stopwatch do\n  platform :tvos, '11.0'\n  pod 'Appboy-tvOS-SDK'\nend\n\ntarget :StopwatchNotificationContentExtension do\n  platform :ios, '11.0'\n   pod 'Appboy-Push-Story'\nend\n\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'\n    end\n  end\nend\n"
  },
  {
    "path": "Example/README.md",
    "content": "# Welcome to Braze's sample project!\n\nStopwatch is a sample application that shows Braze in action.\n"
  },
  {
    "path": "Example/Stopwatch/Resources/ABKContentCardsCustomStoryboard.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"17701\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17703\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Content Cards-->\n        <scene sceneID=\"DtF-fl-vuP\">\n            <objects>\n                <tableViewController storyboardIdentifier=\"ABKContentCardsTableViewController\" id=\"pNw-1d-kzS\" customClass=\"ABKContentCardsTableViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"QfY-bo-EsO\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemGreenColor\"/>\n                        <inset key=\"separatorInset\" minX=\"0.0\" minY=\"0.0\" maxX=\"0.0\" maxY=\"0.0\"/>\n                        <prototypes>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKCaptionedImageContentCardCell\" rowHeight=\"380\" id=\"Ybj-gD-dg5\" customClass=\"ABKCaptionedImageContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"375\" height=\"380\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Ybj-gD-dg5\" id=\"T6E-cQ-uAu\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"380\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"OO0-Sd-dv6\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"355\" height=\"360\"/>\n                                            <subviews>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xzv-3L-WDj\" userLabel=\"Title Background Gradient\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"223\" width=\"355\" height=\"137\"/>\n                                                    <subviews>\n                                                        <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"stopwatch_cc_icon_pinned\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"nFM-dS-rg2\">\n                                                            <rect key=\"frame\" x=\"335\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                            <constraints>\n                                                                <constraint firstAttribute=\"width\" constant=\"20\" id=\"ij5-J0-4li\"/>\n                                                                <constraint firstAttribute=\"height\" constant=\"20\" id=\"uxr-Kf-wzO\"/>\n                                                            </constraints>\n                                                        </imageView>\n                                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Title\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dBF-6R-JPA\" userLabel=\"Title\">\n                                                            <rect key=\"frame\" x=\"25\" y=\"17\" width=\"305\" height=\"19.5\"/>\n                                                            <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"16\"/>\n                                                            <nil key=\"textColor\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Description\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UGC-fY-DfN\" userLabel=\"Description\">\n                                                            <rect key=\"frame\" x=\"25\" y=\"42.5\" width=\"305\" height=\"16\"/>\n                                                            <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"13\"/>\n                                                            <nil key=\"textColor\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Link\" lineBreakMode=\"characterWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Yy8-cq-nRL\">\n                                                            <rect key=\"frame\" x=\"25\" y=\"96\" width=\"305\" height=\"16\"/>\n                                                            <accessibility key=\"accessibilityConfiguration\">\n                                                                <accessibilityTraits key=\"traits\" link=\"YES\" staticText=\"YES\"/>\n                                                            </accessibility>\n                                                            <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"13\"/>\n                                                            <color key=\"textColor\" systemColor=\"linkColor\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                    </subviews>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"trailing\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"trailing\" constant=\"25\" id=\"146-47-jOR\"/>\n                                                        <constraint firstItem=\"Yy8-cq-nRL\" firstAttribute=\"leading\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"leading\" id=\"17A-kh-gvg\"/>\n                                                        <constraint firstItem=\"UGC-fY-DfN\" firstAttribute=\"trailing\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"trailing\" id=\"2sp-0v-joj\"/>\n                                                        <constraint firstItem=\"Yy8-cq-nRL\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"UGC-fY-DfN\" secondAttribute=\"bottom\" constant=\"8\" id=\"4kf-v0-4k3\"/>\n                                                        <constraint firstAttribute=\"bottom\" secondItem=\"Yy8-cq-nRL\" secondAttribute=\"bottom\" priority=\"750\" constant=\"25\" id=\"7Ul-d5-yED\"/>\n                                                        <constraint firstItem=\"UGC-fY-DfN\" firstAttribute=\"top\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"bottom\" constant=\"6\" id=\"Chd-LB-CZP\"/>\n                                                        <constraint firstItem=\"nFM-dS-rg2\" firstAttribute=\"top\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"top\" id=\"EzZ-w2-Qk5\"/>\n                                                        <constraint firstAttribute=\"bottom\" secondItem=\"UGC-fY-DfN\" secondAttribute=\"bottom\" priority=\"250\" constant=\"25\" id=\"Jlv-dW-WFq\"/>\n                                                        <constraint firstAttribute=\"trailing\" secondItem=\"nFM-dS-rg2\" secondAttribute=\"trailing\" id=\"QJs-aV-ehL\"/>\n                                                        <constraint firstItem=\"dBF-6R-JPA\" firstAttribute=\"leading\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"leading\" constant=\"25\" id=\"lrO-aY-bJE\"/>\n                                                        <constraint firstItem=\"Yy8-cq-nRL\" firstAttribute=\"trailing\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"trailing\" id=\"o4b-EE-Scp\"/>\n                                                        <constraint firstItem=\"dBF-6R-JPA\" firstAttribute=\"top\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"top\" constant=\"17\" id=\"qjZ-a6-LHJ\"/>\n                                                        <constraint firstItem=\"UGC-fY-DfN\" firstAttribute=\"leading\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"leading\" id=\"utg-Wd-EfY\"/>\n                                                    </constraints>\n                                                </view>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vE3-pM-vca\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"355\" height=\"223\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"vE3-pM-vca\" secondAttribute=\"height\" multiplier=\"355:223\" id=\"5S1-WY-1Pg\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"r6I-Yt-oqe\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"352\" width=\"355\" height=\"8\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.086274509803921567\" green=\"0.46274509803921571\" blue=\"0.81568627450980391\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"8\" id=\"JL1-0h-OtE\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" systemColor=\"systemGreenColor\"/>\n                                            <constraints>\n                                                <constraint firstItem=\"xzv-3L-WDj\" firstAttribute=\"top\" secondItem=\"vE3-pM-vca\" secondAttribute=\"bottom\" id=\"3b4-3i-sEW\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"bottom\" id=\"AGH-KQ-taq\"/>\n                                                <constraint firstItem=\"vE3-pM-vca\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" id=\"Cns-rn-PQZ\"/>\n                                                <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"380\" identifier=\"cardWidth\" id=\"MPG-Gd-2Mi\"/>\n                                                <constraint firstItem=\"vE3-pM-vca\" firstAttribute=\"top\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"top\" priority=\"998\" id=\"Omc-N6-exd\"/>\n                                                <constraint firstItem=\"r6I-Yt-oqe\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" id=\"PIV-mw-2Zv\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"trailing\" id=\"SNL-zr-EeA\"/>\n                                                <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"80\" id=\"cIp-1t-xZ9\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"r6I-Yt-oqe\" secondAttribute=\"trailing\" id=\"jiI-fi-wUf\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"vE3-pM-vca\" secondAttribute=\"trailing\" id=\"qNd-L9-ZDA\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"r6I-Yt-oqe\" secondAttribute=\"bottom\" id=\"t5R-lo-ICp\"/>\n                                                <constraint firstItem=\"xzv-3L-WDj\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" id=\"ydh-2U-FMu\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"OO0-Sd-dv6\" firstAttribute=\"top\" secondItem=\"T6E-cQ-uAu\" secondAttribute=\"top\" constant=\"10\" id=\"THp-xt-mWA\"/>\n                                        <constraint firstItem=\"OO0-Sd-dv6\" firstAttribute=\"leading\" secondItem=\"T6E-cQ-uAu\" secondAttribute=\"leading\" priority=\"999\" constant=\"10\" id=\"ZaD-Vm-E5b\"/>\n                                        <constraint firstItem=\"OO0-Sd-dv6\" firstAttribute=\"centerX\" secondItem=\"T6E-cQ-uAu\" secondAttribute=\"centerX\" id=\"cxU-Ez-C9n\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"trailing\" priority=\"999\" constant=\"10\" id=\"iW3-ql-u5z\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"bottom\" constant=\"10\" id=\"tGr-HL-CUA\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"captionedImageView\" destination=\"vE3-pM-vca\" id=\"dcL-Pp-ZCz\"/>\n                                    <outlet property=\"cardWidthConstraint\" destination=\"MPG-Gd-2Mi\" id=\"hHC-XS-7cr\"/>\n                                    <outlet property=\"descriptionLabel\" destination=\"UGC-fY-DfN\" id=\"Pqf-10-TTh\"/>\n                                    <outlet property=\"imageRatioConstraint\" destination=\"5S1-WY-1Pg\" id=\"Xk8-vs-mbp\"/>\n                                    <outlet property=\"linkLabel\" destination=\"Yy8-cq-nRL\" id=\"HMd-7m-qkA\"/>\n                                    <outlet property=\"pinImageView\" destination=\"nFM-dS-rg2\" id=\"62p-e0-xA3\"/>\n                                    <outlet property=\"rootView\" destination=\"OO0-Sd-dv6\" id=\"74Y-uL-6bw\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"tGr-HL-CUA\" id=\"VXd-AT-mn5\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"ZaD-Vm-E5b\" id=\"wMy-dd-gBS\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"THp-xt-mWA\" id=\"3pM-HC-w94\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"iW3-ql-u5z\" id=\"KB0-By-vwv\"/>\n                                    <outlet property=\"titleLabel\" destination=\"dBF-6R-JPA\" id=\"fBX-J7-62s\"/>\n                                    <outlet property=\"unviewedLineView\" destination=\"r6I-Yt-oqe\" id=\"rfD-Sn-dhB\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKBannerContentCardCell\" rowHeight=\"100\" id=\"NyZ-g9-dRu\" customClass=\"ABKBannerContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"408\" width=\"375\" height=\"100\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"NyZ-g9-dRu\" id=\"v5b-8b-aWt\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"100\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Kcn-iU-dPb\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"355\" height=\"80\"/>\n                                            <subviews>\n                                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MX9-Bb-S0W\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"355\" height=\"80\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"height\" multiplier=\"355:79\" priority=\"998\" id=\"yLN-Ep-HgJ\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"stopwatch_cc_icon_pinned\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vVA-Lu-kPN\">\n                                                    <rect key=\"frame\" x=\"335\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"6yR-bw-SBl\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"QUv-CO-f4O\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"siC-Vi-YLz\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"72\" width=\"355\" height=\"8\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.086274509803921567\" green=\"0.46274509803921571\" blue=\"0.81568627450980391\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"8\" id=\"QKZ-LU-Xrh\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"380\" identifier=\"cardWidth\" id=\"4Or-tW-pnK\"/>\n                                                <constraint firstItem=\"vVA-Lu-kPN\" firstAttribute=\"top\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"top\" id=\"9mM-wb-ih1\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"vVA-Lu-kPN\" secondAttribute=\"trailing\" id=\"Lkm-p9-dRD\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"trailing\" id=\"PQM-3e-GwB\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"siC-Vi-YLz\" secondAttribute=\"bottom\" id=\"PrK-NV-rZs\"/>\n                                                <constraint firstItem=\"siC-Vi-YLz\" firstAttribute=\"leading\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"leading\" id=\"QRB-Uv-D1d\"/>\n                                                <constraint firstItem=\"MX9-Bb-S0W\" firstAttribute=\"leading\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"leading\" id=\"dgT-7w-Rcs\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"bottom\" id=\"gQK-oy-z6m\"/>\n                                                <constraint firstItem=\"MX9-Bb-S0W\" firstAttribute=\"top\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"top\" id=\"kfc-nZ-2to\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"siC-Vi-YLz\" secondAttribute=\"trailing\" id=\"o04-Ms-iqs\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" systemColor=\"systemGreenColor\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"Kcn-iU-dPb\" firstAttribute=\"leading\" secondItem=\"v5b-8b-aWt\" secondAttribute=\"leading\" priority=\"999\" constant=\"10\" id=\"2cB-WQ-qsd\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"trailing\" priority=\"999\" constant=\"10\" id=\"3E2-Pw-Qdn\"/>\n                                        <constraint firstItem=\"Kcn-iU-dPb\" firstAttribute=\"centerX\" secondItem=\"v5b-8b-aWt\" secondAttribute=\"centerX\" id=\"FFn-LA-SCC\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"bottom\" constant=\"10\" id=\"Niz-oI-WKp\"/>\n                                        <constraint firstItem=\"Kcn-iU-dPb\" firstAttribute=\"top\" secondItem=\"v5b-8b-aWt\" secondAttribute=\"top\" priority=\"999\" constant=\"10\" id=\"YJr-gC-zKQ\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"bannerImageView\" destination=\"MX9-Bb-S0W\" id=\"LiA-If-iP2\"/>\n                                    <outlet property=\"cardWidthConstraint\" destination=\"4Or-tW-pnK\" id=\"mDo-96-qKl\"/>\n                                    <outlet property=\"imageRatioConstraint\" destination=\"yLN-Ep-HgJ\" id=\"bMw-e0-tGv\"/>\n                                    <outlet property=\"pinImageView\" destination=\"vVA-Lu-kPN\" id=\"mHD-eB-jVT\"/>\n                                    <outlet property=\"rootView\" destination=\"Kcn-iU-dPb\" id=\"hcg-YL-V4z\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"Niz-oI-WKp\" id=\"ewn-rG-Gd4\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"2cB-WQ-qsd\" id=\"fDs-VX-5Vu\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"YJr-gC-zKQ\" id=\"Qd5-7B-388\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"3E2-Pw-Qdn\" id=\"ZlT-7v-epj\"/>\n                                    <outlet property=\"unviewedLineView\" destination=\"siC-Vi-YLz\" id=\"Qiv-xj-bKA\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKClassicCardCell\" rowHeight=\"130\" id=\"Jqk-Tq-2Cq\" customClass=\"ABKClassicContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"508\" width=\"375\" height=\"130\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Jqk-Tq-2Cq\" id=\"9Cc-7k-aI0\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"130\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"On7-Xz-EwZ\" userLabel=\"Root View\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"355\" height=\"110\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"stopwatch_cc_icon_pinned\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Xkj-i2-AsD\">\n                                                    <rect key=\"frame\" x=\"335\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"K32-xH-4Ma\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"bj1-OK-e9R\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"top\" horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"749\" text=\"Title\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NYH-ky-y8x\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"17\" width=\"305\" height=\"19.5\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"16\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"749\" text=\"Description\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HTG-0g-poE\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"42.5\" width=\"305\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"749\" text=\"Link\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NmY-63-m8B\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"69\" width=\"305\" height=\"16\"/>\n                                                    <accessibility key=\"accessibilityConfiguration\">\n                                                        <accessibilityTraits key=\"traits\" link=\"YES\" staticText=\"YES\"/>\n                                                        <bool key=\"isElement\" value=\"YES\"/>\n                                                    </accessibility>\n                                                    <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"13\"/>\n                                                    <color key=\"textColor\" systemColor=\"linkColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jPu-U8-pTJ\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"102\" width=\"355\" height=\"8\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.086274509799999996\" green=\"0.46274509800000002\" blue=\"0.81568627449999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"8\" id=\"Wx4-sF-Lc5\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" systemColor=\"systemGreenColor\"/>\n                                            <constraints>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"NmY-63-m8B\" secondAttribute=\"bottom\" priority=\"750\" constant=\"25\" id=\"2tk-eQ-Kik\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"trailing\" constant=\"25\" id=\"6he-kB-iSb\"/>\n                                                <constraint firstItem=\"jPu-U8-pTJ\" firstAttribute=\"leading\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"leading\" id=\"Dqd-4Y-ZyS\"/>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"HTG-0g-poE\" secondAttribute=\"bottom\" constant=\"8\" id=\"F03-Dk-UuH\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"top\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"bottom\" constant=\"6\" id=\"ONO-EX-TvF\"/>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"leading\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"leading\" id=\"Rxd-dd-lM9\"/>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"trailing\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"trailing\" id=\"Vd0-ob-2YA\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"leading\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"leading\" id=\"auJ-TH-8qG\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"HTG-0g-poE\" secondAttribute=\"bottom\" priority=\"250\" constant=\"25\" id=\"bWd-ub-Dlb\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"jPu-U8-pTJ\" secondAttribute=\"trailing\" id=\"clc-fc-8db\"/>\n                                                <constraint firstItem=\"NYH-ky-y8x\" firstAttribute=\"top\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"top\" constant=\"17\" id=\"dsq-hA-fkY\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"trailing\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"trailing\" id=\"h7U-6y-lpr\"/>\n                                                <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"80\" id=\"jMZ-pN-WGy\"/>\n                                                <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"380\" id=\"jZe-sb-mUJ\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"jPu-U8-pTJ\" secondAttribute=\"bottom\" id=\"kKG-Bj-nlM\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"Xkj-i2-AsD\" secondAttribute=\"trailing\" id=\"l4w-Lg-BYv\"/>\n                                                <constraint firstItem=\"Xkj-i2-AsD\" firstAttribute=\"top\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"top\" id=\"zh0-vl-TNl\"/>\n                                                <constraint firstItem=\"NYH-ky-y8x\" firstAttribute=\"leading\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"leading\" constant=\"25\" id=\"znk-zB-6wA\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"On7-Xz-EwZ\" firstAttribute=\"top\" secondItem=\"9Cc-7k-aI0\" secondAttribute=\"top\" constant=\"10\" id=\"RGg-bi-Set\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"bottom\" constant=\"10\" id=\"RY9-GF-VAs\"/>\n                                        <constraint firstItem=\"On7-Xz-EwZ\" firstAttribute=\"leading\" secondItem=\"9Cc-7k-aI0\" secondAttribute=\"leading\" priority=\"999\" constant=\"10\" id=\"Vhn-ph-93e\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"trailing\" priority=\"999\" constant=\"10\" id=\"dLo-ig-cpk\"/>\n                                        <constraint firstItem=\"On7-Xz-EwZ\" firstAttribute=\"centerX\" secondItem=\"9Cc-7k-aI0\" secondAttribute=\"centerX\" id=\"rMT-yn-EGl\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"cardWidthConstraint\" destination=\"jZe-sb-mUJ\" id=\"JfM-dT-Vgg\"/>\n                                    <outlet property=\"descriptionLabel\" destination=\"HTG-0g-poE\" id=\"auh-vy-CDP\"/>\n                                    <outlet property=\"linkLabel\" destination=\"NmY-63-m8B\" id=\"UdQ-KR-Oe2\"/>\n                                    <outlet property=\"pinImageView\" destination=\"Xkj-i2-AsD\" id=\"yS6-Jd-xxx\"/>\n                                    <outlet property=\"rootView\" destination=\"On7-Xz-EwZ\" id=\"7J9-d8-REY\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"RY9-GF-VAs\" id=\"03e-6w-PK3\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"Vhn-ph-93e\" id=\"pgJ-qC-pvw\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"RGg-bi-Set\" id=\"y6s-aq-ier\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"dLo-ig-cpk\" id=\"rhr-sO-NPz\"/>\n                                    <outlet property=\"titleLabel\" destination=\"NYH-ky-y8x\" id=\"t62-l6-mbK\"/>\n                                    <outlet property=\"unviewedLineView\" destination=\"jPu-U8-pTJ\" id=\"CT8-hJ-oq0\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKClassicImageCardCell\" id=\"gzx-in-eIA\" customClass=\"ABKClassicImageContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"638\" width=\"375\" height=\"128.5\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"gzx-in-eIA\" id=\"KMu-I3-bAv\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"128.5\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"uBL-jd-ndj\" userLabel=\"Root View\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"355\" height=\"108.5\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"stopwatch_cc_icon_pinned\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lIm-rR-Mrk\">\n                                                    <rect key=\"frame\" x=\"335\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"exc-Oq-My5\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"jdj-sM-GyY\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oEA-BV-ssv\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"20\" width=\"57.5\" height=\"57.5\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"57.5\" id=\"84b-Gu-LNL\"/>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"oEA-BV-ssv\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"yJo-5E-rFQ\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"top\" horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Title\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UD2-VE-dlU\">\n                                                    <rect key=\"frame\" x=\"94.5\" y=\"18\" width=\"235.5\" height=\"19.5\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"16\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Description\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2LE-EF-Mwl\">\n                                                    <rect key=\"frame\" x=\"94.5\" y=\"43.5\" width=\"235.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"13\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Link\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xBh-6s-twj\">\n                                                    <rect key=\"frame\" x=\"94.5\" y=\"67.5\" width=\"25\" height=\"16\"/>\n                                                    <accessibility key=\"accessibilityConfiguration\">\n                                                        <accessibilityTraits key=\"traits\" link=\"YES\" staticText=\"YES\"/>\n                                                        <bool key=\"isElement\" value=\"YES\"/>\n                                                    </accessibility>\n                                                    <fontDescription key=\"fontDescription\" type=\"italicSystem\" pointSize=\"13\"/>\n                                                    <color key=\"textColor\" systemColor=\"linkColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"reu-jL-oVA\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"100.5\" width=\"355\" height=\"8\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.086274509799999996\" green=\"0.46274509800000002\" blue=\"0.81568627449999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"8\" id=\"UMI-Xs-qJT\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" systemColor=\"systemGreenColor\"/>\n                                            <constraints>\n                                                <constraint firstItem=\"xBh-6s-twj\" firstAttribute=\"trailing\" relation=\"lessThanOrEqual\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"trailing\" id=\"0Wh-gw-fTK\"/>\n                                                <constraint firstItem=\"xBh-6s-twj\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"2LE-EF-Mwl\" secondAttribute=\"bottom\" constant=\"8\" id=\"2GR-zZ-Ll6\"/>\n                                                <constraint firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"oEA-BV-ssv\" secondAttribute=\"bottom\" priority=\"999\" constant=\"20\" id=\"5Mr-qO-tMZ\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"trailing\" constant=\"25\" id=\"5ZT-1d-DSs\"/>\n                                                <constraint firstItem=\"lIm-rR-Mrk\" firstAttribute=\"top\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"top\" id=\"5x6-En-oLT\"/>\n                                                <constraint firstItem=\"2LE-EF-Mwl\" firstAttribute=\"top\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"bottom\" constant=\"6\" id=\"Bd2-kA-GQd\"/>\n                                                <constraint firstItem=\"UD2-VE-dlU\" firstAttribute=\"top\" secondItem=\"oEA-BV-ssv\" secondAttribute=\"top\" constant=\"-2\" id=\"EJu-j9-0St\"/>\n                                                <constraint firstItem=\"xBh-6s-twj\" firstAttribute=\"leading\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"leading\" id=\"Hdb-xw-eCd\"/>\n                                                <constraint firstItem=\"2LE-EF-Mwl\" firstAttribute=\"trailing\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"trailing\" id=\"Lfe-KD-MHT\"/>\n                                                <constraint firstItem=\"reu-jL-oVA\" firstAttribute=\"leading\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"leading\" id=\"N2P-GW-TCQ\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"reu-jL-oVA\" secondAttribute=\"bottom\" id=\"RCw-XN-JEk\"/>\n                                                <constraint firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"2LE-EF-Mwl\" secondAttribute=\"bottom\" priority=\"250\" constant=\"25\" id=\"THe-ot-acP\"/>\n                                                <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"380\" identifier=\"cardWidth\" id=\"TV2-sq-gDk\"/>\n                                                <constraint firstItem=\"oEA-BV-ssv\" firstAttribute=\"top\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"top\" constant=\"20\" id=\"Tbo-dY-ncH\"/>\n                                                <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"80\" id=\"VAv-p7-zYM\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"lIm-rR-Mrk\" secondAttribute=\"trailing\" id=\"fIZ-Bt-l9F\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"xBh-6s-twj\" secondAttribute=\"bottom\" priority=\"750\" constant=\"25\" id=\"g5x-kt-Q5E\"/>\n                                                <constraint firstItem=\"2LE-EF-Mwl\" firstAttribute=\"leading\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"leading\" id=\"kwZ-LB-hTg\"/>\n                                                <constraint firstItem=\"UD2-VE-dlU\" firstAttribute=\"leading\" secondItem=\"oEA-BV-ssv\" secondAttribute=\"trailing\" constant=\"12\" id=\"mqC-Om-Ld1\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"reu-jL-oVA\" secondAttribute=\"trailing\" id=\"qDC-Zo-XJg\"/>\n                                                <constraint firstItem=\"oEA-BV-ssv\" firstAttribute=\"leading\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"leading\" constant=\"25\" id=\"qbc-rs-fzN\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"trailing\" priority=\"999\" constant=\"10\" id=\"6af-M5-1KT\"/>\n                                        <constraint firstItem=\"uBL-jd-ndj\" firstAttribute=\"leading\" secondItem=\"KMu-I3-bAv\" secondAttribute=\"leading\" priority=\"999\" constant=\"10\" id=\"J6P-aU-hzs\"/>\n                                        <constraint firstItem=\"uBL-jd-ndj\" firstAttribute=\"centerX\" secondItem=\"KMu-I3-bAv\" secondAttribute=\"centerX\" id=\"YuO-UM-lqk\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"bottom\" constant=\"10\" id=\"rK7-wk-ry5\"/>\n                                        <constraint firstItem=\"uBL-jd-ndj\" firstAttribute=\"top\" secondItem=\"KMu-I3-bAv\" secondAttribute=\"top\" constant=\"10\" id=\"wTI-MP-eA9\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"cardWidthConstraint\" destination=\"TV2-sq-gDk\" id=\"Yq9-eP-MCu\"/>\n                                    <outlet property=\"classicImageView\" destination=\"oEA-BV-ssv\" id=\"Fc7-yo-WEw\"/>\n                                    <outlet property=\"descriptionLabel\" destination=\"2LE-EF-Mwl\" id=\"wpF-eS-E0h\"/>\n                                    <outlet property=\"linkLabel\" destination=\"xBh-6s-twj\" id=\"LNM-b6-AiF\"/>\n                                    <outlet property=\"pinImageView\" destination=\"lIm-rR-Mrk\" id=\"hOr-8x-1d4\"/>\n                                    <outlet property=\"rootView\" destination=\"uBL-jd-ndj\" id=\"zF8-aj-MEg\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"rK7-wk-ry5\" id=\"Nyd-Uq-6rj\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"J6P-aU-hzs\" id=\"DYe-6j-yyq\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"wTI-MP-eA9\" id=\"j9q-mC-Ung\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"6af-M5-1KT\" id=\"Eon-5t-kqf\"/>\n                                    <outlet property=\"titleLabel\" destination=\"UD2-VE-dlU\" id=\"fBq-cx-C5m\"/>\n                                    <outlet property=\"unviewedLineView\" destination=\"reu-jL-oVA\" id=\"ySo-TG-Ifu\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKControlCardCell\" rowHeight=\"0.0\" id=\"PLR-fM-stV\" customClass=\"ABKBaseContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"766.5\" width=\"375\" height=\"1.1920928955078125e-07\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"PLR-fM-stV\" id=\"RF0-pj-4Y8\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"0.0\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"pNw-1d-kzS\" id=\"Tl2-VB-jsc\"/>\n                            <outlet property=\"delegate\" destination=\"pNw-1d-kzS\" id=\"a2J-5v-KrQ\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Content Cards\" id=\"d4R-H4-bIN\"/>\n                    <refreshControl key=\"refreshControl\" opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" enabled=\"NO\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" id=\"cWq-uJ-Cna\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1000\" height=\"1000\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <connections>\n                            <action selector=\"refreshContentCards:\" destination=\"pNw-1d-kzS\" eventType=\"valueChanged\" id=\"awN-i0-TeA\"/>\n                        </connections>\n                    </refreshControl>\n                    <connections>\n                        <outlet property=\"emptyFeedLabel\" destination=\"2M3-DV-JZj\" id=\"4n2-jY-A17\"/>\n                        <outlet property=\"emptyFeedView\" destination=\"Tbc-fm-PCw\" id=\"9Mf-7K-3jJ\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"plW-Gx-u1v\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <view contentMode=\"scaleToFill\" id=\"Tbc-fm-PCw\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"240\" height=\"128\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2M3-DV-JZj\" userLabel=\"Cannot establish network connection. Please try again later.\">\n                            <rect key=\"frame\" x=\"26.5\" y=\"43.5\" width=\"187.5\" height=\"41\"/>\n                            <string key=\"text\">We have no updates.\nPlease check again later.</string>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" systemColor=\"systemGreenColor\"/>\n                    <constraints>\n                        <constraint firstItem=\"2M3-DV-JZj\" firstAttribute=\"centerY\" secondItem=\"Tbc-fm-PCw\" secondAttribute=\"centerY\" id=\"dfL-rd-1Xr\"/>\n                        <constraint firstItem=\"2M3-DV-JZj\" firstAttribute=\"centerX\" secondItem=\"Tbc-fm-PCw\" secondAttribute=\"centerX\" id=\"sHI-kP-ibJ\"/>\n                    </constraints>\n                </view>\n                <view contentMode=\"scaleToFill\" id=\"0TZ-BF-aje\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"240\" height=\"128\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"Connection Error\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"j8i-xp-qa7\">\n                            <rect key=\"frame\" x=\"55\" y=\"29\" width=\"130\" height=\"21\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hK5-hy-26y\">\n                            <rect key=\"frame\" x=\"-23.5\" y=\"58.5\" width=\"287\" height=\"41\"/>\n                            <string key=\"text\">Cannot establish network connection.\nPlease try again later. </string>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" systemColor=\"systemGreenColor\"/>\n                    <constraints>\n                        <constraint firstItem=\"j8i-xp-qa7\" firstAttribute=\"centerY\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerY\" constant=\"-15\" id=\"6IP-o8-Omb\"/>\n                        <constraint firstItem=\"hK5-hy-26y\" firstAttribute=\"centerX\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerX\" id=\"Qcd-wI-umd\"/>\n                        <constraint firstItem=\"j8i-xp-qa7\" firstAttribute=\"centerX\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerX\" id=\"YvG-u0-lWe\"/>\n                        <constraint firstItem=\"hK5-hy-26y\" firstAttribute=\"centerY\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerY\" constant=\"15\" id=\"eQu-x6-jyE\"/>\n                    </constraints>\n                </view>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-4703.1999999999998\" y=\"30.134932533733135\"/>\n        </scene>\n        <!--Content Cards View Controller-->\n        <scene sceneID=\"TwY-oH-zGj\">\n            <objects>\n                <navigationController storyboardIdentifier=\"ABKContentCardsViewController\" id=\"pc8-lC-rlh\" customClass=\"ABKContentCardsViewController\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"ocN-P6-q7u\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <color key=\"barTintColor\" systemColor=\"systemGreenColor\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"pNw-1d-kzS\" kind=\"relationship\" relationship=\"rootViewController\" id=\"aDI-mj-lvZ\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ayT-AZ-HCD\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-5646\" y=\"31\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"stopwatch_cc_icon_pinned\" width=\"20\" height=\"20\"/>\n        <systemColor name=\"linkColor\">\n            <color red=\"0.0\" green=\"0.47843137254901963\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n        <systemColor name=\"systemGreenColor\">\n            <color red=\"0.20392156862745098\" green=\"0.7803921568627451\" blue=\"0.34901960784313724\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example/Stopwatch/Resources/ABKContentCardsStoryboard.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"17701\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17703\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Content Cards-->\n        <scene sceneID=\"DtF-fl-vuP\">\n            <objects>\n                <tableViewController storyboardIdentifier=\"ABKContentCardsTableViewController\" id=\"pNw-1d-kzS\" customClass=\"ABKContentCardsTableViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"QfY-bo-EsO\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemGroupedBackgroundColor\"/>\n                        <inset key=\"separatorInset\" minX=\"0.0\" minY=\"0.0\" maxX=\"0.0\" maxY=\"0.0\"/>\n                        <prototypes>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKCaptionedImageContentCardCell\" rowHeight=\"380\" id=\"Ybj-gD-dg5\" customClass=\"ABKCaptionedImageContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"375\" height=\"380\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Ybj-gD-dg5\" id=\"T6E-cQ-uAu\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"380\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"OO0-Sd-dv6\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"355\" height=\"360\"/>\n                                            <subviews>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xzv-3L-WDj\" userLabel=\"Title Background Gradient\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"223\" width=\"355\" height=\"137\"/>\n                                                    <subviews>\n                                                        <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"stopwatch_cc_icon_pinned\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"nFM-dS-rg2\">\n                                                            <rect key=\"frame\" x=\"335\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                            <constraints>\n                                                                <constraint firstAttribute=\"width\" constant=\"20\" id=\"ij5-J0-4li\"/>\n                                                                <constraint firstAttribute=\"height\" constant=\"20\" id=\"uxr-Kf-wzO\"/>\n                                                            </constraints>\n                                                        </imageView>\n                                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dBF-6R-JPA\" userLabel=\"Title\">\n                                                            <rect key=\"frame\" x=\"25\" y=\"17\" width=\"305\" height=\"19.5\"/>\n                                                            <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"16\"/>\n                                                            <nil key=\"textColor\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Description\" textAlignment=\"natural\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UGC-fY-DfN\" userLabel=\"Description\">\n                                                            <rect key=\"frame\" x=\"25\" y=\"42.5\" width=\"305\" height=\"16\"/>\n                                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"13\"/>\n                                                            <nil key=\"textColor\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Link\" textAlignment=\"natural\" lineBreakMode=\"characterWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Yy8-cq-nRL\">\n                                                            <rect key=\"frame\" x=\"25\" y=\"96\" width=\"305\" height=\"16\"/>\n                                                            <accessibility key=\"accessibilityConfiguration\">\n                                                                <accessibilityTraits key=\"traits\" link=\"YES\" staticText=\"YES\"/>\n                                                            </accessibility>\n                                                            <fontDescription key=\"fontDescription\" type=\"system\" weight=\"medium\" pointSize=\"13\"/>\n                                                            <color key=\"textColor\" systemColor=\"linkColor\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                    </subviews>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"trailing\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"trailing\" constant=\"25\" id=\"146-47-jOR\"/>\n                                                        <constraint firstItem=\"Yy8-cq-nRL\" firstAttribute=\"leading\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"leading\" id=\"17A-kh-gvg\"/>\n                                                        <constraint firstItem=\"UGC-fY-DfN\" firstAttribute=\"trailing\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"trailing\" id=\"2sp-0v-joj\"/>\n                                                        <constraint firstItem=\"Yy8-cq-nRL\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"UGC-fY-DfN\" secondAttribute=\"bottom\" constant=\"8\" id=\"4kf-v0-4k3\"/>\n                                                        <constraint firstAttribute=\"bottom\" secondItem=\"Yy8-cq-nRL\" secondAttribute=\"bottom\" priority=\"750\" constant=\"25\" id=\"7Ul-d5-yED\"/>\n                                                        <constraint firstItem=\"UGC-fY-DfN\" firstAttribute=\"top\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"bottom\" constant=\"6\" id=\"Chd-LB-CZP\"/>\n                                                        <constraint firstItem=\"nFM-dS-rg2\" firstAttribute=\"top\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"top\" id=\"EzZ-w2-Qk5\"/>\n                                                        <constraint firstAttribute=\"bottom\" secondItem=\"UGC-fY-DfN\" secondAttribute=\"bottom\" priority=\"250\" constant=\"25\" id=\"Jlv-dW-WFq\"/>\n                                                        <constraint firstAttribute=\"trailing\" secondItem=\"nFM-dS-rg2\" secondAttribute=\"trailing\" id=\"QJs-aV-ehL\"/>\n                                                        <constraint firstItem=\"dBF-6R-JPA\" firstAttribute=\"leading\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"leading\" constant=\"25\" id=\"lrO-aY-bJE\"/>\n                                                        <constraint firstItem=\"Yy8-cq-nRL\" firstAttribute=\"trailing\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"trailing\" id=\"o4b-EE-Scp\"/>\n                                                        <constraint firstItem=\"dBF-6R-JPA\" firstAttribute=\"top\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"top\" constant=\"17\" id=\"qjZ-a6-LHJ\"/>\n                                                        <constraint firstItem=\"UGC-fY-DfN\" firstAttribute=\"leading\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"leading\" id=\"utg-Wd-EfY\"/>\n                                                    </constraints>\n                                                </view>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vE3-pM-vca\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"355\" height=\"223\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"vE3-pM-vca\" secondAttribute=\"height\" multiplier=\"355:223\" id=\"NJd-1j-jeA\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"r6I-Yt-oqe\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"352\" width=\"355\" height=\"8\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.086274509803921567\" green=\"0.46274509803921571\" blue=\"0.81568627450980391\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"8\" id=\"JL1-0h-OtE\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                            <constraints>\n                                                <constraint firstItem=\"xzv-3L-WDj\" firstAttribute=\"top\" secondItem=\"vE3-pM-vca\" secondAttribute=\"bottom\" id=\"3b4-3i-sEW\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"bottom\" id=\"AGH-KQ-taq\"/>\n                                                <constraint firstItem=\"vE3-pM-vca\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" id=\"Cns-rn-PQZ\"/>\n                                                <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"380\" identifier=\"cardWidth\" id=\"MPG-Gd-2Mi\"/>\n                                                <constraint firstItem=\"vE3-pM-vca\" firstAttribute=\"top\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"top\" priority=\"998\" id=\"Omc-N6-exd\"/>\n                                                <constraint firstItem=\"r6I-Yt-oqe\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" id=\"PIV-mw-2Zv\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"trailing\" id=\"SNL-zr-EeA\"/>\n                                                <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"80\" id=\"cIp-1t-xZ9\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"r6I-Yt-oqe\" secondAttribute=\"trailing\" id=\"jiI-fi-wUf\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"vE3-pM-vca\" secondAttribute=\"trailing\" id=\"qNd-L9-ZDA\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"r6I-Yt-oqe\" secondAttribute=\"bottom\" id=\"t5R-lo-ICp\"/>\n                                                <constraint firstItem=\"xzv-3L-WDj\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" id=\"ydh-2U-FMu\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"OO0-Sd-dv6\" firstAttribute=\"top\" secondItem=\"T6E-cQ-uAu\" secondAttribute=\"top\" constant=\"10\" id=\"THp-xt-mWA\"/>\n                                        <constraint firstItem=\"OO0-Sd-dv6\" firstAttribute=\"leading\" secondItem=\"T6E-cQ-uAu\" secondAttribute=\"leading\" priority=\"999\" constant=\"10\" id=\"ZaD-Vm-E5b\"/>\n                                        <constraint firstItem=\"OO0-Sd-dv6\" firstAttribute=\"centerX\" secondItem=\"T6E-cQ-uAu\" secondAttribute=\"centerX\" id=\"cxU-Ez-C9n\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"trailing\" priority=\"999\" constant=\"10\" id=\"iW3-ql-u5z\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"bottom\" constant=\"10\" id=\"tGr-HL-CUA\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"captionedImageView\" destination=\"vE3-pM-vca\" id=\"dcL-Pp-ZCz\"/>\n                                    <outlet property=\"cardWidthConstraint\" destination=\"MPG-Gd-2Mi\" id=\"hHC-XS-7cr\"/>\n                                    <outlet property=\"descriptionLabel\" destination=\"UGC-fY-DfN\" id=\"Pqf-10-TTh\"/>\n                                    <outlet property=\"imageRatioConstraint\" destination=\"NJd-1j-jeA\" id=\"Qvu-93-fo8\"/>\n                                    <outlet property=\"linkLabel\" destination=\"Yy8-cq-nRL\" id=\"HMd-7m-qkA\"/>\n                                    <outlet property=\"pinImageView\" destination=\"nFM-dS-rg2\" id=\"62p-e0-xA3\"/>\n                                    <outlet property=\"rootView\" destination=\"OO0-Sd-dv6\" id=\"74Y-uL-6bw\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"tGr-HL-CUA\" id=\"VXd-AT-mn5\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"ZaD-Vm-E5b\" id=\"wMy-dd-gBS\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"THp-xt-mWA\" id=\"3pM-HC-w94\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"iW3-ql-u5z\" id=\"KB0-By-vwv\"/>\n                                    <outlet property=\"titleLabel\" destination=\"dBF-6R-JPA\" id=\"fBX-J7-62s\"/>\n                                    <outlet property=\"unviewedLineView\" destination=\"r6I-Yt-oqe\" id=\"rfD-Sn-dhB\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKBannerContentCardCell\" rowHeight=\"100\" id=\"NyZ-g9-dRu\" customClass=\"ABKBannerContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"408\" width=\"375\" height=\"100\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"NyZ-g9-dRu\" id=\"v5b-8b-aWt\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"100\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Kcn-iU-dPb\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"355\" height=\"80\"/>\n                                            <subviews>\n                                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MX9-Bb-S0W\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"355\" height=\"80\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"height\" multiplier=\"355:79\" priority=\"998\" id=\"yLN-Ep-HgJ\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"stopwatch_cc_icon_pinned\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vVA-Lu-kPN\">\n                                                    <rect key=\"frame\" x=\"335\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"6yR-bw-SBl\"/>\n                                                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"QUv-CO-f4O\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"siC-Vi-YLz\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"72\" width=\"355\" height=\"8\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.086274509803921567\" green=\"0.46274509803921571\" blue=\"0.81568627450980391\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"8\" id=\"QKZ-LU-Xrh\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"380\" identifier=\"cardWidth\" id=\"4Or-tW-pnK\"/>\n                                                <constraint firstItem=\"vVA-Lu-kPN\" firstAttribute=\"top\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"top\" id=\"9mM-wb-ih1\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"vVA-Lu-kPN\" secondAttribute=\"trailing\" id=\"Lkm-p9-dRD\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"trailing\" id=\"PQM-3e-GwB\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"siC-Vi-YLz\" secondAttribute=\"bottom\" id=\"PrK-NV-rZs\"/>\n                                                <constraint firstItem=\"siC-Vi-YLz\" firstAttribute=\"leading\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"leading\" id=\"QRB-Uv-D1d\"/>\n                                                <constraint firstItem=\"MX9-Bb-S0W\" firstAttribute=\"leading\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"leading\" id=\"dgT-7w-Rcs\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"bottom\" id=\"gQK-oy-z6m\"/>\n                                                <constraint firstItem=\"MX9-Bb-S0W\" firstAttribute=\"top\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"top\" id=\"kfc-nZ-2to\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"siC-Vi-YLz\" secondAttribute=\"trailing\" id=\"o04-Ms-iqs\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"Kcn-iU-dPb\" firstAttribute=\"leading\" secondItem=\"v5b-8b-aWt\" secondAttribute=\"leading\" priority=\"999\" constant=\"10\" id=\"2cB-WQ-qsd\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"trailing\" priority=\"999\" constant=\"10\" id=\"3E2-Pw-Qdn\"/>\n                                        <constraint firstItem=\"Kcn-iU-dPb\" firstAttribute=\"centerX\" secondItem=\"v5b-8b-aWt\" secondAttribute=\"centerX\" id=\"FFn-LA-SCC\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"bottom\" constant=\"10\" id=\"Niz-oI-WKp\"/>\n                                        <constraint firstItem=\"Kcn-iU-dPb\" firstAttribute=\"top\" secondItem=\"v5b-8b-aWt\" secondAttribute=\"top\" priority=\"999\" constant=\"10\" id=\"YJr-gC-zKQ\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"bannerImageView\" destination=\"MX9-Bb-S0W\" id=\"LiA-If-iP2\"/>\n                                    <outlet property=\"cardWidthConstraint\" destination=\"4Or-tW-pnK\" id=\"mDo-96-qKl\"/>\n                                    <outlet property=\"imageRatioConstraint\" destination=\"yLN-Ep-HgJ\" id=\"bMw-e0-tGv\"/>\n                                    <outlet property=\"pinImageView\" destination=\"vVA-Lu-kPN\" id=\"mHD-eB-jVT\"/>\n                                    <outlet property=\"rootView\" destination=\"Kcn-iU-dPb\" id=\"hcg-YL-V4z\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"Niz-oI-WKp\" id=\"ewn-rG-Gd4\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"2cB-WQ-qsd\" id=\"fDs-VX-5Vu\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"YJr-gC-zKQ\" id=\"Qd5-7B-388\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"3E2-Pw-Qdn\" id=\"ZlT-7v-epj\"/>\n                                    <outlet property=\"unviewedLineView\" destination=\"siC-Vi-YLz\" id=\"Qiv-xj-bKA\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKClassicCardCell\" rowHeight=\"130\" id=\"Jqk-Tq-2Cq\" customClass=\"ABKClassicContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"508\" width=\"375\" height=\"130\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Jqk-Tq-2Cq\" id=\"9Cc-7k-aI0\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"130\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"On7-Xz-EwZ\" userLabel=\"Root View\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"355\" height=\"110\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"stopwatch_cc_icon_pinned\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Xkj-i2-AsD\">\n                                                    <rect key=\"frame\" x=\"335\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"K32-xH-4Ma\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"bj1-OK-e9R\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"top\" horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"749\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NYH-ky-y8x\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"17\" width=\"305\" height=\"19.5\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"16\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"749\" text=\"Description\" textAlignment=\"natural\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HTG-0g-poE\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"42.5\" width=\"305\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"13\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"749\" text=\"Link\" textAlignment=\"natural\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NmY-63-m8B\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"69\" width=\"305\" height=\"16\"/>\n                                                    <accessibility key=\"accessibilityConfiguration\">\n                                                        <accessibilityTraits key=\"traits\" link=\"YES\" staticText=\"YES\"/>\n                                                        <bool key=\"isElement\" value=\"YES\"/>\n                                                    </accessibility>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" weight=\"medium\" pointSize=\"13\"/>\n                                                    <color key=\"textColor\" systemColor=\"linkColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jPu-U8-pTJ\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"102\" width=\"355\" height=\"8\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.086274509799999996\" green=\"0.46274509800000002\" blue=\"0.81568627449999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"8\" id=\"Wx4-sF-Lc5\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                            <constraints>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"NmY-63-m8B\" secondAttribute=\"bottom\" priority=\"750\" constant=\"25\" id=\"2tk-eQ-Kik\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"trailing\" constant=\"25\" id=\"6he-kB-iSb\"/>\n                                                <constraint firstItem=\"jPu-U8-pTJ\" firstAttribute=\"leading\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"leading\" id=\"Dqd-4Y-ZyS\"/>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"HTG-0g-poE\" secondAttribute=\"bottom\" constant=\"8\" id=\"F03-Dk-UuH\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"top\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"bottom\" constant=\"6\" id=\"ONO-EX-TvF\"/>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"leading\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"leading\" id=\"Rxd-dd-lM9\"/>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"trailing\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"trailing\" id=\"Vd0-ob-2YA\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"leading\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"leading\" id=\"auJ-TH-8qG\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"HTG-0g-poE\" secondAttribute=\"bottom\" priority=\"250\" constant=\"25\" id=\"bWd-ub-Dlb\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"jPu-U8-pTJ\" secondAttribute=\"trailing\" id=\"clc-fc-8db\"/>\n                                                <constraint firstItem=\"NYH-ky-y8x\" firstAttribute=\"top\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"top\" constant=\"17\" id=\"dsq-hA-fkY\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"trailing\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"trailing\" id=\"h7U-6y-lpr\"/>\n                                                <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"80\" id=\"jMZ-pN-WGy\"/>\n                                                <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"380\" id=\"jZe-sb-mUJ\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"jPu-U8-pTJ\" secondAttribute=\"bottom\" id=\"kKG-Bj-nlM\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"Xkj-i2-AsD\" secondAttribute=\"trailing\" id=\"l4w-Lg-BYv\"/>\n                                                <constraint firstItem=\"Xkj-i2-AsD\" firstAttribute=\"top\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"top\" id=\"zh0-vl-TNl\"/>\n                                                <constraint firstItem=\"NYH-ky-y8x\" firstAttribute=\"leading\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"leading\" constant=\"25\" id=\"znk-zB-6wA\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"On7-Xz-EwZ\" firstAttribute=\"top\" secondItem=\"9Cc-7k-aI0\" secondAttribute=\"top\" constant=\"10\" id=\"RGg-bi-Set\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"bottom\" constant=\"10\" id=\"RY9-GF-VAs\"/>\n                                        <constraint firstItem=\"On7-Xz-EwZ\" firstAttribute=\"leading\" secondItem=\"9Cc-7k-aI0\" secondAttribute=\"leading\" priority=\"999\" constant=\"10\" id=\"Vhn-ph-93e\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"trailing\" priority=\"999\" constant=\"10\" id=\"dLo-ig-cpk\"/>\n                                        <constraint firstItem=\"On7-Xz-EwZ\" firstAttribute=\"centerX\" secondItem=\"9Cc-7k-aI0\" secondAttribute=\"centerX\" id=\"rMT-yn-EGl\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"cardWidthConstraint\" destination=\"jZe-sb-mUJ\" id=\"JfM-dT-Vgg\"/>\n                                    <outlet property=\"descriptionLabel\" destination=\"HTG-0g-poE\" id=\"auh-vy-CDP\"/>\n                                    <outlet property=\"linkLabel\" destination=\"NmY-63-m8B\" id=\"UdQ-KR-Oe2\"/>\n                                    <outlet property=\"pinImageView\" destination=\"Xkj-i2-AsD\" id=\"yS6-Jd-xxx\"/>\n                                    <outlet property=\"rootView\" destination=\"On7-Xz-EwZ\" id=\"7J9-d8-REY\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"RY9-GF-VAs\" id=\"03e-6w-PK3\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"Vhn-ph-93e\" id=\"pgJ-qC-pvw\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"RGg-bi-Set\" id=\"y6s-aq-ier\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"dLo-ig-cpk\" id=\"rhr-sO-NPz\"/>\n                                    <outlet property=\"titleLabel\" destination=\"NYH-ky-y8x\" id=\"t62-l6-mbK\"/>\n                                    <outlet property=\"unviewedLineView\" destination=\"jPu-U8-pTJ\" id=\"CT8-hJ-oq0\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKClassicImageCardCell\" id=\"gzx-in-eIA\" customClass=\"ABKClassicImageContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"638\" width=\"375\" height=\"128.5\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"gzx-in-eIA\" id=\"KMu-I3-bAv\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"128.5\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"uBL-jd-ndj\" userLabel=\"Root View\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"355\" height=\"108.5\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"stopwatch_cc_icon_pinned\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lIm-rR-Mrk\">\n                                                    <rect key=\"frame\" x=\"335\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"exc-Oq-My5\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"jdj-sM-GyY\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oEA-BV-ssv\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"25\" y=\"20\" width=\"57.5\" height=\"57.5\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"57.5\" id=\"84b-Gu-LNL\"/>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"oEA-BV-ssv\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"yJo-5E-rFQ\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"top\" horizontalHuggingPriority=\"249\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Title\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UD2-VE-dlU\">\n                                                    <rect key=\"frame\" x=\"94.5\" y=\"18\" width=\"235.5\" height=\"19.5\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"16\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Description\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2LE-EF-Mwl\">\n                                                    <rect key=\"frame\" x=\"94.5\" y=\"43.5\" width=\"235.5\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"13\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"751\" text=\"Link\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xBh-6s-twj\">\n                                                    <rect key=\"frame\" x=\"94.5\" y=\"67.5\" width=\"26\" height=\"16\"/>\n                                                    <accessibility key=\"accessibilityConfiguration\">\n                                                        <accessibilityTraits key=\"traits\" link=\"YES\" staticText=\"YES\"/>\n                                                        <bool key=\"isElement\" value=\"YES\"/>\n                                                    </accessibility>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" weight=\"medium\" pointSize=\"13\"/>\n                                                    <color key=\"textColor\" systemColor=\"linkColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"reu-jL-oVA\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"100.5\" width=\"355\" height=\"8\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.086274509799999996\" green=\"0.46274509800000002\" blue=\"0.81568627449999997\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"8\" id=\"UMI-Xs-qJT\"/>\n                                                    </constraints>\n                                                </view>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                            <constraints>\n                                                <constraint firstItem=\"xBh-6s-twj\" firstAttribute=\"trailing\" relation=\"lessThanOrEqual\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"trailing\" id=\"0Wh-gw-fTK\"/>\n                                                <constraint firstItem=\"xBh-6s-twj\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"2LE-EF-Mwl\" secondAttribute=\"bottom\" constant=\"8\" id=\"2GR-zZ-Ll6\"/>\n                                                <constraint firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"oEA-BV-ssv\" secondAttribute=\"bottom\" priority=\"999\" constant=\"20\" id=\"5Mr-qO-tMZ\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"trailing\" constant=\"25\" id=\"5ZT-1d-DSs\"/>\n                                                <constraint firstItem=\"lIm-rR-Mrk\" firstAttribute=\"top\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"top\" id=\"5x6-En-oLT\"/>\n                                                <constraint firstItem=\"2LE-EF-Mwl\" firstAttribute=\"top\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"bottom\" constant=\"6\" id=\"Bd2-kA-GQd\"/>\n                                                <constraint firstItem=\"UD2-VE-dlU\" firstAttribute=\"top\" secondItem=\"oEA-BV-ssv\" secondAttribute=\"top\" constant=\"-2\" id=\"EJu-j9-0St\"/>\n                                                <constraint firstItem=\"xBh-6s-twj\" firstAttribute=\"leading\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"leading\" id=\"Hdb-xw-eCd\"/>\n                                                <constraint firstItem=\"2LE-EF-Mwl\" firstAttribute=\"trailing\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"trailing\" id=\"Lfe-KD-MHT\"/>\n                                                <constraint firstItem=\"reu-jL-oVA\" firstAttribute=\"leading\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"leading\" id=\"N2P-GW-TCQ\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"reu-jL-oVA\" secondAttribute=\"bottom\" id=\"RCw-XN-JEk\"/>\n                                                <constraint firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"2LE-EF-Mwl\" secondAttribute=\"bottom\" priority=\"250\" constant=\"25\" id=\"THe-ot-acP\"/>\n                                                <constraint firstAttribute=\"width\" relation=\"lessThanOrEqual\" constant=\"380\" identifier=\"cardWidth\" id=\"TV2-sq-gDk\"/>\n                                                <constraint firstItem=\"oEA-BV-ssv\" firstAttribute=\"top\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"top\" constant=\"20\" id=\"Tbo-dY-ncH\"/>\n                                                <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"80\" id=\"VAv-p7-zYM\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"lIm-rR-Mrk\" secondAttribute=\"trailing\" id=\"fIZ-Bt-l9F\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"xBh-6s-twj\" secondAttribute=\"bottom\" priority=\"750\" constant=\"25\" id=\"g5x-kt-Q5E\"/>\n                                                <constraint firstItem=\"2LE-EF-Mwl\" firstAttribute=\"leading\" secondItem=\"UD2-VE-dlU\" secondAttribute=\"leading\" id=\"kwZ-LB-hTg\"/>\n                                                <constraint firstItem=\"UD2-VE-dlU\" firstAttribute=\"leading\" secondItem=\"oEA-BV-ssv\" secondAttribute=\"trailing\" constant=\"12\" id=\"mqC-Om-Ld1\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"reu-jL-oVA\" secondAttribute=\"trailing\" id=\"qDC-Zo-XJg\"/>\n                                                <constraint firstItem=\"oEA-BV-ssv\" firstAttribute=\"leading\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"leading\" constant=\"25\" id=\"qbc-rs-fzN\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"trailing\" priority=\"999\" constant=\"10\" id=\"6af-M5-1KT\"/>\n                                        <constraint firstItem=\"uBL-jd-ndj\" firstAttribute=\"leading\" secondItem=\"KMu-I3-bAv\" secondAttribute=\"leading\" priority=\"999\" constant=\"10\" id=\"J6P-aU-hzs\"/>\n                                        <constraint firstItem=\"uBL-jd-ndj\" firstAttribute=\"centerX\" secondItem=\"KMu-I3-bAv\" secondAttribute=\"centerX\" id=\"YuO-UM-lqk\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"uBL-jd-ndj\" secondAttribute=\"bottom\" constant=\"10\" id=\"rK7-wk-ry5\"/>\n                                        <constraint firstItem=\"uBL-jd-ndj\" firstAttribute=\"top\" secondItem=\"KMu-I3-bAv\" secondAttribute=\"top\" constant=\"10\" id=\"wTI-MP-eA9\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"cardWidthConstraint\" destination=\"TV2-sq-gDk\" id=\"Yq9-eP-MCu\"/>\n                                    <outlet property=\"classicImageView\" destination=\"oEA-BV-ssv\" id=\"Fc7-yo-WEw\"/>\n                                    <outlet property=\"descriptionLabel\" destination=\"2LE-EF-Mwl\" id=\"wpF-eS-E0h\"/>\n                                    <outlet property=\"linkLabel\" destination=\"xBh-6s-twj\" id=\"LNM-b6-AiF\"/>\n                                    <outlet property=\"pinImageView\" destination=\"lIm-rR-Mrk\" id=\"hOr-8x-1d4\"/>\n                                    <outlet property=\"rootView\" destination=\"uBL-jd-ndj\" id=\"zF8-aj-MEg\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"rK7-wk-ry5\" id=\"Nyd-Uq-6rj\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"J6P-aU-hzs\" id=\"DYe-6j-yyq\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"wTI-MP-eA9\" id=\"j9q-mC-Ung\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"6af-M5-1KT\" id=\"Eon-5t-kqf\"/>\n                                    <outlet property=\"titleLabel\" destination=\"UD2-VE-dlU\" id=\"fBq-cx-C5m\"/>\n                                    <outlet property=\"unviewedLineView\" destination=\"reu-jL-oVA\" id=\"ySo-TG-Ifu\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKControlCardCell\" rowHeight=\"0.0\" id=\"PLR-fM-stV\" customClass=\"ABKBaseContentCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"766.5\" width=\"375\" height=\"0.0\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"PLR-fM-stV\" id=\"RF0-pj-4Y8\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"0.0\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"pNw-1d-kzS\" id=\"Tl2-VB-jsc\"/>\n                            <outlet property=\"delegate\" destination=\"pNw-1d-kzS\" id=\"a2J-5v-KrQ\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Content Cards\" id=\"d4R-H4-bIN\"/>\n                    <refreshControl key=\"refreshControl\" opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" enabled=\"NO\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" id=\"cWq-uJ-Cna\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1000\" height=\"1000\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <connections>\n                            <action selector=\"refreshContentCards:\" destination=\"pNw-1d-kzS\" eventType=\"valueChanged\" id=\"awN-i0-TeA\"/>\n                        </connections>\n                    </refreshControl>\n                    <connections>\n                        <outlet property=\"emptyFeedLabel\" destination=\"2M3-DV-JZj\" id=\"4n2-jY-A17\"/>\n                        <outlet property=\"emptyFeedView\" destination=\"Tbc-fm-PCw\" id=\"9Mf-7K-3jJ\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"plW-Gx-u1v\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <view contentMode=\"scaleToFill\" id=\"Tbc-fm-PCw\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"240\" height=\"128\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2M3-DV-JZj\" userLabel=\"Cannot establish network connection. Please try again later.\">\n                            <rect key=\"frame\" x=\"26.5\" y=\"43.5\" width=\"187.5\" height=\"41\"/>\n                            <string key=\"text\">We have no updates.\nPlease check again later.</string>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstItem=\"2M3-DV-JZj\" firstAttribute=\"centerY\" secondItem=\"Tbc-fm-PCw\" secondAttribute=\"centerY\" id=\"dfL-rd-1Xr\"/>\n                        <constraint firstItem=\"2M3-DV-JZj\" firstAttribute=\"centerX\" secondItem=\"Tbc-fm-PCw\" secondAttribute=\"centerX\" id=\"sHI-kP-ibJ\"/>\n                    </constraints>\n                </view>\n                <view contentMode=\"scaleToFill\" id=\"0TZ-BF-aje\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"240\" height=\"128\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Connection Error\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"j8i-xp-qa7\">\n                            <rect key=\"frame\" x=\"55\" y=\"38.5\" width=\"130\" height=\"21\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hK5-hy-26y\">\n                            <rect key=\"frame\" x=\"-23.5\" y=\"58.5\" width=\"287\" height=\"41\"/>\n                            <string key=\"text\">Cannot establish network connection.\nPlease try again later. </string>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstItem=\"j8i-xp-qa7\" firstAttribute=\"centerY\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerY\" constant=\"-15\" id=\"6IP-o8-Omb\"/>\n                        <constraint firstItem=\"hK5-hy-26y\" firstAttribute=\"centerX\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerX\" id=\"Qcd-wI-umd\"/>\n                        <constraint firstItem=\"j8i-xp-qa7\" firstAttribute=\"centerX\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerX\" id=\"YvG-u0-lWe\"/>\n                        <constraint firstItem=\"hK5-hy-26y\" firstAttribute=\"centerY\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerY\" constant=\"15\" id=\"eQu-x6-jyE\"/>\n                    </constraints>\n                </view>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-4703.1999999999998\" y=\"30.134932533733135\"/>\n        </scene>\n        <!--Content Cards View Controller-->\n        <scene sceneID=\"TwY-oH-zGj\">\n            <objects>\n                <navigationController storyboardIdentifier=\"ABKContentCardsViewController\" id=\"pc8-lC-rlh\" customClass=\"ABKContentCardsViewController\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"ocN-P6-q7u\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"pNw-1d-kzS\" kind=\"relationship\" relationship=\"rootViewController\" id=\"aDI-mj-lvZ\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ayT-AZ-HCD\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-5646\" y=\"31\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"stopwatch_cc_icon_pinned\" width=\"20\" height=\"20\"/>\n        <systemColor name=\"linkColor\">\n            <color red=\"0.0\" green=\"0.47843137254901963\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n        <systemColor name=\"systemBackgroundColor\">\n            <color white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n        <systemColor name=\"systemGroupedBackgroundColor\">\n            <color red=\"0.94901960784313721\" green=\"0.94901960784313721\" blue=\"0.96862745098039216\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example/Stopwatch/Resources/ABKNewsFeedCardStoryboard.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"17701\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17703\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--News Feed-->\n        <scene sceneID=\"DtF-fl-vuP\">\n            <objects>\n                <tableViewController storyboardIdentifier=\"ABKNewsFeedTableViewController\" id=\"pNw-1d-kzS\" customClass=\"ABKNewsFeedTableViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" rowHeight=\"50\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"QfY-bo-EsO\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"0.93999999999999995\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <inset key=\"separatorInset\" minX=\"0.0\" minY=\"0.0\" maxX=\"0.0\" maxY=\"0.0\"/>\n                        <prototypes>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKBannerCardCell\" rowHeight=\"100\" id=\"NyZ-g9-dRu\" customClass=\"ABKNFBannerCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"28\" width=\"414\" height=\"100\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"NyZ-g9-dRu\" id=\"v5b-8b-aWt\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"100\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Kcn-iU-dPb\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"394\" height=\"80\"/>\n                                            <subviews>\n                                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"999\" verticalCompressionResistancePriority=\"999\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MX9-Bb-S0W\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"394\" height=\"80\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"height\" multiplier=\"355:79\" priority=\"999\" id=\"yLN-Ep-HgJ\"/>\n                                                    </constraints>\n                                                </imageView>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"trailing\" id=\"PQM-3e-GwB\"/>\n                                                <constraint firstItem=\"MX9-Bb-S0W\" firstAttribute=\"leading\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"leading\" id=\"dgT-7w-Rcs\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"MX9-Bb-S0W\" secondAttribute=\"bottom\" id=\"gQK-oy-z6m\"/>\n                                                <constraint firstItem=\"MX9-Bb-S0W\" firstAttribute=\"top\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"top\" id=\"kfc-nZ-2to\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"Kcn-iU-dPb\" firstAttribute=\"leading\" secondItem=\"v5b-8b-aWt\" secondAttribute=\"leading\" constant=\"10\" id=\"2cB-WQ-qsd\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"trailing\" constant=\"10\" id=\"3E2-Pw-Qdn\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"Kcn-iU-dPb\" secondAttribute=\"bottom\" constant=\"10\" id=\"Niz-oI-WKp\"/>\n                                        <constraint firstItem=\"Kcn-iU-dPb\" firstAttribute=\"top\" secondItem=\"v5b-8b-aWt\" secondAttribute=\"top\" constant=\"10\" id=\"YJr-gC-zKQ\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"bannerImageView\" destination=\"MX9-Bb-S0W\" id=\"LiA-If-iP2\"/>\n                                    <outlet property=\"imageRatioConstraint\" destination=\"yLN-Ep-HgJ\" id=\"bMw-e0-tGv\"/>\n                                    <outlet property=\"rootView\" destination=\"Kcn-iU-dPb\" id=\"hcg-YL-V4z\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"Niz-oI-WKp\" id=\"ewn-rG-Gd4\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"2cB-WQ-qsd\" id=\"fDs-VX-5Vu\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"YJr-gC-zKQ\" id=\"Qd5-7B-388\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"3E2-Pw-Qdn\" id=\"ZlT-7v-epj\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKNFCaptionedMessageCardCell\" rowHeight=\"359\" id=\"Ybj-gD-dg5\" customClass=\"ABKNFCaptionedMessageCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"128\" width=\"414\" height=\"359\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Ybj-gD-dg5\" id=\"T6E-cQ-uAu\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"359\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"OO0-Sd-dv6\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"394\" height=\"339\"/>\n                                            <subviews>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xzv-3L-WDj\" userLabel=\"Title Background Gradient\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"223\" width=\"394\" height=\"43.5\"/>\n                                                    <subviews>\n                                                        <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"Icons_Read.png\" highlightedImage=\"Icons_Unread.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"nFM-dS-rg2\">\n                                                            <rect key=\"frame\" x=\"374\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                            <constraints>\n                                                                <constraint firstAttribute=\"width\" constant=\"20\" id=\"ij5-J0-4li\"/>\n                                                                <constraint firstAttribute=\"height\" constant=\"20\" id=\"uxr-Kf-wzO\"/>\n                                                            </constraints>\n                                                        </imageView>\n                                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dBF-6R-JPA\" userLabel=\"Title\">\n                                                            <rect key=\"frame\" x=\"22\" y=\"10\" width=\"350\" height=\"23.5\"/>\n                                                            <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Bold\" family=\"Helvetica Neue\" pointSize=\"19\"/>\n                                                            <color key=\"textColor\" red=\"0.25327896900000002\" green=\"0.28065123180000001\" blue=\"0.32005588499999998\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                            <nil key=\"highlightedColor\"/>\n                                                        </label>\n                                                    </subviews>\n                                                    <color key=\"backgroundColor\" red=\"0.96078431372549022\" green=\"0.96078431372549022\" blue=\"0.96078431372549022\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"trailing\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"trailing\" constant=\"22\" id=\"146-47-jOR\"/>\n                                                        <constraint firstItem=\"nFM-dS-rg2\" firstAttribute=\"top\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"top\" id=\"EzZ-w2-Qk5\"/>\n                                                        <constraint firstAttribute=\"bottom\" secondItem=\"dBF-6R-JPA\" secondAttribute=\"bottom\" constant=\"10\" id=\"GRu-Wl-jB3\"/>\n                                                        <constraint firstAttribute=\"trailing\" secondItem=\"nFM-dS-rg2\" secondAttribute=\"trailing\" id=\"QJs-aV-ehL\"/>\n                                                        <constraint firstItem=\"dBF-6R-JPA\" firstAttribute=\"leading\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"leading\" constant=\"22\" id=\"lrO-aY-bJE\"/>\n                                                        <constraint firstItem=\"dBF-6R-JPA\" firstAttribute=\"top\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"top\" constant=\"10\" id=\"qjZ-a6-LHJ\"/>\n                                                    </constraints>\n                                                </view>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"251\" text=\"Description\" textAlignment=\"natural\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UGC-fY-DfN\" userLabel=\"Description\">\n                                                    <rect key=\"frame\" x=\"22\" y=\"279.5\" width=\"350\" height=\"16.5\"/>\n                                                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue\" family=\"Helvetica Neue\" pointSize=\"14\"/>\n                                                    <color key=\"textColor\" red=\"0.1788321168\" green=\"0.178176323\" blue=\"0.17720688870000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Link\" textAlignment=\"natural\" lineBreakMode=\"characterWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Yy8-cq-nRL\">\n                                                    <rect key=\"frame\" x=\"22\" y=\"309\" width=\"350\" height=\"17\"/>\n                                                    <accessibility key=\"accessibilityConfiguration\">\n                                                        <accessibilityTraits key=\"traits\" link=\"YES\" staticText=\"YES\"/>\n                                                    </accessibility>\n                                                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Bold\" family=\"Helvetica Neue\" pointSize=\"14\"/>\n                                                    <color key=\"textColor\" systemColor=\"darkTextColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" verticalHuggingPriority=\"999\" verticalCompressionResistancePriority=\"999\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vE3-pM-vca\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"394\" height=\"223\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" priority=\"999\" constant=\"223\" id=\"TW5-4g-gud\"/>\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=\"xzv-3L-WDj\" firstAttribute=\"top\" secondItem=\"vE3-pM-vca\" secondAttribute=\"bottom\" id=\"3b4-3i-sEW\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"Yy8-cq-nRL\" secondAttribute=\"bottom\" constant=\"13\" id=\"AZn-ci-dJm\"/>\n                                                <constraint firstItem=\"vE3-pM-vca\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" id=\"Cns-rn-PQZ\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"UGC-fY-DfN\" secondAttribute=\"trailing\" constant=\"22\" id=\"N9X-j4-euN\"/>\n                                                <constraint firstItem=\"vE3-pM-vca\" firstAttribute=\"top\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"top\" id=\"Omc-N6-exd\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"trailing\" id=\"SNL-zr-EeA\"/>\n                                                <constraint firstItem=\"UGC-fY-DfN\" firstAttribute=\"top\" secondItem=\"xzv-3L-WDj\" secondAttribute=\"bottom\" constant=\"13\" id=\"Vgd-GX-pg5\"/>\n                                                <constraint firstItem=\"Yy8-cq-nRL\" firstAttribute=\"top\" secondItem=\"UGC-fY-DfN\" secondAttribute=\"bottom\" constant=\"13\" id=\"dap-Uq-GQa\"/>\n                                                <constraint firstItem=\"UGC-fY-DfN\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" constant=\"22\" id=\"f0G-jI-LhT\"/>\n                                                <constraint firstItem=\"Yy8-cq-nRL\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" constant=\"22\" id=\"ltq-Oo-gYd\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"Yy8-cq-nRL\" secondAttribute=\"trailing\" constant=\"22\" id=\"mWj-g0-wND\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"vE3-pM-vca\" secondAttribute=\"trailing\" id=\"qNd-L9-ZDA\"/>\n                                                <constraint firstItem=\"xzv-3L-WDj\" firstAttribute=\"leading\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"leading\" id=\"ydh-2U-FMu\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"OO0-Sd-dv6\" firstAttribute=\"top\" secondItem=\"T6E-cQ-uAu\" secondAttribute=\"top\" constant=\"10\" id=\"THp-xt-mWA\"/>\n                                        <constraint firstItem=\"OO0-Sd-dv6\" firstAttribute=\"leading\" secondItem=\"T6E-cQ-uAu\" secondAttribute=\"leading\" constant=\"10\" id=\"ZaD-Vm-E5b\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"trailing\" constant=\"10\" id=\"iW3-ql-u5z\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"OO0-Sd-dv6\" secondAttribute=\"bottom\" constant=\"10\" id=\"tGr-HL-CUA\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"bodyAndLinkConstraint\" destination=\"AZn-ci-dJm\" id=\"jLU-Bj-VE6\"/>\n                                    <outlet property=\"captionedImageView\" destination=\"vE3-pM-vca\" id=\"dcL-Pp-ZCz\"/>\n                                    <outlet property=\"descriptionLabel\" destination=\"UGC-fY-DfN\" id=\"Pqf-10-TTh\"/>\n                                    <outlet property=\"imageHeightConstraint\" destination=\"TW5-4g-gud\" id=\"Hri-Fs-1ZP\"/>\n                                    <outlet property=\"linkLabel\" destination=\"Yy8-cq-nRL\" id=\"HMd-7m-qkA\"/>\n                                    <outlet property=\"rootView\" destination=\"OO0-Sd-dv6\" id=\"74Y-uL-6bw\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"tGr-HL-CUA\" id=\"VXd-AT-mn5\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"ZaD-Vm-E5b\" id=\"wMy-dd-gBS\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"THp-xt-mWA\" id=\"3pM-HC-w94\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"iW3-ql-u5z\" id=\"KB0-By-vwv\"/>\n                                    <outlet property=\"titleBackgroundView\" destination=\"xzv-3L-WDj\" id=\"1jP-Aq-ote\"/>\n                                    <outlet property=\"titleLabel\" destination=\"dBF-6R-JPA\" id=\"fBX-J7-62s\"/>\n                                    <outlet property=\"unreadIndicatorView\" destination=\"nFM-dS-rg2\" id=\"Vgs-Ws-50z\"/>\n                                </connections>\n                            </tableViewCell>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ABKNFNewsCardCell\" rowHeight=\"98\" id=\"Jqk-Tq-2Cq\" customClass=\"ABKNFClassicCardCell\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"487\" width=\"414\" height=\"98\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" tableViewCell=\"Jqk-Tq-2Cq\" id=\"9Cc-7k-aI0\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"98\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <view clipsSubviews=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"On7-Xz-EwZ\" userLabel=\"Root View\">\n                                            <rect key=\"frame\" x=\"10\" y=\"10\" width=\"394\" height=\"78\"/>\n                                            <subviews>\n                                                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"Icons_Read.png\" highlightedImage=\"Icons_Unread.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Xkj-i2-AsD\">\n                                                    <rect key=\"frame\" x=\"374\" y=\"0.0\" width=\"20\" height=\"20\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"K32-xH-4Ma\"/>\n                                                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"bj1-OK-e9R\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ox2-0U-qcP\" customClass=\"SDAnimatedImageView\">\n                                                    <rect key=\"frame\" x=\"13\" y=\"13\" width=\"69.5\" height=\"69.5\"/>\n                                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" secondItem=\"Ox2-0U-qcP\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"hDK-dw-7SF\"/>\n                                                    </constraints>\n                                                </imageView>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"top\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NYH-ky-y8x\">\n                                                    <rect key=\"frame\" x=\"95.5\" y=\"7\" width=\"285.5\" height=\"23\"/>\n                                                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Bold\" family=\"Helvetica Neue\" pointSize=\"19\"/>\n                                                    <color key=\"textColor\" red=\"0.25098039220000001\" green=\"0.27657390510000002\" blue=\"0.32259352190000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Description\" textAlignment=\"natural\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HTG-0g-poE\">\n                                                    <rect key=\"frame\" x=\"95.5\" y=\"30\" width=\"285.5\" height=\"16.5\"/>\n                                                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue\" family=\"Helvetica Neue\" pointSize=\"14\"/>\n                                                    <color key=\"textColor\" red=\"0.1747547901\" green=\"0.1760663777\" blue=\"0.1758382755\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" verticalHuggingPriority=\"249\" text=\"Link\" textAlignment=\"natural\" lineBreakMode=\"wordWrap\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NmY-63-m8B\">\n                                                    <rect key=\"frame\" x=\"95.5\" y=\"54\" width=\"285.5\" height=\"17\"/>\n                                                    <accessibility key=\"accessibilityConfiguration\">\n                                                        <accessibilityTraits key=\"traits\" link=\"YES\" staticText=\"YES\"/>\n                                                        <bool key=\"isElement\" value=\"YES\"/>\n                                                    </accessibility>\n                                                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Bold\" family=\"Helvetica Neue\" pointSize=\"14\"/>\n                                                    <color key=\"textColor\" red=\"0.1725307938\" green=\"0.1725307938\" blue=\"0.17350022809999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <constraints>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"top\" relation=\"greaterThanOrEqual\" secondItem=\"HTG-0g-poE\" secondAttribute=\"bottom\" constant=\"5\" id=\"27V-TT-wT4\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"NmY-63-m8B\" secondAttribute=\"bottom\" constant=\"7\" id=\"2tk-eQ-Kik\"/>\n                                                <constraint firstAttribute=\"bottom\" relation=\"greaterThanOrEqual\" secondItem=\"Ox2-0U-qcP\" secondAttribute=\"bottom\" priority=\"999\" constant=\"13\" id=\"6FW-XX-ItO\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"trailing\" constant=\"13\" id=\"6he-kB-iSb\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"top\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"bottom\" id=\"ONO-EX-TvF\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"width\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"width\" id=\"Ohr-2n-nwa\"/>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"leading\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"leading\" id=\"Rxd-dd-lM9\"/>\n                                                <constraint firstItem=\"NmY-63-m8B\" firstAttribute=\"width\" secondItem=\"HTG-0g-poE\" secondAttribute=\"width\" id=\"XWa-qr-9zH\"/>\n                                                <constraint firstItem=\"HTG-0g-poE\" firstAttribute=\"leading\" secondItem=\"NYH-ky-y8x\" secondAttribute=\"leading\" id=\"auJ-TH-8qG\"/>\n                                                <constraint firstItem=\"Ox2-0U-qcP\" firstAttribute=\"leading\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"leading\" constant=\"13\" id=\"cJE-Oh-n7T\"/>\n                                                <constraint firstItem=\"Ox2-0U-qcP\" firstAttribute=\"top\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"top\" constant=\"13\" id=\"d8y-xZ-pIQ\"/>\n                                                <constraint firstItem=\"NYH-ky-y8x\" firstAttribute=\"top\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"top\" constant=\"7\" id=\"dsq-hA-fkY\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"Xkj-i2-AsD\" secondAttribute=\"trailing\" id=\"l4w-Lg-BYv\"/>\n                                                <constraint firstItem=\"NYH-ky-y8x\" firstAttribute=\"leading\" secondItem=\"Ox2-0U-qcP\" secondAttribute=\"trailing\" constant=\"13\" id=\"ovO-c7-zd9\"/>\n                                                <constraint firstItem=\"Ox2-0U-qcP\" firstAttribute=\"width\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"width\" multiplier=\"0.177\" id=\"pyk-7T-cU8\"/>\n                                                <constraint firstItem=\"Xkj-i2-AsD\" firstAttribute=\"top\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"top\" id=\"zh0-vl-TNl\"/>\n                                            </constraints>\n                                        </view>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"On7-Xz-EwZ\" firstAttribute=\"top\" secondItem=\"9Cc-7k-aI0\" secondAttribute=\"top\" constant=\"10\" id=\"RGg-bi-Set\"/>\n                                        <constraint firstAttribute=\"bottom\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"bottom\" constant=\"10\" id=\"RY9-GF-VAs\"/>\n                                        <constraint firstItem=\"On7-Xz-EwZ\" firstAttribute=\"leading\" secondItem=\"9Cc-7k-aI0\" secondAttribute=\"leading\" constant=\"10\" id=\"Vhn-ph-93e\"/>\n                                        <constraint firstAttribute=\"trailing\" secondItem=\"On7-Xz-EwZ\" secondAttribute=\"trailing\" constant=\"10\" id=\"dLo-ig-cpk\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"classicImageView\" destination=\"Ox2-0U-qcP\" id=\"Muq-4t-isE\"/>\n                                    <outlet property=\"descriptionLabel\" destination=\"HTG-0g-poE\" id=\"auh-vy-CDP\"/>\n                                    <outlet property=\"linkLabel\" destination=\"NmY-63-m8B\" id=\"UdQ-KR-Oe2\"/>\n                                    <outlet property=\"rootView\" destination=\"On7-Xz-EwZ\" id=\"7J9-d8-REY\"/>\n                                    <outlet property=\"rootViewBottomConstraint\" destination=\"RY9-GF-VAs\" id=\"03e-6w-PK3\"/>\n                                    <outlet property=\"rootViewLeadingConstraint\" destination=\"Vhn-ph-93e\" id=\"pgJ-qC-pvw\"/>\n                                    <outlet property=\"rootViewTopConstraint\" destination=\"RGg-bi-Set\" id=\"y6s-aq-ier\"/>\n                                    <outlet property=\"rootViewTrailingConstraint\" destination=\"dLo-ig-cpk\" id=\"rhr-sO-NPz\"/>\n                                    <outlet property=\"titleLabel\" destination=\"NYH-ky-y8x\" id=\"t62-l6-mbK\"/>\n                                    <outlet property=\"unreadIndicatorView\" destination=\"Xkj-i2-AsD\" id=\"b4f-ku-ikb\"/>\n                                </connections>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"pNw-1d-kzS\" id=\"Tl2-VB-jsc\"/>\n                            <outlet property=\"delegate\" destination=\"pNw-1d-kzS\" id=\"a2J-5v-KrQ\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"News Feed\" id=\"d4R-H4-bIN\"/>\n                    <refreshControl key=\"refreshControl\" opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"center\" insetsLayoutMarginsFromSafeArea=\"NO\" enabled=\"NO\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" id=\"cWq-uJ-Cna\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1000\" height=\"1000\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <connections>\n                            <action selector=\"refreshNewsFeed:\" destination=\"pNw-1d-kzS\" eventType=\"valueChanged\" id=\"awN-i0-TeA\"/>\n                        </connections>\n                    </refreshControl>\n                    <connections>\n                        <outlet property=\"emptyFeedLabel\" destination=\"2M3-DV-JZj\" id=\"4n2-jY-A17\"/>\n                        <outlet property=\"emptyFeedView\" destination=\"Tbc-fm-PCw\" id=\"9Mf-7K-3jJ\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"plW-Gx-u1v\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <view contentMode=\"scaleToFill\" id=\"Tbc-fm-PCw\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"240\" height=\"128\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2M3-DV-JZj\" userLabel=\"Cannot establish network connection. Please try again later.\">\n                            <rect key=\"frame\" x=\"-23.5\" y=\"43.5\" width=\"287\" height=\"41\"/>\n                            <string key=\"text\">Cannot establish network connection.\nPlease try again later. </string>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstItem=\"2M3-DV-JZj\" firstAttribute=\"centerY\" secondItem=\"Tbc-fm-PCw\" secondAttribute=\"centerY\" id=\"dfL-rd-1Xr\"/>\n                        <constraint firstItem=\"2M3-DV-JZj\" firstAttribute=\"centerX\" secondItem=\"Tbc-fm-PCw\" secondAttribute=\"centerX\" id=\"sHI-kP-ibJ\"/>\n                    </constraints>\n                </view>\n                <view contentMode=\"scaleToFill\" id=\"0TZ-BF-aje\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"240\" height=\"128\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <subviews>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Connection Error\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"j8i-xp-qa7\">\n                            <rect key=\"frame\" x=\"55\" y=\"38.5\" width=\"130\" height=\"21\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hK5-hy-26y\">\n                            <rect key=\"frame\" x=\"-23.5\" y=\"58.5\" width=\"287\" height=\"41\"/>\n                            <string key=\"text\">Cannot establish network connection.\nPlease try again later. </string>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <nil key=\"textColor\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstItem=\"j8i-xp-qa7\" firstAttribute=\"centerY\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerY\" constant=\"-15\" id=\"6IP-o8-Omb\"/>\n                        <constraint firstItem=\"hK5-hy-26y\" firstAttribute=\"centerX\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerX\" id=\"Qcd-wI-umd\"/>\n                        <constraint firstItem=\"j8i-xp-qa7\" firstAttribute=\"centerX\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerX\" id=\"YvG-u0-lWe\"/>\n                        <constraint firstItem=\"hK5-hy-26y\" firstAttribute=\"centerY\" secondItem=\"0TZ-BF-aje\" secondAttribute=\"centerY\" constant=\"15\" id=\"eQu-x6-jyE\"/>\n                    </constraints>\n                </view>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-4703.1999999999998\" y=\"30.134932533733135\"/>\n        </scene>\n        <!--News Feed View Controller-->\n        <scene sceneID=\"TwY-oH-zGj\">\n            <objects>\n                <navigationController storyboardIdentifier=\"ABKNewsFeedViewController\" id=\"pc8-lC-rlh\" customClass=\"ABKNewsFeedViewController\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"ocN-P6-q7u\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"pNw-1d-kzS\" kind=\"relationship\" relationship=\"rootViewController\" id=\"aDI-mj-lvZ\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ayT-AZ-HCD\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-5646\" y=\"31\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"Icons_Read.png\" width=\"30\" height=\"30\"/>\n        <image name=\"Icons_Unread.png\" width=\"30\" height=\"30\"/>\n        <systemColor name=\"darkTextColor\">\n            <color white=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-21.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-22.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-16.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-13.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-7.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-11.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-5.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-19.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-4.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-12.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Stopwatch_iOS_Icon-20.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-23.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-24.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-18.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-17.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-15.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-8.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"50x50\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-14.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"50x50\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-6.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"72x72\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-10.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"72x72\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-3.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-9.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-2.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Stopwatch_iOS_Icon-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Stopwatch_iOS_Icon-25.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/IAM.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"IAM@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"IAM@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/Icons_Read.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Icons_Read.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Icons_Read@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/Icons_Unread.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Icons_Unread.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"Icons_Unread@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/appboy_cc_noimage_lrg.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"appboy_cc_noimage_lrg.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"appboy_cc_noimage_lrg@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/bolt.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"bolt@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"bolt@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/newsfeed.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"newsfeed@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"newsfeed@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/stopwatch_cc_icon_pinned.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"stopwatch_cc_icon_pinned.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"stopwatch_cc_icon_pinned@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"stopwatch_cc_icon_pinned@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/Assets.xcassets/user.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"user@2x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"user@3x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/Stopwatch/Resources/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"15702\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"15704\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Copyright © 2020 Braze. All rights reserved.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"obG-Y5-kRd\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"855\" width=\"414\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.22745098039215686\" green=\"0.80000000000000004\" blue=\"0.8666666666666667\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Stopwatch\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GJd-Yh-RWb\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"278\" width=\"414\" height=\"43\"/>\n                                <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                                <color key=\"textColor\" red=\"0.96862745098039216\" green=\"0.56862745098039214\" blue=\"0.5607843137254902\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"displayP3\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"Bcu-3y-fUS\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"obG-Y5-kRd\" secondAttribute=\"centerX\" id=\"5cz-MP-9tL\"/>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"GJd-Yh-RWb\" secondAttribute=\"centerX\" id=\"Q3B-4B-g5h\"/>\n                            <constraint firstItem=\"obG-Y5-kRd\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" symbolic=\"YES\" id=\"SfN-ll-jLj\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"obG-Y5-kRd\" secondAttribute=\"bottom\" constant=\"20\" id=\"Y44-ml-fuU\"/>\n                            <constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"moa-c2-u7t\"/>\n                            <constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" symbolic=\"YES\" id=\"x7j-FC-K8j\"/>\n                        </constraints>\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    <resources>\n        <systemColor name=\"systemBackgroundColor\">\n            <color white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example/Stopwatch/Resources/en.lproj/Localizable.strings",
    "content": "\"Appboy.Stopwatch.initial-view.cancel\" = \"Cancel\";\n\"Appboy.Stopwatch.initial-view.upgrade.thank-message\" = \"Thanks for buying Stopwatch Pro!\";\n\"Appboy.Stopwatch.initial-view.start-button.start\" = \"Start\";\n\"Appboy.Stopwatch.initial-view.start-button.stop\" = \"Stop\";\n\n\"Appboy.Stopwatch.test-view.unread-card.message\" = \"Unread Cards: %d\";\n\"Appboy.Stopwatch.test-view.total-card.message\" = \"Total Cards: %d\";\n\"Appboy.Stopwatch.test-view.appboy-version.message\" = \"Braze Version: %@\";\n\"Appboy.Stopwatch.test-view.categories.button.title\" = \"Categories\";\n\"Appboy.Stopwatch.test-view.categories.title\" = \"Appboy Categories\";\n\"Appboy.Stopwatch.test-view.categories.All\" = \"All\";\n\"Appboy.Stopwatch.test-view.categories.Announcement\" = \"Announcement\";\n\"Appboy.Stopwatch.test-view.categories.Advertising\" = \"Advertising\";\n\"Appboy.Stopwatch.test-view.categories.Social\" = \"Social\";\n\"Appboy.Stopwatch.test-view.categories.News\" = \"News\";\n\"Appboy.Stopwatch.test-view.categories.No-Category\" = \"No Category\";\n\n\"Appboy.Stopwatch\" = \"Stopwatch\";\n\"Appboy.Stopwatch.alert.cancel-button.title\" = \"OK\";\n\n\"Appboy.Stowpatch.slideup-test.slideup-is-tap\" = \"Slideup is tapped.\";\n\"Appboy.Stowpatch.slideup-test.custom-slideup-message\" = \"You can display a custom defined slideup!\";\n\n\"Appboy.Stopwatch.user-attributes.user-ID\" = \"User ID\";\n\"Appboy.Stopwatch.user-attributes.first-name\" = \"First Name\";\n\"Appboy.Stopwatch.user-attributes.last-name\" = \"Last Name\";\n\"Appboy.Stopwatch.user-attributes.email\" = \"Email\";\n\"Appboy.Stopwatch.user-attributes.country\" = \"Country\";\n\"Appboy.Stopwatch.user-attributes.home-city\" = \"Home City\";\n\"Appboy.Stopwatch.user-attributes.language\" = \"Language\";\n\"Appboy.Stopwatch.user-attributes.bio\" = \"Bio\";\n\"Appboy.Stopwatch.user-attributes.gender\" = \"Gender\";\n\"Appboy.Stopwatch.user-attributes.phone\" = \"Phone\";\n\"Appboy.Stopwatch.user-attributes.date-of-birth\" = \"Date Of Birth\";\n\"Appboy.Stopwatch.user-attributes.favorite-color\" = \"Favorite Color\";\n\"Appboy.Stopwatch.user-attributes.favorite-food\" = \"Favorite Food\";\n\"Appboy.Stopwatch.user-attributes.push-subscription\" = \"Push Sub\";\n\"Appboy.Stopwatch.user-attributes.email-subscription\" = \"Email Sub\";\n\"Appboy.Stopwatch.user-attributes.updated-message\" = \"Profile updates stored.\";\n\"Appboy.Stopwatch.user-attributes-array.missing-value\" = \"Please input a custom attribute value\";\n\"Appboy.Stopwatch.user-attributes-array.missing-key\" = \"Please input a custom attribute key\";\n\"Appboy.Stopwatch.user-attributes-array.missing-values\" = \"Cannot set empty custom attribute values\";\n"
  },
  {
    "path": "Example/Stopwatch/Resources/en.lproj/MainStoryboard.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"21507\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" colorMatched=\"YES\" initialViewController=\"Za8-FW-PxY\">\n    <device id=\"retina6_5\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"21505\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Geofences View Controller-->\n        <scene sceneID=\"ecb-2W-QUo\">\n            <objects>\n                <viewController id=\"WvD-PZ-pUN\" customClass=\"GeofencesViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"qUf-du-1cE\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wC8-jx-2Ax\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"D6c-Y2-opW\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"842\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <mapView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" mapType=\"standard\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Lou-kK-19X\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            </mapView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </view>\n                    <navigationItem key=\"navigationItem\" id=\"HXA-BH-Hte\"/>\n                    <connections>\n                        <outlet property=\"mapView\" destination=\"Lou-kK-19X\" id=\"rut-WN-uU0\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"nKF-Tb-uuC\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"242.40000000000001\" y=\"-3262.2188905547227\"/>\n        </scene>\n        <!--Data View Controller-->\n        <scene sceneID=\"TEE-xP-AeY\">\n            <objects>\n                <viewController storyboardIdentifier=\"Data\" id=\"O7G-Pw-GL1\" customClass=\"DataViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"K7P-a9-Wfu\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"ISu-dw-jTG\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"3i5-SB-6f7\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kRa-7I-fdX\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"144\" width=\"382\" height=\"38\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"38\" id=\"r0P-Vr-fNy\"/>\n                                </constraints>\n                                <state key=\"normal\" title=\"Wipe Data and Disable\"/>\n                                <connections>\n                                    <action selector=\"wipeDataButton:\" destination=\"O7G-Pw-GL1\" eventType=\"touchUpInside\" id=\"sDj-zm-5yI\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HmA-G8-V1a\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"212\" width=\"382\" height=\"38\"/>\n                                <state key=\"normal\" title=\"Enable SDK on Next App Run\"/>\n                                <connections>\n                                    <action selector=\"enableSDKButton:\" destination=\"O7G-Pw-GL1\" eventType=\"touchUpInside\" id=\"fEX-8S-UIZ\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"s1p-gG-tny\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"280\" width=\"382\" height=\"38\"/>\n                                <state key=\"normal\" title=\"Disable SDK\"/>\n                                <connections>\n                                    <action selector=\"disableSDKButton:\" destination=\"O7G-Pw-GL1\" eventType=\"touchUpInside\" id=\"2MD-AV-CaU\"/>\n                                </connections>\n                            </button>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zXq-07-duk\">\n                                <rect key=\"frame\" x=\"20\" y=\"348\" width=\"374\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"HmA-G8-V1a\" firstAttribute=\"leading\" secondItem=\"kRa-7I-fdX\" secondAttribute=\"leading\" id=\"0VA-ho-G0T\"/>\n                            <constraint firstItem=\"s1p-gG-tny\" firstAttribute=\"height\" secondItem=\"HmA-G8-V1a\" secondAttribute=\"height\" id=\"5hi-kL-vbL\"/>\n                            <constraint firstItem=\"s1p-gG-tny\" firstAttribute=\"trailing\" secondItem=\"kRa-7I-fdX\" secondAttribute=\"trailing\" id=\"Csg-iS-TBe\"/>\n                            <constraint firstItem=\"HmA-G8-V1a\" firstAttribute=\"height\" secondItem=\"kRa-7I-fdX\" secondAttribute=\"height\" id=\"Lfa-yC-cog\"/>\n                            <constraint firstItem=\"HmA-G8-V1a\" firstAttribute=\"top\" secondItem=\"kRa-7I-fdX\" secondAttribute=\"bottom\" constant=\"30\" id=\"MK5-QK-Nxb\"/>\n                            <constraint firstItem=\"s1p-gG-tny\" firstAttribute=\"leading\" secondItem=\"kRa-7I-fdX\" secondAttribute=\"leading\" id=\"Vpp-m7-Vkw\"/>\n                            <constraint firstItem=\"kRa-7I-fdX\" firstAttribute=\"top\" secondItem=\"K7P-a9-Wfu\" secondAttribute=\"bottom\" constant=\"100\" id=\"Y49-vC-rgw\"/>\n                            <constraint firstItem=\"s1p-gG-tny\" firstAttribute=\"top\" secondItem=\"HmA-G8-V1a\" secondAttribute=\"bottom\" constant=\"30\" id=\"aV2-zu-6h0\"/>\n                            <constraint firstItem=\"zXq-07-duk\" firstAttribute=\"top\" secondItem=\"s1p-gG-tny\" secondAttribute=\"bottom\" constant=\"30\" id=\"d2K-oB-UDn\"/>\n                            <constraint firstItem=\"kRa-7I-fdX\" firstAttribute=\"leading\" secondItem=\"3i5-SB-6f7\" secondAttribute=\"leading\" constant=\"16\" id=\"fwC-yC-5HT\"/>\n                            <constraint firstItem=\"HmA-G8-V1a\" firstAttribute=\"trailing\" secondItem=\"kRa-7I-fdX\" secondAttribute=\"trailing\" id=\"g1w-17-8Ib\"/>\n                            <constraint firstItem=\"zXq-07-duk\" firstAttribute=\"leading\" secondItem=\"3i5-SB-6f7\" secondAttribute=\"leadingMargin\" id=\"gSf-b6-FRL\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"kRa-7I-fdX\" secondAttribute=\"trailing\" constant=\"16\" id=\"qz1-17-zOr\"/>\n                            <constraint firstAttribute=\"trailingMargin\" secondItem=\"zXq-07-duk\" secondAttribute=\"trailing\" id=\"vX3-SN-SXE\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"sdkState\" destination=\"zXq-07-duk\" id=\"vIn-By-9XW\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"KLA-Wr-tWR\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1639.2\" y=\"-3604.9475262368819\"/>\n        </scene>\n        <!--Misc View Controller-->\n        <scene sceneID=\"WJM-fM-e7F\">\n            <objects>\n                <viewController storyboardIdentifier=\"Misc\" modalPresentationStyle=\"currentContext\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"Lea-J4-vz9\" customClass=\"MiscViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"9dk-8o-Exe\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"jwk-gj-nAE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"hw1-81-rGu\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"1896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" keyboardDismissMode=\"onDrag\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"QnV-GI-PPD\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"1818\"/>\n                                <subviews>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oUY-3D-W7Q\" customClass=\"ScrollContentView\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"1818\"/>\n                                        <subviews>\n                                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fba-Vc-gZu\" userLabel=\"ContentView\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"1400\"/>\n                                                <subviews>\n                                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Braze Version:\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wNO-pV-BHh\">\n                                                        <rect key=\"frame\" x=\"148\" y=\"10\" width=\"118\" height=\"38\"/>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"AtK-ZJ-gcH\"/>\n                                                        </constraints>\n                                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"17\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fEX-fU-2p3\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"326.66666666666669\" width=\"382\" height=\"30\"/>\n                                                        <state key=\"normal\" title=\"Manually Request Geofences\"/>\n                                                        <connections>\n                                                            <action selector=\"manuallyRequestGeofences:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"DC9-5a-T2f\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"F6w-iv-ktD\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"124\" width=\"382\" height=\"38\"/>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"qGa-53-4D4\"/>\n                                                        </constraints>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Change Braze Flush Mode\">\n                                                            <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                        </state>\n                                                        <state key=\"highlighted\">\n                                                            <color key=\"titleColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                        </state>\n                                                        <connections>\n                                                            <action selector=\"changeAppboyFlushMode:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"3mR-kz-OEt\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Szq-qJ-HE9\">\n                                                        <rect key=\"frame\" x=\"191\" y=\"86\" width=\"32.333333333333343\" height=\"38\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" weight=\"semibold\" pointSize=\"12\"/>\n                                                        <nil key=\"textColor\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7i6-27-s0b\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"182.66666666666666\" width=\"382\" height=\"38\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Flush Data\">\n                                                            <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                        </state>\n                                                        <state key=\"highlighted\">\n                                                            <color key=\"titleColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                        </state>\n                                                        <connections>\n                                                            <action selector=\"flushAppboyData:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"45e-3l-EvX\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7H5-ee-dQb\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"230.66666666666669\" width=\"382\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Log Attribution Data\">\n                                                            <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                        </state>\n                                                        <connections>\n                                                            <action selector=\"logAttributionData:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"mlu-BK-VIj\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DLG-60-Vzq\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"278.66666666666669\" width=\"382\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Log Single Location\"/>\n                                                        <connections>\n                                                            <action selector=\"logSingleLocation:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"c6W-Ts-ih8\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Braze Flush Mode:\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"z8J-GY-Dyi\">\n                                                        <rect key=\"frame\" x=\"143.66666666666666\" y=\"48\" width=\"126.99999999999997\" height=\"38\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Dg7-JD-KCe\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"366.66666666666669\" width=\"382\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Show Caches Dir Files\"/>\n                                                        <connections>\n                                                            <action selector=\"launchCachedFilesAlertView:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"W6m-lj-uOx\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vQB-sU-MHh\" userLabel=\"Environment View\">\n                                                        <rect key=\"frame\" x=\"0.0\" y=\"414.66666666666674\" width=\"414\" height=\"288.33333333333326\"/>\n                                                        <subviews>\n                                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hXN-9o-2Lo\" customClass=\"StopwatchButton\">\n                                                                <rect key=\"frame\" x=\"16\" y=\"96.999999999999943\" width=\"382\" height=\"38\"/>\n                                                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                                <state key=\"normal\" title=\"Apply Environment\"/>\n                                                                <connections>\n                                                                    <action selector=\"rebootAndApplyEnvironment:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"Jx6-Ed-itb\"/>\n                                                                </connections>\n                                                            </button>\n                                                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" verticalHuggingPriority=\"1000\" verticalCompressionResistancePriority=\"1000\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Blank sets default\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MFI-6t-zvq\">\n                                                                <rect key=\"frame\" x=\"104.66666666666666\" y=\"14\" width=\"293.33333333333337\" height=\"30\"/>\n                                                                <accessibility key=\"accessibilityConfiguration\" hint=\"Default\" label=\"Default\"/>\n                                                                <constraints>\n                                                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"TPd-aH-G9r\"/>\n                                                                </constraints>\n                                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                                            </textField>\n                                                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"API Key\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"txv-U8-fmm\">\n                                                                <rect key=\"frame\" x=\"15.999999999999996\" y=\"10\" width=\"52.666666666666657\" height=\"38\"/>\n                                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                                <nil key=\"highlightedColor\"/>\n                                                            </label>\n                                                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Endpoint\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"taI-Sv-eWX\">\n                                                                <rect key=\"frame\" x=\"16\" y=\"50\" width=\"61\" height=\"38\"/>\n                                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                                <nil key=\"highlightedColor\"/>\n                                                            </label>\n                                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5CO-Ds-nXw\" customClass=\"StopwatchButton\">\n                                                                <rect key=\"frame\" x=\"16\" y=\"144.99999999999994\" width=\"382\" height=\"38\"/>\n                                                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                                <state key=\"normal\" title=\"Switch to Development Environment\"/>\n                                                                <connections>\n                                                                    <action selector=\"rebootAndApplyDevEnvironment:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"anc-AR-dkt\"/>\n                                                                </connections>\n                                                            </button>\n                                                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" verticalHuggingPriority=\"1000\" verticalCompressionResistancePriority=\"1000\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Blank sets default\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pKk-eq-dcv\">\n                                                                <rect key=\"frame\" x=\"104.66666666666666\" y=\"53.999999999999943\" width=\"293.33333333333337\" height=\"30\"/>\n                                                                <accessibility key=\"accessibilityConfiguration\" hint=\"Default\" label=\"Default\"/>\n                                                                <constraints>\n                                                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"OPU-Kb-mS9\"/>\n                                                                </constraints>\n                                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                                            </textField>\n                                                            <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HJ1-xC-jrF\">\n                                                                <rect key=\"frame\" x=\"349\" y=\"213.99999999999994\" width=\"51\" height=\"31\"/>\n                                                                <connections>\n                                                                    <action selector=\"setSDKAuthSwitchChange:\" destination=\"Lea-J4-vz9\" eventType=\"valueChanged\" id=\"VfL-df-r6T\"/>\n                                                                </connections>\n                                                            </switch>\n                                                        </subviews>\n                                                        <constraints>\n                                                            <constraint firstItem=\"taI-Sv-eWX\" firstAttribute=\"leading\" secondItem=\"txv-U8-fmm\" secondAttribute=\"leading\" id=\"0iZ-sz-cKn\"/>\n                                                            <constraint firstItem=\"hXN-9o-2Lo\" firstAttribute=\"height\" secondItem=\"txv-U8-fmm\" secondAttribute=\"height\" id=\"5L7-fG-vRP\"/>\n                                                            <constraint firstItem=\"hXN-9o-2Lo\" firstAttribute=\"top\" secondItem=\"pKk-eq-dcv\" secondAttribute=\"bottom\" constant=\"13\" id=\"7hb-KP-2Je\"/>\n                                                            <constraint firstItem=\"pKk-eq-dcv\" firstAttribute=\"leading\" secondItem=\"MFI-6t-zvq\" secondAttribute=\"leading\" id=\"9MT-bz-krF\"/>\n                                                            <constraint firstItem=\"pKk-eq-dcv\" firstAttribute=\"centerY\" secondItem=\"taI-Sv-eWX\" secondAttribute=\"centerY\" id=\"Afh-9O-kie\"/>\n                                                            <constraint firstItem=\"MFI-6t-zvq\" firstAttribute=\"leading\" secondItem=\"txv-U8-fmm\" secondAttribute=\"trailing\" constant=\"36\" id=\"JY4-3I-Zr4\"/>\n                                                            <constraint firstItem=\"txv-U8-fmm\" firstAttribute=\"leading\" secondItem=\"vQB-sU-MHh\" secondAttribute=\"leading\" constant=\"16\" id=\"Jjz-mV-iXv\"/>\n                                                            <constraint firstItem=\"5CO-Ds-nXw\" firstAttribute=\"centerX\" secondItem=\"hXN-9o-2Lo\" secondAttribute=\"centerX\" id=\"MCm-Zi-HEe\"/>\n                                                            <constraint firstItem=\"taI-Sv-eWX\" firstAttribute=\"height\" secondItem=\"txv-U8-fmm\" secondAttribute=\"height\" id=\"MUf-0u-ha6\"/>\n                                                            <constraint firstItem=\"MFI-6t-zvq\" firstAttribute=\"centerY\" secondItem=\"txv-U8-fmm\" secondAttribute=\"centerY\" id=\"UO2-qg-VbC\"/>\n                                                            <constraint firstItem=\"5CO-Ds-nXw\" firstAttribute=\"top\" secondItem=\"hXN-9o-2Lo\" secondAttribute=\"bottom\" constant=\"10\" id=\"UOx-hu-L1f\"/>\n                                                            <constraint firstItem=\"pKk-eq-dcv\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"taI-Sv-eWX\" secondAttribute=\"trailing\" constant=\"5\" id=\"dru-nz-lHl\"/>\n                                                            <constraint firstItem=\"pKk-eq-dcv\" firstAttribute=\"top\" secondItem=\"MFI-6t-zvq\" secondAttribute=\"bottom\" constant=\"10\" id=\"eJd-ie-KBS\"/>\n                                                            <constraint firstItem=\"hXN-9o-2Lo\" firstAttribute=\"centerX\" secondItem=\"vQB-sU-MHh\" secondAttribute=\"centerX\" id=\"jLf-kz-uq4\"/>\n                                                            <constraint firstAttribute=\"trailing\" secondItem=\"MFI-6t-zvq\" secondAttribute=\"trailing\" constant=\"16\" id=\"tbV-aH-gwg\"/>\n                                                            <constraint firstAttribute=\"trailing\" secondItem=\"pKk-eq-dcv\" secondAttribute=\"trailing\" constant=\"16\" id=\"uEU-45-xew\"/>\n                                                            <constraint firstItem=\"5CO-Ds-nXw\" firstAttribute=\"leading\" secondItem=\"hXN-9o-2Lo\" secondAttribute=\"leading\" id=\"vY3-Ku-mEw\"/>\n                                                            <constraint firstItem=\"txv-U8-fmm\" firstAttribute=\"top\" secondItem=\"vQB-sU-MHh\" secondAttribute=\"top\" constant=\"10\" id=\"zCt-yd-zgy\"/>\n                                                        </constraints>\n                                                    </view>\n                                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Set In-App Message Delegate On Start\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Vz4-x6-sYU\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"713\" width=\"266\" height=\"18\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"0xO-D6-9YS\">\n                                                        <rect key=\"frame\" x=\"349\" y=\"706.66666666666663\" width=\"51\" height=\"31\"/>\n                                                        <connections>\n                                                            <action selector=\"setInAppDelegateSwitchChanged:\" destination=\"Lea-J4-vz9\" eventType=\"valueChanged\" id=\"bFy-lY-zOS\"/>\n                                                        </connections>\n                                                    </switch>\n                                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Set URI Delegate On Start\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"C67-Hk-uo5\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"752\" width=\"178\" height=\"18\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Jib-w2-7ZR\">\n                                                        <rect key=\"frame\" x=\"349\" y=\"745.66666666666663\" width=\"51\" height=\"31\"/>\n                                                        <connections>\n                                                            <action selector=\"urlDelegateSwitchChanged:\" destination=\"Lea-J4-vz9\" eventType=\"valueChanged\" id=\"M7p-S2-OFB\"/>\n                                                        </connections>\n                                                    </switch>\n                                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MV7-Qb-KZO\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"171.66666666666666\" width=\"382\" height=\"1\"/>\n                                                        <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"height\" constant=\"1\" id=\"uHf-dS-iDo\"/>\n                                                        </constraints>\n                                                    </view>\n                                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ghk-t6-03W\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"414.66666666666669\" width=\"382\" height=\"1\"/>\n                                                        <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"height\" constant=\"1\" id=\"GCs-Ee-l7j\"/>\n                                                        </constraints>\n                                                    </view>\n                                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7UD-Yr-JLj\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"614.66666666666663\" width=\"382\" height=\"1\"/>\n                                                        <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"height\" constant=\"1\" id=\"qa3-PG-jYr\"/>\n                                                        </constraints>\n                                                    </view>\n                                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vzO-3u-7cG\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"1124.3333333333333\" width=\"382\" height=\"1\"/>\n                                                        <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                        <constraints>\n                                                            <constraint firstAttribute=\"height\" constant=\"1\" id=\"mZe-m7-3PS\"/>\n                                                        </constraints>\n                                                    </view>\n                                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"SDK Authentication\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FKc-qi-PUe\" userLabel=\"SDK Authentication\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"634\" width=\"333\" height=\"18\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <nil key=\"textColor\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"C7o-uA-VQs\">\n                                                        <rect key=\"frame\" x=\"349\" y=\"665.66666666666663\" width=\"51\" height=\"31\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleSilentPushAlerts:\" destination=\"Lea-J4-vz9\" eventType=\"valueChanged\" id=\"e1E-m9-fFG\"/>\n                                                        </connections>\n                                                    </switch>\n                                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Show Silent Push Alerts\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Scb-cj-eog\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"672\" width=\"162.66666666666666\" height=\"18\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <nil key=\"textColor\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Allow Dark Theme\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vou-Wk-mPn\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"791\" width=\"125\" height=\"18\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <nil key=\"textColor\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Rrm-os-OeC\">\n                                                        <rect key=\"frame\" x=\"349\" y=\"784.66666666666663\" width=\"51\" height=\"31\"/>\n                                                        <connections>\n                                                            <action selector=\"allowDarkThemeToggleSwitched:\" destination=\"Lea-J4-vz9\" eventType=\"valueChanged\" id=\"Jqv-P4-bad\"/>\n                                                        </connections>\n                                                    </switch>\n                                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" layoutMarginsFollowReadableWidth=\"YES\" usesAttributedText=\"YES\" lineBreakMode=\"wordWrap\" numberOfLines=\"2\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VoK-Ki-2Rj\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"825.66666666666663\" width=\"382\" height=\"33.666666666666629\"/>\n                                                        <attributedString key=\"attributedText\">\n                                                            <fragment content=\"Custom App Theme                 \">\n                                                                <attributes>\n                                                                    <font key=\"NSFont\" metaFont=\"system\" size=\"15\"/>\n                                                                </attributes>\n                                                            </fragment>\n                                                            <fragment content=\"(IAM support requires the above IAM Delegate be on)\">\n                                                                <attributes>\n                                                                    <font key=\"NSFont\" usesAppearanceFont=\"YES\"/>\n                                                                </attributes>\n                                                            </fragment>\n                                                        </attributedString>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <pickerView contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Fj3-qn-ARo\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"869.33333333333337\" width=\"382\" height=\"216.00000000000011\"/>\n                                                        <accessibility key=\"accessibilityConfiguration\" hint=\"Select the color them for the app\" label=\"Custom App Theme\">\n                                                            <bool key=\"isElement\" value=\"YES\"/>\n                                                        </accessibility>\n                                                    </pickerView>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VBd-3z-vDi\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"1075.3333333333333\" width=\"382\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"See Registered Geofences\"/>\n                                                        <connections>\n                                                            <segue destination=\"WvD-PZ-pUN\" kind=\"push\" id=\"Rzh-GU-UzO\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hdT-oh-jh2\">\n                                                        <rect key=\"frame\" x=\"149.66666666666663\" y=\"1135.3333333333333\" width=\"248.33333333333337\" height=\"34\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                        <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" keyboardType=\"numberPad\"/>\n                                                    </textField>\n                                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Session Timeout\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"0zK-lu-E9l\">\n                                                        <rect key=\"frame\" x=\"16.000000000000007\" y=\"1133.3333333333333\" width=\"113.66666666666669\" height=\"38\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jFI-6Q-use\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"16\" y=\"1179.3333333333333\" width=\"382\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Set Session Timeout\"/>\n                                                        <connections>\n                                                            <action selector=\"setSessionTimeout:\" destination=\"Lea-J4-vz9\" eventType=\"touchUpInside\" id=\"csO-aY-Snh\"/>\n                                                        </connections>\n                                                    </button>\n                                                </subviews>\n                                                <constraints>\n                                                    <constraint firstItem=\"Fj3-qn-ARo\" firstAttribute=\"leading\" secondItem=\"Scb-cj-eog\" secondAttribute=\"leading\" id=\"03n-WM-Tmm\"/>\n                                                    <constraint firstItem=\"wNO-pV-BHh\" firstAttribute=\"centerX\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"centerX\" id=\"2fE-18-sSf\"/>\n                                                    <constraint firstItem=\"VBd-3z-vDi\" firstAttribute=\"centerX\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"centerX\" id=\"3M9-MJ-WE6\"/>\n                                                    <constraint firstItem=\"Scb-cj-eog\" firstAttribute=\"leading\" secondItem=\"Vz4-x6-sYU\" secondAttribute=\"leading\" id=\"3qM-Gg-4yL\"/>\n                                                    <constraint firstItem=\"Szq-qJ-HE9\" firstAttribute=\"top\" secondItem=\"z8J-GY-Dyi\" secondAttribute=\"bottom\" id=\"4FK-vN-l2I\"/>\n                                                    <constraint firstItem=\"Rrm-os-OeC\" firstAttribute=\"top\" secondItem=\"Jib-w2-7ZR\" secondAttribute=\"bottom\" constant=\"8\" id=\"4IB-h3-Xe0\"/>\n                                                    <constraint firstItem=\"C7o-uA-VQs\" firstAttribute=\"leading\" secondItem=\"Jib-w2-7ZR\" secondAttribute=\"leading\" id=\"4Nj-iv-GfJ\"/>\n                                                    <constraint firstItem=\"VBd-3z-vDi\" firstAttribute=\"leading\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"leading\" id=\"4cc-QI-wrz\"/>\n                                                    <constraint firstItem=\"Jib-w2-7ZR\" firstAttribute=\"top\" secondItem=\"0xO-D6-9YS\" secondAttribute=\"bottom\" constant=\"8\" id=\"4jF-Pc-tJG\"/>\n                                                    <constraint firstItem=\"Scb-cj-eog\" firstAttribute=\"leading\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" constant=\"16\" id=\"5Uy-cr-agY\"/>\n                                                    <constraint firstItem=\"hdT-oh-jh2\" firstAttribute=\"top\" secondItem=\"vzO-3u-7cG\" secondAttribute=\"bottom\" constant=\"10\" id=\"5c3-HM-QUa\"/>\n                                                    <constraint firstItem=\"DLG-60-Vzq\" firstAttribute=\"leading\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"leading\" id=\"5fi-hT-cDr\"/>\n                                                    <constraint firstItem=\"0zK-lu-E9l\" firstAttribute=\"top\" secondItem=\"VBd-3z-vDi\" secondAttribute=\"bottom\" constant=\"20\" id=\"5xq-aa-Kij\"/>\n                                                    <constraint firstItem=\"Jib-w2-7ZR\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"C67-Hk-uo5\" secondAttribute=\"trailing\" constant=\"10\" id=\"6B9-eg-4Mn\"/>\n                                                    <constraint firstItem=\"jFI-6Q-use\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" id=\"6x9-Cn-tg2\"/>\n                                                    <constraint firstItem=\"vQB-sU-MHh\" firstAttribute=\"centerX\" secondItem=\"7H5-ee-dQb\" secondAttribute=\"centerX\" id=\"77E-9o-hPb\"/>\n                                                    <constraint firstItem=\"0xO-D6-9YS\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Scb-cj-eog\" secondAttribute=\"trailing\" constant=\"10\" id=\"8Xr-xb-Xbq\"/>\n                                                    <constraint firstItem=\"0zK-lu-E9l\" firstAttribute=\"height\" secondItem=\"wNO-pV-BHh\" secondAttribute=\"height\" id=\"9ku-7N-jfy\"/>\n                                                    <constraint firstItem=\"Fj3-qn-ARo\" firstAttribute=\"top\" secondItem=\"VoK-Ki-2Rj\" secondAttribute=\"bottom\" constant=\"10\" id=\"CfC-ia-AB1\"/>\n                                                    <constraint firstItem=\"wNO-pV-BHh\" firstAttribute=\"top\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"top\" constant=\"10\" id=\"DEV-AH-mbK\"/>\n                                                    <constraint firstItem=\"0xO-D6-9YS\" firstAttribute=\"trailing\" secondItem=\"pKk-eq-dcv\" secondAttribute=\"trailing\" id=\"DHS-C8-bzu\"/>\n                                                    <constraint firstItem=\"C7o-uA-VQs\" firstAttribute=\"top\" secondItem=\"HJ1-xC-jrF\" secondAttribute=\"bottom\" constant=\"5.9999999999996589\" id=\"E34-hO-Dt8\"/>\n                                                    <constraint firstItem=\"Scb-cj-eog\" firstAttribute=\"top\" secondItem=\"FKc-qi-PUe\" secondAttribute=\"bottom\" constant=\"20\" id=\"ESU-Ej-74G\"/>\n                                                    <constraint firstItem=\"MV7-Qb-KZO\" firstAttribute=\"top\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"bottom\" constant=\"9.5\" id=\"FE8-s5-daz\"/>\n                                                    <constraint firstItem=\"hdT-oh-jh2\" firstAttribute=\"leading\" secondItem=\"0zK-lu-E9l\" secondAttribute=\"trailing\" constant=\"20\" id=\"FeY-3Z-QMt\"/>\n                                                    <constraint firstItem=\"0zK-lu-E9l\" firstAttribute=\"centerY\" secondItem=\"hdT-oh-jh2\" secondAttribute=\"centerY\" id=\"Gn0-kU-QSd\"/>\n                                                    <constraint firstItem=\"7i6-27-s0b\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" id=\"HIR-jC-2F7\"/>\n                                                    <constraint firstItem=\"z8J-GY-Dyi\" firstAttribute=\"height\" secondItem=\"wNO-pV-BHh\" secondAttribute=\"height\" id=\"Hds-zl-hfU\"/>\n                                                    <constraint firstItem=\"ghk-t6-03W\" firstAttribute=\"top\" secondItem=\"Dg7-JD-KCe\" secondAttribute=\"bottom\" constant=\"10\" id=\"HjT-0V-8Mk\"/>\n                                                    <constraint firstItem=\"hXN-9o-2Lo\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" id=\"IFu-PJ-GaE\"/>\n                                                    <constraint firstItem=\"VoK-Ki-2Rj\" firstAttribute=\"top\" secondItem=\"Rrm-os-OeC\" secondAttribute=\"bottom\" constant=\"10\" id=\"J5D-U5-eb7\"/>\n                                                    <constraint firstItem=\"0xO-D6-9YS\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"Vz4-x6-sYU\" secondAttribute=\"trailing\" constant=\"10\" id=\"KJJ-nY-Nb2\"/>\n                                                    <constraint firstItem=\"Fj3-qn-ARo\" firstAttribute=\"bottom\" secondItem=\"VBd-3z-vDi\" secondAttribute=\"top\" constant=\"10\" id=\"LT0-ZR-fA2\"/>\n                                                    <constraint firstItem=\"7H5-ee-dQb\" firstAttribute=\"top\" secondItem=\"7i6-27-s0b\" secondAttribute=\"bottom\" constant=\"10\" id=\"OUe-jF-Zev\"/>\n                                                    <constraint firstItem=\"Rrm-os-OeC\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"vou-Wk-mPn\" secondAttribute=\"trailing\" constant=\"10\" id=\"QHF-XS-Gcn\"/>\n                                                    <constraint firstItem=\"vQB-sU-MHh\" firstAttribute=\"centerX\" secondItem=\"Dg7-JD-KCe\" secondAttribute=\"centerX\" id=\"Qvd-Tl-UnP\"/>\n                                                    <constraint firstItem=\"7UD-Yr-JLj\" firstAttribute=\"top\" secondItem=\"5CO-Ds-nXw\" secondAttribute=\"bottom\" constant=\"17\" id=\"R0P-Gk-YCH\"/>\n                                                    <constraint firstItem=\"VBd-3z-vDi\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" id=\"SIs-YS-Ldg\"/>\n                                                    <constraint firstItem=\"hXN-9o-2Lo\" firstAttribute=\"leading\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"leading\" id=\"TXL-Ux-MYo\"/>\n                                                    <constraint firstItem=\"jFI-6Q-use\" firstAttribute=\"leading\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"leading\" id=\"ThH-JH-0js\"/>\n                                                    <constraint firstItem=\"fEX-fU-2p3\" firstAttribute=\"top\" secondItem=\"DLG-60-Vzq\" secondAttribute=\"bottom\" constant=\"10\" id=\"UJw-N9-wRA\"/>\n                                                    <constraint firstItem=\"vou-Wk-mPn\" firstAttribute=\"leading\" secondItem=\"Vz4-x6-sYU\" secondAttribute=\"leading\" id=\"Uaq-uv-sFy\"/>\n                                                    <constraint firstItem=\"Szq-qJ-HE9\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" constant=\"16\" id=\"V3o-CK-5Le\"/>\n                                                    <constraint firstItem=\"7i6-27-s0b\" firstAttribute=\"top\" secondItem=\"MV7-Qb-KZO\" secondAttribute=\"bottom\" constant=\"10\" id=\"VPP-XQ-LLF\"/>\n                                                    <constraint firstItem=\"Dg7-JD-KCe\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" id=\"VUm-DT-CV8\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"vQB-sU-MHh\" secondAttribute=\"trailing\" id=\"Wir-kX-DkW\"/>\n                                                    <constraint firstItem=\"vou-Wk-mPn\" firstAttribute=\"centerY\" secondItem=\"Rrm-os-OeC\" secondAttribute=\"centerY\" id=\"YgU-ha-R3D\"/>\n                                                    <constraint firstItem=\"FKc-qi-PUe\" firstAttribute=\"leading\" secondItem=\"7UD-Yr-JLj\" secondAttribute=\"leading\" id=\"YkW-ts-3KL\"/>\n                                                    <constraint firstItem=\"7H5-ee-dQb\" firstAttribute=\"leading\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"leading\" id=\"a3K-x1-xqB\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"vzO-3u-7cG\" secondAttribute=\"trailing\" constant=\"16\" id=\"aGh-Q7-HyF\"/>\n                                                    <constraint firstItem=\"HJ1-xC-jrF\" firstAttribute=\"leading\" secondItem=\"FKc-qi-PUe\" secondAttribute=\"trailing\" id=\"aGn-dy-nav\"/>\n                                                    <constraint firstItem=\"Szq-qJ-HE9\" firstAttribute=\"height\" secondItem=\"wNO-pV-BHh\" secondAttribute=\"height\" id=\"aOb-ID-5n4\"/>\n                                                    <constraint firstItem=\"F6w-iv-ktD\" firstAttribute=\"top\" secondItem=\"Szq-qJ-HE9\" secondAttribute=\"bottom\" id=\"b97-Bc-q2j\"/>\n                                                    <constraint firstItem=\"DLG-60-Vzq\" firstAttribute=\"top\" secondItem=\"7H5-ee-dQb\" secondAttribute=\"bottom\" constant=\"10\" id=\"bNT-b4-hr8\"/>\n                                                    <constraint firstItem=\"DLG-60-Vzq\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" id=\"bcM-Yo-hZ2\"/>\n                                                    <constraint firstItem=\"Jib-w2-7ZR\" firstAttribute=\"trailing\" secondItem=\"0xO-D6-9YS\" secondAttribute=\"trailing\" id=\"c6u-ba-oYW\"/>\n                                                    <constraint firstItem=\"vzO-3u-7cG\" firstAttribute=\"leading\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" constant=\"16\" id=\"cUR-tM-exv\"/>\n                                                    <constraint firstItem=\"VoK-Ki-2Rj\" firstAttribute=\"trailing\" secondItem=\"C7o-uA-VQs\" secondAttribute=\"trailing\" id=\"cV5-R5-inn\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"MV7-Qb-KZO\" secondAttribute=\"trailing\" constant=\"16\" id=\"czb-fo-GKw\"/>\n                                                    <constraint firstItem=\"0zK-lu-E9l\" firstAttribute=\"leading\" secondItem=\"C67-Hk-uo5\" secondAttribute=\"leading\" id=\"d3s-QV-N0u\"/>\n                                                    <constraint firstItem=\"Scb-cj-eog\" firstAttribute=\"centerY\" secondItem=\"C7o-uA-VQs\" secondAttribute=\"centerY\" id=\"dc1-CC-A6I\"/>\n                                                    <constraint firstItem=\"C67-Hk-uo5\" firstAttribute=\"leading\" secondItem=\"Vz4-x6-sYU\" secondAttribute=\"leading\" id=\"e2s-3R-FVp\"/>\n                                                    <constraint firstItem=\"Vz4-x6-sYU\" firstAttribute=\"leading\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" constant=\"16\" id=\"eMU-Pp-cuD\"/>\n                                                    <constraint firstItem=\"vQB-sU-MHh\" firstAttribute=\"centerX\" secondItem=\"DLG-60-Vzq\" secondAttribute=\"centerX\" id=\"ePZ-gY-mIt\"/>\n                                                    <constraint firstItem=\"z8J-GY-Dyi\" firstAttribute=\"top\" secondItem=\"wNO-pV-BHh\" secondAttribute=\"bottom\" id=\"ej7-L8-Vhg\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"ghk-t6-03W\" secondAttribute=\"trailing\" constant=\"16\" id=\"eo5-WU-wdV\"/>\n                                                    <constraint firstItem=\"fEX-fU-2p3\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" multiplier=\"0.789474\" id=\"eq2-YI-Euw\"/>\n                                                    <constraint firstItem=\"vQB-sU-MHh\" firstAttribute=\"centerX\" secondItem=\"z8J-GY-Dyi\" secondAttribute=\"centerX\" id=\"eyG-hp-l2G\"/>\n                                                    <constraint firstItem=\"Dg7-JD-KCe\" firstAttribute=\"leading\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"leading\" id=\"fFR-7m-xsS\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"trailing\" constant=\"16\" id=\"fHW-WO-sfK\"/>\n                                                    <constraint firstItem=\"Fj3-qn-ARo\" firstAttribute=\"trailing\" secondItem=\"C7o-uA-VQs\" secondAttribute=\"trailing\" id=\"far-Ts-0ra\"/>\n                                                    <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"Szq-qJ-HE9\" secondAttribute=\"trailing\" constant=\"16\" id=\"gSQ-Sk-LIO\"/>\n                                                    <constraint firstItem=\"Dg7-JD-KCe\" firstAttribute=\"top\" secondItem=\"fEX-fU-2p3\" secondAttribute=\"bottom\" constant=\"10\" id=\"h8A-rV-6at\"/>\n                                                    <constraint firstItem=\"7H5-ee-dQb\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" id=\"hhf-9R-bZg\"/>\n                                                    <constraint firstItem=\"fEX-fU-2p3\" firstAttribute=\"leading\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"leading\" id=\"hqu-oA-qNI\"/>\n                                                    <constraint firstItem=\"jFI-6Q-use\" firstAttribute=\"top\" secondItem=\"hdT-oh-jh2\" secondAttribute=\"bottom\" constant=\"10\" id=\"hwR-6b-Qyy\"/>\n                                                    <constraint firstItem=\"F6w-iv-ktD\" firstAttribute=\"leading\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" constant=\"16\" id=\"iQd-UA-10d\"/>\n                                                    <constraint firstItem=\"7i6-27-s0b\" firstAttribute=\"leading\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"leading\" id=\"jKh-bR-dG6\"/>\n                                                    <constraint firstItem=\"ghk-t6-03W\" firstAttribute=\"leading\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" constant=\"16\" id=\"jcw-Rp-JfP\"/>\n                                                    <constraint firstItem=\"Rrm-os-OeC\" firstAttribute=\"leading\" secondItem=\"Jib-w2-7ZR\" secondAttribute=\"leading\" id=\"kBn-p6-xEN\"/>\n                                                    <constraint firstItem=\"5CO-Ds-nXw\" firstAttribute=\"height\" secondItem=\"F6w-iv-ktD\" secondAttribute=\"height\" id=\"kDn-cg-BGg\"/>\n                                                    <constraint firstItem=\"Vz4-x6-sYU\" firstAttribute=\"top\" secondItem=\"vQB-sU-MHh\" secondAttribute=\"bottom\" constant=\"10\" id=\"l8e-OJ-tYO\"/>\n                                                    <constraint firstItem=\"fEX-fU-2p3\" firstAttribute=\"centerX\" secondItem=\"DLG-60-Vzq\" secondAttribute=\"centerX\" id=\"lHW-j9-UiE\"/>\n                                                    <constraint firstItem=\"0xO-D6-9YS\" firstAttribute=\"centerY\" secondItem=\"Vz4-x6-sYU\" secondAttribute=\"centerY\" id=\"mHZ-P7-yMm\"/>\n                                                    <constraint firstItem=\"vQB-sU-MHh\" firstAttribute=\"centerX\" secondItem=\"Szq-qJ-HE9\" secondAttribute=\"centerX\" id=\"nOY-xB-b0R\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"7UD-Yr-JLj\" secondAttribute=\"trailing\" constant=\"16\" id=\"pf7-eB-m7g\"/>\n                                                    <constraint firstAttribute=\"height\" constant=\"1400\" id=\"qRk-9c-wx1\"/>\n                                                    <constraint firstItem=\"MV7-Qb-KZO\" firstAttribute=\"leading\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" constant=\"16\" id=\"qUK-Xl-73g\"/>\n                                                    <constraint firstItem=\"jFI-6Q-use\" firstAttribute=\"centerX\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"centerX\" id=\"qaG-WW-AsH\"/>\n                                                    <constraint firstItem=\"VoK-Ki-2Rj\" firstAttribute=\"leading\" secondItem=\"Vz4-x6-sYU\" secondAttribute=\"leading\" id=\"qzn-JG-xGH\"/>\n                                                    <constraint firstItem=\"C7o-uA-VQs\" firstAttribute=\"top\" secondItem=\"7UD-Yr-JLj\" secondAttribute=\"bottom\" constant=\"50\" id=\"rwg-P0-Slp\"/>\n                                                    <constraint firstItem=\"0xO-D6-9YS\" firstAttribute=\"top\" secondItem=\"C7o-uA-VQs\" secondAttribute=\"bottom\" constant=\"10\" id=\"shO-Cx-ha1\"/>\n                                                    <constraint firstItem=\"vQB-sU-MHh\" firstAttribute=\"leading\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" id=\"tX6-M2-Rfv\"/>\n                                                    <constraint firstItem=\"7UD-Yr-JLj\" firstAttribute=\"leading\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"leading\" constant=\"16\" id=\"twO-Db-YKk\"/>\n                                                    <constraint firstItem=\"vQB-sU-MHh\" firstAttribute=\"top\" secondItem=\"Dg7-JD-KCe\" secondAttribute=\"bottom\" constant=\"10\" id=\"upz-rx-WIE\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"hdT-oh-jh2\" secondAttribute=\"trailing\" constant=\"16\" id=\"uuj-Fz-0p1\"/>\n                                                    <constraint firstItem=\"HJ1-xC-jrF\" firstAttribute=\"leading\" secondItem=\"C7o-uA-VQs\" secondAttribute=\"leading\" id=\"xeb-aK-wnf\"/>\n                                                    <constraint firstItem=\"vQB-sU-MHh\" firstAttribute=\"centerX\" secondItem=\"7i6-27-s0b\" secondAttribute=\"centerX\" id=\"zX5-V5-ygY\"/>\n                                                    <constraint firstItem=\"C67-Hk-uo5\" firstAttribute=\"centerY\" secondItem=\"Jib-w2-7ZR\" secondAttribute=\"centerY\" id=\"zYc-X1-raj\"/>\n                                                </constraints>\n                                            </view>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"fba-Vc-gZu\" secondAttribute=\"trailing\" id=\"2xe-Bv-Q4M\"/>\n                                            <constraint firstItem=\"fba-Vc-gZu\" firstAttribute=\"top\" secondItem=\"oUY-3D-W7Q\" secondAttribute=\"top\" id=\"cHP-5g-EgU\"/>\n                                            <constraint firstItem=\"fba-Vc-gZu\" firstAttribute=\"leading\" secondItem=\"oUY-3D-W7Q\" secondAttribute=\"leading\" id=\"qcN-Al-8CZ\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <constraints>\n                                    <constraint firstItem=\"oUY-3D-W7Q\" firstAttribute=\"top\" secondItem=\"QnV-GI-PPD\" secondAttribute=\"top\" id=\"33n-1y-Dzu\"/>\n                                    <constraint firstItem=\"oUY-3D-W7Q\" firstAttribute=\"centerY\" secondItem=\"QnV-GI-PPD\" secondAttribute=\"centerY\" id=\"G66-aJ-p7V\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"oUY-3D-W7Q\" secondAttribute=\"trailing\" id=\"IZD-Bf-dO6\"/>\n                                    <constraint firstItem=\"oUY-3D-W7Q\" firstAttribute=\"centerX\" secondItem=\"QnV-GI-PPD\" secondAttribute=\"centerX\" id=\"Wug-9j-4FW\"/>\n                                    <constraint firstItem=\"oUY-3D-W7Q\" firstAttribute=\"leading\" secondItem=\"QnV-GI-PPD\" secondAttribute=\"leading\" id=\"ZTT-YK-s57\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"oUY-3D-W7Q\" secondAttribute=\"bottom\" id=\"moy-U8-W54\"/>\n                                </constraints>\n                                <connections>\n                                    <outlet property=\"delegate\" destination=\"Lea-J4-vz9\" id=\"nie-I5-Wl7\"/>\n                                </connections>\n                            </scrollView>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"QnV-GI-PPD\" firstAttribute=\"leading\" secondItem=\"hw1-81-rGu\" secondAttribute=\"leading\" id=\"CkY-hR-q4s\"/>\n                            <constraint firstItem=\"QnV-GI-PPD\" firstAttribute=\"top\" secondItem=\"hw1-81-rGu\" secondAttribute=\"topMargin\" id=\"V47-mA-Z9F\"/>\n                            <constraint firstItem=\"QnV-GI-PPD\" firstAttribute=\"bottom\" secondItem=\"hw1-81-rGu\" secondAttribute=\"bottomMargin\" id=\"cYM-fq-4LN\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"QnV-GI-PPD\" secondAttribute=\"trailing\" id=\"g3m-zK-0On\"/>\n                        </constraints>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <navigationItem key=\"navigationItem\" id=\"bEo-6e-SZa\"/>\n                    <size key=\"freeformSize\" width=\"414\" height=\"1896\"/>\n                    <connections>\n                        <outlet property=\"allowDarkThemeToggle\" destination=\"Rrm-os-OeC\" id=\"TyY-U1-8ZE\"/>\n                        <outlet property=\"apiKeyTextField\" destination=\"MFI-6t-zvq\" id=\"XDh-Vx-Kdm\"/>\n                        <outlet property=\"contentViewHeightConstraint\" destination=\"qRk-9c-wx1\" id=\"Axq-sS-r11\"/>\n                        <outlet property=\"customThemeLabel\" destination=\"VoK-Ki-2Rj\" id=\"V7q-aN-zaS\"/>\n                        <outlet property=\"customThemePicker\" destination=\"Fj3-qn-ARo\" id=\"r0P-8I-s7Z\"/>\n                        <outlet property=\"endointTextField\" destination=\"pKk-eq-dcv\" id=\"1ie-HD-cvd\"/>\n                        <outlet property=\"flushModeLabel\" destination=\"Szq-qJ-HE9\" id=\"TAQ-ba-9Gb\"/>\n                        <outlet property=\"inAppMessageDelegateSwitch\" destination=\"0xO-D6-9YS\" id=\"xvA-W2-X9a\"/>\n                        <outlet property=\"scrollView\" destination=\"QnV-GI-PPD\" id=\"il4-u4-hYZ\"/>\n                        <outlet property=\"sdkAuthSwitch\" destination=\"HJ1-xC-jrF\" id=\"h8y-j3-RZP\"/>\n                        <outlet property=\"sessionTimeoutTextField\" destination=\"hdT-oh-jh2\" id=\"U0V-jd-Yrg\"/>\n                        <outlet property=\"showSilentPushAlertsToggle\" destination=\"C7o-uA-VQs\" id=\"6Cy-zT-jsg\"/>\n                        <outlet property=\"urlDelegateSwitch\" destination=\"Jib-w2-7ZR\" id=\"RaP-YT-8FO\"/>\n                        <outlet property=\"versionLabel\" destination=\"wNO-pV-BHh\" id=\"glV-bd-RWW\"/>\n                        <outlet property=\"view\" destination=\"hw1-81-rGu\" id=\"o4F-SM-7co\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"P7V-Aw-QGP\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"255.07246376811597\" y=\"-2556.6964285714284\"/>\n        </scene>\n        <!--About View Controller-->\n        <scene sceneID=\"ZbJ-MQ-NpF\">\n            <objects>\n                <viewController storyboardIdentifier=\"About\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"eX1-wK-fWZ\" customClass=\"AboutViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"FEB-19-5cK\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xJc-s1-CeO\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ujp-2j-twa\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lrd-PT-Rh8\">\n                                <rect key=\"frame\" x=\"36\" y=\"144\" width=\"342\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JU4-l0-awE\">\n                                <rect key=\"frame\" x=\"36\" y=\"195\" width=\"342\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailingMargin\" secondItem=\"lrd-PT-Rh8\" secondAttribute=\"trailing\" constant=\"16\" id=\"4Hg-Jt-E2B\"/>\n                            <constraint firstItem=\"lrd-PT-Rh8\" firstAttribute=\"leading\" secondItem=\"Ujp-2j-twa\" secondAttribute=\"leadingMargin\" constant=\"16\" id=\"7kV-eV-Up2\"/>\n                            <constraint firstAttribute=\"trailingMargin\" secondItem=\"JU4-l0-awE\" secondAttribute=\"trailing\" constant=\"16\" id=\"EoG-Fn-Lbs\"/>\n                            <constraint firstItem=\"JU4-l0-awE\" firstAttribute=\"top\" secondItem=\"lrd-PT-Rh8\" secondAttribute=\"bottom\" constant=\"30\" id=\"FAD-Bn-g5F\"/>\n                            <constraint firstItem=\"lrd-PT-Rh8\" firstAttribute=\"top\" secondItem=\"FEB-19-5cK\" secondAttribute=\"bottom\" constant=\"100\" id=\"M3b-PP-96o\"/>\n                            <constraint firstItem=\"JU4-l0-awE\" firstAttribute=\"leading\" secondItem=\"Ujp-2j-twa\" secondAttribute=\"leadingMargin\" constant=\"16\" id=\"gq7-ML-s9X\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"apiEndpointLabel\" destination=\"JU4-l0-awE\" id=\"0v7-8K-4Th\"/>\n                        <outlet property=\"apiKeyLabel\" destination=\"lrd-PT-Rh8\" id=\"kaI-aF-Zcv\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ISI-rd-iHb\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1208.6956521739132\" y=\"-2557.3660714285711\"/>\n        </scene>\n        <!--User Attributes View Controller-->\n        <scene sceneID=\"xov-Ox-xcT\">\n            <objects>\n                <viewController storyboardIdentifier=\"Attributes\" modalPresentationStyle=\"currentContext\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"MCx-rX-d2z\" customClass=\"UserAttributesViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"WZV-PM-Zks\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"3xa-Oy-Maa\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"3R3-FX-bKd\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"12O-6S-6Cn\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"74\"/>\n                                <subviews>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"N2U-KN-For\" customClass=\"StopwatchButton\">\n                                        <rect key=\"frame\" x=\"16\" y=\"18\" width=\"382\" height=\"38\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"38\" id=\"OGs-u7-KY7\"/>\n                                        </constraints>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                        <state key=\"normal\" title=\"Set User Attributes\"/>\n                                        <connections>\n                                            <action selector=\"doneButtonTapped:\" destination=\"MCx-rX-d2z\" eventType=\"touchUpInside\" id=\"AMw-Y9-dUR\"/>\n                                        </connections>\n                                    </button>\n                                </subviews>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"N2U-KN-For\" secondAttribute=\"trailing\" constant=\"16\" id=\"EoZ-ZD-Dxh\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"74\" id=\"Upr-3a-t1M\"/>\n                                    <constraint firstItem=\"N2U-KN-For\" firstAttribute=\"centerY\" secondItem=\"12O-6S-6Cn\" secondAttribute=\"centerY\" id=\"ac0-ev-hIt\"/>\n                                    <constraint firstItem=\"N2U-KN-For\" firstAttribute=\"leading\" secondItem=\"12O-6S-6Cn\" secondAttribute=\"leading\" constant=\"16\" id=\"g1d-ZQ-NmS\"/>\n                                </constraints>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" keyboardDismissMode=\"onDrag\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsSelection=\"NO\" rowHeight=\"50\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tnF-3C-Pfo\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"74\" width=\"414\" height=\"788\"/>\n                                <color key=\"separatorColor\" red=\"0.66666666666666663\" green=\"0.66666666666666663\" blue=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <prototypes>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"text field cell\" id=\"3ou-J4-do1\" customClass=\"UserAttributeCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"50\" width=\"414\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"3ou-J4-do1\" id=\"sup-AH-Wbd\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Label\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hRy-dV-8oi\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"16\" width=\"122\" height=\"18\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"ve9-wh-pJm\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                </label>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"249\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"arf-rI-1IH\">\n                                                    <rect key=\"frame\" x=\"146\" y=\"8\" width=\"252\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" returnKeyType=\"next\"/>\n                                                    <connections>\n                                                        <outlet property=\"delegate\" destination=\"MCx-rX-d2z\" id=\"UN4-WY-kni\"/>\n                                                    </connections>\n                                                </textField>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"arf-rI-1IH\" firstAttribute=\"leading\" secondItem=\"hRy-dV-8oi\" secondAttribute=\"trailing\" constant=\"8\" id=\"EMo-bt-rsB\"/>\n                                                <constraint firstItem=\"hRy-dV-8oi\" firstAttribute=\"leading\" secondItem=\"sup-AH-Wbd\" secondAttribute=\"leading\" constant=\"16\" id=\"UxX-PI-dZD\"/>\n                                                <constraint firstItem=\"hRy-dV-8oi\" firstAttribute=\"centerY\" secondItem=\"sup-AH-Wbd\" secondAttribute=\"centerY\" id=\"k0k-5F-JqL\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"arf-rI-1IH\" secondAttribute=\"trailing\" constant=\"16\" id=\"oDM-6i-0za\"/>\n                                                <constraint firstItem=\"hRy-dV-8oi\" firstAttribute=\"centerY\" secondItem=\"arf-rI-1IH\" secondAttribute=\"centerY\" id=\"s5T-wo-Jqs\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"attributeNameLabel\" destination=\"hRy-dV-8oi\" id=\"jPX-8c-DIa\"/>\n                                            <outlet property=\"attributeTextField\" destination=\"arf-rI-1IH\" id=\"bqW-cV-5bc\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"subscription cell\" id=\"NiY-jI-M6X\" customClass=\"UserAttributeCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"100\" width=\"414\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"NiY-jI-M6X\" id=\"3yd-TG-dnh\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Label\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"c9X-e3-dMF\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"16\" width=\"122\" height=\"18\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"NDj-2r-TRq\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"bar\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BN2-RQ-eY4\" customClass=\"StopwatchSegmentedControl\">\n                                                    <rect key=\"frame\" x=\"146\" y=\"9.6666666666666643\" width=\"252\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"U\"/>\n                                                        <segment title=\"S\"/>\n                                                        <segment title=\"O\"/>\n                                                    </segments>\n                                                    <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <connections>\n                                                        <action selector=\"setSubscriptionState:\" destination=\"MCx-rX-d2z\" eventType=\"valueChanged\" id=\"EKz-o9-cQc\"/>\n                                                    </connections>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"c9X-e3-dMF\" firstAttribute=\"leading\" secondItem=\"3yd-TG-dnh\" secondAttribute=\"leading\" constant=\"16\" id=\"1YC-6e-IHX\"/>\n                                                <constraint firstItem=\"c9X-e3-dMF\" firstAttribute=\"centerY\" secondItem=\"BN2-RQ-eY4\" secondAttribute=\"centerY\" id=\"Fnh-vC-xzk\"/>\n                                                <constraint firstItem=\"c9X-e3-dMF\" firstAttribute=\"centerY\" secondItem=\"3yd-TG-dnh\" secondAttribute=\"centerY\" id=\"Xbg-rG-vOM\"/>\n                                                <constraint firstItem=\"BN2-RQ-eY4\" firstAttribute=\"leading\" secondItem=\"c9X-e3-dMF\" secondAttribute=\"trailing\" constant=\"8\" id=\"Xyw-bh-SXT\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"BN2-RQ-eY4\" secondAttribute=\"trailing\" constant=\"16\" id=\"ZJd-gT-H7j\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"attributeNameLabel\" destination=\"c9X-e3-dMF\" id=\"jGS-X0-5GN\"/>\n                                            <outlet property=\"attributeSegmentedControl\" destination=\"BN2-RQ-eY4\" id=\"nok-Tt-w4s\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"CustomAttributeCell\" id=\"VZb-K6-UEu\" customClass=\"UserCustomAttributeCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"150\" width=\"414\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"VZb-K6-UEu\" id=\"pIu-TO-mOD\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"249\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Type value here\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vS8-vz-sf7\">\n                                                    <rect key=\"frame\" x=\"149\" y=\"8\" width=\"249\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" returnKeyType=\"next\"/>\n                                                    <connections>\n                                                        <outlet property=\"delegate\" destination=\"VZb-K6-UEu\" id=\"hic-wE-lUy\"/>\n                                                    </connections>\n                                                </textField>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"249\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Type key here\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"967-r5-tff\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"8\" width=\"122\" height=\"34\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"43h-ak-Umc\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" returnKeyType=\"next\"/>\n                                                    <connections>\n                                                        <outlet property=\"delegate\" destination=\"VZb-K6-UEu\" id=\"rCh-MZ-W27\"/>\n                                                    </connections>\n                                                </textField>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"vS8-vz-sf7\" firstAttribute=\"leading\" secondItem=\"967-r5-tff\" secondAttribute=\"trailing\" constant=\"12\" id=\"6jc-cq-WWv\"/>\n                                                <constraint firstItem=\"vS8-vz-sf7\" firstAttribute=\"centerY\" secondItem=\"967-r5-tff\" secondAttribute=\"centerY\" id=\"8XB-Ur-jGH\"/>\n                                                <constraint firstItem=\"967-r5-tff\" firstAttribute=\"centerY\" secondItem=\"pIu-TO-mOD\" secondAttribute=\"centerY\" id=\"F73-mz-Tdk\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"vS8-vz-sf7\" secondAttribute=\"trailing\" constant=\"16\" id=\"Urg-8w-XZp\"/>\n                                                <constraint firstItem=\"967-r5-tff\" firstAttribute=\"leading\" secondItem=\"pIu-TO-mOD\" secondAttribute=\"leading\" constant=\"15\" id=\"e5U-Yg-37y\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"keyTextField\" destination=\"967-r5-tff\" id=\"f9K-94-Uwm\"/>\n                                            <outlet property=\"valueTextField\" destination=\"vS8-vz-sf7\" id=\"CeW-sA-aPN\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"SubscriptionGroupCell\" id=\"t9y-6H-oJd\" customClass=\"UserSubscriptionGroupCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"200\" width=\"414\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"t9y-6H-oJd\" id=\"hK8-Gk-Rgc\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"249\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Type group ID here\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"uSl-CE-hJJ\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"8\" width=\"200\" height=\"34\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"200\" id=\"4NA-fi-geC\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" returnKeyType=\"next\"/>\n                                                    <connections>\n                                                        <outlet property=\"delegate\" destination=\"t9y-6H-oJd\" id=\"GBc-Mv-P9G\"/>\n                                                    </connections>\n                                                </textField>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"B0G-hT-D2Y\" customClass=\"StopwatchSegmentedControl\">\n                                                    <rect key=\"frame\" x=\"227\" y=\"9.6666666666666643\" width=\"171\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"S\"/>\n                                                        <segment title=\"U\"/>\n                                                    </segments>\n                                                    <connections>\n                                                        <action selector=\"statusSegmentControlSelectionDidChange:\" destination=\"t9y-6H-oJd\" eventType=\"valueChanged\" id=\"qVU-7N-t8x\"/>\n                                                    </connections>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"B0G-hT-D2Y\" secondAttribute=\"trailing\" constant=\"16\" id=\"F0B-dy-sVX\"/>\n                                                <constraint firstItem=\"B0G-hT-D2Y\" firstAttribute=\"centerY\" secondItem=\"uSl-CE-hJJ\" secondAttribute=\"centerY\" id=\"RWy-RD-IIP\"/>\n                                                <constraint firstItem=\"uSl-CE-hJJ\" firstAttribute=\"leading\" secondItem=\"hK8-Gk-Rgc\" secondAttribute=\"leading\" constant=\"15\" id=\"YTf-nn-ZsE\"/>\n                                                <constraint firstItem=\"uSl-CE-hJJ\" firstAttribute=\"centerY\" secondItem=\"hK8-Gk-Rgc\" secondAttribute=\"centerY\" id=\"pKE-vZ-LNc\"/>\n                                                <constraint firstItem=\"B0G-hT-D2Y\" firstAttribute=\"leading\" secondItem=\"uSl-CE-hJJ\" secondAttribute=\"trailing\" constant=\"12\" id=\"uUa-tC-c5h\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"groupIdTextField\" destination=\"uSl-CE-hJJ\" id=\"5Hj-kz-yPI\"/>\n                                            <outlet property=\"statusSegmentControl\" destination=\"B0G-hT-D2Y\" id=\"k7f-Wt-5jy\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"AddAttributeCell\" id=\"T2H-e8-Dhz\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"250\" width=\"414\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"T2H-e8-Dhz\" id=\"tQO-ET-CRy\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"aLk-Bm-97U\" customClass=\"StopwatchButton\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"6\" width=\"382\" height=\"38\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"38\" id=\"qtM-vj-by0\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                    <state key=\"normal\" title=\"Add Custom Attribute\"/>\n                                                    <connections>\n                                                        <action selector=\"addCustomAttributeTapped:\" destination=\"MCx-rX-d2z\" eventType=\"touchUpInside\" id=\"zjs-gl-oAk\"/>\n                                                    </connections>\n                                                </button>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"aLk-Bm-97U\" firstAttribute=\"centerY\" secondItem=\"tQO-ET-CRy\" secondAttribute=\"centerY\" id=\"Xnc-3i-9dr\"/>\n                                                <constraint firstItem=\"aLk-Bm-97U\" firstAttribute=\"leading\" secondItem=\"tQO-ET-CRy\" secondAttribute=\"leading\" constant=\"16\" id=\"eb4-mW-z6h\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"aLk-Bm-97U\" secondAttribute=\"trailing\" constant=\"16\" id=\"kF4-Bs-0tw\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"LocationAttributeCell\" id=\"Xe9-Sc-PlO\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"300\" width=\"414\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Xe9-Sc-PlO\" id=\"nWC-NQ-twS\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"euG-Mj-tls\" customClass=\"StopwatchButton\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"6\" width=\"382\" height=\"38\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"38\" id=\"ZJP-fJ-tDg\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                    <state key=\"normal\" title=\"Add or Remove Attribute\"/>\n                                                    <connections>\n                                                        <action selector=\"locationCustomAttributeTapped:\" destination=\"MCx-rX-d2z\" eventType=\"touchUpInside\" id=\"3J8-88-T5o\"/>\n                                                    </connections>\n                                                </button>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"euG-Mj-tls\" secondAttribute=\"trailing\" constant=\"16\" id=\"1tQ-bd-fae\"/>\n                                                <constraint firstItem=\"euG-Mj-tls\" firstAttribute=\"centerY\" secondItem=\"nWC-NQ-twS\" secondAttribute=\"centerY\" id=\"CAR-zP-9wQ\"/>\n                                                <constraint firstItem=\"euG-Mj-tls\" firstAttribute=\"leading\" secondItem=\"nWC-NQ-twS\" secondAttribute=\"leading\" constant=\"16\" id=\"PjU-6N-a3R\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"AddSubscriptionGroupCell\" id=\"LuW-DG-7Ba\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"350\" width=\"414\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"LuW-DG-7Ba\" id=\"VXA-vu-oux\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"QLO-Ww-mpn\" customClass=\"StopwatchButton\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"6\" width=\"382\" height=\"38\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"38\" id=\"Ugs-cL-GWq\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                    <state key=\"normal\" title=\"Add Subscription Group\"/>\n                                                    <connections>\n                                                        <action selector=\"addSubscriptionGroupTapped:\" destination=\"MCx-rX-d2z\" eventType=\"touchUpInside\" id=\"mWQ-2X-xwU\"/>\n                                                    </connections>\n                                                </button>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"QLO-Ww-mpn\" firstAttribute=\"centerY\" secondItem=\"VXA-vu-oux\" secondAttribute=\"centerY\" id=\"K7t-hL-RXN\"/>\n                                                <constraint firstItem=\"QLO-Ww-mpn\" firstAttribute=\"leading\" secondItem=\"VXA-vu-oux\" secondAttribute=\"leading\" constant=\"16\" id=\"ULG-yQ-z5e\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"QLO-Ww-mpn\" secondAttribute=\"trailing\" constant=\"16\" id=\"hmf-fe-hSt\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"MCx-rX-d2z\" id=\"voE-4W-AvY\"/>\n                                    <outlet property=\"delegate\" destination=\"MCx-rX-d2z\" id=\"ukp-Us-q0p\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"tnF-3C-Pfo\" firstAttribute=\"top\" secondItem=\"12O-6S-6Cn\" secondAttribute=\"bottom\" id=\"AJP-pe-20u\"/>\n                            <constraint firstItem=\"tnF-3C-Pfo\" firstAttribute=\"leading\" secondItem=\"3R3-FX-bKd\" secondAttribute=\"leading\" id=\"WRD-ll-uqf\"/>\n                            <constraint firstAttribute=\"bottomMargin\" secondItem=\"tnF-3C-Pfo\" secondAttribute=\"bottom\" id=\"Ygq-Ve-hBx\"/>\n                            <constraint firstItem=\"tnF-3C-Pfo\" firstAttribute=\"centerX\" secondItem=\"3R3-FX-bKd\" secondAttribute=\"centerX\" id=\"edn-ez-IcM\"/>\n                            <constraint firstItem=\"12O-6S-6Cn\" firstAttribute=\"top\" secondItem=\"3R3-FX-bKd\" secondAttribute=\"top\" id=\"fBE-5a-Rbw\"/>\n                            <constraint firstItem=\"12O-6S-6Cn\" firstAttribute=\"leading\" secondItem=\"3R3-FX-bKd\" secondAttribute=\"leading\" id=\"k5B-gP-Zyu\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"12O-6S-6Cn\" secondAttribute=\"trailing\" id=\"xvi-q7-3iA\"/>\n                        </constraints>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <connections>\n                        <outlet property=\"attributesTableView\" destination=\"tnF-3C-Pfo\" id=\"Xot-dF-u9G\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"GG3-KO-e3v\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-4565.6000000000004\" y=\"-2551.5742128935535\"/>\n        </scene>\n        <!--User Attributes Array View Controller-->\n        <scene sceneID=\"vIs-D3-3a4\">\n            <objects>\n                <viewController storyboardIdentifier=\"Arrays\" automaticallyAdjustsScrollViewInsets=\"NO\" modalPresentationStyle=\"currentContext\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"btP-Yl-eqq\" customClass=\"UserAttributesArrayViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Jle-d1-me8\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"Q7u-mG-dBt\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"aQX-H6-T8P\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7yD-Wx-iG1\">\n                                <rect key=\"frame\" x=\"16\" y=\"247\" width=\"382\" height=\"1\"/>\n                                <color key=\"backgroundColor\" red=\"0.8666666666666667\" green=\"0.8666666666666667\" blue=\"0.8666666666666667\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"1\" id=\"3x5-d3-WoW\"/>\n                                </constraints>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"efy-Cq-e29\">\n                                <rect key=\"frame\" x=\"16\" y=\"346\" width=\"382\" height=\"1\"/>\n                                <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"1\" id=\"nVu-iy-3kk\"/>\n                                </constraints>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FhI-b9-LZj\">\n                                <rect key=\"frame\" x=\"16\" y=\"405\" width=\"382\" height=\"1\"/>\n                                <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"1\" id=\"wJR-G0-d42\"/>\n                                </constraints>\n                            </view>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Value\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LQI-3d-mVf\">\n                                <rect key=\"frame\" x=\"16\" y=\"146.66666666666666\" width=\"42\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Custom Attribute\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jBB-mO-44f\">\n                                <rect key=\"frame\" x=\"16\" y=\"52\" width=\"382\" height=\"22\"/>\n                                <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Key\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"N5u-vH-Gjt\">\n                                <rect key=\"frame\" x=\"16\" y=\"92.666666666666671\" width=\"28.666666666666671\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" adjustsImageWhenHighlighted=\"NO\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GfF-ZQ-WhW\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"298\" y=\"194\" width=\"100\" height=\"38\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"38\" id=\"8Bh-nV-Kzm\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"100\" id=\"Bjj-ER-2oP\"/>\n                                </constraints>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                <state key=\"normal\" title=\"Remove\">\n                                    <color key=\"titleColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"removeArrayValue:\" destination=\"btP-Yl-eqq\" eventType=\"touchUpInside\" id=\"Xa9-FR-Pfa\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VXO-Ci-Wfc\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"298\" y=\"357\" width=\"100\" height=\"38\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                <color key=\"tintColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                <state key=\"normal\" title=\"+\">\n                                    <color key=\"titleColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"addObject:\" destination=\"btP-Yl-eqq\" eventType=\"touchUpInside\" id=\"ZWN-su-15z\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" adjustsImageWhenHighlighted=\"NO\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Zkk-Rw-4Hu\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"194\" width=\"100\" height=\"38\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                <state key=\"normal\" title=\"Add\">\n                                    <color key=\"titleColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"addArrayValue:\" destination=\"btP-Yl-eqq\" eventType=\"touchUpInside\" id=\"Ufz-Wy-uYl\"/>\n                                </connections>\n                            </button>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" keyboardDismissMode=\"onDrag\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsSelection=\"NO\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hS1-jj-FcO\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"406\" width=\"414\" height=\"490\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"attributeValueCell\" rowHeight=\"44\" id=\"Z4Y-wV-Zqx\" customClass=\"UserAttributeCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"50\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Z4Y-wV-Zqx\" id=\"IX8-7E-mGa\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oCU-Na-UyI\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"13\" width=\"38\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Jvg-U3-zI4\">\n                                                    <rect key=\"frame\" x=\"134\" y=\"5\" width=\"264\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                                    <connections>\n                                                        <action selector=\"addValue:\" destination=\"btP-Yl-eqq\" eventType=\"editingDidEnd\" id=\"AHO-i6-2WV\"/>\n                                                        <action selector=\"hideKeyboard:\" destination=\"btP-Yl-eqq\" eventType=\"editingDidEndOnExit\" id=\"N6F-Yb-iaa\"/>\n                                                        <outlet property=\"delegate\" destination=\"btP-Yl-eqq\" id=\"NYI-1R-yxc\"/>\n                                                    </connections>\n                                                </textField>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"Jvg-U3-zI4\" secondAttribute=\"trailing\" constant=\"16\" id=\"NVf-ZC-AjO\"/>\n                                                <constraint firstItem=\"oCU-Na-UyI\" firstAttribute=\"centerY\" secondItem=\"IX8-7E-mGa\" secondAttribute=\"centerY\" id=\"YA7-Ou-f3l\"/>\n                                                <constraint firstItem=\"Jvg-U3-zI4\" firstAttribute=\"leading\" secondItem=\"oCU-Na-UyI\" secondAttribute=\"trailing\" constant=\"80\" id=\"dw9-oP-ZP5\"/>\n                                                <constraint firstItem=\"oCU-Na-UyI\" firstAttribute=\"centerY\" secondItem=\"Jvg-U3-zI4\" secondAttribute=\"centerY\" id=\"oJQ-JK-g5u\"/>\n                                                <constraint firstItem=\"oCU-Na-UyI\" firstAttribute=\"leading\" secondItem=\"IX8-7E-mGa\" secondAttribute=\"leading\" constant=\"16\" id=\"rnz-L9-4aD\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"attributeNameLabel\" destination=\"oCU-Na-UyI\" id=\"fvN-Dl-Ts0\"/>\n                                            <outlet property=\"attributeTextField\" destination=\"Jvg-U3-zI4\" id=\"lsP-8s-K4l\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"btP-Yl-eqq\" id=\"vCH-qL-UuU\"/>\n                                    <outlet property=\"delegate\" destination=\"btP-Yl-eqq\" id=\"anS-3w-qmo\"/>\n                                </connections>\n                            </tableView>\n                            <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" springLoaded=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Dto-Lp-2n1\" customClass=\"StopwatchSegmentedControl\">\n                                <rect key=\"frame\" x=\"248\" y=\"298\" width=\"150\" height=\"39\"/>\n                                <segments>\n                                    <segment title=\"Values\"/>\n                                    <segment title=\"Nil\"/>\n                                </segments>\n                                <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <connections>\n                                    <action selector=\"setToSegmentedControlChanged:\" destination=\"btP-Yl-eqq\" eventType=\"valueChanged\" id=\"KcC-AL-PZ8\"/>\n                                </connections>\n                            </segmentedControl>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"Custom Array\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lJ5-ru-hE2\">\n                                <rect key=\"frame\" x=\"128\" y=\"230\" width=\"120.5\" height=\"22\"/>\n                                <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ntW-iA-kku\">\n                                <rect key=\"frame\" x=\"124.66666666666666\" y=\"86\" width=\"273.33333333333337\" height=\"34\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                <connections>\n                                    <action selector=\"hideKeyboard:\" destination=\"btP-Yl-eqq\" eventType=\"editingDidEndOnExit\" id=\"bfC-7E-Aab\"/>\n                                    <outlet property=\"delegate\" destination=\"btP-Yl-eqq\" id=\"5Wq-hJ-T1L\"/>\n                                </connections>\n                            </textField>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" selected=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Xmn-If-AR1\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"357\" width=\"100\" height=\"38\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                <color key=\"tintColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                <state key=\"normal\" title=\"Edit\">\n                                    <color key=\"titleColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"removeArrayValueRows:\" destination=\"btP-Yl-eqq\" eventType=\"touchUpInside\" id=\"zEC-Fi-zpc\"/>\n                                </connections>\n                            </button>\n                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"leE-0c-Z1g\">\n                                <rect key=\"frame\" x=\"124.66666666666666\" y=\"140\" width=\"273.33333333333337\" height=\"34\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                <connections>\n                                    <action selector=\"hideKeyboard:\" destination=\"btP-Yl-eqq\" eventType=\"editingDidEndOnExit\" id=\"BdH-NB-vlt\"/>\n                                    <outlet property=\"delegate\" destination=\"btP-Yl-eqq\" id=\"Wj8-5h-AcC\"/>\n                                </connections>\n                            </textField>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" adjustsImageWhenHighlighted=\"NO\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"E1R-hI-Oze\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"298\" width=\"150\" height=\"38\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"150\" id=\"HDl-z1-uKO\"/>\n                                </constraints>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                <state key=\"normal\" title=\"Set Array to\">\n                                    <color key=\"titleColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"setArrayValues:\" destination=\"btP-Yl-eqq\" eventType=\"touchUpInside\" id=\"xoT-94-r4J\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <gestureRecognizers/>\n                        <constraints>\n                            <constraint firstItem=\"E1R-hI-Oze\" firstAttribute=\"centerY\" secondItem=\"Dto-Lp-2n1\" secondAttribute=\"centerY\" id=\"18u-2P-oMT\"/>\n                            <constraint firstItem=\"Zkk-Rw-4Hu\" firstAttribute=\"centerY\" secondItem=\"GfF-ZQ-WhW\" secondAttribute=\"centerY\" id=\"46x-ir-uB0\"/>\n                            <constraint firstItem=\"Xmn-If-AR1\" firstAttribute=\"height\" secondItem=\"Zkk-Rw-4Hu\" secondAttribute=\"height\" id=\"4gO-Rb-Acg\"/>\n                            <constraint firstItem=\"E1R-hI-Oze\" firstAttribute=\"top\" secondItem=\"lJ5-ru-hE2\" secondAttribute=\"bottom\" constant=\"14\" id=\"5mX-yU-oec\"/>\n                            <constraint firstItem=\"hS1-jj-FcO\" firstAttribute=\"top\" secondItem=\"FhI-b9-LZj\" secondAttribute=\"bottom\" id=\"8hW-Jx-jT8\"/>\n                            <constraint firstItem=\"GfF-ZQ-WhW\" firstAttribute=\"trailing\" secondItem=\"leE-0c-Z1g\" secondAttribute=\"trailing\" id=\"Apx-UU-aek\"/>\n                            <constraint firstItem=\"7yD-Wx-iG1\" firstAttribute=\"leading\" secondItem=\"aQX-H6-T8P\" secondAttribute=\"leading\" constant=\"16\" id=\"Dz9-2x-Dpw\"/>\n                            <constraint firstItem=\"leE-0c-Z1g\" firstAttribute=\"leading\" secondItem=\"ntW-iA-kku\" secondAttribute=\"leading\" id=\"Dzu-9S-RmR\"/>\n                            <constraint firstItem=\"VXO-Ci-Wfc\" firstAttribute=\"width\" secondItem=\"Xmn-If-AR1\" secondAttribute=\"width\" id=\"EJh-ox-c7a\"/>\n                            <constraint firstItem=\"E1R-hI-Oze\" firstAttribute=\"height\" secondItem=\"Xmn-If-AR1\" secondAttribute=\"height\" id=\"F48-wh-L82\"/>\n                            <constraint firstItem=\"Dto-Lp-2n1\" firstAttribute=\"height\" secondItem=\"E1R-hI-Oze\" secondAttribute=\"height\" id=\"GT3-MA-VhR\"/>\n                            <constraint firstItem=\"Dto-Lp-2n1\" firstAttribute=\"trailing\" secondItem=\"ntW-iA-kku\" secondAttribute=\"trailing\" id=\"IHS-qQ-Dbx\"/>\n                            <constraint firstItem=\"lJ5-ru-hE2\" firstAttribute=\"top\" secondItem=\"GfF-ZQ-WhW\" secondAttribute=\"bottom\" constant=\"30\" id=\"JTb-hp-Khx\"/>\n                            <constraint firstItem=\"ntW-iA-kku\" firstAttribute=\"top\" secondItem=\"jBB-mO-44f\" secondAttribute=\"bottom\" constant=\"12\" id=\"Mbn-Du-H4x\"/>\n                            <constraint firstItem=\"Xmn-If-AR1\" firstAttribute=\"leading\" secondItem=\"Zkk-Rw-4Hu\" secondAttribute=\"leading\" id=\"OPm-da-c2u\"/>\n                            <constraint firstItem=\"jBB-mO-44f\" firstAttribute=\"centerX\" secondItem=\"aQX-H6-T8P\" secondAttribute=\"centerX\" id=\"QVC-Jz-4ic\"/>\n                            <constraint firstItem=\"Zkk-Rw-4Hu\" firstAttribute=\"leading\" secondItem=\"LQI-3d-mVf\" secondAttribute=\"leading\" id=\"RHU-eR-vG1\"/>\n                            <constraint firstItem=\"Xmn-If-AR1\" firstAttribute=\"width\" secondItem=\"Zkk-Rw-4Hu\" secondAttribute=\"width\" id=\"U0v-bT-lgv\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"hS1-jj-FcO\" secondAttribute=\"trailing\" id=\"U7K-fi-emd\"/>\n                            <constraint firstItem=\"Xmn-If-AR1\" firstAttribute=\"top\" secondItem=\"efy-Cq-e29\" secondAttribute=\"bottom\" constant=\"10\" id=\"UW1-En-kIY\"/>\n                            <constraint firstItem=\"Dto-Lp-2n1\" firstAttribute=\"width\" secondItem=\"E1R-hI-Oze\" secondAttribute=\"width\" id=\"Usd-cc-XwO\"/>\n                            <constraint firstItem=\"jBB-mO-44f\" firstAttribute=\"leading\" secondItem=\"aQX-H6-T8P\" secondAttribute=\"leading\" constant=\"16\" id=\"Via-n1-Hkh\"/>\n                            <constraint firstItem=\"LQI-3d-mVf\" firstAttribute=\"leading\" secondItem=\"N5u-vH-Gjt\" secondAttribute=\"leading\" id=\"VjG-5M-Ofc\"/>\n                            <constraint firstItem=\"E1R-hI-Oze\" firstAttribute=\"leading\" secondItem=\"Xmn-If-AR1\" secondAttribute=\"leading\" id=\"X89-08-H0d\"/>\n                            <constraint firstItem=\"ntW-iA-kku\" firstAttribute=\"leading\" secondItem=\"N5u-vH-Gjt\" secondAttribute=\"trailing\" constant=\"80\" id=\"YCU-Kb-Pal\"/>\n                            <constraint firstItem=\"jBB-mO-44f\" firstAttribute=\"top\" secondItem=\"Jle-d1-me8\" secondAttribute=\"bottom\" constant=\"8\" id=\"blY-DL-VP6\"/>\n                            <constraint firstItem=\"FhI-b9-LZj\" firstAttribute=\"leading\" secondItem=\"aQX-H6-T8P\" secondAttribute=\"leading\" constant=\"16\" id=\"cGp-ah-iLR\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"FhI-b9-LZj\" secondAttribute=\"trailing\" constant=\"16\" id=\"cgd-tG-XLG\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"7yD-Wx-iG1\" secondAttribute=\"trailing\" constant=\"16\" id=\"dBq-dj-1AE\"/>\n                            <constraint firstItem=\"efy-Cq-e29\" firstAttribute=\"leading\" secondItem=\"aQX-H6-T8P\" secondAttribute=\"leading\" constant=\"16\" id=\"dFH-yi-eSP\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"ntW-iA-kku\" secondAttribute=\"trailing\" constant=\"16\" id=\"fO5-7C-mlK\"/>\n                            <constraint firstItem=\"FhI-b9-LZj\" firstAttribute=\"top\" secondItem=\"Xmn-If-AR1\" secondAttribute=\"bottom\" constant=\"10\" id=\"g9c-nq-hta\"/>\n                            <constraint firstItem=\"lJ5-ru-hE2\" firstAttribute=\"centerX\" secondItem=\"aQX-H6-T8P\" secondAttribute=\"centerX\" id=\"gas-j5-O1G\"/>\n                            <constraint firstItem=\"GfF-ZQ-WhW\" firstAttribute=\"top\" secondItem=\"leE-0c-Z1g\" secondAttribute=\"bottom\" constant=\"20\" id=\"ibH-E8-4nE\"/>\n                            <constraint firstItem=\"leE-0c-Z1g\" firstAttribute=\"trailing\" secondItem=\"ntW-iA-kku\" secondAttribute=\"trailing\" id=\"iiY-O1-rj5\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"efy-Cq-e29\" secondAttribute=\"trailing\" constant=\"16\" id=\"jIN-G1-Heg\"/>\n                            <constraint firstItem=\"ntW-iA-kku\" firstAttribute=\"centerY\" secondItem=\"N5u-vH-Gjt\" secondAttribute=\"centerY\" id=\"lMC-QJ-brE\"/>\n                            <constraint firstItem=\"Zkk-Rw-4Hu\" firstAttribute=\"height\" secondItem=\"GfF-ZQ-WhW\" secondAttribute=\"height\" id=\"n57-7J-vvX\"/>\n                            <constraint firstItem=\"VXO-Ci-Wfc\" firstAttribute=\"trailing\" secondItem=\"GfF-ZQ-WhW\" secondAttribute=\"trailing\" id=\"n6T-Bg-ago\"/>\n                            <constraint firstItem=\"Zkk-Rw-4Hu\" firstAttribute=\"width\" secondItem=\"GfF-ZQ-WhW\" secondAttribute=\"width\" id=\"nmj-gl-w8z\"/>\n                            <constraint firstItem=\"leE-0c-Z1g\" firstAttribute=\"top\" secondItem=\"ntW-iA-kku\" secondAttribute=\"bottom\" constant=\"20\" id=\"p6T-8d-Ssc\"/>\n                            <constraint firstItem=\"LQI-3d-mVf\" firstAttribute=\"centerY\" secondItem=\"leE-0c-Z1g\" secondAttribute=\"centerY\" id=\"q3I-VE-dds\"/>\n                            <constraint firstItem=\"efy-Cq-e29\" firstAttribute=\"top\" secondItem=\"E1R-hI-Oze\" secondAttribute=\"bottom\" constant=\"10\" id=\"sIS-d6-zr6\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"hS1-jj-FcO\" secondAttribute=\"bottom\" id=\"tAc-Ui-YWm\"/>\n                            <constraint firstItem=\"7yD-Wx-iG1\" firstAttribute=\"top\" secondItem=\"Zkk-Rw-4Hu\" secondAttribute=\"bottom\" constant=\"15\" id=\"u0y-UQ-LBW\"/>\n                            <constraint firstItem=\"N5u-vH-Gjt\" firstAttribute=\"leading\" secondItem=\"aQX-H6-T8P\" secondAttribute=\"leading\" constant=\"16\" id=\"uhk-BE-sGC\"/>\n                            <constraint firstItem=\"VXO-Ci-Wfc\" firstAttribute=\"centerY\" secondItem=\"Xmn-If-AR1\" secondAttribute=\"centerY\" id=\"wln-yD-oOs\"/>\n                            <constraint firstItem=\"hS1-jj-FcO\" firstAttribute=\"leading\" secondItem=\"aQX-H6-T8P\" secondAttribute=\"leading\" id=\"xPw-Oc-Gho\"/>\n                            <constraint firstItem=\"VXO-Ci-Wfc\" firstAttribute=\"height\" secondItem=\"Xmn-If-AR1\" secondAttribute=\"height\" id=\"y51-cg-CT2\"/>\n                        </constraints>\n                        <connections>\n                            <outletCollection property=\"gestureRecognizers\" destination=\"rxW-dA-V5i\" appends=\"YES\" id=\"TZh-ke-2gB\"/>\n                        </connections>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <connections>\n                        <outlet property=\"addValuesButton\" destination=\"VXO-Ci-Wfc\" id=\"Tid-Fs-LWc\"/>\n                        <outlet property=\"attributeKeyTextField\" destination=\"ntW-iA-kku\" id=\"UcX-pM-Fw7\"/>\n                        <outlet property=\"attributeValueTextField\" destination=\"leE-0c-Z1g\" id=\"XmT-MV-RWf\"/>\n                        <outlet property=\"removeValuesButton\" destination=\"Xmn-If-AR1\" id=\"3s7-Yq-8fg\"/>\n                        <outlet property=\"setToSegmentedControl\" destination=\"Dto-Lp-2n1\" id=\"hyW-Jg-QJq\"/>\n                        <outlet property=\"tableView\" destination=\"hS1-jj-FcO\" id=\"Q8Q-NK-7A2\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"D1e-09-Wh5\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <tapGestureRecognizer cancelsTouchesInView=\"NO\" delaysTouchesEnded=\"NO\" id=\"rxW-dA-V5i\">\n                    <connections>\n                        <action selector=\"hideKeyboard:\" destination=\"btP-Yl-eqq\" id=\"eQM-ek-UVx\"/>\n                    </connections>\n                </tapGestureRecognizer>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-4567.1999999999998\" y=\"-1880.5097451274364\"/>\n        </scene>\n        <!--Location Custom Attribute View Controller-->\n        <scene sceneID=\"49o-Yk-YUc\">\n            <objects>\n                <viewController storyboardIdentifier=\"LocationCustomAttributeViewController\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"hrH-ZO-neg\" customClass=\"LocationCustomAttributeViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"o3f-Af-uYr\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"AUh-fJ-PPL\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"A3n-84-ecv\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oWc-Qy-m8G\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"280\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Location Custom Attribute\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5ca-l9-5T3\">\n                                        <rect key=\"frame\" x=\"93.666666666666686\" y=\"10\" width=\"227\" height=\"22\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Evq-oF-j7T\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"40\" width=\"414\" height=\"57\"/>\n                                        <subviews>\n                                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Key\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"slC-eJ-Q3f\">\n                                                <rect key=\"frame\" x=\"8.0000000000000018\" y=\"18.666666666666671\" width=\"28.666666666666671\" height=\"20\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                <nil key=\"highlightedColor\"/>\n                                            </label>\n                                            <textField opaque=\"NO\" clipsSubviews=\"YES\" tag=\"1\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CAd-hg-AaR\">\n                                                <rect key=\"frame\" x=\"116.66666666666669\" y=\"11.666666666666671\" width=\"289\" height=\"34\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" returnKeyType=\"next\"/>\n                                                <connections>\n                                                    <outlet property=\"delegate\" destination=\"hrH-ZO-neg\" id=\"sl0-EQ-rah\"/>\n                                                </connections>\n                                            </textField>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"slC-eJ-Q3f\" firstAttribute=\"leading\" secondItem=\"Evq-oF-j7T\" secondAttribute=\"leading\" constant=\"8\" id=\"0wx-WJ-Gtn\"/>\n                                            <constraint firstItem=\"slC-eJ-Q3f\" firstAttribute=\"centerY\" secondItem=\"Evq-oF-j7T\" secondAttribute=\"centerY\" id=\"4Zf-0P-0sR\"/>\n                                            <constraint firstAttribute=\"height\" constant=\"57\" id=\"959-SI-bhR\"/>\n                                            <constraint firstItem=\"CAd-hg-AaR\" firstAttribute=\"centerY\" secondItem=\"slC-eJ-Q3f\" secondAttribute=\"centerY\" id=\"Xtq-iD-tnB\"/>\n                                            <constraint firstItem=\"CAd-hg-AaR\" firstAttribute=\"leading\" secondItem=\"slC-eJ-Q3f\" secondAttribute=\"trailing\" constant=\"80\" id=\"kbQ-uR-vly\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"CAd-hg-AaR\" secondAttribute=\"trailing\" constant=\"8.5\" id=\"kxx-WO-ZYq\"/>\n                                        </constraints>\n                                    </view>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"coR-NG-thX\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"97\" width=\"414\" height=\"57\"/>\n                                        <subviews>\n                                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Latitude\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"M6R-h7-YcD\">\n                                                <rect key=\"frame\" x=\"8\" y=\"18\" width=\"63\" height=\"21\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                <nil key=\"highlightedColor\"/>\n                                            </label>\n                                            <textField opaque=\"NO\" clipsSubviews=\"YES\" tag=\"2\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7u1-Jd-Njo\">\n                                                <rect key=\"frame\" x=\"116.66666666666669\" y=\"11.666666666666657\" width=\"289\" height=\"34\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" keyboardType=\"numberPad\" returnKeyType=\"next\"/>\n                                                <connections>\n                                                    <outlet property=\"delegate\" destination=\"hrH-ZO-neg\" id=\"Tcb-la-QSN\"/>\n                                                </connections>\n                                            </textField>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"57\" id=\"1cc-Tq-vQq\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"7u1-Jd-Njo\" secondAttribute=\"trailing\" constant=\"8.5\" id=\"79o-Ho-xAr\"/>\n                                            <constraint firstItem=\"M6R-h7-YcD\" firstAttribute=\"centerY\" secondItem=\"coR-NG-thX\" secondAttribute=\"centerY\" id=\"Ljl-8g-7a1\"/>\n                                            <constraint firstItem=\"7u1-Jd-Njo\" firstAttribute=\"centerY\" secondItem=\"M6R-h7-YcD\" secondAttribute=\"centerY\" id=\"kMN-Aw-AoC\"/>\n                                            <constraint firstItem=\"M6R-h7-YcD\" firstAttribute=\"leading\" secondItem=\"coR-NG-thX\" secondAttribute=\"leading\" constant=\"8\" id=\"qGu-NB-meZ\"/>\n                                        </constraints>\n                                    </view>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"clS-eS-fCW\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"154\" width=\"414\" height=\"57\"/>\n                                        <subviews>\n                                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Longitude\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"iAf-Qa-cxB\">\n                                                <rect key=\"frame\" x=\"8\" y=\"18\" width=\"77\" height=\"21\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                <nil key=\"highlightedColor\"/>\n                                            </label>\n                                            <textField opaque=\"NO\" clipsSubviews=\"YES\" tag=\"3\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kJS-Fy-I31\">\n                                                <rect key=\"frame\" x=\"116.66666666666669\" y=\"11.666666666666657\" width=\"289\" height=\"34\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" keyboardType=\"numberPad\" returnKeyType=\"done\"/>\n                                                <connections>\n                                                    <outlet property=\"delegate\" destination=\"hrH-ZO-neg\" id=\"ene-cU-1I7\"/>\n                                                </connections>\n                                            </textField>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"iAf-Qa-cxB\" firstAttribute=\"leading\" secondItem=\"clS-eS-fCW\" secondAttribute=\"leading\" constant=\"8\" id=\"D91-Om-1UN\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"kJS-Fy-I31\" secondAttribute=\"trailing\" constant=\"8.5\" id=\"EdO-sd-rR8\"/>\n                                            <constraint firstAttribute=\"height\" constant=\"57\" id=\"HOo-uE-slP\"/>\n                                            <constraint firstItem=\"iAf-Qa-cxB\" firstAttribute=\"centerY\" secondItem=\"clS-eS-fCW\" secondAttribute=\"centerY\" id=\"YRb-du-jEp\"/>\n                                            <constraint firstItem=\"kJS-Fy-I31\" firstAttribute=\"centerY\" secondItem=\"iAf-Qa-cxB\" secondAttribute=\"centerY\" id=\"zfT-wO-c64\"/>\n                                        </constraints>\n                                    </view>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"z19-72-7lZ\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"211\" width=\"414\" height=\"69\"/>\n                                        <subviews>\n                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" adjustsImageWhenHighlighted=\"NO\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1QG-wJ-3GI\" customClass=\"StopwatchButton\">\n                                                <rect key=\"frame\" x=\"306\" y=\"15.666666666666686\" width=\"100\" height=\"38\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"38\" id=\"3Kr-Oi-Be2\"/>\n                                                    <constraint firstAttribute=\"width\" constant=\"100\" id=\"3W2-jb-scL\"/>\n                                                </constraints>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                <state key=\"normal\" title=\"Remove\">\n                                                    <color key=\"titleColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                </state>\n                                                <connections>\n                                                    <action selector=\"removeArrayValue:\" destination=\"btP-Yl-eqq\" eventType=\"touchUpInside\" id=\"ghf-Zy-75Z\"/>\n                                                    <action selector=\"removeCustomAttributeTapped:\" destination=\"hrH-ZO-neg\" eventType=\"touchUpInside\" id=\"kXW-2b-rnI\"/>\n                                                </connections>\n                                            </button>\n                                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" adjustsImageWhenHighlighted=\"NO\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HoP-LF-u3r\" customClass=\"StopwatchButton\">\n                                                <rect key=\"frame\" x=\"8\" y=\"15.666666666666686\" width=\"100\" height=\"38\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"38\" id=\"5nc-oY-5fd\"/>\n                                                    <constraint firstAttribute=\"width\" constant=\"100\" id=\"91X-AO-MLS\"/>\n                                                </constraints>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                <state key=\"normal\" title=\"Add\">\n                                                    <color key=\"titleColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                </state>\n                                                <connections>\n                                                    <action selector=\"addArrayValue:\" destination=\"btP-Yl-eqq\" eventType=\"touchUpInside\" id=\"bPs-rM-x5P\"/>\n                                                    <action selector=\"addCustomAttributeTapped:\" destination=\"hrH-ZO-neg\" eventType=\"touchUpInside\" id=\"Bdc-Oi-PmA\"/>\n                                                </connections>\n                                            </button>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"1QG-wJ-3GI\" firstAttribute=\"width\" secondItem=\"HoP-LF-u3r\" secondAttribute=\"width\" id=\"CzB-pD-eNI\"/>\n                                            <constraint firstItem=\"HoP-LF-u3r\" firstAttribute=\"leading\" secondItem=\"z19-72-7lZ\" secondAttribute=\"leading\" constant=\"8\" id=\"ON8-yl-eO8\"/>\n                                            <constraint firstItem=\"1QG-wJ-3GI\" firstAttribute=\"centerY\" secondItem=\"HoP-LF-u3r\" secondAttribute=\"centerY\" id=\"Pzq-E6-Jwb\"/>\n                                            <constraint firstItem=\"HoP-LF-u3r\" firstAttribute=\"centerY\" secondItem=\"z19-72-7lZ\" secondAttribute=\"centerY\" id=\"RcV-4n-WS3\"/>\n                                            <constraint firstItem=\"1QG-wJ-3GI\" firstAttribute=\"height\" secondItem=\"HoP-LF-u3r\" secondAttribute=\"height\" id=\"SnN-Ri-5zo\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"1QG-wJ-3GI\" secondAttribute=\"trailing\" constant=\"8\" id=\"spy-lW-3Oc\"/>\n                                        </constraints>\n                                    </view>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Uso-Qj-Rkb\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"278\" width=\"414\" height=\"1\"/>\n                                        <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"1\" id=\"tRV-ah-5tJ\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                <constraints>\n                                    <constraint firstItem=\"Evq-oF-j7T\" firstAttribute=\"top\" secondItem=\"5ca-l9-5T3\" secondAttribute=\"bottom\" constant=\"8\" id=\"18w-zj-zCv\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"Uso-Qj-Rkb\" secondAttribute=\"trailing\" id=\"25O-R6-WQz\"/>\n                                    <constraint firstItem=\"7u1-Jd-Njo\" firstAttribute=\"leading\" secondItem=\"CAd-hg-AaR\" secondAttribute=\"leading\" id=\"5NG-Wl-lG3\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"z19-72-7lZ\" secondAttribute=\"bottom\" id=\"7HL-Lh-wF4\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"Evq-oF-j7T\" secondAttribute=\"trailing\" id=\"96f-gy-Ao2\"/>\n                                    <constraint firstItem=\"Evq-oF-j7T\" firstAttribute=\"leading\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"leading\" id=\"9kK-0D-jB2\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"coR-NG-thX\" secondAttribute=\"trailing\" id=\"9v5-pt-c2X\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"z19-72-7lZ\" secondAttribute=\"trailing\" id=\"Hv9-98-rte\"/>\n                                    <constraint firstItem=\"5ca-l9-5T3\" firstAttribute=\"top\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"top\" constant=\"10\" id=\"Ijs-dg-geD\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"clS-eS-fCW\" secondAttribute=\"trailing\" id=\"K4g-iE-qU2\"/>\n                                    <constraint firstItem=\"clS-eS-fCW\" firstAttribute=\"top\" secondItem=\"coR-NG-thX\" secondAttribute=\"bottom\" id=\"OpL-Yk-0hY\"/>\n                                    <constraint firstItem=\"5ca-l9-5T3\" firstAttribute=\"centerX\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"centerX\" id=\"V0H-j8-sbo\"/>\n                                    <constraint firstItem=\"z19-72-7lZ\" firstAttribute=\"leading\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"leading\" id=\"XbD-vt-bx8\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"Uso-Qj-Rkb\" secondAttribute=\"bottom\" constant=\"1\" id=\"ZGh-fk-kfN\"/>\n                                    <constraint firstItem=\"Uso-Qj-Rkb\" firstAttribute=\"leading\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"leading\" id=\"c0F-ie-GpK\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"280\" id=\"cWg-t9-mHd\"/>\n                                    <constraint firstItem=\"clS-eS-fCW\" firstAttribute=\"leading\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"leading\" id=\"hT4-PJ-DLu\"/>\n                                    <constraint firstItem=\"coR-NG-thX\" firstAttribute=\"leading\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"leading\" id=\"lNX-XC-vlI\"/>\n                                    <constraint firstItem=\"kJS-Fy-I31\" firstAttribute=\"leading\" secondItem=\"CAd-hg-AaR\" secondAttribute=\"leading\" id=\"pRV-B7-eti\"/>\n                                    <constraint firstItem=\"coR-NG-thX\" firstAttribute=\"top\" secondItem=\"Evq-oF-j7T\" secondAttribute=\"bottom\" id=\"tpe-5e-c5y\"/>\n                                    <constraint firstItem=\"z19-72-7lZ\" firstAttribute=\"top\" secondItem=\"clS-eS-fCW\" secondAttribute=\"bottom\" id=\"vQv-Hu-Mwk\"/>\n                                </constraints>\n                            </view>\n                            <mapView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" mapType=\"standard\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2EQ-4d-ZZi\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"324\" width=\"414\" height=\"572\"/>\n                                <connections>\n                                    <outlet property=\"delegate\" destination=\"hrH-ZO-neg\" id=\"nJp-b4-LEo\"/>\n                                </connections>\n                            </mapView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"2EQ-4d-ZZi\" secondAttribute=\"trailing\" id=\"CWJ-oV-DAn\"/>\n                            <constraint firstItem=\"oWc-Qy-m8G\" firstAttribute=\"top\" secondItem=\"o3f-Af-uYr\" secondAttribute=\"bottom\" id=\"Jj4-CU-M7v\"/>\n                            <constraint firstItem=\"oWc-Qy-m8G\" firstAttribute=\"leading\" secondItem=\"A3n-84-ecv\" secondAttribute=\"leading\" id=\"L4W-oZ-4El\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"trailing\" id=\"Z7R-m9-KRu\"/>\n                            <constraint firstItem=\"2EQ-4d-ZZi\" firstAttribute=\"top\" secondItem=\"oWc-Qy-m8G\" secondAttribute=\"bottom\" id=\"dla-f7-7m3\"/>\n                            <constraint firstItem=\"2EQ-4d-ZZi\" firstAttribute=\"leading\" secondItem=\"A3n-84-ecv\" secondAttribute=\"leading\" id=\"hqx-pU-UkT\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"2EQ-4d-ZZi\" secondAttribute=\"bottom\" id=\"kQR-N8-o3Y\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"keyTextField\" destination=\"CAd-hg-AaR\" id=\"2Xe-7t-eqE\"/>\n                        <outlet property=\"latitudeTextField\" destination=\"7u1-Jd-Njo\" id=\"EYe-lJ-wmD\"/>\n                        <outlet property=\"longitudeTextField\" destination=\"kJS-Fy-I31\" id=\"tp5-HQ-530\"/>\n                        <outlet property=\"mapView\" destination=\"2EQ-4d-ZZi\" id=\"dmC-jn-XAL\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ARa-5d-j1M\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-4568.8000000000002\" y=\"-1131.1844077961021\"/>\n        </scene>\n        <!--In-App Controls-->\n        <scene sceneID=\"0ks-kz-f3B\">\n            <objects>\n                <viewController storyboardIdentifier=\"Controls\" modalPresentationStyle=\"currentContext\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"xc2-Om-yCX\" customClass=\"InAppMessageTestViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"K9J-sE-8Sc\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"UJL-eS-4dL\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"rWE-RI-3Zh\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"SgB-7f-1Mj\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"241\" width=\"382\" height=\"38\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                <state key=\"normal\" title=\"Dismiss Current In-App Message\">\n                                    <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"dismissCurrentSlideup:\" destination=\"xc2-Om-yCX\" eventType=\"touchUpInside\" id=\"8wI-qZ-ChG\"/>\n                                </connections>\n                            </button>\n                            <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" segmentControlStyle=\"bar\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ve6-vb-qDW\" customClass=\"StopwatchSegmentedControl\">\n                                <rect key=\"frame\" x=\"16\" y=\"64\" width=\"382\" height=\"32\"/>\n                                <segments>\n                                    <segment title=\"Immediate\"/>\n                                    <segment title=\"Queue\"/>\n                                    <segment title=\"Ignore\"/>\n                                </segments>\n                                <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                            </segmentedControl>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mUG-l7-ilL\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"183\" width=\"382\" height=\"38\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                <state key=\"normal\" title=\"Display Next Available In-App\">\n                                    <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"displayNextAvailableInAppPressed:\" destination=\"xc2-Om-yCX\" eventType=\"touchUpInside\" id=\"zvM-UC-HQx\"/>\n                                </connections>\n                            </button>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"In-App Messages Remaining in Stack:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dxs-cn-U60\" userLabel=\"Remaining In-App Message Label\">\n                                <rect key=\"frame\" x=\"77.666666666666686\" y=\"145\" width=\"259\" height=\"18\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"mUG-l7-ilL\" firstAttribute=\"top\" secondItem=\"dxs-cn-U60\" secondAttribute=\"bottom\" constant=\"20\" id=\"0PD-nY-f4d\"/>\n                            <constraint firstItem=\"ve6-vb-qDW\" firstAttribute=\"centerX\" secondItem=\"rWE-RI-3Zh\" secondAttribute=\"centerX\" id=\"11c-Ba-BQA\"/>\n                            <constraint firstItem=\"ve6-vb-qDW\" firstAttribute=\"top\" secondItem=\"rWE-RI-3Zh\" secondAttribute=\"topMargin\" constant=\"20\" id=\"2Po-HV-mVd\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"dxs-cn-U60\" secondAttribute=\"trailing\" constant=\"16\" id=\"2hE-us-Chk\"/>\n                            <constraint firstItem=\"mUG-l7-ilL\" firstAttribute=\"centerX\" secondItem=\"ve6-vb-qDW\" secondAttribute=\"centerX\" id=\"4Kb-bK-96V\"/>\n                            <constraint firstItem=\"SgB-7f-1Mj\" firstAttribute=\"centerX\" secondItem=\"ve6-vb-qDW\" secondAttribute=\"centerX\" id=\"90n-Ow-TVg\"/>\n                            <constraint firstItem=\"dxs-cn-U60\" firstAttribute=\"top\" secondItem=\"ve6-vb-qDW\" secondAttribute=\"bottom\" constant=\"50\" id=\"IMA-sE-6vN\"/>\n                            <constraint firstItem=\"SgB-7f-1Mj\" firstAttribute=\"leading\" secondItem=\"mUG-l7-ilL\" secondAttribute=\"leading\" id=\"P9b-4I-Fig\"/>\n                            <constraint firstItem=\"dxs-cn-U60\" firstAttribute=\"centerX\" secondItem=\"ve6-vb-qDW\" secondAttribute=\"centerX\" id=\"UZQ-85-BxS\"/>\n                            <constraint firstItem=\"ve6-vb-qDW\" firstAttribute=\"leading\" secondItem=\"rWE-RI-3Zh\" secondAttribute=\"leading\" constant=\"16\" id=\"gd5-lq-7uK\"/>\n                            <constraint firstItem=\"mUG-l7-ilL\" firstAttribute=\"leading\" secondItem=\"rWE-RI-3Zh\" secondAttribute=\"leading\" constant=\"16\" id=\"kUT-ib-DTb\"/>\n                            <constraint firstItem=\"SgB-7f-1Mj\" firstAttribute=\"top\" secondItem=\"mUG-l7-ilL\" secondAttribute=\"bottom\" constant=\"20\" id=\"swr-3T-awv\"/>\n                            <constraint firstItem=\"dxs-cn-U60\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"rWE-RI-3Zh\" secondAttribute=\"leading\" constant=\"16\" id=\"tnb-sq-WWf\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"In-App Controls\" id=\"unm-L1-MbZ\"/>\n                    <connections>\n                        <outlet property=\"remainingIAMLabel\" destination=\"dxs-cn-U60\" id=\"e32-Y0-xvd\"/>\n                        <outlet property=\"segmentedControlForInAppMode\" destination=\"ve6-vb-qDW\" id=\"HHg-BV-OVH\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"jrA-y3-hum\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <view contentMode=\"scaleToFill\" id=\"IGE-zR-PgF\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                    <subviews>\n                        <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dON-Ki-DNJ\">\n                            <rect key=\"frame\" x=\"2\" y=\"176\" width=\"318\" height=\"29\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <segments>\n                                <segment title=\"Immediate\"/>\n                                <segment title=\"Queue\"/>\n                                <segment title=\"Ignore\"/>\n                            </segments>\n                        </segmentedControl>\n                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"Slideup Controls\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pxQ-5g-TbJ\">\n                            <rect key=\"frame\" x=\"53\" y=\"34\" width=\"215\" height=\"21\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"20\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vfy-Pf-8Rs\">\n                            <rect key=\"frame\" x=\"42\" y=\"253\" width=\"237\" height=\"44\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"15\"/>\n                            <state key=\"normal\" title=\"Display next available slideup\">\n                                <color key=\"titleColor\" red=\"0.19607843459999999\" green=\"0.30980393290000002\" blue=\"0.52156865600000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </state>\n                            <state key=\"highlighted\">\n                                <color key=\"titleColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            </state>\n                        </button>\n                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tYm-za-QJk\">\n                            <rect key=\"frame\" x=\"197\" y=\"107\" width=\"51\" height=\"31\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        </switch>\n                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"Delegate\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"LjU-aQ-tpO\">\n                            <rect key=\"frame\" x=\"42\" y=\"113\" width=\"69\" height=\"21\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"(Turn delegate on to enable)\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hOt-Fw-Y94\">\n                            <rect key=\"frame\" x=\"55\" y=\"63\" width=\"215\" height=\"21\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <nil key=\"highlightedColor\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                </view>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-1776\" y=\"-2556.521739130435\"/>\n        </scene>\n        <!--Custom Tab Bar Controller-->\n        <scene sceneID=\"EK0-V0-req\">\n            <objects>\n                <tabBarController automaticallyAdjustsScrollViewInsets=\"NO\" id=\"Za8-FW-PxY\" customClass=\"CustomTabBarController\" sceneMemberID=\"viewController\">\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\"/>\n                    <tabBar key=\"tabBar\" contentMode=\"scaleToFill\" translucent=\"NO\" id=\"dRW-I8-xtN\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"49\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                    </tabBar>\n                </tabBarController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"fnh-FL-noV\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-1460.8\" y=\"-3946.3268365817094\"/>\n        </scene>\n        <!--Events-->\n        <scene sceneID=\"aqZ-0a-DSn\">\n            <objects>\n                <viewController storyboardIdentifier=\"Events\" title=\"Events\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"kug-bN-j3b\" customClass=\"EventsViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"4LD-4O-1iU\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"i8m-aj-p2D\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"nLz-ho-KYa\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" keyboardDismissMode=\"onDrag\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" allowsSelection=\"NO\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oJG-Nb-LuS\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"818\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"button cell\" rowHeight=\"71\" id=\"Czy-01-jdz\" customClass=\"EventButtonCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"50\" width=\"414\" height=\"71\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Czy-01-jdz\" id=\"whN-EJ-mpS\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"71\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5Sz-WL-oeY\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"65\" width=\"382\" height=\"1\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"1\" id=\"aS5-gb-B97\"/>\n                                                    </constraints>\n                                                </view>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"o5V-pd-M04\" customClass=\"StopwatchButton\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"17\" width=\"382\" height=\"38\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"height\" constant=\"38\" id=\"aD2-pg-cYG\"/>\n                                                    </constraints>\n                                                    <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                    <state key=\"normal\" title=\"Button\"/>\n                                                    <connections>\n                                                        <action selector=\"logEventOrPurchase:\" destination=\"kug-bN-j3b\" eventType=\"touchUpInside\" id=\"hT8-Qu-Ykl\"/>\n                                                    </connections>\n                                                </button>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"5Sz-WL-oeY\" secondAttribute=\"trailing\" constant=\"16\" id=\"5FN-Vj-ghe\"/>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"5Sz-WL-oeY\" secondAttribute=\"bottom\" constant=\"5\" id=\"6Vo-pM-hKP\"/>\n                                                <constraint firstItem=\"o5V-pd-M04\" firstAttribute=\"leading\" secondItem=\"whN-EJ-mpS\" secondAttribute=\"leading\" constant=\"16\" id=\"FOi-Is-o90\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"o5V-pd-M04\" secondAttribute=\"trailing\" constant=\"16\" id=\"Wbq-vc-ydR\"/>\n                                                <constraint firstItem=\"5Sz-WL-oeY\" firstAttribute=\"leading\" secondItem=\"whN-EJ-mpS\" secondAttribute=\"leading\" constant=\"16\" id=\"vyO-3r-sMm\"/>\n                                                <constraint firstItem=\"5Sz-WL-oeY\" firstAttribute=\"top\" secondItem=\"o5V-pd-M04\" secondAttribute=\"bottom\" constant=\"10\" id=\"wW2-jk-7dj\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"divView\" destination=\"5Sz-WL-oeY\" id=\"UcH-RC-V9w\"/>\n                                            <outlet property=\"eventButton\" destination=\"o5V-pd-M04\" id=\"R5P-uK-UpP\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"text field cell\" rowHeight=\"50\" id=\"kjL-7x-8Lk\" customClass=\"EventTextFieldCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"121\" width=\"414\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"kjL-7x-8Lk\" id=\"uas-fC-I5q\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"v3O-ft-Inu\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"14\" width=\"122\" height=\"28\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"kA6-TZ-xRF\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Pfo-cF-qc3\">\n                                                    <rect key=\"frame\" x=\"146\" y=\"11\" width=\"252\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                                    <connections>\n                                                        <action selector=\"hideKeyboard:\" destination=\"kug-bN-j3b\" eventType=\"editingDidEndOnExit\" id=\"aZs-qD-wzC\"/>\n                                                        <outlet property=\"delegate\" destination=\"kug-bN-j3b\" id=\"4v0-4Y-mdf\"/>\n                                                    </connections>\n                                                </textField>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"Pfo-cF-qc3\" secondAttribute=\"trailing\" constant=\"16\" id=\"54e-J9-yED\"/>\n                                                <constraint firstItem=\"v3O-ft-Inu\" firstAttribute=\"centerY\" secondItem=\"Pfo-cF-qc3\" secondAttribute=\"centerY\" id=\"AWh-w5-PKP\"/>\n                                                <constraint firstItem=\"v3O-ft-Inu\" firstAttribute=\"top\" secondItem=\"uas-fC-I5q\" secondAttribute=\"topMargin\" constant=\"3\" id=\"BFj-lG-Nyu\"/>\n                                                <constraint firstItem=\"v3O-ft-Inu\" firstAttribute=\"centerY\" secondItem=\"uas-fC-I5q\" secondAttribute=\"centerY\" constant=\"3\" id=\"SGK-Wg-vZh\"/>\n                                                <constraint firstItem=\"Pfo-cF-qc3\" firstAttribute=\"leading\" secondItem=\"v3O-ft-Inu\" secondAttribute=\"trailing\" constant=\"8\" id=\"gsK-fu-mD1\"/>\n                                                <constraint firstItem=\"v3O-ft-Inu\" firstAttribute=\"leading\" secondItem=\"uas-fC-I5q\" secondAttribute=\"leading\" constant=\"16\" id=\"mGD-bx-NFU\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"eventLabel\" destination=\"v3O-ft-Inu\" id=\"1jF-5m-UAC\"/>\n                                            <outlet property=\"eventTextField\" destination=\"Pfo-cF-qc3\" id=\"hvv-xX-JaJ\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"switch cell\" id=\"K8Z-uo-aDy\" customClass=\"EventSwitchCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"171\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"K8Z-uo-aDy\" id=\"A8I-0h-xhG\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"With Property\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fpB-HA-wut\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"14\" width=\"95\" height=\"16\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AmU-CV-rMf\">\n                                                    <rect key=\"frame\" x=\"349\" y=\"6.6666666666666679\" width=\"51\" height=\"31.000000000000004\"/>\n                                                    <connections>\n                                                        <action selector=\"switchChangedValue:\" destination=\"kug-bN-j3b\" eventType=\"valueChanged\" id=\"wYn-Lf-v6y\"/>\n                                                    </connections>\n                                                </switch>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"AmU-CV-rMf\" secondAttribute=\"trailing\" constant=\"16\" id=\"4kI-Md-LI0\"/>\n                                                <constraint firstItem=\"fpB-HA-wut\" firstAttribute=\"centerY\" secondItem=\"AmU-CV-rMf\" secondAttribute=\"centerY\" id=\"Pht-zO-01k\"/>\n                                                <constraint firstItem=\"AmU-CV-rMf\" firstAttribute=\"centerY\" secondItem=\"A8I-0h-xhG\" secondAttribute=\"centerY\" id=\"j8U-OY-zD3\"/>\n                                                <constraint firstItem=\"fpB-HA-wut\" firstAttribute=\"leading\" secondItem=\"A8I-0h-xhG\" secondAttribute=\"leading\" constant=\"16\" id=\"nFw-de-fyH\"/>\n                                                <constraint firstItem=\"fpB-HA-wut\" firstAttribute=\"top\" secondItem=\"A8I-0h-xhG\" secondAttribute=\"topMargin\" constant=\"3\" id=\"zyE-Wi-Jdh\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"eventLabel\" destination=\"fpB-HA-wut\" id=\"ger-Hc-ikq\"/>\n                                            <outlet property=\"eventPropertySwitch\" destination=\"AmU-CV-rMf\" id=\"QVT-PF-DjA\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"segmented control cell\" id=\"maE-Zs-CMt\" customClass=\"EventSegmentedControlCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"215\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"maE-Zs-CMt\" id=\"37k-rg-5Tu\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ABs-9U-yBh\" customClass=\"StopwatchSegmentedControl\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"14\" width=\"382\" height=\"17\"/>\n                                                    <segments>\n                                                        <segment title=\"String\"/>\n                                                        <segment title=\"Integer\"/>\n                                                        <segment title=\"Double\"/>\n                                                        <segment title=\"Date\"/>\n                                                        <segment title=\"JSON\"/>\n                                                        <segment title=\"Boolean\"/>\n                                                    </segments>\n                                                    <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <connections>\n                                                        <action selector=\"customEventPropertyTypeChanged:\" destination=\"kug-bN-j3b\" eventType=\"valueChanged\" id=\"oYt-Qy-7eD\"/>\n                                                    </connections>\n                                                </segmentedControl>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"ABs-9U-yBh\" firstAttribute=\"centerY\" secondItem=\"37k-rg-5Tu\" secondAttribute=\"centerY\" id=\"5ID-oz-AI7\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"ABs-9U-yBh\" secondAttribute=\"trailing\" constant=\"16\" id=\"OJV-4B-VHh\"/>\n                                                <constraint firstItem=\"ABs-9U-yBh\" firstAttribute=\"leading\" secondItem=\"37k-rg-5Tu\" secondAttribute=\"leading\" constant=\"16\" id=\"XG8-OF-mpY\"/>\n                                                <constraint firstItem=\"ABs-9U-yBh\" firstAttribute=\"top\" secondItem=\"37k-rg-5Tu\" secondAttribute=\"topMargin\" constant=\"3\" id=\"Ylj-Yf-0pa\"/>\n                                                <constraint firstAttribute=\"bottomMargin\" secondItem=\"ABs-9U-yBh\" secondAttribute=\"bottom\" constant=\"3\" id=\"aOB-Pa-9xJ\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"customEventPropertyTypeSegment\" destination=\"ABs-9U-yBh\" id=\"5Rh-Wc-H9u\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"kug-bN-j3b\" id=\"6bi-o3-de3\"/>\n                                    <outlet property=\"delegate\" destination=\"kug-bN-j3b\" id=\"11L-Kk-QAZ\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"oJG-Nb-LuS\" firstAttribute=\"centerX\" secondItem=\"nLz-ho-KYa\" secondAttribute=\"centerX\" id=\"2CT-EC-pbe\"/>\n                            <constraint firstItem=\"oJG-Nb-LuS\" firstAttribute=\"bottom\" secondItem=\"nLz-ho-KYa\" secondAttribute=\"bottomMargin\" id=\"MR8-7T-67c\"/>\n                            <constraint firstItem=\"oJG-Nb-LuS\" firstAttribute=\"top\" secondItem=\"nLz-ho-KYa\" secondAttribute=\"topMargin\" id=\"NGq-9O-Oyo\"/>\n                            <constraint firstItem=\"oJG-Nb-LuS\" firstAttribute=\"leading\" secondItem=\"nLz-ho-KYa\" secondAttribute=\"leading\" id=\"cso-5i-fdX\"/>\n                        </constraints>\n                    </view>\n                    <tabBarItem key=\"tabBarItem\" title=\"Item\" id=\"zKr-6B-L61\"/>\n                    <connections>\n                        <outlet property=\"tableView\" destination=\"oJG-Nb-LuS\" id=\"Q7y-MB-pZY\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"NaG-XU-lKy\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-3839.1999999999998\" y=\"-2552.4737631184412\"/>\n        </scene>\n        <!--Alias View Controller-->\n        <scene sceneID=\"mDG-4f-yZD\">\n            <objects>\n                <viewController storyboardIdentifier=\"Alias\" id=\"K0r-e4-kUm\" customClass=\"AliasViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"c3T-YD-Gua\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"GiG-6Q-Mvx\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"ngA-d0-XaY\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"02d-GD-PwH\" customClass=\"StopwatchButton\">\n                                <rect key=\"frame\" x=\"16\" y=\"172\" width=\"382\" height=\"38\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"38\" id=\"8Po-gM-hHV\"/>\n                                </constraints>\n                                <state key=\"normal\" title=\"Add User Alias\"/>\n                                <connections>\n                                    <action selector=\"addUserAliasButtonClick:\" destination=\"K0r-e4-kUm\" eventType=\"touchUpInside\" id=\"UfI-a2-Isq\"/>\n                                </connections>\n                            </button>\n                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Alias\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bGg-yj-n9K\">\n                                <rect key=\"frame\" x=\"16\" y=\"118\" width=\"382\" height=\"34\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                            </textField>\n                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Label\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"38f-30-eXD\">\n                                <rect key=\"frame\" x=\"16\" y=\"64\" width=\"382\" height=\"34\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                            </textField>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"38f-30-eXD\" firstAttribute=\"centerX\" secondItem=\"ngA-d0-XaY\" secondAttribute=\"centerX\" id=\"6Fi-Xe-lgd\"/>\n                            <constraint firstItem=\"38f-30-eXD\" firstAttribute=\"leading\" secondItem=\"ngA-d0-XaY\" secondAttribute=\"leading\" constant=\"16\" id=\"8CJ-hA-qTd\"/>\n                            <constraint firstItem=\"38f-30-eXD\" firstAttribute=\"top\" secondItem=\"c3T-YD-Gua\" secondAttribute=\"bottom\" constant=\"20\" id=\"FVr-VE-mfH\"/>\n                            <constraint firstItem=\"02d-GD-PwH\" firstAttribute=\"top\" secondItem=\"bGg-yj-n9K\" secondAttribute=\"bottom\" constant=\"20\" id=\"Wd0-X2-mSd\"/>\n                            <constraint firstItem=\"bGg-yj-n9K\" firstAttribute=\"top\" secondItem=\"38f-30-eXD\" secondAttribute=\"bottom\" constant=\"20\" id=\"Zwy-3P-wcQ\"/>\n                            <constraint firstItem=\"bGg-yj-n9K\" firstAttribute=\"width\" secondItem=\"38f-30-eXD\" secondAttribute=\"width\" id=\"ahg-aS-i3a\"/>\n                            <constraint firstItem=\"bGg-yj-n9K\" firstAttribute=\"centerX\" secondItem=\"02d-GD-PwH\" secondAttribute=\"centerX\" id=\"eKH-uS-BE9\"/>\n                            <constraint firstItem=\"02d-GD-PwH\" firstAttribute=\"leading\" secondItem=\"ngA-d0-XaY\" secondAttribute=\"leading\" constant=\"16\" id=\"eiS-wb-Eye\"/>\n                            <constraint firstItem=\"02d-GD-PwH\" firstAttribute=\"centerX\" secondItem=\"ngA-d0-XaY\" secondAttribute=\"centerX\" id=\"pD0-cX-xie\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"02d-GD-PwH\" secondAttribute=\"trailing\" constant=\"16\" id=\"t5N-vl-JuW\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"aliasLabelTextField\" destination=\"38f-30-eXD\" id=\"GyK-wN-uJM\"/>\n                        <outlet property=\"aliasTextField\" destination=\"bGg-yj-n9K\" id=\"rkn-jy-2sw\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"OzN-ZA-6eX\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-3837.5999999999999\" y=\"-1881.4092953523241\"/>\n        </scene>\n        <!--In App MessageHTML Composer View Controller-->\n        <scene sceneID=\"Pka-Xx-iBd\">\n            <objects>\n                <viewController storyboardIdentifier=\"InAppMessageHTMLComposerViewController\" id=\"Qwr-bt-mCo\" customClass=\"InAppMessageHTMLComposerViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"URf-hM-aOn\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"eDX-f3-XlJ\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"YHo-Rn-VMp\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3ws-G6-b99\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                                <subviews>\n                                    <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" verticalCompressionResistancePriority=\"1000\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"bar\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rcC-Rz-1Xx\" customClass=\"StopwatchSegmentedControl\">\n                                        <rect key=\"frame\" x=\"16\" y=\"10\" width=\"382\" height=\"32\"/>\n                                        <segments>\n                                            <segment title=\"Zip (HTML Full)\"/>\n                                            <segment title=\"No Zip (Rich HTML)\"/>\n                                        </segments>\n                                        <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                        <connections>\n                                            <action selector=\"HTMLTypeChanged:\" destination=\"Qwr-bt-mCo\" eventType=\"valueChanged\" id=\"2rH-Wj-71V\"/>\n                                        </connections>\n                                    </segmentedControl>\n                                    <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" horizontalCompressionResistancePriority=\"749\" verticalCompressionResistancePriority=\"1000\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" text=\"https://appboy-images.com/HTML_ZIP_STOPWATCH.zip\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xFb-AS-YW7\">\n                                        <rect key=\"frame\" x=\"84.666666666666657\" y=\"51\" width=\"313.33333333333337\" height=\"34\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                        <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" keyboardType=\"URL\" textContentType=\"url\"/>\n                                        <connections>\n                                            <outlet property=\"delegate\" destination=\"mDO-W3-fC2\" id=\"tYL-9A-3JE\"/>\n                                        </connections>\n                                    </textField>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Zip Link:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3kB-My-exH\">\n                                        <rect key=\"frame\" x=\"15.999999999999996\" y=\"59\" width=\"58.666666666666657\" height=\"18\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" verticalCompressionResistancePriority=\"1000\" text=\"HTML:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9S9-xG-fBR\">\n                                        <rect key=\"frame\" x=\"182.66666666666666\" y=\"97\" width=\"49\" height=\"18\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"15\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                    <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" textAlignment=\"natural\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"L3q-6h-27J\">\n                                        <rect key=\"frame\" x=\"16\" y=\"125\" width=\"382\" height=\"761\"/>\n                                        <color key=\"textColor\" systemColor=\"labelColor\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                        <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                    </textView>\n                                </subviews>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"L3q-6h-27J\" secondAttribute=\"bottom\" constant=\"10\" id=\"3kl-xk-CBJ\"/>\n                                    <constraint firstItem=\"xFb-AS-YW7\" firstAttribute=\"leading\" secondItem=\"3kB-My-exH\" secondAttribute=\"trailing\" constant=\"10\" id=\"3pa-1y-bht\"/>\n                                    <constraint firstItem=\"xFb-AS-YW7\" firstAttribute=\"top\" secondItem=\"rcC-Rz-1Xx\" secondAttribute=\"bottom\" constant=\"10\" id=\"B8k-C9-Axi\"/>\n                                    <constraint firstItem=\"rcC-Rz-1Xx\" firstAttribute=\"leading\" secondItem=\"3ws-G6-b99\" secondAttribute=\"leading\" constant=\"16\" id=\"Hgb-gH-e77\"/>\n                                    <constraint firstItem=\"rcC-Rz-1Xx\" firstAttribute=\"leading\" secondItem=\"3kB-My-exH\" secondAttribute=\"leading\" id=\"JbX-eO-g6r\"/>\n                                    <constraint firstItem=\"9S9-xG-fBR\" firstAttribute=\"centerX\" secondItem=\"3ws-G6-b99\" secondAttribute=\"centerX\" id=\"LTL-dL-nb6\"/>\n                                    <constraint firstItem=\"9S9-xG-fBR\" firstAttribute=\"top\" secondItem=\"3kB-My-exH\" secondAttribute=\"bottom\" constant=\"20\" id=\"Ohx-3Z-Of8\"/>\n                                    <constraint firstItem=\"xFb-AS-YW7\" firstAttribute=\"trailing\" secondItem=\"L3q-6h-27J\" secondAttribute=\"trailing\" id=\"P8d-OT-w4g\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"rcC-Rz-1Xx\" secondAttribute=\"trailing\" constant=\"16\" id=\"Wqp-re-YRf\"/>\n                                    <constraint firstItem=\"L3q-6h-27J\" firstAttribute=\"top\" secondItem=\"9S9-xG-fBR\" secondAttribute=\"bottom\" constant=\"10\" id=\"ZCd-YL-Ted\"/>\n                                    <constraint firstItem=\"L3q-6h-27J\" firstAttribute=\"leading\" secondItem=\"3kB-My-exH\" secondAttribute=\"leading\" id=\"cJB-AV-idD\"/>\n                                    <constraint firstItem=\"3kB-My-exH\" firstAttribute=\"centerY\" secondItem=\"xFb-AS-YW7\" secondAttribute=\"centerY\" id=\"lVN-fM-jnn\"/>\n                                    <constraint firstItem=\"rcC-Rz-1Xx\" firstAttribute=\"top\" secondItem=\"3ws-G6-b99\" secondAttribute=\"top\" constant=\"10\" id=\"o5h-FN-H2C\"/>\n                                    <constraint firstItem=\"rcC-Rz-1Xx\" firstAttribute=\"trailing\" secondItem=\"xFb-AS-YW7\" secondAttribute=\"trailing\" id=\"vcL-oo-bMX\"/>\n                                </constraints>\n                                <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"-94\" maxX=\"320\" maxY=\"504\"/>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"3ws-G6-b99\" secondAttribute=\"trailing\" id=\"0tW-Oy-mcM\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"3ws-G6-b99\" secondAttribute=\"bottom\" id=\"G2e-R8-h1F\"/>\n                            <constraint firstItem=\"3ws-G6-b99\" firstAttribute=\"top\" secondItem=\"YHo-Rn-VMp\" secondAttribute=\"top\" id=\"ebW-En-w3U\"/>\n                            <constraint firstItem=\"3ws-G6-b99\" firstAttribute=\"leading\" secondItem=\"YHo-Rn-VMp\" secondAttribute=\"leading\" id=\"nhy-pq-WJb\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"HTMLInAppTextView\" destination=\"L3q-6h-27J\" id=\"Sl1-Gh-ONx\"/>\n                        <outlet property=\"HTMLTypeSegment\" destination=\"rcC-Rz-1Xx\" id=\"C9G-ME-oNi\"/>\n                        <outlet property=\"htmlComposerBottomConstraint\" destination=\"3kl-xk-CBJ\" id=\"fDQ-sl-qgv\"/>\n                        <outlet property=\"zipRemoteURLTextField\" destination=\"xFb-AS-YW7\" id=\"a8C-bC-IOl\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Mar-yI-YVf\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-2529.5999999999999\" y=\"-1805.3973013493255\"/>\n        </scene>\n        <!--In App MessageUI View Controller-->\n        <scene sceneID=\"FKA-a7-sNu\">\n            <objects>\n                <viewController storyboardIdentifier=\"UI\" modalPresentationStyle=\"currentContext\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"mDO-W3-fC2\" customClass=\"InAppMessageUIViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"a9X-kZ-rQZ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"0o0-eg-xeI\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"AT8-s9-IyQ\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" keyboardDismissMode=\"onDrag\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"none\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ts5-L4-diY\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"114\" width=\"414\" height=\"748\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                <color key=\"sectionIndexBackgroundColor\" red=\"0.28122158190000002\" green=\"0.53170477839999997\" blue=\"0.90852012429999995\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <prototypes>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ButtonLabelCellIdentifier\" id=\"MDJ-2I-1to\" customClass=\"ButtonLabelCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"50\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"MDJ-2I-1to\" id=\"X3E-8y-c1B\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"D7s-5M-qPp\" customClass=\"StopwatchButton\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"7\" width=\"122\" height=\"30\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"2IO-FY-awC\"/>\n                                                    </constraints>\n                                                    <state key=\"normal\" title=\"Button\"/>\n                                                    <connections>\n                                                        <action selector=\"ChangeTextFieldContent:\" destination=\"mDO-W3-fC2\" eventType=\"touchUpInside\" id=\"d2U-Yi-VAX\"/>\n                                                    </connections>\n                                                </button>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GQ9-Rd-mqB\">\n                                                    <rect key=\"frame\" x=\"146\" y=\"5\" width=\"252\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                                </textField>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"D7s-5M-qPp\" firstAttribute=\"centerY\" secondItem=\"X3E-8y-c1B\" secondAttribute=\"centerY\" id=\"A0m-DC-9u2\"/>\n                                                <constraint firstItem=\"GQ9-Rd-mqB\" firstAttribute=\"leading\" secondItem=\"D7s-5M-qPp\" secondAttribute=\"trailing\" constant=\"8\" id=\"Jl3-Nu-EV1\"/>\n                                                <constraint firstItem=\"D7s-5M-qPp\" firstAttribute=\"leading\" secondItem=\"X3E-8y-c1B\" secondAttribute=\"leading\" constant=\"16\" id=\"MO5-Mp-JZC\"/>\n                                                <constraint firstItem=\"GQ9-Rd-mqB\" firstAttribute=\"centerY\" secondItem=\"D7s-5M-qPp\" secondAttribute=\"centerY\" id=\"WBo-oM-6FZ\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"GQ9-Rd-mqB\" secondAttribute=\"trailing\" constant=\"16\" id=\"jHu-0h-QlS\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"textField\" destination=\"GQ9-Rd-mqB\" id=\"8T9-uf-SNJ\"/>\n                                            <outlet property=\"titleButton\" destination=\"D7s-5M-qPp\" id=\"ain-43-2yI\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"SegmentCellIdentifier\" id=\"M8f-00-pZx\" customClass=\"SegmentCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"94\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"M8f-00-pZx\" id=\"Maf-Pi-Svw\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"right\" contentVerticalAlignment=\"top\" segmentControlStyle=\"bar\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cOu-jy-eSU\">\n                                                    <rect key=\"frame\" x=\"146\" y=\"6.6666666666666679\" width=\"252\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"First\"/>\n                                                        <segment title=\"Second\"/>\n                                                    </segments>\n                                                    <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <connections>\n                                                        <action selector=\"buttonSegmentChanged:\" destination=\"mDO-W3-fC2\" eventType=\"valueChanged\" id=\"YGF-Xg-wsg\"/>\n                                                    </connections>\n                                                </segmentedControl>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1z3-nz-V54\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"13\" width=\"122\" height=\"18\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"E0q-r7-C1K\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"cOu-jy-eSU\" firstAttribute=\"leading\" secondItem=\"1z3-nz-V54\" secondAttribute=\"trailing\" constant=\"8\" id=\"Q5J-Ur-ryN\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"cOu-jy-eSU\" secondAttribute=\"trailing\" constant=\"16\" id=\"fGd-we-wBJ\"/>\n                                                <constraint firstItem=\"1z3-nz-V54\" firstAttribute=\"leading\" secondItem=\"Maf-Pi-Svw\" secondAttribute=\"leading\" constant=\"16\" id=\"hnR-vY-L7F\"/>\n                                                <constraint firstItem=\"1z3-nz-V54\" firstAttribute=\"centerY\" secondItem=\"cOu-jy-eSU\" secondAttribute=\"centerY\" id=\"sRt-ie-dJy\"/>\n                                                <constraint firstItem=\"1z3-nz-V54\" firstAttribute=\"centerY\" secondItem=\"Maf-Pi-Svw\" secondAttribute=\"centerY\" id=\"yd7-e6-APZ\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"segmentControl\" destination=\"cOu-jy-eSU\" id=\"2ag-FQ-QVl\"/>\n                                            <outlet property=\"titleLabel\" destination=\"1z3-nz-V54\" id=\"IH4-ez-27j\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"TextCellIdentifier\" id=\"NMn-Qb-D1i\" customClass=\"TextFieldCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"138\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"NMn-Qb-D1i\" id=\"jqk-4O-GUk\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vjg-D4-JuJ\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"13\" width=\"122\" height=\"18\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"FPS-3C-juv\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"O5G-bL-opz\">\n                                                    <rect key=\"frame\" x=\"146\" y=\"5\" width=\"252\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                                </textField>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"vjg-D4-JuJ\" firstAttribute=\"centerY\" secondItem=\"jqk-4O-GUk\" secondAttribute=\"centerY\" id=\"CZY-QV-ded\"/>\n                                                <constraint firstItem=\"O5G-bL-opz\" firstAttribute=\"leading\" secondItem=\"vjg-D4-JuJ\" secondAttribute=\"trailing\" constant=\"8\" id=\"cxN-K3-JrX\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"O5G-bL-opz\" secondAttribute=\"trailing\" constant=\"16\" id=\"eZy-sy-nXG\"/>\n                                                <constraint firstItem=\"vjg-D4-JuJ\" firstAttribute=\"leading\" secondItem=\"jqk-4O-GUk\" secondAttribute=\"leading\" constant=\"16\" id=\"q62-9r-vUZ\"/>\n                                                <constraint firstItem=\"vjg-D4-JuJ\" firstAttribute=\"centerY\" secondItem=\"O5G-bL-opz\" secondAttribute=\"centerY\" id=\"zyW-0Z-NmM\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"textField\" destination=\"O5G-bL-opz\" id=\"Vsq-Ip-bdi\"/>\n                                            <outlet property=\"titleLabel\" destination=\"vjg-D4-JuJ\" id=\"Mk4-43-jMX\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ColorCellIdentifier\" rowHeight=\"88\" id=\"xra-jY-v1W\" customClass=\"ColorCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"182\" width=\"414\" height=\"88\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"xra-jY-v1W\" id=\"AjN-Sl-T3G\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"88\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CH6-9z-EQ7\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"10\" width=\"122\" height=\"18\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"jV2-1y-hd3\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"f0a-jL-GrZ\">\n                                                    <rect key=\"frame\" x=\"146\" y=\"2\" width=\"252\" height=\"34\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.66666666666666663\" green=\"0.66666666666666663\" blue=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <color key=\"tintColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <connections>\n                                                        <action selector=\"changeColor:\" destination=\"mDO-W3-fC2\" eventType=\"touchUpInside\" id=\"yYf-aH-tcv\"/>\n                                                    </connections>\n                                                </button>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Opacity\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4e4-nm-JMW\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"53.666666666666664\" width=\"50\" height=\"16.999999999999993\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <slider opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"1\" minValue=\"0.0\" maxValue=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"jdh-4S-K0E\">\n                                                    <rect key=\"frame\" x=\"144\" y=\"47\" width=\"256\" height=\"31\"/>\n                                                    <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <connections>\n                                                        <action selector=\"opacitySliderValueChanged:\" destination=\"mDO-W3-fC2\" eventType=\"valueChanged\" id=\"ipX-GH-FWS\"/>\n                                                    </connections>\n                                                </slider>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"jdh-4S-K0E\" firstAttribute=\"centerY\" secondItem=\"4e4-nm-JMW\" secondAttribute=\"centerY\" id=\"2Pt-Gi-qoH\"/>\n                                                <constraint firstItem=\"CH6-9z-EQ7\" firstAttribute=\"centerY\" secondItem=\"f0a-jL-GrZ\" secondAttribute=\"centerY\" id=\"84S-2E-CUy\"/>\n                                                <constraint firstItem=\"f0a-jL-GrZ\" firstAttribute=\"leading\" secondItem=\"CH6-9z-EQ7\" secondAttribute=\"trailing\" constant=\"8\" id=\"Hys-H8-M7s\"/>\n                                                <constraint firstItem=\"CH6-9z-EQ7\" firstAttribute=\"leading\" secondItem=\"AjN-Sl-T3G\" secondAttribute=\"leading\" constant=\"16\" id=\"IZy-1T-txC\"/>\n                                                <constraint firstItem=\"CH6-9z-EQ7\" firstAttribute=\"leading\" secondItem=\"4e4-nm-JMW\" secondAttribute=\"leading\" id=\"ewc-R9-hkp\"/>\n                                                <constraint firstItem=\"jdh-4S-K0E\" firstAttribute=\"leading\" secondItem=\"f0a-jL-GrZ\" secondAttribute=\"leading\" id=\"kOd-by-cBW\"/>\n                                                <constraint firstItem=\"jdh-4S-K0E\" firstAttribute=\"top\" secondItem=\"f0a-jL-GrZ\" secondAttribute=\"bottom\" constant=\"11\" id=\"o4q-fi-6eI\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"f0a-jL-GrZ\" secondAttribute=\"trailing\" constant=\"16\" id=\"p5Q-jf-u4j\"/>\n                                                <constraint firstItem=\"jdh-4S-K0E\" firstAttribute=\"bottom\" secondItem=\"AjN-Sl-T3G\" secondAttribute=\"bottomMargin\" id=\"vSw-Zg-vda\"/>\n                                                <constraint firstItem=\"jdh-4S-K0E\" firstAttribute=\"trailing\" secondItem=\"f0a-jL-GrZ\" secondAttribute=\"trailing\" id=\"xgl-YL-BIb\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"colorButton\" destination=\"f0a-jL-GrZ\" id=\"ec2-cm-Ogo\"/>\n                                            <outlet property=\"opacityLabel\" destination=\"4e4-nm-JMW\" id=\"Y92-p2-I6L\"/>\n                                            <outlet property=\"opacitySlider\" destination=\"jdh-4S-K0E\" id=\"dIB-L5-gUn\"/>\n                                            <outlet property=\"titleLabel\" destination=\"CH6-9z-EQ7\" id=\"t0o-Ug-94N\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ChevronCellIdentifier\" id=\"4Nk-Pk-PQL\" customClass=\"SwitchCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"270\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"4Nk-Pk-PQL\" id=\"mBQ-DV-uoV\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"R5c-r9-Sw3\">\n                                                    <rect key=\"frame\" x=\"349\" y=\"6.6666666666666679\" width=\"51\" height=\"31.000000000000004\"/>\n                                                    <connections>\n                                                        <action selector=\"hideChevronChanged:\" destination=\"mDO-W3-fC2\" eventType=\"valueChanged\" id=\"wpq-9P-gJa\"/>\n                                                    </connections>\n                                                </switch>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Hide Chevron:\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"KBd-89-O60\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"13\" width=\"98\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"KBd-89-O60\" firstAttribute=\"centerY\" secondItem=\"mBQ-DV-uoV\" secondAttribute=\"centerY\" id=\"98R-ti-Atd\"/>\n                                                <constraint firstItem=\"KBd-89-O60\" firstAttribute=\"leading\" secondItem=\"mBQ-DV-uoV\" secondAttribute=\"leading\" constant=\"16\" id=\"Njf-4c-Sz1\"/>\n                                                <constraint firstItem=\"KBd-89-O60\" firstAttribute=\"centerY\" secondItem=\"R5c-r9-Sw3\" secondAttribute=\"centerY\" id=\"UdL-4P-x2n\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"R5c-r9-Sw3\" secondAttribute=\"trailing\" constant=\"16\" id=\"uHp-4P-nHw\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"hideChevronSwitch\" destination=\"R5c-r9-Sw3\" id=\"RVX-0d-D3y\"/>\n                                            <outlet property=\"titleLabel\" destination=\"KBd-89-O60\" id=\"67z-hF-wwL\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" reuseIdentifier=\"ButtonCellIdentifer\" rowHeight=\"182\" id=\"9uC-TL-qAH\" customClass=\"InAppMessageButtonCell\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"314\" width=\"414\" height=\"182\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"9uC-TL-qAH\" id=\"5K7-ZB-uZM\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"182\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Text Color:\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hPw-4L-dSZ\">\n                                                    <rect key=\"frame\" x=\"153\" y=\"19\" width=\"74\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Jyk-Ra-81C\">\n                                                    <rect key=\"frame\" x=\"235\" y=\"11\" width=\"163\" height=\"34\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.66666666666666663\" green=\"0.66666666666666663\" blue=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <state key=\"normal\">\n                                                        <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    </state>\n                                                    <connections>\n                                                        <action selector=\"changeColor:\" destination=\"9uC-TL-qAH\" eventType=\"touchUpInside\" id=\"4n2-Mo-xIX\"/>\n                                                    </connections>\n                                                </button>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ft5-Jy-lb7\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"45\" width=\"122\" height=\"34\"/>\n                                                    <constraints>\n                                                        <constraint firstAttribute=\"width\" constant=\"122\" id=\"fH2-Yx-lWq\"/>\n                                                    </constraints>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\"/>\n                                                    <connections>\n                                                        <outlet property=\"delegate\" destination=\"9uC-TL-qAH\" id=\"IjJ-0o-wXA\"/>\n                                                    </connections>\n                                                </textField>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Title:\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vt4-vh-smc\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"19\" width=\"122\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TUe-kk-yJh\">\n                                                    <rect key=\"frame\" x=\"235\" y=\"50\" width=\"163\" height=\"34\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.66666666666666663\" green=\"0.66666666666666663\" blue=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <state key=\"normal\">\n                                                        <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    </state>\n                                                    <connections>\n                                                        <action selector=\"changeColor:\" destination=\"9uC-TL-qAH\" eventType=\"touchUpInside\" id=\"sEx-ND-Ilt\"/>\n                                                    </connections>\n                                                </button>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"BG Color:\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"f9u-s1-Hqh\">\n                                                    <rect key=\"frame\" x=\"153\" y=\"58\" width=\"66\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Action:\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"C7a-2L-7H4\">\n                                                    <rect key=\"frame\" x=\"153\" y=\"89\" width=\"48\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"bar\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"idE-vb-BFq\">\n                                                    <rect key=\"frame\" x=\"153\" y=\"112\" width=\"245\" height=\"32\"/>\n                                                    <segments>\n                                                        <segment title=\"Feed\"/>\n                                                        <segment title=\"None\"/>\n                                                        <segment title=\"URI\"/>\n                                                    </segments>\n                                                    <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <connections>\n                                                        <action selector=\"actionChanged:\" destination=\"9uC-TL-qAH\" eventType=\"valueChanged\" id=\"Mg9-dt-bZ6\"/>\n                                                    </connections>\n                                                </segmentedControl>\n                                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"URI:\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tSs-d8-7pg\">\n                                                    <rect key=\"frame\" x=\"153\" y=\"159\" width=\"28.666666666666657\" height=\"18\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"etQ-ua-3HB\">\n                                                    <rect key=\"frame\" x=\"189.66666666666663\" y=\"151\" width=\"208.33333333333337\" height=\"34\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                                    <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" keyboardType=\"URL\"/>\n                                                    <connections>\n                                                        <outlet property=\"delegate\" destination=\"9uC-TL-qAH\" id=\"Ixg-gu-sEH\"/>\n                                                    </connections>\n                                                </textField>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"Jyk-Ra-81C\" firstAttribute=\"trailing\" secondItem=\"idE-vb-BFq\" secondAttribute=\"trailing\" id=\"0lM-D3-iEx\"/>\n                                                <constraint firstItem=\"C7a-2L-7H4\" firstAttribute=\"top\" secondItem=\"TUe-kk-yJh\" secondAttribute=\"bottom\" constant=\"5\" id=\"34b-vQ-Pcx\"/>\n                                                <constraint firstItem=\"Jyk-Ra-81C\" firstAttribute=\"width\" secondItem=\"TUe-kk-yJh\" secondAttribute=\"width\" id=\"CKN-pR-Caq\"/>\n                                                <constraint firstItem=\"hPw-4L-dSZ\" firstAttribute=\"centerY\" secondItem=\"Jyk-Ra-81C\" secondAttribute=\"centerY\" id=\"H0z-wV-GeL\"/>\n                                                <constraint firstItem=\"etQ-ua-3HB\" firstAttribute=\"trailing\" secondItem=\"idE-vb-BFq\" secondAttribute=\"trailing\" id=\"JEx-U0-b79\"/>\n                                                <constraint firstAttribute=\"topMargin\" secondItem=\"Jyk-Ra-81C\" secondAttribute=\"top\" id=\"Jti-qC-hA3\"/>\n                                                <constraint firstItem=\"ft5-Jy-lb7\" firstAttribute=\"leading\" secondItem=\"vt4-vh-smc\" secondAttribute=\"leading\" id=\"KHx-3x-raA\"/>\n                                                <constraint firstItem=\"idE-vb-BFq\" firstAttribute=\"leading\" secondItem=\"hPw-4L-dSZ\" secondAttribute=\"leading\" id=\"OaA-aX-DPp\"/>\n                                                <constraint firstItem=\"Jyk-Ra-81C\" firstAttribute=\"leading\" secondItem=\"hPw-4L-dSZ\" secondAttribute=\"trailing\" constant=\"8\" id=\"TmR-cT-Iy1\"/>\n                                                <constraint firstItem=\"etQ-ua-3HB\" firstAttribute=\"leading\" secondItem=\"tSs-d8-7pg\" secondAttribute=\"trailing\" constant=\"8\" id=\"YnY-Oc-1zm\"/>\n                                                <constraint firstItem=\"tSs-d8-7pg\" firstAttribute=\"centerY\" secondItem=\"etQ-ua-3HB\" secondAttribute=\"centerY\" id=\"ZxV-f3-mlC\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"idE-vb-BFq\" secondAttribute=\"trailing\" constant=\"16\" id=\"aSL-8n-Qrp\"/>\n                                                <constraint firstItem=\"ft5-Jy-lb7\" firstAttribute=\"trailing\" secondItem=\"vt4-vh-smc\" secondAttribute=\"trailing\" id=\"bUJ-ki-Qbn\"/>\n                                                <constraint firstItem=\"f9u-s1-Hqh\" firstAttribute=\"leading\" secondItem=\"ft5-Jy-lb7\" secondAttribute=\"trailing\" constant=\"15\" id=\"fnP-0B-6UA\"/>\n                                                <constraint firstItem=\"TUe-kk-yJh\" firstAttribute=\"trailing\" secondItem=\"idE-vb-BFq\" secondAttribute=\"trailing\" id=\"fsX-4T-f9B\"/>\n                                                <constraint firstItem=\"etQ-ua-3HB\" firstAttribute=\"top\" secondItem=\"idE-vb-BFq\" secondAttribute=\"bottom\" constant=\"8\" id=\"i6g-6r-wdV\"/>\n                                                <constraint firstItem=\"vt4-vh-smc\" firstAttribute=\"leading\" secondItem=\"5K7-ZB-uZM\" secondAttribute=\"leading\" constant=\"16\" id=\"kQU-4Y-UfI\"/>\n                                                <constraint firstItem=\"tSs-d8-7pg\" firstAttribute=\"leading\" secondItem=\"hPw-4L-dSZ\" secondAttribute=\"leading\" id=\"kwR-C9-hWd\"/>\n                                                <constraint firstItem=\"idE-vb-BFq\" firstAttribute=\"top\" secondItem=\"C7a-2L-7H4\" secondAttribute=\"bottom\" constant=\"5\" id=\"m5T-Va-r6z\"/>\n                                                <constraint firstItem=\"TUe-kk-yJh\" firstAttribute=\"top\" secondItem=\"Jyk-Ra-81C\" secondAttribute=\"bottom\" constant=\"5\" id=\"n1H-8h-jPV\"/>\n                                                <constraint firstItem=\"vt4-vh-smc\" firstAttribute=\"top\" secondItem=\"hPw-4L-dSZ\" secondAttribute=\"top\" id=\"niW-uE-6bm\"/>\n                                                <constraint firstItem=\"f9u-s1-Hqh\" firstAttribute=\"leading\" secondItem=\"hPw-4L-dSZ\" secondAttribute=\"leading\" id=\"o7P-be-t0c\"/>\n                                                <constraint firstItem=\"f9u-s1-Hqh\" firstAttribute=\"centerY\" secondItem=\"TUe-kk-yJh\" secondAttribute=\"centerY\" id=\"rEC-Ry-jOB\"/>\n                                                <constraint firstItem=\"ft5-Jy-lb7\" firstAttribute=\"top\" secondItem=\"vt4-vh-smc\" secondAttribute=\"bottom\" constant=\"8\" id=\"wY3-v3-hQh\"/>\n                                                <constraint firstItem=\"C7a-2L-7H4\" firstAttribute=\"leading\" secondItem=\"hPw-4L-dSZ\" secondAttribute=\"leading\" id=\"ypq-p5-thG\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <outlet property=\"URITextField\" destination=\"etQ-ua-3HB\" id=\"zw0-SQ-HMY\"/>\n                                            <outlet property=\"actionSegmentControl\" destination=\"idE-vb-BFq\" id=\"0cl-Lf-OAp\"/>\n                                            <outlet property=\"backgroundColorButton\" destination=\"TUe-kk-yJh\" id=\"gRx-4s-wOn\"/>\n                                            <outlet property=\"textColorButton\" destination=\"Jyk-Ra-81C\" id=\"y5r-Ck-fmR\"/>\n                                            <outlet property=\"titleTextField\" destination=\"ft5-Jy-lb7\" id=\"p7S-PU-rT8\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"mDO-W3-fC2\" id=\"HVO-a0-hTu\"/>\n                                    <outlet property=\"delegate\" destination=\"mDO-W3-fC2\" id=\"JR3-ja-c7M\"/>\n                                </connections>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"xSL-MJ-20A\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"114\"/>\n                                <subviews>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tyC-VM-qi9\" customClass=\"StopwatchButton\">\n                                        <rect key=\"frame\" x=\"16\" y=\"8\" width=\"382\" height=\"38\"/>\n                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                        <state key=\"normal\" title=\"Display In-App Message\">\n                                            <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        </state>\n                                        <connections>\n                                            <action selector=\"displayInAppMessage:\" destination=\"mDO-W3-fC2\" eventType=\"touchUpInside\" id=\"wJy-GZ-bi3\"/>\n                                        </connections>\n                                    </button>\n                                    <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"bar\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1YE-tT-35I\" customClass=\"StopwatchSegmentedControl\">\n                                        <rect key=\"frame\" x=\"16\" y=\"63\" width=\"382\" height=\"32\"/>\n                                        <segments>\n                                            <segment title=\"Slideup\"/>\n                                            <segment title=\"Modal\"/>\n                                            <segment title=\"Full\"/>\n                                            <segment title=\"HTML Full\"/>\n                                        </segments>\n                                        <color key=\"tintColor\" red=\"0.13333333333333333\" green=\"0.41960784313725491\" blue=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                        <connections>\n                                            <action selector=\"inAppMessageTypeChanged:\" destination=\"mDO-W3-fC2\" eventType=\"valueChanged\" id=\"kyC-f8-u9a\"/>\n                                        </connections>\n                                    </segmentedControl>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Nf0-3O-unb\">\n                                        <rect key=\"frame\" x=\"16\" y=\"112\" width=\"382\" height=\"1\"/>\n                                        <color key=\"backgroundColor\" red=\"0.86666666670000003\" green=\"0.86666666670000003\" blue=\"0.86666666670000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"1\" id=\"TxN-wR-vLg\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"1YE-tT-35I\" secondAttribute=\"bottom\" constant=\"20\" id=\"4JD-Z8-Opy\"/>\n                                    <constraint firstItem=\"tyC-VM-qi9\" firstAttribute=\"top\" secondItem=\"xSL-MJ-20A\" secondAttribute=\"top\" constant=\"8\" id=\"6r9-cn-dOR\"/>\n                                    <constraint firstItem=\"1YE-tT-35I\" firstAttribute=\"centerX\" secondItem=\"xSL-MJ-20A\" secondAttribute=\"centerX\" id=\"7XJ-7w-M7R\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"Nf0-3O-unb\" secondAttribute=\"bottom\" constant=\"1\" id=\"E2r-wf-70p\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"tyC-VM-qi9\" secondAttribute=\"trailing\" constant=\"16\" id=\"Mk7-gl-btz\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"Nf0-3O-unb\" secondAttribute=\"trailing\" constant=\"16\" id=\"Mnn-zz-VzC\"/>\n                                    <constraint firstItem=\"1YE-tT-35I\" firstAttribute=\"leading\" secondItem=\"xSL-MJ-20A\" secondAttribute=\"leading\" constant=\"16\" id=\"RrY-Cn-s4F\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"114\" id=\"TEI-Q2-f59\"/>\n                                    <constraint firstItem=\"Nf0-3O-unb\" firstAttribute=\"leading\" secondItem=\"xSL-MJ-20A\" secondAttribute=\"leading\" constant=\"16\" id=\"XAm-8Y-MI3\"/>\n                                    <constraint firstItem=\"tyC-VM-qi9\" firstAttribute=\"leading\" secondItem=\"xSL-MJ-20A\" secondAttribute=\"leading\" constant=\"16\" id=\"tbJ-Bf-2Xo\"/>\n                                </constraints>\n                            </view>\n                            <view hidden=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JMX-LN-XIf\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"114\" width=\"414\" height=\"782\"/>\n                                <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"-94\" maxX=\"320\" maxY=\"504\"/>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"JMX-LN-XIf\" firstAttribute=\"top\" secondItem=\"Ts5-L4-diY\" secondAttribute=\"top\" id=\"0Sp-Bc-4E7\"/>\n                            <constraint firstItem=\"xSL-MJ-20A\" firstAttribute=\"leading\" secondItem=\"AT8-s9-IyQ\" secondAttribute=\"leading\" id=\"8CH-cC-6UE\"/>\n                            <constraint firstItem=\"Ts5-L4-diY\" firstAttribute=\"leading\" secondItem=\"AT8-s9-IyQ\" secondAttribute=\"leading\" id=\"Ed5-Gm-Vg8\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Ts5-L4-diY\" secondAttribute=\"trailing\" id=\"GAc-f7-MeD\"/>\n                            <constraint firstItem=\"Ts5-L4-diY\" firstAttribute=\"bottom\" secondItem=\"AT8-s9-IyQ\" secondAttribute=\"bottomMargin\" id=\"UfW-EU-ZLu\"/>\n                            <constraint firstItem=\"xSL-MJ-20A\" firstAttribute=\"top\" secondItem=\"AT8-s9-IyQ\" secondAttribute=\"top\" id=\"WXU-sL-o48\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"JMX-LN-XIf\" secondAttribute=\"bottom\" id=\"Wkq-8z-cBU\"/>\n                            <constraint firstItem=\"JMX-LN-XIf\" firstAttribute=\"trailing\" secondItem=\"Ts5-L4-diY\" secondAttribute=\"trailing\" id=\"Yec-9B-7TQ\"/>\n                            <constraint firstItem=\"JMX-LN-XIf\" firstAttribute=\"leading\" secondItem=\"Ts5-L4-diY\" secondAttribute=\"leading\" id=\"sE9-oW-bXa\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"xSL-MJ-20A\" secondAttribute=\"trailing\" id=\"sk4-Si-gMR\"/>\n                            <constraint firstItem=\"Ts5-L4-diY\" firstAttribute=\"top\" secondItem=\"xSL-MJ-20A\" secondAttribute=\"bottom\" id=\"xwM-iC-neS\"/>\n                        </constraints>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <navigationItem key=\"navigationItem\" id=\"Br4-Wj-UYc\"/>\n                    <connections>\n                        <outlet property=\"HTMLComposerView\" destination=\"JMX-LN-XIf\" id=\"PAo-kn-fEh\"/>\n                        <outlet property=\"inAppMessageTypeSegment\" destination=\"1YE-tT-35I\" id=\"LRB-zk-CsY\"/>\n                        <outlet property=\"tableView\" destination=\"Ts5-L4-diY\" id=\"IZj-vs-FQK\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ezC-nR-x8w\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-2542.4000000000001\" y=\"-2552.9235382308848\"/>\n        </scene>\n        <!--Braze UI-->\n        <scene sceneID=\"UdB-8R-NiI\">\n            <objects>\n                <viewController storyboardIdentifier=\"FeedUIViewController\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"u60-7s-wwM\" customClass=\"FeedUIViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"6S3-Uq-cCv\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"qho-QG-lEP\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Pxs-GF-AmW\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" keyboardDismissMode=\"onDrag\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ti9-D5-sHs\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                                <subviews>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cn3-sJ-J46\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"650\"/>\n                                        <subviews>\n                                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Itm-GN-ctJ\" userLabel=\"Content View\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"650\"/>\n                                                <subviews>\n                                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" insetsLayoutMarginsFromSafeArea=\"NO\" text=\"With Unread Indicator: \" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"abl-Vy-tyH\" userLabel=\"With Unread Indicator:\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"10\" width=\"329\" height=\"18\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Lgt-SU-GU8\">\n                                                        <rect key=\"frame\" x=\"349\" y=\"10\" width=\"51\" height=\"31\"/>\n                                                    </switch>\n                                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Unread cards:\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"h9S-VP-eHp\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"48\" width=\"394\" height=\"18\"/>\n                                                        <fontDescription key=\"fontDescription\" name=\"Helvetica-Bold\" family=\"Helvetica\" pointSize=\"15\"/>\n                                                        <color key=\"textColor\" red=\"0.33333333333333331\" green=\"0.33333333333333331\" blue=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"36C-Qv-kSf\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"86\" width=\"394\" height=\"38\"/>\n                                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Categoried News Feed\">\n                                                            <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                        </state>\n                                                        <connections>\n                                                            <action selector=\"displayCategoriedNews:\" destination=\"u60-7s-wwM\" eventType=\"touchUpInside\" id=\"5hC-e1-Gib\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eYG-0t-ELk\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"144\" width=\"394\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Modal News Feed\"/>\n                                                        <connections>\n                                                            <action selector=\"modalNewsFeedButtonTapped:\" destination=\"u60-7s-wwM\" eventType=\"touchUpInside\" id=\"jhu-Wa-zRx\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bjf-jA-cZc\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"202\" width=\"394\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Navigation News Feed\"/>\n                                                        <connections>\n                                                            <action selector=\"navigationNewsFeedButtonTapped:\" destination=\"u60-7s-wwM\" eventType=\"touchUpInside\" id=\"6Cz-He-0c3\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"s6g-mG-mIK\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"260\" width=\"394\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Legacy Storyboard News Feed\"/>\n                                                        <connections>\n                                                            <action selector=\"legacyStoryboardNewsFeedButtonTapped:\" destination=\"u60-7s-wwM\" eventType=\"touchUpInside\" id=\"5bU-pZ-CHg\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AYj-Qx-l8M\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"356\" width=\"394\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Modal Content Cards\"/>\n                                                        <connections>\n                                                            <action selector=\"modalContentCardsButtonTapped:\" destination=\"u60-7s-wwM\" eventType=\"touchUpInside\" id=\"e7O-s4-Ws0\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Unread content cards:\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Oit-Df-X4h\" userLabel=\"Unread Content Card Label\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"318\" width=\"394\" height=\"18\"/>\n                                                        <fontDescription key=\"fontDescription\" name=\"Helvetica-Bold\" family=\"Helvetica\" pointSize=\"15\"/>\n                                                        <color key=\"textColor\" red=\"0.33333333329999998\" green=\"0.33333333329999998\" blue=\"0.33333333329999998\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                        <nil key=\"highlightedColor\"/>\n                                                    </label>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zu5-Oc-gER\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"414\" width=\"394\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Navigation Content Cards\"/>\n                                                        <connections>\n                                                            <action selector=\"navigationContentCardsButtonTapped:\" destination=\"u60-7s-wwM\" eventType=\"touchUpInside\" id=\"dxJ-hU-tXF\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Hlt-Jn-Z4c\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"472\" width=\"394\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Legacy Storyboard Content Cards\"/>\n                                                        <connections>\n                                                            <action selector=\"legacyStoryboardContentCardsButtonTapped:\" destination=\"u60-7s-wwM\" eventType=\"touchUpInside\" id=\"asu-GL-nN8\"/>\n                                                        </connections>\n                                                    </button>\n                                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MVf-eo-J4a\" userLabel=\"Custom Content Cards\" customClass=\"StopwatchButton\">\n                                                        <rect key=\"frame\" x=\"10\" y=\"530\" width=\"394\" height=\"38\"/>\n                                                        <inset key=\"contentEdgeInsets\" minX=\"10\" minY=\"10\" maxX=\"10\" maxY=\"10\"/>\n                                                        <state key=\"normal\" title=\"Custom Storyboard Content Cards\"/>\n                                                        <connections>\n                                                            <action selector=\"customStoryboardContentCardsButtonTapped:\" destination=\"u60-7s-wwM\" eventType=\"touchUpInside\" id=\"Ht7-81-ntI\"/>\n                                                        </connections>\n                                                    </button>\n                                                </subviews>\n                                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                                <constraints>\n                                                    <constraint firstItem=\"Hlt-Jn-Z4c\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"06P-Ts-tQK\"/>\n                                                    <constraint firstItem=\"s6g-mG-mIK\" firstAttribute=\"top\" secondItem=\"bjf-jA-cZc\" secondAttribute=\"bottom\" constant=\"20\" id=\"0i9-vC-WBR\"/>\n                                                    <constraint firstItem=\"AYj-Qx-l8M\" firstAttribute=\"top\" secondItem=\"Oit-Df-X4h\" secondAttribute=\"bottom\" constant=\"20\" id=\"2CX-7A-00b\"/>\n                                                    <constraint firstItem=\"eYG-0t-ELk\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"3NO-BE-pgC\"/>\n                                                    <constraint firstAttribute=\"height\" constant=\"650\" id=\"5bB-GN-wDU\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"AYj-Qx-l8M\" secondAttribute=\"trailing\" constant=\"10\" id=\"68U-9s-QEb\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"Lgt-SU-GU8\" secondAttribute=\"trailing\" constant=\"16\" id=\"Aoi-nB-28K\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"Hlt-Jn-Z4c\" secondAttribute=\"trailing\" constant=\"10\" id=\"C5Q-Jd-wbe\"/>\n                                                    <constraint firstItem=\"s6g-mG-mIK\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"E6B-Kj-aCg\"/>\n                                                    <constraint firstItem=\"bjf-jA-cZc\" firstAttribute=\"top\" secondItem=\"eYG-0t-ELk\" secondAttribute=\"bottom\" constant=\"20\" id=\"EJ5-e6-O0R\"/>\n                                                    <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"650\" id=\"Eaz-K9-eWG\"/>\n                                                    <constraint firstItem=\"h9S-VP-eHp\" firstAttribute=\"top\" secondItem=\"abl-Vy-tyH\" secondAttribute=\"bottom\" constant=\"20\" id=\"Fvh-rC-1c8\"/>\n                                                    <constraint firstItem=\"zu5-Oc-gER\" firstAttribute=\"top\" secondItem=\"AYj-Qx-l8M\" secondAttribute=\"bottom\" constant=\"20\" id=\"GPh-nG-Akc\"/>\n                                                    <constraint firstItem=\"Lgt-SU-GU8\" firstAttribute=\"leading\" secondItem=\"abl-Vy-tyH\" secondAttribute=\"trailing\" constant=\"10\" id=\"IJY-zx-LPN\"/>\n                                                    <constraint firstItem=\"MVf-eo-J4a\" firstAttribute=\"top\" secondItem=\"Hlt-Jn-Z4c\" secondAttribute=\"bottom\" constant=\"20\" id=\"JZr-bq-bsI\"/>\n                                                    <constraint firstItem=\"bjf-jA-cZc\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"N8U-fv-fDV\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"36C-Qv-kSf\" secondAttribute=\"trailing\" constant=\"10\" id=\"Qnq-NL-CD2\"/>\n                                                    <constraint firstItem=\"Lgt-SU-GU8\" firstAttribute=\"top\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"top\" constant=\"10\" id=\"Ssq-Uz-eOW\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"zu5-Oc-gER\" secondAttribute=\"trailing\" constant=\"10\" id=\"Xr7-XL-RKw\"/>\n                                                    <constraint firstItem=\"h9S-VP-eHp\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"ZkW-JI-xjW\"/>\n                                                    <constraint firstItem=\"MVf-eo-J4a\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"aKe-Ta-C9Q\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"h9S-VP-eHp\" secondAttribute=\"trailing\" constant=\"10\" id=\"bjy-4J-Li4\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"MVf-eo-J4a\" secondAttribute=\"trailing\" constant=\"10\" id=\"ck7-a5-jWh\"/>\n                                                    <constraint firstItem=\"abl-Vy-tyH\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"d82-Rf-jiR\"/>\n                                                    <constraint firstItem=\"s6g-mG-mIK\" firstAttribute=\"centerX\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"centerX\" id=\"dHZ-sq-JO6\"/>\n                                                    <constraint firstItem=\"36C-Qv-kSf\" firstAttribute=\"top\" secondItem=\"h9S-VP-eHp\" secondAttribute=\"bottom\" constant=\"20\" id=\"dty-IE-z03\"/>\n                                                    <constraint firstItem=\"eYG-0t-ELk\" firstAttribute=\"top\" secondItem=\"36C-Qv-kSf\" secondAttribute=\"bottom\" constant=\"20\" id=\"dzp-69-UzS\"/>\n                                                    <constraint firstItem=\"Oit-Df-X4h\" firstAttribute=\"top\" secondItem=\"s6g-mG-mIK\" secondAttribute=\"bottom\" constant=\"20\" id=\"jOD-aP-U3C\"/>\n                                                    <constraint firstItem=\"Oit-Df-X4h\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"kIU-ti-yes\"/>\n                                                    <constraint firstItem=\"36C-Qv-kSf\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"l9Q-Yr-lge\"/>\n                                                    <constraint firstItem=\"AYj-Qx-l8M\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"lYR-Ra-3kT\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"eYG-0t-ELk\" secondAttribute=\"trailing\" constant=\"10\" id=\"nTZ-vP-S8e\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"bjf-jA-cZc\" secondAttribute=\"trailing\" constant=\"10\" id=\"pW2-XJ-b3S\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"s6g-mG-mIK\" secondAttribute=\"trailing\" constant=\"10\" id=\"qZ3-Zo-eRs\"/>\n                                                    <constraint firstItem=\"zu5-Oc-gER\" firstAttribute=\"leading\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"leading\" constant=\"10\" id=\"rFn-ae-yeU\"/>\n                                                    <constraint firstItem=\"Hlt-Jn-Z4c\" firstAttribute=\"top\" secondItem=\"zu5-Oc-gER\" secondAttribute=\"bottom\" constant=\"20\" id=\"tI7-X2-4JX\"/>\n                                                    <constraint firstAttribute=\"trailing\" secondItem=\"Oit-Df-X4h\" secondAttribute=\"trailing\" constant=\"10\" id=\"x0J-rm-lSp\"/>\n                                                    <constraint firstItem=\"abl-Vy-tyH\" firstAttribute=\"top\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"top\" constant=\"10\" id=\"xis-Cv-T1d\"/>\n                                                </constraints>\n                                            </view>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                        <constraints>\n                                            <constraint firstItem=\"Itm-GN-ctJ\" firstAttribute=\"top\" secondItem=\"Cn3-sJ-J46\" secondAttribute=\"top\" id=\"EcN-r2-Dug\"/>\n                                            <constraint firstAttribute=\"height\" constant=\"650\" id=\"e2j-7H-rB3\"/>\n                                            <constraint firstItem=\"Itm-GN-ctJ\" firstAttribute=\"leading\" secondItem=\"Cn3-sJ-J46\" secondAttribute=\"leading\" id=\"u8p-XW-r53\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"Itm-GN-ctJ\" secondAttribute=\"trailing\" id=\"u9C-a5-KYd\"/>\n                                        </constraints>\n                                    </view>\n                                </subviews>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstItem=\"Cn3-sJ-J46\" firstAttribute=\"top\" secondItem=\"Ti9-D5-sHs\" secondAttribute=\"top\" id=\"3z4-1J-i1q\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"Cn3-sJ-J46\" secondAttribute=\"trailing\" id=\"Chz-1Y-V2Y\"/>\n                                    <constraint firstItem=\"Cn3-sJ-J46\" firstAttribute=\"width\" secondItem=\"Ti9-D5-sHs\" secondAttribute=\"width\" id=\"EAq-cB-0V5\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"Cn3-sJ-J46\" secondAttribute=\"bottom\" id=\"Jkg-B6-jH1\"/>\n                                    <constraint firstItem=\"Cn3-sJ-J46\" firstAttribute=\"leading\" secondItem=\"Ti9-D5-sHs\" secondAttribute=\"leading\" id=\"t8x-p5-KMT\"/>\n                                </constraints>\n                            </scrollView>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"Ti9-D5-sHs\" firstAttribute=\"leading\" secondItem=\"Pxs-GF-AmW\" secondAttribute=\"leading\" id=\"IlM-U7-XaN\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"Ti9-D5-sHs\" secondAttribute=\"bottom\" id=\"dGg-C5-s1g\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Ti9-D5-sHs\" secondAttribute=\"trailing\" id=\"oQ1-jz-UVm\"/>\n                            <constraint firstItem=\"Ti9-D5-sHs\" firstAttribute=\"top\" secondItem=\"Pxs-GF-AmW\" secondAttribute=\"top\" id=\"zGd-Uc-tcj\"/>\n                        </constraints>\n                    </view>\n                    <tabBarItem key=\"tabBarItem\" title=\"Braze UI\" image=\"newsfeed.png\" id=\"gw3-T0-tUc\"/>\n                    <navigationItem key=\"navigationItem\" id=\"xfj-vG-KKD\"/>\n                    <connections>\n                        <outlet property=\"contentViewHeightConstraint\" destination=\"5bB-GN-wDU\" id=\"rZi-jz-6I6\"/>\n                        <outlet property=\"scrollView\" destination=\"Ti9-D5-sHs\" id=\"DQz-Kn-0nx\"/>\n                        <outlet property=\"unReadIndicatorSwitch\" destination=\"Lgt-SU-GU8\" id=\"99N-7I-dOL\"/>\n                        <outlet property=\"unreadCardLabel\" destination=\"h9S-VP-eHp\" id=\"03s-XD-Rrz\"/>\n                        <outlet property=\"unreadContentCardLabel\" destination=\"Oit-Df-X4h\" id=\"4AS-Nn-MOX\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dE2-8Z-bEF\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-750.72463768115949\" y=\"-2554.0178571428569\"/>\n        </scene>\n        <!--Container View Controller-->\n        <scene sceneID=\"On6-c2-BFI\">\n            <objects>\n                <viewController useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"P6a-Ow-I6o\" customClass=\"ContainerViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"qHh-U5-NvI\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wNi-tj-dSb\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Bm1-oN-pkx\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"808\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <containerView opaque=\"NO\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sZO-E8-LY1\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"773\"/>\n                            </containerView>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"sZO-E8-LY1\" firstAttribute=\"leading\" secondItem=\"Bm1-oN-pkx\" secondAttribute=\"leading\" id=\"6FJ-Kp-c6i\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"sZO-E8-LY1\" secondAttribute=\"trailing\" id=\"ARw-UU-tzi\"/>\n                            <constraint firstItem=\"wNi-tj-dSb\" firstAttribute=\"top\" secondItem=\"sZO-E8-LY1\" secondAttribute=\"bottom\" constant=\"1\" id=\"fGt-Pn-fx3\"/>\n                            <constraint firstItem=\"sZO-E8-LY1\" firstAttribute=\"top\" secondItem=\"Bm1-oN-pkx\" secondAttribute=\"topMargin\" id=\"kV9-oX-Sw5\"/>\n                        </constraints>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <navigationItem key=\"navigationItem\" id=\"fEe-Ja-t7G\">\n                        <nil key=\"title\"/>\n                    </navigationItem>\n                    <connections>\n                        <outlet property=\"containerView\" destination=\"sZO-E8-LY1\" id=\"ffG-bP-Olp\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ELc-Q7-Yju\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-1140\" y=\"-3273.913043478261\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"nNA-h2-A3W\">\n            <objects>\n                <navigationController storyboardIdentifier=\"ContainerNavigationController\" automaticallyAdjustsScrollViewInsets=\"NO\" useStoryboardIdentifierAsRestorationIdentifier=\"YES\" id=\"2pe-V5-asx\" sceneMemberID=\"viewController\">\n                    <tabBarItem key=\"tabBarItem\" title=\"\" id=\"aP6-j8-blf\"/>\n                    <toolbarItems/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"1jG-xR-sYh\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <color key=\"tintColor\" red=\"0.1333333333\" green=\"0.41960784309999999\" blue=\"0.66666666669999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                        <color key=\"barTintColor\" systemColor=\"systemBackgroundColor\"/>\n                        <textAttributes key=\"titleTextAttributes\">\n                            <color key=\"textShadowColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        </textAttributes>\n                        <textAttributes key=\"largeTitleTextAttributes\">\n                            <color key=\"textShadowColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                        </textAttributes>\n                    </navigationBar>\n                    <nil name=\"viewControllers\"/>\n                    <toolbar key=\"toolbar\" opaque=\"NO\" clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" translucent=\"NO\" id=\"rtD-9q-dci\">\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <color key=\"barTintColor\" systemColor=\"systemBackgroundColor\"/>\n                    </toolbar>\n                    <connections>\n                        <segue destination=\"P6a-Ow-I6o\" kind=\"relationship\" relationship=\"rootViewController\" id=\"dlI-JE-3u5\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"yBK-mq-h1V\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-1920\" y=\"-3274.362818590705\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"newsfeed.png\" width=\"19\" height=\"25\"/>\n        <systemColor name=\"labelColor\">\n            <color red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n        </systemColor>\n        <systemColor name=\"systemBackgroundColor\">\n            <color white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example/Stopwatch/Resources/he.lproj/Localizable.strings",
    "content": "\"Appboy.Stopwatch.initial-view.cancel\" = \"בטל\";\n\"Appboy.Stopwatch.initial-view.upgrade.thank-message\" = \"!תודה שקנית יישום שעון עצר\";\n\"Appboy.Stopwatch.initial-view.start-button.start\" = \"סע\";\n\"Appboy.Stopwatch.initial-view.start-button.stop\" = \"עצור\";\n\n\"Appboy.Stopwatch.test-view.unread-card.message\" = \"%d :כרטיסים שלא נקראו\";\n\"Appboy.Stopwatch.test-view.total-card.message\" = \"%d :כל הכרטיסים\";\n\"Appboy.Stopwatch.test-view.appboy-version.message\" = \"%d :Appboy גרסת\";\n\"Appboy.Stopwatch.test-view.categories.button.title\" = \"קטגוריות\";\n\"Appboy.Stopwatch.test-view.categories.title\" = \"Appboy קטגוריות\";\n\"Appboy.Stopwatch.test-view.categories.All\" = \"כל\";\n\"Appboy.Stopwatch.test-view.categories.Announcement\" = \"הכרזה\";\n\"Appboy.Stopwatch.test-view.categories.Advertising\" = \"פרסום\";\n\"Appboy.Stopwatch.test-view.categories.Social\" = \"חברתי\";\n\"Appboy.Stopwatch.test-view.categories.News\" = \"חדשות\";\n\"Appboy.Stopwatch.test-view.categories.No-Category\" = \"אין קטגוריה\";\n\n\"Appboy.Stopwatch\" = \"יישום שעון עצר\";\n\"Appboy.Stopwatch.alert.cancel-button.title\" = \"אשר\";\n\n\"Appboy.Stowpatch.slideup-test.slideup-is-tap\" = \".מודעה טפחה\";\n\"Appboy.Stowpatch.slideup-test.custom-slideup-message\" = \"!אתה יכול להציג הודעה מותאמת אישית\";\n\n\"Appboy.Stopwatch.user-attributes.user-ID\" = \"שם משתמש\";\n\"Appboy.Stopwatch.user-attributes.first-name\" = \"שם פרטי\";\n\"Appboy.Stopwatch.user-attributes.last-name\" = \"שם משפחה\";\n\"Appboy.Stopwatch.user-attributes.email\" = \"כתובת מייל\";\n\"Appboy.Stopwatch.user-attributes.country\" = \"מדינה\";\n\"Appboy.Stopwatch.user-attributes.home-city\" = \"עיר\";\n\"Appboy.Stopwatch.user-attributes.language\" = \"שפה\";\n\"Appboy.Stopwatch.user-attributes.bio\" = \"ביוגרפיה\";\n\"Appboy.Stopwatch.user-attributes.gender\" = \"מין\";\n\"Appboy.Stopwatch.user-attributes.phone\" = \"מספר טלפון\";\n\"Appboy.Stopwatch.user-attributes.date-of-birth\" = \"תאריך לידה\";\n\"Appboy.Stopwatch.user-attributes.favorite-color\" = \"צבע אהוב\";\n\"Appboy.Stopwatch.user-attributes.favorite-food\" = \"אוכל מועדף\";\n\"Appboy.Stopwatch.user-attributes.push-subscription\" = \"מנוי הודעת דחיפה\";\n\"Appboy.Stopwatch.user-attributes.email-subscription\" = \"מנוי מייל\";\n\"Appboy.Stopwatch.user-attributes.updated-message\" = \".עדכוני פרופיל שלחו\";\n\"Appboy.Stopwatch.user-attributes-array.missing-value\" = \"אנא קלט ערך תכונה מותאמת אישית\";\n\"Appboy.Stopwatch.user-attributes-array.missing-key\" = \"אנא קלט מפתח תכונה מותאמת אישית\";\n\"Appboy.Stopwatch.user-attributes-array.missing-values\" = \"לא ניתן להגדיר ערכי תכונה מותאמת אישית ריק\";\n"
  },
  {
    "path": "Example/Stopwatch/Resources/zh-Hans.lproj/Localizable.strings",
    "content": "\"Appboy.Stopwatch.initial-view.cancel\" = \"取消\";\n\"Appboy.Stopwatch.initial-view.upgrade.thank-message\" = \"感谢你对秒表应用的支持！\";\n\"Appboy.Stopwatch.initial-view.start-button.start\" = \"开始\";\n\"Appboy.Stopwatch.initial-view.start-button.stop\" = \"停止\";\n\n\"Appboy.Stopwatch.test-view.unread-card.message\" = \"未读的消息: %d\";\n\"Appboy.Stopwatch.test-view.total-card.message\" = \"消息总数: %d\";\n\"Appboy.Stopwatch.test-view.appboy-version.message\" = \"Appboy版本: %@\";\n\"Appboy.Stopwatch.test-view.categories.button.title\" = \"类别\";\n\"Appboy.Stopwatch.test-view.categories.All\" = \"All\";\n\"Appboy.Stopwatch.test-view.categories.Announcement\" = \"郑重宣布\";\n\"Appboy.Stopwatch.test-view.categories.Advertising\" = \"广而告之\";\n\"Appboy.Stopwatch.test-view.categories.Social\" = \"交朋结友\";\n\"Appboy.Stopwatch.test-view.categories.News\" = \"新闻消息\";\n\"Appboy.Stopwatch.test-view.categories.No-Category\" = \"无类别\";\n\n\"Appboy.Stopwatch\" = \"秒表应用\";\n\"Appboy.Stopwatch.alert.cancel-button.title\" = \"好的\";\n\n\"Appboy.Stowpatch.slideup-test.slideup-is-tap\" = \"你点了一下信息哦～\";\n\"Appboy.Stowpatch.slideup-test.custom-slideup-message\" = \"我们支持自定义应用内信息！\";\n\n\"Appboy.Stopwatch.user-attributes.user-ID\" = \"用户ID\";\n\"Appboy.Stopwatch.user-attributes.first-name\" = \"名\";\n\"Appboy.Stopwatch.user-attributes.last-name\" = \"姓\";\n\"Appboy.Stopwatch.user-attributes.email\" = \"电子邮件\";\n\"Appboy.Stopwatch.user-attributes.country\" = \"国家\";\n\"Appboy.Stopwatch.user-attributes.home-city\" = \"城市\";\n\"Appboy.Stopwatch.user-attributes.language\" = \"语言\";\n\"Appboy.Stopwatch.user-attributes.bio\" = \"生平简介\";\n\"Appboy.Stopwatch.user-attributes.gender\" = \"性别\";\n\"Appboy.Stopwatch.user-attributes.phone\" = \"电话\";\n\"Appboy.Stopwatch.user-attributes.date-of-birth\" = \"生日\";\n\"Appboy.Stopwatch.user-attributes.favorite-color\" = \"最爱的颜色\";\n\"Appboy.Stopwatch.user-attributes.favorite-food\" = \"最爱的食物\";\n\"Appboy.Stopwatch.user-attributes.updated-message\" = \"您的用户信息已更新。\";\n"
  },
  {
    "path": "Example/Stopwatch/Resources/zh-Hant.lproj/Localizable.strings",
    "content": "\"Appboy.Stopwatch.initial-view.cancel\" = \"取消\";\n\"Appboy.Stopwatch.initial-view.upgrade.thank-message\" = \"感謝你對秒錶應用的支持！\";\n\"Appboy.Stopwatch.initial-view.start-button.start\" = \"開始\";\n\"Appboy.Stopwatch.initial-view.start-button.stop\" = \"停止\";\n\n\"Appboy.Stopwatch.test-view.unread-card.message\" = \"未讀的消息: %d\";\n\"Appboy.Stopwatch.test-view.total-card.message\" = \"消息總數: %d\";\n\"Appboy.Stopwatch.test-view.appboy-version.message\" = \"Appboy版本: %@\";\n\"Appboy.Stopwatch.test-view.categories.button.title\" = \"類別\";\n\"Appboy.Stopwatch.test-view.categories.All\" = \"所有\";\n\"Appboy.Stopwatch.test-view.categories.Announcement\" = \"鄭重宣佈\";\n\"Appboy.Stopwatch.test-view.categories.Advertising\" = \"廣而告之\";\n\"Appboy.Stopwatch.test-view.categories.Social\" = \"交朋結友\";\n\"Appboy.Stopwatch.test-view.categories.News\" = \"新聞消息\";\n\"Appboy.Stopwatch.test-view.categories.No-Category\" = \"無類別定義\";\n\n\"Appboy.Stopwatch\" = \"秒錶應用\";\n\"Appboy.Stopwatch.alert.cancel-button.title\" = \"好的\";\n\n\"Appboy.Stowpatch.slideup-test.slideup-is-tap\" = \"你點了一下信息喔～\";\n\"Appboy.Stowpatch.slideup-test.custom-slideup-message\" = \"我們支持自定義應用內信息！\";\n\n\"Appboy.Stopwatch.user-attributes.user-ID\" = \"用戶ID\";\n\"Appboy.Stopwatch.user-attributes.first-name\" = \"名字\";\n\"Appboy.Stopwatch.user-attributes.last-name\" = \"姓氏\";\n\"Appboy.Stopwatch.user-attributes.email\" = \"電子郵件\";\n\"Appboy.Stopwatch.user-attributes.country\" = \"國家\";\n\"Appboy.Stopwatch.user-attributes.home-city\" = \"城市\";\n\"Appboy.Stopwatch.user-attributes.language\" = \"語言\";\n\"Appboy.Stopwatch.user-attributes.bio\" = \"生平簡介\";\n\"Appboy.Stopwatch.user-attributes.gender\" = \"性別\";\n\"Appboy.Stopwatch.user-attributes.phone\" = \"電話\";\n\"Appboy.Stopwatch.user-attributes.date-of-birth\" = \"生日\";\n\"Appboy.Stopwatch.user-attributes.favorite-color\" = \"最愛的顏色\";\n\"Appboy.Stopwatch.user-attributes.favorite-food\" = \"最爱的食物\";\n\"Appboy.Stopwatch.user-attributes.updated-message\" = \"您的用戶信息已更新。\";\n"
  },
  {
    "path": "Example/Stopwatch/Sources/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n#import <UserNotifications/UserNotifications.h>\n#import <StoreKit/StoreKit.h>\n#import \"ABKInAppMessageControllerDelegate.h\"\n#import \"ABKURLDelegate.h\"\n#import \"ABKInAppMessageUIDelegate.h\"\n\nstatic NSString *const OverrideApiKeyStorageKey = @\"com.appboy.stopwatch.apikey\";\nstatic NSString *const OverrideEndpointStorageKey = @\"com.appboy.stopwatch.endpoint\";\nstatic NSString *const SDKAuthKey = @\"com.appboy.stopwatch.sdkauth\";\nstatic NSString *const SetInAppMessageControllerDelegateKey = @\"com.appboy.stopwatch.iamdelegate\";\nstatic NSString *const SetURLDelegateKey = @\"com.appboy.stopwatch.urldelegate\";\nstatic NSString *const NewSessionTimeoutKey = @\"com.appboy.stopwatch.sessiontimeout\";\n\nstatic NSString *const ApiKeyInUse = @\"com.appboy.stopwatch.apikeyinuse\";\nstatic NSString *const EndpointInUse = @\"com.appboy.stopwatch.endpointinuse\";\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate, UNUserNotificationCenterDelegate,\nABKInAppMessageControllerDelegate, ABKURLDelegate, ABKInAppMessageUIDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n/*!\n * Global setting for Stopwatch toggle to display UI content with a Dark Theme, if possible. This boolean defaults to YES.\n *\n * If NO, display the UI with the default light color, even if the campaign includes dark theme fields.\n * If YES, attempt to display the dark theme colors if available; otherwise if not available, display the light colors.\n */\n@property (nonatomic, assign) BOOL stopwatchEnableDarkTheme;\n@property (nonatomic, assign) BOOL showSilentPushAlerts;\n\n@end\n\n"
  },
  {
    "path": "Example/Stopwatch/Sources/AppDelegate.m",
    "content": "#import <AppboyKit.h>\n#import <CoreLocation/CoreLocation.h>\n\n#import \"AppDelegate.h\"\n#import \"ABKPushUtils.h\"\n#import \"IDFADelegate.h\"\n#import \"SdkAuthDelegate.h\"\n#import \"Branch.h\"\n#import \"AlertControllerUtils.h\"\n#import \"ColorUtils.h\"\n#import \"LoggerUtils.h\"\n\n#ifdef PUSH_DEV\nstatic NSString *const AppboyApiKey = @\"appboy-sample-ios\";\n#else\nstatic NSString *const AppboyApiKey = @\"appboy-sample-ios\";\n#endif\n\n@implementation AppDelegate\n\n# pragma mark - UIApplicationDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  StopwatchDebugMsg(@\"Application launched with options: %@\", launchOptions);\n\n  NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];\n  NSString *overrideApiKey = [preferences stringForKey:OverrideApiKeyStorageKey];\n  NSString *overrideEndpoint = [preferences stringForKey:OverrideEndpointStorageKey];\n  NSString *apiKeyToUse = (overrideApiKey != nil && overrideApiKey.length != 0) ? overrideApiKey : AppboyApiKey;\n\n  NSMutableDictionary *appboyOptions = [NSMutableDictionary dictionary];\n  appboyOptions[ABKRequestProcessingPolicyOptionKey] = @(ABKAutomaticRequestProcessing);\n  appboyOptions[ABKMinimumTriggerTimeIntervalKey] = @(1);\n  if (overrideEndpoint != nil) {\n    appboyOptions[ABKEndpointKey] = overrideEndpoint;\n  } else {\n    appboyOptions[ABKEndpointKey] = @\"sondheim.appboy.com\";\n  }\n\n  IDFADelegate *idfaDelegate = [[IDFADelegate alloc] init];\n  appboyOptions[ABKIDFADelegateKey] = idfaDelegate;\n\n  // Set custom session timeout\n  id sessionTimeout = [preferences objectForKey:NewSessionTimeoutKey];\n  if (sessionTimeout != nil) {\n    appboyOptions[ABKSessionTimeoutKey] = sessionTimeout;\n  }\n\n  // Set ABKInAppMessageControllerDelegate on startup\n  BOOL setInAppDelegate = [preferences boolForKey:SetInAppMessageControllerDelegateKey];\n  if (setInAppDelegate) {\n    StopwatchDebugMsg(@\"Setting ABKInAppMessageControllerDelegate for app run.\", nil);\n    appboyOptions[ABKInAppMessageControllerDelegateKey] = self;\n  }\n\n  // Set ABKURLDelegate on startup\n  BOOL setUrlDelegate = YES; // default value\n  if ([preferences objectForKey:SetURLDelegateKey] != nil) {\n    setUrlDelegate = [preferences boolForKey:SetURLDelegateKey];\n  } else {\n    [preferences setBool:setUrlDelegate forKey:SetURLDelegateKey];\n  }\n  if (setUrlDelegate) {\n    StopwatchDebugMsg(@\"Setting ABKURLDelegateKey for app run.\", nil);\n    appboyOptions[ABKURLDelegateKey] = self;\n  }\n  appboyOptions[ABKPushStoryAppGroupKey] = @\"group.com.appboy.stopwatch\";\n\n  // Enable SDK Auth and set SDK Auth delegate on startup\n  BOOL sdkAuthEnabled = YES; // default value\n  if ([preferences objectForKey:SDKAuthKey] != nil) {\n    sdkAuthEnabled = [preferences boolForKey:SDKAuthKey];\n  } else {\n    [preferences setBool:sdkAuthEnabled forKey:SDKAuthKey];\n  }\n  if (sdkAuthEnabled) {\n    StopwatchDebugMsg(@\"Enabling SDK Authentication for app run.\", nil);\n    appboyOptions[ABKEnableSDKAuthenticationKey] = @YES;\n    appboyOptions[ABKSdkAuthenticationDelegateKey] = [[SdkAuthDelegate alloc] init];\n  }\n\n  // Starts up Braze, opening a new session and causing an updated in-app message/feed to be requested.\n  [[NSUserDefaults standardUserDefaults] setObject:apiKeyToUse forKey:ApiKeyInUse];\n  [[NSUserDefaults standardUserDefaults] setObject:appboyOptions[ABKEndpointKey] forKey:EndpointInUse];\n  [Appboy startWithApiKey:apiKeyToUse\n          inApplication:application\n      withLaunchOptions:launchOptions\n      withAppboyOptions:appboyOptions];\n\n  // Define and initialize Branch\n  Branch *branch = [Branch getInstance];\n  [branch initSessionWithLaunchOptions:launchOptions andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {\n    if (!error && params) {\n      // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app\n      StopwatchDebugMsg(@\"Calling Branch deep link handler with params: %@\", params.description);\n    }\n  }];\n\n  // Set ABKInAppMessageUIDelegate\n  [[Appboy sharedInstance].inAppMessageController.inAppMessageUIController setInAppMessageUIDelegate:self];\n\n  [self setUpRemoteNotifications];\n  [[Appboy sharedInstance] addSdkMetadata:@[ABKSdkMetadataCocoaPods]];\n  self.stopwatchEnableDarkTheme = YES;\n  self.showSilentPushAlerts = NO;\n\n  StopwatchDebugMsg(@\"Appboy device identifier is %@\", [[Appboy sharedInstance] getDeviceId]);\n\n  return YES;\n}\n\n- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler {\n  StopwatchDebugMsg(@\"Continuing userActivity: %@\", userActivity);\n\n  if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {\n    NSString *urlString = [[userActivity.webpageURL absoluteString] stringByRemovingPercentEncoding];\n    [self handleUniversalLinkString:urlString withABKURLDelegate:NO];\n  }\n\n  return [[Branch getInstance] continueUserActivity:userActivity];\n}\n\n// Pass the deviceToken to Braze as well\n- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\n  StopwatchDebugMsg(@\"Device Token is %@\", [NSString stringWithFormat:@\"%@\", deviceToken]);\n  [[Appboy sharedInstance] registerDeviceToken:deviceToken];\n}\n\n- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {\n  StopwatchDebugMsg(@\"Failed to register with error: %@\", error.localizedDescription);\n}\n\n// When a notification is received, pass it to Braze. If the notification is received when the app\n// is in the background, Braze will try to fetch the news feed, and call completionHandler after\n// the request finished; otherwise, Braze won't fetch the news feed, nor call the completionHandler.\n- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {\n  if ([ABKPushUtils isAppboyInternalRemoteNotification:userInfo]) {\n    StopwatchDebugMsg(@\"Detected Braze internal push\", nil);\n  }\n  [[Appboy sharedInstance] registerApplication:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];\n\n  if ([ABKPushUtils isAppboyRemoteNotification:userInfo] && ![ABKPushUtils isAppboyInternalRemoteNotification:userInfo]) {\n    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;\n    StopwatchDebugMsg(@\"Remote notification was sent from Braze, clearing badge number\", nil);\n\n    if ([ABKPushUtils isAppboySilentRemoteNotification:userInfo]) {\n      if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive && self.showSilentPushAlerts) {\n        [AlertControllerUtils presentAlertWithOKButtonForTitle:@\"Silent Push Received\"\n                                                       message:[self getExtrasFromPush:userInfo]\n                                                  presentingVC:[self topViewController:self.window.rootViewController]];\n      }\n    }\n  }\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n  /*\n   Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n   */\n  StopwatchDebugMsg(@\"Application is active.\", nil);\n  [UIApplication sharedApplication].applicationIconBadgeNumber = 0;\n}\n\n- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {\n  StopwatchDebugMsg(@\"Opening url: %@\", url.absoluteString);\n\n  // Handle deep linking with scheme beginning with \"stopwatch\"\n  NSString *urlString = url.absoluteString.stringByRemovingPercentEncoding;\n  if ([urlString isEqualToString:@\"stopwatch:appstore-review\"]) {\n    StopwatchDebugMsg(@\"Received app store review request.\", nil);\n    if (@available(iOS 10.3, *)) {\n      [SKStoreReviewController requestReview];\n    }\n    return YES;\n  }\n  [AlertControllerUtils presentAlertWithOKButtonForTitle:@\"Deep Linking\"\n                                                 message:urlString\n                                            presentingVC:[self topViewController:self.window.rootViewController]];\n\n  // Handle Branch deep links\n  [[Branch getInstance] handleDeepLink:url];\n\n  return YES;\n}\n\n#pragma mark - Braze Push Registration\n\n- (void)setUpPushWithUserNotificationCenter {\n  UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];\n  UNAuthorizationOptions options = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge;\n  if (@available(iOS 12.0, *)) {\n    options = options | UNAuthorizationOptionProvisional;\n  }\n  [center requestAuthorizationWithOptions:(options)\n                        completionHandler:^(BOOL granted, NSError * _Nullable error) {\n                          [[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted];\n                        }];\n  center.delegate = self;\n\n  UNNotificationAction *likeAction = [UNNotificationAction actionWithIdentifier:@\"LIKE_IDENTIFIER\"\n                                                                          title:@\"Like\"\n                                                                        options:UNNotificationActionOptionForeground];\n  UNNotificationAction *unlikeAction = [UNNotificationAction actionWithIdentifier:@\"UNLIKE_IDENTIFIER\"\n                                                                            title:@\"Unlike\"\n                                                                          options:0];\n  UNNotificationCategory *likeCategory = [UNNotificationCategory categoryWithIdentifier:@\"LIKE_CATEGORY\"\n                                                                                actions:@[likeAction, unlikeAction]\n                                                                      intentIdentifiers:@[]\n                                                                                options:0];\n  // Adding Braze default categories\n  NSMutableSet *categories = [NSMutableSet setWithSet:[ABKPushUtils getAppboyUNNotificationCategorySet]];\n  [categories addObject:likeCategory];\n  [center setNotificationCategories:categories];\n  [[UIApplication sharedApplication] registerForRemoteNotifications];\n}\n\n- (void)setUpRemoteNotifications {\n  [self setUpPushWithUserNotificationCenter];\n}\n\n# pragma mark - UNUserNotificationCenterDelegate\n\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center\n       willPresentNotification:(UNNotification *)notification\n         withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {\n  StopwatchDebugMsg(@\"Notification received in foreground: %@\", notification.request.content.userInfo);\n  if (@available(iOS 14.0, *)) {\n    completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);\n  } else {\n    completionHandler(UNNotificationPresentationOptionAlert);\n  }\n}\n\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {\n  StopwatchDebugMsg(@\"Notification response received with user info: %@\", response.notification.request.content.userInfo);\n  [[Appboy sharedInstance] userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];\n  \n  if ([ABKPushUtils isAppboyUserNotification:response]) {\n    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;\n    StopwatchDebugMsg(@\"User notification was sent from Braze, clearing badge number.\", nil);\n  }\n}\n\n#pragma mark - ABKInAppMessageControllerDelegate\n\n/*!\n* Note that this method will only be called if setting ABKInAppMessageControllerDelegate is enabled from the Stopwatch UI. By default, ABKInAppMessageControllerDelegate is not set.\n*/\n- (ABKInAppMessageDisplayChoice)beforeInAppMessageDisplayed:(ABKInAppMessage *)inAppMessage {\n  StopwatchDebugMsg(@\"Before inAppMessage is displayed: %@\", inAppMessage);\n\n  inAppMessage.overrideUserInterfaceStyle = [[[NSUserDefaults standardUserDefaults] valueForKey:StopwatchInAppThemeSettingsKey] integerValue];\n  if (inAppMessage.extras != nil && inAppMessage.extras[@\"Appstore Review\"] != nil) {\n    [[UIApplication sharedApplication] openURL:inAppMessage.uri options:@{} completionHandler:nil];\n    return ABKDiscardInAppMessage;\n  }\n\n  // Allows Stopwatch to disable dark theme for in-app messages based off a toggle switch\n  inAppMessage.enableDarkTheme = self.stopwatchEnableDarkTheme;\n\n  return ABKDisplayInAppMessageNow;\n}\n\n- (void)noMatchingTriggerForEvent:(ABKTriggerEventType)eventType\n                             name:(nullable NSString *)name {\n  StopwatchDebugMsg(@\"ABKInAppMessageControllerDelegate method called for eventType: %ld, and name: %@\",\n                    (long)eventType, name);\n}\n\n#pragma mark - ABKInAppMessageUIDelegate\n\n/*- (WKWebViewConfiguration *)setCustomWKWebViewConfiguration {\n  WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];\n  webViewConfiguration.allowsInlineMediaPlayback = YES;\n  webViewConfiguration.suppressesIncrementalRendering = YES;\n  if (@available(iOS 10.0, *)) {\n    webViewConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;\n  } else {\n    webViewConfiguration.requiresUserActionForMediaPlayback = YES;\n  }\n  return webViewConfiguration;\n}*/\n\n#pragma mark - ABKURLDelegate\n\n/*!\n* Note that this method will only be called if setting ABKURLDelegate is enabled from the Stopwatch UI. By default, ABKURLDelegate is set.\n*/\n- (BOOL)handleAppboyURL:(NSURL *)url fromChannel:(ABKChannel)channel withExtras:(NSDictionary *)extras {\n  // Use ABKURLDelegate to handle Universal Links\n  if ([[url.host lowercaseString] isEqualToString:@\"sweeney.appboy.com\"]) {\n    [self handleUniversalLinkString:[[url absoluteString] stringByRemovingPercentEncoding] withABKURLDelegate:YES];\n    return YES;\n  }\n  // Let Braze handle links otherwise\n  return NO;\n}\n\n# pragma mark - Helper methods\n\n- (void)handleUniversalLinkString:(NSString *)uriString withABKURLDelegate:(BOOL)withURIDelegate {\n  NSString *alertTitle = withURIDelegate ? @\"Universal Link (ABKURLDelegate)\" : @\"Universal Link (UIApplicationDelegate)\";\n  [AlertControllerUtils presentAlertWithOKButtonForTitle:alertTitle\n                                                 message:uriString\n                                            presentingVC:[self topViewController:self.window.rootViewController]];\n}\n\n- (NSString *)getExtrasFromPush:(NSDictionary *)userInfo {\n  NSMutableDictionary *dict =  [[NSMutableDictionary alloc] init];\n  for (NSString* key in userInfo) {\n    // Skip 'ab' because it's a Braze defined key and 'aps' because it's an Apple defined key\n    if ([key isEqualToString:@\"aps\"] || [key isEqualToString:@\"ab\"]) {\n      continue;\n    }\n    dict[key] = userInfo[key];\n  }\n  return ([dict count] > 0) ? [NSString stringWithFormat:@\"%@\", dict] : @\"No KVP's attached\";\n}\n\n- (UIViewController *)topViewController:(UIViewController *)topVC {\n  while (true) {\n    if (topVC.presentedViewController) {\n      topVC = topVC.presentedViewController;\n    } else if ([topVC isKindOfClass:[UINavigationController class]]) {\n      topVC = ((UINavigationController *)topVC).topViewController;\n    } else if ([topVC isKindOfClass:[UITabBarController class]]) {\n      topVC = ((UITabBarController *)topVC).selectedViewController;\n    } else {\n      return topVC;\n    }\n  }\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Categories/UIViewController+Keyboard.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface UIViewController (Keyboard)\n\n- (void)dismissKeyboard;\n- (void)addDismissGestureForView:(UIView *)view;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Categories/UIViewController+Keyboard.m",
    "content": "#import \"UIViewController+Keyboard.h\"\n\n@implementation UIViewController (Keyboard)\n\n- (void)addDismissGestureForView:(UIView *)view {\n  UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];\n  tapGesture.numberOfTapsRequired = 1;\n  [view addGestureRecognizer:tapGesture];\n}\n\n- (void)dismissKeyboard {\n  [self.view endEditing:YES];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/AlertControllerUtils.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface AlertControllerUtils : NSObject\n\n// Alerts presented with this method will have a duration of 500ms.\n+ (void)presentTemporaryAlertWithTitle:(NSString *)title\n                                 message:(NSString *)message\n                            presentingVC:(UIViewController *)presentingVC;\n\n+ (void)presentTemporaryAlertWithTitle:(NSString *)title\n                                 message:(NSString *)message\n                            presentingVC:(UIViewController *)presentingVC\n                              duration:(NSInteger)duration;\n\n+ (void)presentAlertWithOKButtonForTitle:(NSString *)title\n                                 message:(NSString *)message\n                            presentingVC:(UIViewController *)presentingVC;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/AlertControllerUtils.m",
    "content": "#import \"AlertControllerUtils.h\"\n\n@implementation AlertControllerUtils\n\n+ (void)presentTemporaryAlertWithTitle:(NSString *)title\n                                 message:(NSString *)message\n                            presentingVC:(UIViewController *)presentingVC\n{\n  [AlertControllerUtils presentTemporaryAlertWithTitle:title\n                                               message:message\n                                          presentingVC:presentingVC\n                                              duration:0.5];\n}\n\n+ (void)presentTemporaryAlertWithTitle:(NSString *)title\n                                 message:(NSString *)message\n                            presentingVC:(UIViewController *)presentingVC\n                              duration:(NSInteger)duration\n{\n  UIAlertController *alert = [UIAlertController alertControllerWithTitle:title\n                                                                 message:message\n                                                          preferredStyle:UIAlertControllerStyleAlert];\n  [presentingVC presentViewController:alert animated:YES completion:nil];\n\n  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{\n    [alert dismissViewControllerAnimated:YES completion:nil];\n  });\n}\n\n+ (void)presentAlertWithOKButtonForTitle:(NSString *)title\n                                 message:(NSString *)message\n                            presentingVC:(UIViewController *)presentingVC\n{\n  UIAlertController *alert = [UIAlertController alertControllerWithTitle:title\n                                                                 message:message\n                                                          preferredStyle:UIAlertControllerStyleAlert];\n  UIAlertAction *okButton = [UIAlertAction actionWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.alert.cancel-button.title\", nil)\n                                                     style:UIAlertActionStyleDefault\n                                                   handler:nil];\n  [alert addAction:okButton];\n  [presentingVC presentViewController:alert animated:YES completion:nil];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/ColorUtils.h",
    "content": "#import <UIKit/UIKit.h>\n\n/*\n * Example to show custom in app themes that override OS behavior in Content Cards\n * and InAppMessages.\n */\ntypedef NS_ENUM(NSInteger, StopwatchInAppThemes) {\n  StopwatchInAppThemeDefault,\n  StopwatchInAppThemeLight,\n  StopwatchInAppThemeDark\n};\n\nstatic NSString *const StopwatchInAppThemeSettingsKey = @\"custom_theme\";\n\n@interface ColorUtils : NSObject\n\n+ (UIColor *)stopwatchBlueColor;\n\n/*\n * Currently, this is only a custom theme for iOS13 and later with dark and light mode support.\n * Method does not implement anything for earlier iOS versions.\n */\n+ (void)applyThemeToViewController:(UIViewController *)viewController;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/ColorUtils.m",
    "content": "#import \"ColorUtils.h\"\n\n@implementation ColorUtils\n\n+ (UIColor *)stopwatchBlueColor {\n  return [UIColor colorWithRed:(14.0/255.0) green:(32.0/255.0) blue:(65.0/255.0) alpha:1.0];\n}\n\n+ (void)applyThemeToViewController:(UIViewController *)viewController {\n  // No-op for iOS versions earlier than 13, haven't implemented theme support for those versions\n  if (@available(iOS 13.0, *)) {\n    if ([[NSUserDefaults standardUserDefaults] integerForKey:StopwatchInAppThemeSettingsKey] == StopwatchInAppThemeDark) {\n      // Force dark mode regardless of user settings in OS.\n      viewController.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;\n    } else if ([[NSUserDefaults standardUserDefaults] integerForKey:StopwatchInAppThemeSettingsKey] == StopwatchInAppThemeLight) {\n      // Force light mode regardless of user settings in OS.\n      viewController.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;\n    } else {\n      // Default theme behavior will leave the OS settings alone.\n      // This value will respect the system UI style of dark or light mode\n      viewController.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;\n    }\n    for (UIViewController *childVC in viewController.childViewControllers) {\n      [ColorUtils applyThemeToViewController:childVC];\n    }\n  }\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/IDFADelegate.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ABKIDFADelegate.h\"\n\n@interface IDFADelegate : NSObject <ABKIDFADelegate>\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/IDFADelegate.m",
    "content": "#import \"IDFADelegate.h\"\n#import <AdSupport/ASIdentifierManager.h>\n#import <AppTrackingTransparency/AppTrackingTransparency.h>\n\n@implementation IDFADelegate\n\n- (NSString *)advertisingIdentifierString {\n  return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];\n}\n\n- (BOOL)isAdvertisingTrackingEnabledOrATTAuthorized {\n  if (@available(iOS 14, *)) {\n    return [ATTrackingManager trackingAuthorizationStatus] == ATTrackingManagerAuthorizationStatusAuthorized;\n  }\n  return [[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/LoggerUtils.h",
    "content": "#import <Foundation/Foundation.h>\n\n/*!\n * Prints the formatted string prefixed with a tag and the calling method's signature.\n *\n * Example:\n * StopwatchDebugMsg(@\"Hello %@\", @\"there\");\n * would print out\n * AppName[26248:c07] [STOPWATCH] -[ClassName methodName] Hello there\n */\n#define StopwatchDebugMsg(_str, _val...) {\\\nNSLog(@\"[STOPWATCH] %s \" _str,  __PRETTY_FUNCTION__, _val);\\\n}\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/SdkAuthDelegate.h",
    "content": "#import <Foundation/Foundation.h>\n#import <AppboyKit.h>\n\n@interface SdkAuthDelegate : NSObject <ABKSdkAuthenticationDelegate>\n\n/*\n * Requests the sdk authentication token.\n *\n * This is an example implementation using a simple endpoint to request an authentication token for\n * a specific user id.\n * Your implementation can differ greatly depending on your authentication flow.\n *\n * The completion block is called with a nil token when the request fails.\n */\n- (void)requestSdkAuthTokenForUserId:(nullable NSString *)userId\n                          completion:(void (^ _Nonnull)(NSString * _Nullable token))completion;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Utils/SdkAuthDelegate.m",
    "content": "#import <AppboyKit.h>\n#import \"LoggerUtils.h\"\n#import \"SdkAuthDelegate.h\"\n\nstatic NSString *const SdkAuthTokenEndpoint = @\"https://us-central1-jwt-responder.cloudfunctions.net/getToken\";\n\n@implementation SdkAuthDelegate\n\n#pragma mark - ABKSdkAuthenticationDelegate\n\n- (void)handleSdkAuthenticationError:(ABKSdkAuthenticationError *)authError {\n  StopwatchDebugMsg(@\"SDK Authentication Error: %ld %@\", (long)authError.code, authError.reason);\n\n  if (authError.userId\n      && Appboy.sharedInstance.user.userID\n      && ![authError.userId isEqualToString:Appboy.sharedInstance.user.userID]) {\n    StopwatchDebugMsg(@\"SDK Authentication Error: error user id does not match current user id, skipping refresh token request\", nil);\n  }\n\n  // Request + update SDK authentication token\n  [self requestSdkAuthTokenForUserId:Appboy.sharedInstance.user.userID\n                          completion:^(NSString * token) {\n    [Appboy.sharedInstance setSdkAuthenticationSignature:token];\n  }];\n}\n\n#pragma mark - Helper Methods\n\n- (void)requestSdkAuthTokenForUserId:(nullable NSString *)userId\n                          completion:(void (^ _Nonnull)(NSString * _Nullable token))completion {\n  if (userId == nil) {\n    StopwatchDebugMsg(@\"SDK Authentication Error: no user id, cannot refresh authentication token\", nil);\n    return;\n  }\n\n  // Setup request\n  NSURL *url = [NSURL URLWithString:SdkAuthTokenEndpoint];\n  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n  request.HTTPMethod = @\"POST\";\n  NSDictionary *body = @{@\"data\": @{@\"user_id\": userId}};\n  request.HTTPBody = [NSJSONSerialization dataWithJSONObject:body options:0 error:nil];\n  request.allHTTPHeaderFields = @{\n    @\"Content-Type\": @\"application/json\",\n    @\"Accept\": @\"application/json\"\n  };\n\n  // Launch request\n  NSURLSession *session = [NSURLSession sharedSession];\n  NSURLSessionDataTask *task =\n    [session dataTaskWithRequest:request\n               completionHandler:^(NSData * _Nullable data,\n                                   NSURLResponse * _Nullable response,\n                                   NSError * _Nullable error) {\n      if (data.length == 0 || response == nil || error) {\n        StopwatchDebugMsg(\"SDK Authentication Error: failed to refresh auth token - error: %@\", error)\n        // Completion failure\n        dispatch_async(dispatch_get_main_queue(), ^{\n          completion(nil);\n        });\n        return;\n      }\n\n      NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n      NSMutableString *token = [payload[@\"data\"][@\"token\"] mutableCopy];\n\n      // Completion success\n      dispatch_async(dispatch_get_main_queue(), ^{\n        completion(token);\n      });\n    }];\n\n  [task resume];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/About/AboutViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface AboutViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UILabel *apiKeyLabel;\n@property (weak, nonatomic) IBOutlet UILabel *apiEndpointLabel;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/About/AboutViewController.m",
    "content": "#import \"AboutViewController.h\"\n#import \"AppboyKit.h\"\n#import \"AppDelegate.h\"\n\n@implementation AboutViewController\n\n- (void)viewDidLoad {\n  [self updateLabels];\n}\n\n- (void)updateLabels {\n  self.apiKeyLabel.numberOfLines = 0;\n  self.apiKeyLabel.text = [NSString stringWithFormat:@\"API Key: %@\", [[NSUserDefaults standardUserDefaults] stringForKey:ApiKeyInUse]];\n  [self.apiKeyLabel sizeToFit];\n\n  self.apiEndpointLabel.numberOfLines = 0;\n  self.apiEndpointLabel.text = [NSString stringWithFormat:@\"Endpoint: %@\", [[NSUserDefaults standardUserDefaults] stringForKey:EndpointInUse]];\n  [self.apiEndpointLabel sizeToFit];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/Data/DataViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface DataViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UILabel *sdkState;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/Data/DataViewController.m",
    "content": "#import \"DataViewController.h\"\n#import \"AppboyKit.h\"\n\n@implementation DataViewController\n\nstatic NSString *const sdkEnabled = @\"SDK is Enabled\";\nstatic NSString *const sdkDisabled = @\"SDK is Disabled\";\nstatic NSString *const sdkWillBeEnabled = @\"SDK will be enabled on next app run\";\n\n- (void)viewDidLoad {\n  [self updateSdkStateLabelText];\n}\n\n- (IBAction)wipeDataButton:(id)sender {\n  [Appboy wipeDataAndDisableForAppRun];\n  [self updateSdkStateLabelText];\n}\n\n- (IBAction)enableSDKButton:(id)sender {\n  [Appboy requestEnableSDKOnNextAppRun];\n  self.sdkState.text = [Appboy sharedInstance] != nil ? sdkEnabled : sdkWillBeEnabled;\n}\n\n- (IBAction)disableSDKButton:(id)sender {\n  [Appboy disableSDK];\n  [self updateSdkStateLabelText];\n}\n\n- (void) updateSdkStateLabelText {\n  // Using the presence of the singleton as a proxy for being disabled\n  // Clients should have their own business logic for determining when to disable the SDK and understanding the SDK's current state\n  self.sdkState.text = [Appboy sharedInstance] != nil ? sdkEnabled : sdkDisabled;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/Misc/CustomThemesDataSource.h",
    "content": "#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface CustomThemesDataSource : NSObject <UIPickerViewDelegate, UIPickerViewDataSource>\n\n- (NSInteger)currentTheme;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/Misc/CustomThemesDataSource.m",
    "content": "#import \"CustomThemesDataSource.h\"\n#import \"ColorUtils.h\"\n\n@implementation CustomThemesDataSource\n\n- (NSArray*)listOfThemes {\n  return @[@\"Default\", @\"Force Light\", @\"Force Dark\"];\n}\n\n- (NSInteger)currentTheme {\n  return [[[NSUserDefaults standardUserDefaults] valueForKey:StopwatchInAppThemeSettingsKey] integerValue];\n}\n\n- (void)setTheme:(NSInteger)theme {\n  [[NSUserDefaults standardUserDefaults] setInteger:theme forKey:StopwatchInAppThemeSettingsKey];\n}\n\n- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {\n  return 1;\n}\n\n- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {\n  return 3;\n}\n\n- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {\n  [self setTheme:row];\n  [ColorUtils applyThemeToViewController:[[[[UIApplication sharedApplication] delegate] window] rootViewController]];\n}\n\n- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {\n  return [[self listOfThemes] objectAtIndex:row];\n}\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/Misc/GeofencesViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <MapKit/MapKit.h>\n\n@interface GeofencesViewController : UIViewController <MKMapViewDelegate>\n\n@property (weak, nonatomic) IBOutlet MKMapView *mapView;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/Misc/GeofencesViewController.m",
    "content": "#import \"GeofencesViewController.h\"\n\n@implementation GeofencesViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  \n  self.mapView.delegate = self;\n  CLLocation *initialLocation;\n  CLLocationManager *geofenceLocationManager = [[CLLocationManager alloc] init];\n  for (CLCircularRegion *region in geofenceLocationManager.monitoredRegions) {\n    if ([region.identifier hasPrefix:@\"ab_\"]) {\\\n      if (initialLocation == nil) {\n        initialLocation = [[CLLocation alloc] initWithLatitude:region.center.latitude longitude:region.center.longitude];\n      }\n      [self.mapView addOverlay:[MKCircle circleWithCenterCoordinate:region.center radius:region.radius]];\n    }\n  }\n  \n  if (initialLocation != nil) {\n   [self centerMapOnLocation:initialLocation];\n  }\n}\n\n- (void)centerMapOnLocation:(CLLocation *)location {\n  MKCoordinateSpan coordinateSpan = MKCoordinateSpanMake(.1, .1);\n  MKCoordinateRegion coordinateRegion = MKCoordinateRegionMake(location.coordinate, coordinateSpan);\n  [self.mapView setRegion:coordinateRegion animated:YES];\n}\n\n- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {\n  if ([overlay isKindOfClass:MKCircle.class]) {\n    MKCircleRenderer *circleRenderer = [[MKCircleRenderer alloc] initWithOverlay:overlay];\n    circleRenderer.lineWidth = 1.0;\n    circleRenderer.strokeColor = [UIColor purpleColor];\n    circleRenderer.fillColor = [[UIColor purpleColor] colorWithAlphaComponent:(0.4)];\n    return circleRenderer;\n  }\n  \n  return nil;\n}\n\n- (void)didReceiveMemoryWarning {\n  [super didReceiveMemoryWarning];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/Misc/MiscViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <CoreLocation/CoreLocation.h>\n\n@interface MiscViewController : UIViewController <UIScrollViewDelegate, CLLocationManagerDelegate>\n\n@property IBOutlet UILabel *versionLabel;\n@property IBOutlet UILabel *flushModeLabel;\n@property NSInteger attributionCounter;\n@property IBOutlet UIScrollView *scrollView;\n@property IBOutlet UITextField *apiKeyTextField;\n@property IBOutlet UITextField *endointTextField;\n@property IBOutlet UITextField *sessionTimeoutTextField;\n\n@property (weak, nonatomic) IBOutlet UISwitch *sdkAuthSwitch;\n@property (weak, nonatomic) IBOutlet UISwitch *inAppMessageDelegateSwitch;\n@property (weak, nonatomic) IBOutlet UISwitch *urlDelegateSwitch;\n\n// Stopwatch setting that determines to enable/disable Dark Mode colors\n@property (strong, nonatomic) IBOutlet UISwitch *allowDarkThemeToggle;\n// Stopwatch custom theme example\n@property IBOutlet UILabel *customThemeLabel;\n@property (strong, nonatomic) IBOutlet UIPickerView *customThemePicker;\n\n// Stopwatch setting that determines to display silent push alerts\n@property (weak, nonatomic) IBOutlet UISwitch *showSilentPushAlertsToggle;\n\n- (IBAction)flushAppboyData:(id)sender;\n- (IBAction)changeAppboyFlushMode:(id)sender;\n- (IBAction)logAttributionData:(id)sender;\n- (IBAction)launchCachedFilesAlertView:(id)sender;\n- (IBAction)logSingleLocation:(id)sender;\n- (IBAction)setInAppDelegateSwitchChanged:(id)sender;\n- (IBAction)urlDelegateSwitchChanged:(id)sender;\n- (IBAction)setSessionTimeout:(id)sender;\n- (IBAction)manuallyRequestGeofences:(id)sender;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Advanced/Misc/MiscViewController.m",
    "content": "#import \"MiscViewController.h\"\n#import <AppboyKit.h>\n#import \"ABKAttributionData.h\"\n#import \"ABKLocationManager.h\"\n#import \"AppDelegate.h\"\n#import \"AlertControllerUtils.h\"\n#import \"CustomThemesDataSource.h\"\n#import \"LoggerUtils.h\"\n\n@interface MiscViewController ()\n\n@property (nonatomic, weak) IBOutlet NSLayoutConstraint *contentViewHeightConstraint;\n@property (nonatomic, strong) CustomThemesDataSource *customThemesDataSource;\n\n- (void)updateScrollViewContentSize;\n- (void)setViewBottomSpace:(CGFloat)bottomSpace;\n\n@end\n\n@implementation MiscViewController\n\n- (void)viewDidLoad{\n  [super viewDidLoad];\n  self.customThemesDataSource = [[CustomThemesDataSource alloc] init];\n  self.customThemePicker.dataSource = self.customThemesDataSource;\n  self.customThemePicker.delegate = self.customThemesDataSource;\n  [self.customThemePicker selectRow:[self.customThemesDataSource currentTheme] inComponent:0 animated:NO];\n  \n  self.versionLabel.text = [NSString stringWithFormat:NSLocalizedString(@\"Appboy.Stopwatch.test-view.appboy-version.message\", nil), APPBOY_SDK_VERSION];\n  [self displayAppboyRequestPolicy];\n  self.attributionCounter++;\n\n  self.sdkAuthSwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:SDKAuthKey];\n  self.inAppMessageDelegateSwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:SetInAppMessageControllerDelegateKey];\n  self.urlDelegateSwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:SetURLDelegateKey];\n  self.sessionTimeoutTextField.keyboardType = UIKeyboardTypeNumberPad;\n  self.sessionTimeoutTextField.text = [[NSUserDefaults standardUserDefaults] objectForKey:NewSessionTimeoutKey];\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n  [super viewDidAppear:animated];\n  [self updateScrollViewContentSize];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n  [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n#pragma mark - Scroll view settings\n\n- (void)updateScrollViewContentSize {\n  self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, self.contentViewHeightConstraint.constant);\n}\n\n- (void)setViewBottomSpace:(CGFloat)bottomSpace {\n  self.scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, bottomSpace, 0.0);\n}\n\n/* Data Flush Settings */\n\n// This is the selector of flushAppboyData Button which flushes queued data to the Braze servers manually on demand.\n- (IBAction)flushAppboyData:(id)sender {\n  StopwatchDebugMsg(@\"Flushing data to Braze.\", nil);\n  [[Appboy sharedInstance] requestImmediateDataFlush];\n  [self showAlertWithMessage:@\"Data was successfully flushed\"];\n}\n\n- (IBAction)changeAppboyFlushMode:(id)sender {\n  switch ([Appboy sharedInstance].requestProcessingPolicy) {\n    case ABKAutomaticRequestProcessing:\n      [Appboy sharedInstance].requestProcessingPolicy = ABKManualRequestProcessing;\n      StopwatchDebugMsg(@\"Changing request processing policy to ABKManualRequestProcessing.\", nil);\n      break;\n    case ABKManualRequestProcessing:\n      [Appboy sharedInstance].requestProcessingPolicy = ABKAutomaticRequestProcessing;\n      StopwatchDebugMsg(@\"Changing request processing policy to ABKAutomaticRequestProcessing.\", nil);\n      break;\n    default:\n      break;\n  }\n  [self displayAppboyRequestPolicy];\n}\n\n- (void)displayAppboyRequestPolicy {\n  ABKRequestProcessingPolicy requestPolicy = [Appboy sharedInstance].requestProcessingPolicy;\n  switch (requestPolicy) {\n    case ABKAutomaticRequestProcessing:\n      self.flushModeLabel.text = @\"ABKAutomaticRequestProcessing\";\n      break;\n      \n    case ABKManualRequestProcessing:\n      self.flushModeLabel.text = @\"ABKManualRequestProcessing\";\n      break;\n      \n    default:\n      break;\n  }\n  [self.flushModeLabel setNeedsDisplay];\n}\n\n/* Logging Attribution Data */\n- (IBAction)logAttributionData:(id)sender {\n  ABKAttributionData *attributionData = [[ABKAttributionData alloc]\n                                         initWithNetwork:[self attributionStringGenerator:@\"network\"]\n                                         campaign:[self attributionStringGenerator:@\"campaign\"]\n                                         adGroup:[self attributionStringGenerator:@\"adgroup\"]\n                                         creative:[self attributionStringGenerator:@\"creative\"]];\n  [[Appboy sharedInstance].user setAttributionData:attributionData];\n  [self showAlertWithMessage:@\"Attribution Data was successfully logged.\"];\n  self.attributionCounter++;\n}\n\n- (NSString *)attributionStringGenerator:(NSString *)inputString {\n  return [inputString stringByAppendingString:[NSString stringWithFormat:@\"%li\", (long)self.attributionCounter]];\n}\n\n/* Showing Caches Dir Files */\n- (IBAction)launchCachedFilesAlertView:(id)sender {\n  NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];\n  NSArray *allFiles = [self getDirectoryContentsWithPath:cachePath];\n  NSString *fileString = [allFiles componentsJoinedByString:@\"\\n\"];\n  [AlertControllerUtils presentTemporaryAlertWithTitle:@\"Cache Files\"\n                                                 message:fileString\n                                            presentingVC:self];\n}\n\n- (IBAction)rebootAndApplyEnvironment:(id)sender {\n  if ([[self.endointTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] <= 0) {\n    [[NSUserDefaults standardUserDefaults] setObject:nil forKey:OverrideEndpointStorageKey];\n  } else {\n    [[NSUserDefaults standardUserDefaults] setObject:self.endointTextField.text forKey:OverrideEndpointStorageKey];\n  }\n  if ([[self.apiKeyTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] <= 0) {\n    [[NSUserDefaults standardUserDefaults] setObject:nil forKey:OverrideApiKeyStorageKey];\n  } else {\n    [[NSUserDefaults standardUserDefaults] setObject:self.apiKeyTextField.text forKey:OverrideApiKeyStorageKey];\n  }\n  [self showForceCloseAlertWithTitle:@\"Environment Set\"];\n}\n\n- (IBAction)rebootAndApplyDevEnvironment:(id)sender {\n  [[NSUserDefaults standardUserDefaults] setObject:@\"elsa.braze.com\" forKey:OverrideEndpointStorageKey];\n  [self showForceCloseAlertWithTitle:@\"Switching to Development Environment.\"];\n}\n\n- (NSArray *)getDirectoryContentsWithPath:(NSString *)path {\n  NSMutableArray *returnArray = [NSMutableArray array];\n  NSArray *subpaths = [[NSFileManager defaultManager] subpathsAtPath:path];\n  BOOL isDirectory;\n  int count = 1;\n  for (NSString *item in subpaths){\n    NSString *fullPath = [[path stringByAppendingString:@\"/\"] stringByAppendingString:item];\n    BOOL fileExistsAtPath = [[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDirectory];\n    if (fileExistsAtPath) {\n      if (!isDirectory && ![item hasSuffix:@\".DS_Store\"]) {\n        [returnArray addObject:[NSString stringWithFormat:@\"%d) %@\", count, item]];\n        count++;\n        StopwatchDebugMsg(@\"Cache file: %@\", item);\n      }\n    }\n  }\n  return returnArray;\n}\n\n- (IBAction)setSDKAuthSwitchChange:(id)sender {\n  [[NSUserDefaults standardUserDefaults] setBool:self.sdkAuthSwitch.on forKey:SDKAuthKey];\n  NSString *switchStatus = (self.sdkAuthSwitch.on) ? @\"Enabled\" : @\"Disabled\";\n  NSString *alertTitle = [NSString stringWithFormat:@\"SDK Authentication %@\", switchStatus];\n  [self showForceCloseAlertWithTitle:alertTitle];\n}\n\n- (IBAction)setInAppDelegateSwitchChanged:(id)sender {\n  [[NSUserDefaults standardUserDefaults] setBool:self.inAppMessageDelegateSwitch.on forKey:SetInAppMessageControllerDelegateKey];\n  NSString *switchStatus = (self.inAppMessageDelegateSwitch.on) ? @\"Set\" : @\"Unset\";\n  NSString *alertTitle = [NSString stringWithFormat:@\"In-App Message Controller Delegate %@\", switchStatus];\n  [self showForceCloseAlertWithTitle:alertTitle];\n}\n\n- (IBAction)urlDelegateSwitchChanged:(id)sender {\n  [[NSUserDefaults standardUserDefaults] setBool:self.urlDelegateSwitch.on forKey:SetURLDelegateKey];\n  NSString *switchStatus = (self.urlDelegateSwitch.on) ? @\"Set\" : @\"Unset\";\n  NSString *alertTitle = [NSString stringWithFormat:@\"URL Delegate %@\", switchStatus];\n  [self showForceCloseAlertWithTitle:alertTitle];\n}\n\n- (IBAction)allowDarkThemeToggleSwitched:(id)sender {\n  AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;\n  appDelegate.stopwatchEnableDarkTheme = self.allowDarkThemeToggle.on;\n}\n\n- (IBAction)toggleSilentPushAlerts:(id)sender {\n  AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;\n  appDelegate.showSilentPushAlerts = self.showSilentPushAlertsToggle.on;\n}\n\n- (IBAction)setSessionTimeout:(id)sender {\n  StopwatchDebugMsg(@\"session timeout called\", nil);\n  [[NSUserDefaults standardUserDefaults] setObject:self.sessionTimeoutTextField.text forKey:NewSessionTimeoutKey];\n  NSString *alertTitle = [NSString stringWithFormat:@\"New Session Timeout: %@\", self.sessionTimeoutTextField.text];\n  [self showForceCloseAlertWithTitle:alertTitle];\n}\n\n/* Location Tracking */\n\n- (IBAction)logSingleLocation:(id)sender {\n  [[Appboy sharedInstance].locationManager logSingleLocation];\n  [self showAlertWithMessage:@\"Location was successfully logged.\"];\n}\n\n- (IBAction)manuallyRequestGeofences:(id)sender {\n  CLLocationManager *locationManager = [[CLLocationManager alloc] init];\n  locationManager.delegate = self;\n  CLAuthorizationStatus authorizationStatus;\n  if (@available(iOS 14.0, *)) {\n    authorizationStatus = [locationManager authorizationStatus];\n  } else {\n    authorizationStatus = [CLLocationManager authorizationStatus];\n  }\n    \n  if (authorizationStatus == kCLAuthorizationStatusAuthorizedAlways ||\n      authorizationStatus == kCLAuthorizationStatusAuthorizedWhenInUse) {\n    [self showAlertWithMessage:@\"Manually requesting Geofences.\"];\n    [locationManager requestLocation];\n  } else {\n    [self showAlertWithMessage:@\"Can't request geofences because of insufficient location permissions.\"];\n  }\n}\n\n#pragma mark - CLLocationManagerDelegate\n\n- (void)locationManager:(CLLocationManager *)manager\n     didUpdateLocations:(NSArray *)locations {\n  CLLocation *location = [locations lastObject];\n  double longitude = location.coordinate.longitude;\n  double latitude = location.coordinate.latitude;\n  [[Appboy sharedInstance] requestGeofencesWithLongitude:longitude\n                                                latitude:latitude];\n  NSString *alertMessage = [NSString stringWithFormat:@\"Requesting geofences with longitude %f and latitude %f\", longitude, latitude];\n  [self showAlertWithMessage:alertMessage];\n  StopwatchDebugMsg(@\"%@\", alertMessage);\n}\n\n- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {\n  StopwatchDebugMsg(@\"Can't request geofences because of error:%@\", error);\n}\n\n- (void)showForceCloseAlertWithTitle:(NSString *)title {\n  [AlertControllerUtils presentTemporaryAlertWithTitle:title\n                                                 message:@\"Force Close App and Re-Open to Apply\"\n                                            presentingVC:self\n                                              duration:3];\n}\n\n- (void)showAlertWithMessage:(NSString *)message {\n  [AlertControllerUtils presentTemporaryAlertWithTitle:nil\n                                                 message:message\n                                            presentingVC:self];\n}\n\n#pragma mark - Keyboard\n\n- (void)keyboardDidShow:(NSNotification *)notification {\n  CGSize keyboardSize = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;\n  CGFloat keyboardHeight = MIN(keyboardSize.width, keyboardSize.height);\n  [self setViewBottomSpace:keyboardHeight];\n}\n\n- (void)keyboardWillHide:(NSNotification *)notification {\n  [self setViewBottomSpace:0.0];\n}\n\n#pragma mark - Transition\n\n- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {\n  // updating content size when interface orientation changes\n  [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {} completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {\n    [self updateScrollViewContentSize];\n  }];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Braze UI/FeedUIViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <AppboyKit.h>\n\n@interface FeedUIViewController : UIViewController <UINavigationControllerDelegate>\n\n@property IBOutlet UINavigationController *feedNavigationController;\n@property IBOutlet UILabel *unreadCardLabel;\n@property IBOutlet UILabel *totalCardsLabel;\n@property IBOutlet UISwitch *unReadIndicatorSwitch;\n@property IBOutlet UILabel *unreadContentCardLabel;\n\n- (IBAction)displayCategoriedNews:(id)sender;\n- (IBAction)modalNewsFeedButtonTapped:(id)sender;\n- (IBAction)modalContentCardsButtonTapped:(id)sender;\n- (IBAction)navigationContentCardsButtonTapped:(id)sender;\n- (IBAction)legacyStoryboardContentCardsButtonTapped:(id)sender;\n- (IBAction)customStoryboardContentCardsButtonTapped:(id)sender;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/Braze UI/FeedUIViewController.m",
    "content": "#import <Foundation/Foundation.h>\n#import \"FeedUIViewController.h\"\n#import \"UIViewController+Keyboard.h\"\n#import \"ABKNewsFeedTableViewController.h\"\n#import \"ABKNewsFeedViewController.h\"\n#import \"AlertControllerUtils.h\"\n#import \"ABKContentCardsViewController.h\"\n#import \"AppDelegate.h\"\n#import \"ColorUtils.h\"\n\n@interface FeedUIViewController ()\n\n@property (nonatomic, weak) IBOutlet UIScrollView *scrollView;\n@property (nonatomic, weak) IBOutlet NSLayoutConstraint *contentViewHeightConstraint;\n\n- (void)updateScrollViewContentSize;\n\n@end\n\n@implementation FeedUIViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  \n  // Set number of unread and total news feed cards\n  [self feedUpdated:nil];\n  [self contentCardsUpdated:nil];\n  \n  // The ABKFeedUpdatedNotification is posted whenever the news feed changes.  We'll listen to it\n  // so we know when to update the card count display.\n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(feedUpdated:)\n                                               name:ABKFeedUpdatedNotification\n                                             object:nil];\n\n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(contentCardsUpdated:)\n                                               name:ABKContentCardsProcessedNotification\n                                             object:nil];\n\n  [self addDismissGestureForView:self.scrollView];\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n  [super viewDidAppear:animated];\n  [self updateScrollViewContentSize];\n}\n\n#pragma mark - Scroll view settings\n\n- (void)updateScrollViewContentSize {\n  self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, self.contentViewHeightConstraint.constant);\n}\n\n#pragma mark - Notification updates\n\n- (void)feedUpdated:(NSNotification *)notification {\n  self.unreadCardLabel.text = [NSString stringWithFormat:@\"Unread Feed Cards: %ld / %ld\",\n                               (long)[[Appboy sharedInstance].feedController unreadCardCountForCategories:ABKCardCategoryAll],\n                               (long)[[Appboy sharedInstance].feedController cardCountForCategories:ABKCardCategoryAll]];\n  \n  // Update the application icon badge count to reflect the number of unread news feed cards\n  [UIApplication sharedApplication].applicationIconBadgeNumber =\n  [[Appboy sharedInstance].feedController unreadCardCountForCategories:ABKCardCategoryAll];\n  [self.view setNeedsDisplay];\n}\n\n- (void)contentCardsUpdated:(NSNotification *)notification {\n  self.unreadContentCardLabel.text = [NSString stringWithFormat:@\"Unread Content Cards: %ld / %ld\",\n                                      (long)[Appboy sharedInstance].contentCardsController.unviewedContentCardCount,\n                                      (long)[Appboy sharedInstance].contentCardsController.contentCardCount];\n  [self.view setNeedsDisplay];\n}\n\n#pragma mark - Categoried News\n\n- (IBAction)displayCategoriedNews:(id)sender {\n  ABKNewsFeedTableViewController *newsFeed = [[ABKNewsFeedTableViewController alloc] init];\n  newsFeed.disableUnreadIndicator = !self.unReadIndicatorSwitch.on;\n  // Add Categories button\n  UIBarButtonItem *categoriesButton = [[UIBarButtonItem alloc]\n                                       initWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.test-view.categories.button.title\", nil)\n                                       style:UIBarButtonItemStylePlain\n                                       target:self\n                                       action:@selector(displayCategoriesActionSheet)];\n  [newsFeed.navigationItem setRightBarButtonItem:categoriesButton animated:NO];\n  [self.navigationController pushViewController:newsFeed animated:YES];\n}\n\n- (void)displayCategoriesActionSheet {\n  UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.test-view.categories.title\", nil) message:nil preferredStyle:UIAlertControllerStyleActionSheet];\n  \n  ABKNewsFeedTableViewController *feedTableViewController = (ABKNewsFeedTableViewController *)self.navigationController.topViewController;\n  [actionSheet addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.test-view.categories.Announcement\", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {\n    [self dismissViewControllerAnimated:YES completion:nil];\n    [feedTableViewController setCategories:ABKCardCategoryAnnouncements];\n  }]];\n  [actionSheet addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.test-view.categories.Advertising\", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {\n    [self dismissViewControllerAnimated:YES completion:nil];\n    [feedTableViewController setCategories:ABKCardCategoryAdvertising];\n  }]];\n  [actionSheet addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.test-view.categories.Social\", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {\n    [self dismissViewControllerAnimated:YES completion:nil];\n    [feedTableViewController setCategories:ABKCardCategorySocial];\n  }]];\n  [actionSheet addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.test-view.categories.News\", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {\n    [self dismissViewControllerAnimated:YES completion:nil];\n    [feedTableViewController setCategories:ABKCardCategoryNews];\n  }]];\n  [actionSheet addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.test-view.categories.No-Category\", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {\n    [self dismissViewControllerAnimated:YES completion:nil];\n    [feedTableViewController setCategories:ABKCardCategoryNoCategory];\n  }]];\n  [actionSheet addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@\"Appboy.Stopwatch.initial-view.cancel\", nil) style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {\n    [self dismissViewControllerAnimated:YES completion:nil];\n  }]];\n\n  [self presentViewController:actionSheet animated:YES completion:nil];\n}\n\n# pragma mark - Feed\n\n// An example modal news feed view controller\n- (IBAction)modalNewsFeedButtonTapped:(id)sender {\n  ABKNewsFeedViewController *newsFeed = [[ABKNewsFeedViewController alloc] init];\n  newsFeed.newsFeed.disableUnreadIndicator = !self.unReadIndicatorSwitch.on;\n  newsFeed.newsFeed.navigationItem.title = @\"Stopwatch Modal Feed\";\n  [self.navigationController presentViewController:newsFeed animated:YES completion:nil];\n}\n\n- (IBAction)navigationNewsFeedButtonTapped:(id)sender {\n  ABKNewsFeedTableViewController *newsFeed = [[ABKNewsFeedTableViewController alloc] init];\n  newsFeed.disableUnreadIndicator = !self.unReadIndicatorSwitch.on;\n  newsFeed.navigationItem.title = @\"Stopwatch Navigation Feed\";\n  [self.navigationController pushViewController:newsFeed animated:YES];\n}\n\n- (IBAction)legacyStoryboardNewsFeedButtonTapped:(id)sender {\n  UIStoryboard *st = [UIStoryboard storyboardWithName:@\"ABKNewsFeedCardStoryboard\"\n                                                 bundle:[NSBundle mainBundle]];\n  ABKNewsFeedViewController *newsFeed = [st instantiateViewControllerWithIdentifier:@\"ABKNewsFeedViewController\"];\n  newsFeed.newsFeed.disableUnreadIndicator = !self.unReadIndicatorSwitch.on;\n  newsFeed.newsFeed.navigationItem.title = @\"Stopwatch Legacy Feed\";\n  [self.navigationController presentViewController:newsFeed animated:YES completion:nil];\n}\n\n# pragma mark - Content Cards\n\n- (IBAction)modalContentCardsButtonTapped:(id)sender {\n  ABKContentCardsViewController *contentCardsVC = [ABKContentCardsViewController new];\n  contentCardsVC.contentCardsViewController.disableUnreadIndicator = !self.unReadIndicatorSwitch.on;\n  contentCardsVC.contentCardsViewController.navigationItem.title = @\"Stopwatch Modal Cards\";\n  contentCardsVC.contentCardsViewController.maxContentCardWidth = 1024.0;\n  AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;\n  contentCardsVC.contentCardsViewController.enableDarkTheme = appDelegate.stopwatchEnableDarkTheme;\n  [ColorUtils applyThemeToViewController:contentCardsVC];\n  [self.navigationController presentViewController:contentCardsVC animated:YES completion:nil];\n}\n\n- (IBAction)navigationContentCardsButtonTapped:(id)sender {\n  ABKContentCardsTableViewController *contentCards = [[ABKContentCardsTableViewController alloc] init];\n  contentCards.disableUnreadIndicator = !self.unReadIndicatorSwitch.on;\n  contentCards.navigationItem.title = @\"Stopwatch Navigation Cards\";\n  AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;\n  contentCards.enableDarkTheme = appDelegate.stopwatchEnableDarkTheme;\n  [ColorUtils applyThemeToViewController:contentCards];\n  [self.navigationController pushViewController:contentCards animated:YES];\n}\n\n- (IBAction)legacyStoryboardContentCardsButtonTapped:(id)sender {\n  UIStoryboard *st = [UIStoryboard storyboardWithName:@\"ABKContentCardsStoryboard\"\n                                                 bundle:[NSBundle mainBundle]];\n  ABKContentCardsViewController *cc = [st instantiateViewControllerWithIdentifier:@\"ABKContentCardsViewController\"];\n  cc.contentCardsViewController = cc.viewControllers.firstObject;\n  cc.contentCardsViewController.disableUnreadIndicator = !self.unReadIndicatorSwitch.on;\n  cc.contentCardsViewController.navigationItem.title = @\"Legacy Storyboard Cards\";\n  AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;\n  cc.contentCardsViewController.enableDarkTheme = appDelegate.stopwatchEnableDarkTheme;\n  [ColorUtils applyThemeToViewController:cc.contentCardsViewController];\n  [self.navigationController pushViewController:cc.contentCardsViewController animated:YES];\n}\n\n- (IBAction)customStoryboardContentCardsButtonTapped:(id)sender {\n  UIStoryboard *st = [UIStoryboard storyboardWithName:@\"ABKContentCardsCustomStoryboard\"\n                                                 bundle:[NSBundle mainBundle]];\n  ABKContentCardsViewController *cc = [st instantiateViewControllerWithIdentifier:@\"ABKContentCardsViewController\"];\n  cc.contentCardsViewController = cc.viewControllers.firstObject;\n  cc.contentCardsViewController.disableUnreadIndicator = !self.unReadIndicatorSwitch.on;\n  cc.contentCardsViewController.navigationItem.title = @\"Custom Storyboard Cards\";\n  AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;\n  cc.contentCardsViewController.enableDarkTheme = appDelegate.stopwatchEnableDarkTheme;\n  [ColorUtils applyThemeToViewController:cc.contentCardsViewController];\n  [self.navigationController pushViewController:cc.contentCardsViewController animated:YES];\n}\n\n#pragma mark - Transition\n\n- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {\n  // updating content size when interface orientation changes\n  [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {} completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {\n    [self updateScrollViewContentSize];\n  }];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/ContainerViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <AppboyKit.h>\n\n/**\n * ContainerViewController is a custom container view controller that switches child views based on the\n * `selectedSegmentIndex` of a UISegmentedControl in the navigation item's `titleView`. See the Apple\n * Developer documentation for creating a custom container view controller:\n * https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html\n */\n\n@interface ContainerViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UIView *containerView;\n@property (weak, nonatomic) IBOutlet UIViewController *currentViewController;\n@property UISegmentedControl *segmentedControl;\n@property BOOL hasFlushButton;\n@property NSMutableArray *childViewControllers;\n@property NSArray *segmentIndexToViewControllerId;\n\n// This method fills in the data for switching between child view controllers and must be called before the view controller is presented\n- (void)initWithArray:(NSArray *)segmentIndexToViewControllerId andTitle:(NSString *)title andImageName:(NSString *)imageName withFlushButton:(BOOL)hasFlushButton;\n\n// Displays view controller for the selected segment index\n- (void)displayViewForSegmentAtIndex:(NSUInteger)index;\n\n// Switches between children view controllers\n- (IBAction)changeViewController:(id)sender;\n\n// Manually flush data to Braze\n- (IBAction)flushDataToAppboy:(id)sender;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/ContainerViewController.m",
    "content": "#import \"ContainerViewController.h\"\n#import \"AlertControllerUtils.h\"\n#import \"ColorUtils.h\"\n\n@implementation ContainerViewController\n\n/**\n @param segmentIndexToViewControllerId  An array where indices represent UISegmentedControl segment indices and values are the child UIViewController storyboard restoration IDs (NSString*) associated with that segment index. Restoration IDs also double as UISegmentedControl titles for a given segment.\n @param title The UITabBarItem title for this tab in the root UITabBarController\n @param imageName The image filename associated with the UITabBarItem image for this tab\n @param withFlushButton A boolean for whether this ContainerViewController will have a Data Flush UIBarButtonItem in the UINavigationBar\n */\n- (void)initWithArray:(NSArray *)segmentIndexToViewControllerId andTitle:(NSString *)title andImageName:(NSString *)imageName withFlushButton:(BOOL)hasFlushButton {\n  self.segmentIndexToViewControllerId = segmentIndexToViewControllerId;\n  self.hasFlushButton = hasFlushButton;\n  \n  self.tabBarItem.title = title;\n  self.tabBarItem.image = [UIImage imageNamed:imageName];\n  \n  // Initialize UISegmentedControl\n  self.segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentIndexToViewControllerId];\n  [self.segmentedControl addTarget:self action:@selector(changeViewController:) forControlEvents:UIControlEventValueChanged];\n  [self.segmentedControl setSelectedSegmentIndex:0];\n}\n\n- (UIViewController *)childViewControllerForStatusBarStyle {\n  return self.currentViewController;\n}\n\n- (void)viewDidLoad {\n  [ColorUtils applyThemeToViewController:self];\n#if !TARGET_OS_TV\n  if (@available(iOS 15.0, *)) {\n    self.view.backgroundColor = UIColor.systemGroupedBackgroundColor;\n  }\n#endif\n  [self.navigationItem setTitleView:self.segmentedControl];\n  [self displayViewForSegmentAtIndex:[self.segmentedControl selectedSegmentIndex]];\n  \n  // Add Flush navigation bar item\n  if (self.hasFlushButton) {\n    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@\"bolt\"]\n                                                                             style:UIBarButtonItemStylePlain\n                                                                            target:self\n                                                                             action:@selector(flushDataToAppboy:)];\n  }\n}\n\n- (void)viewDidLayoutSubviews{\n  /* Ensures that the child view controller has the correct frame and shows up correctly in the\n   * container view. This call is in `viewDidLayoutSubviews` as opposed to `viewDidLoad` to handle the \n   * edge case where the phone is rotated and then the user switches to a tab that has been previously \n   * loaded. In this case, `viewDidLoad` is not called again, and the frames are not redrawn for the new \n   * orientation. */\n  if (!CGRectEqualToRect(self.currentViewController.view.frame, self.containerView.frame)) {\n    self.currentViewController.view.frame = self.containerView.frame;\n  }\n}\n\n- (void)instantiateChildViewControllers{\n  NSInteger numberOfChildViews = [self.segmentIndexToViewControllerId count];\n  self.childViewControllers = [NSMutableArray arrayWithCapacity:numberOfChildViews];\n  for (int i = 0; i < numberOfChildViews; i++) {\n    self.childViewControllers[i] = [self.storyboard instantiateViewControllerWithIdentifier:self.segmentIndexToViewControllerId[i]];\n  }\n}\n\n- (void)displayViewForSegmentAtIndex:(NSUInteger)index {\n  if (self.childViewControllers == nil || [self.childViewControllers count] == 0) {\n    [self instantiateChildViewControllers];\n  }\n  \n  // Get view controller to be displayed\n  UIViewController *newViewController = self.childViewControllers[index];\n  \n  if (newViewController) {\n    // Set the frame size of the child view to the frame of its container\n    newViewController.view.frame = self.containerView.frame;\n    \n    [self addChildViewController:newViewController];\n    [self.containerView addSubview:newViewController.view];\n    \n    [newViewController didMoveToParentViewController:self];\n    self.currentViewController = newViewController;\n  }\n  \n  [self.currentViewController setNeedsStatusBarAppearanceUpdate];\n}\n\n- (IBAction)changeViewController:(id)sender {\n  // Handle removal of old view controller\n  [self.currentViewController willMoveToParentViewController:nil];\n  [self.currentViewController.view removeFromSuperview];\n  [self.currentViewController removeFromParentViewController];\n  \n  // Display new view controller\n  [self displayViewForSegmentAtIndex:[sender selectedSegmentIndex]];\n}\n\n- (IBAction)flushDataToAppboy:(id)sender {\n  [[Appboy sharedInstance] requestImmediateDataFlush];\n  [AlertControllerUtils presentTemporaryAlertWithTitle:nil\n                                               message:@\"Data was successfully flushed\"\n                                          presentingVC:self];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/CustomTabBarController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <CoreLocation/CoreLocation.h>\n\n@interface CustomTabBarController : UITabBarController <UITabBarControllerDelegate, UINavigationControllerDelegate>\n\n@property CLLocationManager *locationManager;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/CustomTabBarController.m",
    "content": "#import \"CustomTabBarController.h\"\n#import \"ContainerViewController.h\"\n#import \"ABKLocationManager.h\"\n#import \"ColorUtils.h\"\n#import \"LoggerUtils.h\"\n#import <AppTrackingTransparency/AppTrackingTransparency.h>\n\n@implementation CustomTabBarController\n\n- (UIViewController *)childViewControllerForStatusBarStyle {\n  return ((UINavigationController *)self.selectedViewController).topViewController;\n}\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  [ColorUtils applyThemeToViewController:self];\n#if !TARGET_OS_TV\n  if (@available(iOS 15.0, *)) {\n    self.view.backgroundColor = UIColor.systemGroupedBackgroundColor;\n  }\n#endif\n  // Add tab bar items to UITabBarController\n  NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithObjects:\n                                     [self addNavigationControllerWithChildren:@[@\"Events\", @\"Attributes\", @\"Arrays\", @\"Alias\"] andTitle:@\"User\" andImageName:@\"user\" withFlushButton:YES], // User tab\n                                     [self addNavigationControllerWithChildren:@[@\"UI\", @\"Controls\"] andTitle:@\"IAM\" andImageName:@\"IAM\" withFlushButton:NO], // IAM tab\n                                     [self addNavigationControllerWithIdentifier:@\"FeedUIViewController\" withTitle:@\"Braze UI\" andImageName:@\"newsfeed\"], // UI tab\n                                     [self addNavigationControllerWithChildren:@[@\"Misc\", @\"Data\", @\"About\"] andTitle:@\"Advanced\" andImageName:@\"bolt\" withFlushButton:NO], // Advanced tab\n                                     nil];\n  [self setViewControllers:viewControllers];\n\n  self.locationManager = [[CLLocationManager alloc] init];\n\n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(requestLocationAuthorization)\n                                               name:UIApplicationDidBecomeActiveNotification\n                                             object:nil];\n  \n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(requestAppTrackingTransperancyAuthorization)\n                                               name:UIApplicationDidBecomeActiveNotification\n                                             object:nil];\n}\n\n- (void)requestLocationAuthorization {\n  [self.locationManager requestAlwaysAuthorization];\n}\n\n- (void)requestAppTrackingTransperancyAuthorization {\n  if (@available(iOS 14, *)) {\n    [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {\n      StopwatchDebugMsg(@\"Got result from App Track Transparency popup %ld\", (long)status);\n    }];\n  }\n}\n\n/* Helper methods for adding tab bar items to the root UITabBarController */\n\n// Initializes and returns a ContainerViewController nested inside a UINavigationController\n- (UINavigationController *)addNavigationControllerWithChildren:(NSArray *)childViewContainers andTitle:(NSString *)title andImageName:(NSString *)imageName withFlushButton:(BOOL)hasFlushButton {\n  UINavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@\"ContainerNavigationController\"];\n  [(ContainerViewController *)navigationController.viewControllers[0] initWithArray:childViewContainers andTitle:title andImageName:imageName withFlushButton:hasFlushButton];\n  navigationController.navigationBar.tintColor = [ColorUtils stopwatchBlueColor];\n\n  return navigationController;\n}\n\n// Initializes and returns a UINavigationController wrapping a UIViewController with the given identifier\n- (UINavigationController *)addNavigationControllerWithIdentifier:(NSString *)identifier withTitle:(NSString *)title andImageName:(NSString *)imageName {\n  UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:identifier];\n  UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];\n  navigationController.tabBarItem.title = title;\n  navigationController.tabBarItem.image = [UIImage imageNamed:imageName];\n  return navigationController;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/Controls/InAppMessageTestViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <AppboyKit.h>\n\n@interface InAppMessageTestViewController : UIViewController <ABKInAppMessageControllerDelegate>\n\n@property IBOutlet UISegmentedControl *segmentedControlForInAppMode;\n@property IBOutlet UILabel *remainingIAMLabel;\n@property BOOL shouldDisplayInAppMessage;\n\n- (IBAction)displayNextAvailableInAppPressed:(id)sender;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/Controls/InAppMessageTestViewController.m",
    "content": "#import \"InAppMessageTestViewController.h\"\n#import \"AppboyInAppMessage.h\"\n#import \"AlertControllerUtils.h\"\n#import \"LoggerUtils.h\"\n\n@implementation InAppMessageTestViewController\n\n/*\n * For further details regarding in-app message delegate methods and stacking mechanisms, please see\n * ABKInAppMessageControllerDelegate.h and ABKInAppMessageController.h\n */\n\n#pragma mark Braze In-App Message Delegate methods\n\n/*!\n * This callback method allows you to specify if each in-app message should be displayed. It is called just before each in-app\n * message is displayed. Please check ABKInAppMessageControllerDelegate.h for more about the return value ABKInAppMessageDisplayChoice\n *\n * In-app message queuing:\n *\n * Arriving in-app messages are stacked when they can't be displayed for one of these reasons:\n * - Another in-app message is visible\n * - If the beforeInAppMessageDisplayed:withKeyboardIsUp: delegate method HAS NOT been implemented and keyboard is being\n *   displayed currently.\n * - If the beforeInAppMessageDisplayed:withKeyboardIsUp: delegate method returned ABKDisplayInAppMessageLater\n *\n * In-app messages are potentially removed from the in-app message stack and displayed when:\n * - The application comes to the foreground after being backgrounded\n * - displayNextInAppMessage is called\n *\n * If one of these events occurs and the in-app message can't be displayed, it remains in the stack.\n *\n * Note that if you unset the delegate after some in-app messages have been stacked, the accumulated stacked in-app messages\n * will be displayed according to the above scheme.\n */\n- (ABKInAppMessageDisplayChoice)beforeInAppMessageDisplayed:(ABKInAppMessage *)inAppMessage\n                                            withKeyboardIsUp:(BOOL)keyboardIsUp {\n  StopwatchDebugMsg(@\"Received in-app message with message: %@\", inAppMessage.message);\n  \n  \n  // We want to display the in-app message from the top if there is a keyboard being displayed on the screen.\n  if (keyboardIsUp && [inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n    ((ABKInAppMessageSlideup *)inAppMessage).inAppMessageSlideupAnchor = ABKInAppMessageSlideupFromTop;\n  }\n  \n  [self updateRemainingInAppMessageLabel];\n\n  // /Check if the delegate is called by a click on the \"Display Next Available In-App Message\" button.\n  if (self.shouldDisplayInAppMessage && self.segmentedControlForInAppMode.selectedSegmentIndex == 1) {\n    // If the in-app message mode is ABKDisplayInAppMessageLater and the user has clicked the \"Display Next Available In-App Message\"\n    // button, this will display the next available in-app message.\n    return ABKDisplayInAppMessageNow;\n  } else {\n    switch (self.segmentedControlForInAppMode.selectedSegmentIndex) {\n      case 0:\n        return ABKDisplayInAppMessageNow;\n\n      case 1:\n        return ABKDisplayInAppMessageLater;\n\n      case 2:\n        return ABKDiscardInAppMessage;\n\n      default:\n        return ABKDisplayInAppMessageNow;\n    }\n  }\n}\n\n/*!\n * This callback method allows you to specify if each control in-app message should be logged. It is called just before each control in-app\n * message is logged. Please check ABKInAppMessageControllerDelegate.h for more about the return value ABKInAppMessageDisplayChoice\n *\n * In-app message queuing:\n *\n * Arriving control in-app messages are stacked when they can't be logged for one of these reasons:\n * - Another non-control in-app message is visible\n * - If the keyboard is being displayed currently.\n *\n * Control in-app messages are potentially removed from the in-app message stack and logged when:\n * - The application comes to the foreground after being backgrounded\n * - displayNextInAppMessage is called\n *\n * If one of these events occurs and the control in-app message can't be logged, it remains in the stack.\n *\n * Note that if you unset the delegate after some control in-app messages have been stacked, the accumulated stacked control in-app messages\n * will be logged according to the above scheme.\n */\n- (ABKInAppMessageDisplayChoice)beforeControlMessageImpressionLogged:(ABKInAppMessage *)inAppMessage {\n  StopwatchDebugMsg(@\"Received in-app message with message: %@\", inAppMessage.message);\n  \n  [self updateRemainingInAppMessageLabel];\n  \n  // /Check if the delegate is called by a click on the \"Display Next Available In-App Message\" button.\n  if (self.shouldDisplayInAppMessage && self.segmentedControlForInAppMode.selectedSegmentIndex == 1) {\n    // If the in-app message mode is ABKDisplayInAppMessageLater and the user has clicked the \"Display Next Available In-App Message\"\n    // button, this will log the next available control in-app message.\n    return ABKDisplayInAppMessageNow;\n  } else {\n    switch (self.segmentedControlForInAppMode.selectedSegmentIndex) {\n      case 0:\n        return ABKDisplayInAppMessageNow;\n        \n      case 1:\n        return ABKDisplayInAppMessageLater;\n        \n      case 2:\n        return ABKDiscardInAppMessage;\n\n      default:\n        return ABKDisplayInAppMessageNow;\n    }\n  }\n}\n\n// This delegate method asks if there is any custom in-app message view controller that developers want to pass in. The returned\n// view controller should be a subclass of ABKInAppMessageViewController.\n// Also, the view of the returned view controller should be an instance of ABKInAppMessageView or its subclass.\n- (ABKInAppMessageViewController *)inAppMessageViewControllerWithInAppMessage:(ABKInAppMessage *)inAppMessage {\n  if ([inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n    return [[ABKInAppMessageSlideupViewController alloc] initWithInAppMessage:inAppMessage];\n  } else if ([inAppMessage isKindOfClass:[ABKInAppMessageModal class]]) {\n    return [[ABKInAppMessageModalViewController alloc] initWithInAppMessage:inAppMessage];\n  } else if ([inAppMessage isKindOfClass:[ABKInAppMessageFull class]]) {\n    return [[ABKInAppMessageFullViewController alloc] initWithInAppMessage:inAppMessage];\n  }\n  return nil;\n}\n\n// This delegate method is notified if the in-app message is tapped.  You can use this to initiate an action\n// in response to the tap.  Note that when the delegate returns NO, Braze SDK will perform the action sent down from\n// the Braze Server after the delegate method is executed. If it returns YES, the response to the tap is up to you.\n- (BOOL)onInAppMessageClicked:(ABKInAppMessage *)inAppMessage {\n  StopwatchDebugMsg(@\"In-app message tapped!\", nil);\n  [AlertControllerUtils presentTemporaryAlertWithTitle:NSLocalizedString(@\"Appboy.Stopwatch\", nil)\n                                                 message:NSLocalizedString(@\"Appboy.Stowpatch.slideup-test.slideup-is-tap\", nil)\n                                            presentingVC:self];\n\n  [inAppMessage setInAppMessageClickAction:ABKInAppMessageNoneClickAction withURI:nil];\n  // Returning YES here to prevent Braze from performing the click action.\n  return YES;\n}\n\n#pragma mark Stopwatch view controller methods\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  self.edgesForExtendedLayout = UIRectEdgeNone;\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n  [super viewDidAppear:animated];\n  // Here we set self as the in-app message controller delegate to enable in-app message customization on this page.\n  [Appboy sharedInstance].inAppMessageController.delegate = self;\n  \n  self.remainingIAMLabel.text = [NSString stringWithFormat:@\"In-App Messages Remaining in Stack: %ld\", (long)[[Appboy sharedInstance].inAppMessageController inAppMessagesRemainingOnStack]];\n}\n\n- (void)viewDidDisappear:(BOOL)animated {\n  [super viewDidDisappear:animated];\n  [Appboy sharedInstance].inAppMessageController.delegate = nil;\n}\n// If we've been returning ABKDisplayInAppMessageLater and in-app message have arrived, they'll be put in the stack.  Here, take\n// one off the stack and display it.\n- (IBAction)displayNextAvailableInAppPressed:(id)sender {\n  self.shouldDisplayInAppMessage = YES;\n  [[Appboy sharedInstance].inAppMessageController displayNextInAppMessage];\n  self.shouldDisplayInAppMessage = NO;\n  [self updateRemainingInAppMessageLabel];\n}\n\n- (IBAction)dismissCurrentSlideup:(id)sender {\n  [[Appboy sharedInstance].inAppMessageController.inAppMessageUIController hideCurrentInAppMessage:YES];\n  [self updateRemainingInAppMessageLabel];\n}\n\n- (void)updateRemainingInAppMessageLabel {\n  self.remainingIAMLabel.text = [NSString stringWithFormat:@\"In-App Messages Remaining in Stack: %ld\", (long)[[Appboy sharedInstance].inAppMessageController inAppMessagesRemainingOnStack]];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/UI/HTML/InAppMessageWithJS.html",
    "content": "<!DOCTYPE html>\n<html>\n  \n  <head lang=\"en\">\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\" />\n    <script type=\"text/javascript\" src=\"HTML_ZIP_STOPWATCH/myscript.js\"></script>\n    <script type=\"text/javascript\">\n      function setCustomAttributes() {\n        appboyBridge.getUser().setCustomUserAttribute('abStringAttribute', 'atts');\n        appboyBridge.getUser().setCustomUserAttribute('abDateAttribute', new Date());\n        appboyBridge.getUser().setCustomUserAttribute('abIntAttribute', 6);\n        appboyBridge.getUser().setCustomUserAttribute('abDoubleAttribute', 7.8);\n        appboyBridge.getUser().setCustomUserAttribute('abBoolAttribute', true);\n        appboyBridge.getUser().setCustomUserAttribute('abArrayAttribute', ['a', 'b']);\n      };\n      function logCustomEvents() {\n        appboyBridge.logCustomEvent('abEvent');\n        appboyBridge.logCustomEvent('abEventNullProp', null);\n        appboyBridge.logCustomEvent('abEventWithProp', { intProp: 1, doubleProp: 4.4, stringProp: 'asdf', boolProp: true, dateProp:new Date()});\n      };\n      function logPurchases() {\n        appboyBridge.logPurchase('abPurchase', 5.5, 'USD');\n        appboyBridge.logPurchase('abPurchaseWithQuantity', 5.5, 'USD', 6);\n        appboyBridge.logPurchase('abPurchaseWithQuantityAndProperties', 5.5, 'USD', 6, { intProp: 1, doubleProp: 4.4, stringProp: 'asdf', boolProp: false, dateProp:new Date()});\n       appboyBridge.logPurchase('abPurchaseWithPropertiesNoQuantity', 5.5, 'USD', null, { intProp: 1, doubleProp: 4.4, stringProp: 'asdf', boolProp: false, dateProp:new Date()});\n      };\n    </script>\n    <link href=\"HTML_ZIP_STOPWATCH/iamcss.css\" rel=\"stylesheet\" type=\"text/css\" />\n    <style>\n      .box {\n        padding-top: 25px;\n      }\n    a {\n      color: blue;\n      padding: 2px 25px;\n      font-family: \"Avenir\";\n      text-transform: none;\n    }\n    .firstLink {\n      clear: right;\n    }\n    </style>\n    <script type=\"text/javascript\">\n      function logStartEvent() {\n        appboyBridge.logCustomEvent('Logging start event for HTML In-App Message tester');\n      }\n      window.addEventListener('ab.BridgeReady', logStartEvent, false);\n    </script>\n  </head>\n  \n  <body>\n    <div class=\"box\">\n      <div class=\"relativeTopRight\">\n        <a href=\"appboy://close\">X</a>\n      </div>\n\n      <a class=\"firstLink\" href=\"https://www.appboy.com?abExternalOpen=false&abButtonId=1\">Appboy.com</a>\n      <a onClick=\"document.body.style.backgroundColor = 'rgba(232, 125, 232, .75)'\">Make more transparent</a>\n      <a href=\"stopwatch://blah\">Deep Link</a>\n      <a href=\"appboy://feed\">Open the Newsfeed</a>\n      <a id=\"color-change\" onclick=\"javascript:sayHi();\">Change Color To Red</a>\n      <a onclick=\"window.location = \"appboy://customEvent?name=iOSHtmlIamCustomEvent&pOne=pTwo \";\">Custom Event Url Style</a>\n      <a onClick=\"appboyBridge.closeMessage()\" />ab: closeMessage</a>\n      <a onClick=\"appboyBridge.requestImmediateDataFlush()\" />ab: requestImmediateDataFlush</a>\n      <a onClick=\"logCustomEvents()\" />ab: logCustomEvent</a>\n      <a onClick=\"logPurchases()\" />ab: logPurchase</a>\n      <a onClick=\"appboyBridge.display.showFeed()\" />ab: display.showFeed</a>\n      <a onClick=\"appboyBridge.getUser().setFirstName('abFirstName')\" />ab: setFirstName</a>\n      <a onClick=\"appboyBridge.getUser().setLastName('abLastName')\" />ab: setLastName</a>\n      <a onClick=\"appboyBridge.getUser().setEmail('abEmail@appboy.com')\" />ab: setEmail</a>\n      <a onClick=\"appboyBridge.getUser().setHomeCity('abHomeCity')\" />ab: setHomeCity</a>\n      <a onClick=\"appboyBridge.getUser().setLanguage('hi')\" />ab: setLanguage</a>\n      <a onClick=\"appboyBridge.getUser().setEmailNotificationSubscriptionType('unsubscribed')\" />ab: setEmailNotificationSubscriptionType Unsubscribed</a>\n      <a onClick=\"appboyBridge.getUser().setEmailNotificationSubscriptionType('subscribed')\" />ab: setEmailNotificationSubscriptionType Subscribed</a>\n      <a onClick=\"appboyBridge.getUser().setEmailNotificationSubscriptionType('opted_in')\" />ab: setEmailNotificationSubscriptionType Opted-in</a>\n      <a onClick=\"appboyBridge.getUser().setPushNotificationSubscriptionType('unsubscribed')\" />ab: setPushNotificationSubscriptionType</a>\n      <a onClick=\"appboyBridge.getUser().addToCustomAttributeArray('abAtArray', 'myval')\" />ab: addToCustomAttributeArray</a>\n      <a onClick=\"appboyBridge.getUser().removeFromCustomAttributeArray('abAtArray', 'myval')\" />ab: removeFromCustomAttributeArray</a>\n      <a onClick=\"appboyBridge.getUser().incrementCustomUserAttribute('abInc')\" />ab: incrementCustomUserAttribute</a>\n      <a onClick=\"appboyBridge.getUser().setDateOfBirth(1960, 11, 11)\" />ab: setDateOfBirth</a>\n      <a onClick=\"appboyBridge.getUser().setCountry('USA')\" />ab: setCountry</a>\n      <a onClick=\"appboyBridge.getUser().setPhoneNumber('9084894848')\" />ab: setPhoneNumber</a>\n      <a onClick=\"setCustomAttributes()\" />ab: setCustomAttributes</a>\n      <a onClick=\"appboyBridge.getUser().addLocationCustomAttribute('abLocationAttribute', 10.1, 20.2)\" />ab: addLocationCustomAttribute</a>\n      <a onClick=\"appboyBridge.getUser().removeLocationCustomAttribute('abLocationAttribute')\" />ab: removeLocationCustomAttribute</a>\n      <a onClick=\"appboyBridge.getUser().setCustomLocationAttribute('abLocatioAttribute2', 5.7, 2.3)\" />ab:setCustomLocationAttribute</a>\n      <a onClick=\"appboyBridge.getUser().addAlias('abAlias', 'abLabel')\" />ab: addAlias</a>\n      <a onClick=\"appboyBridge.web.registerAppboyPushMessages()\" />ab:registerAppboyPushMessages(no-op)</a>\n      <a onClick=\"appboyBridge.web.trackLocation()\" />ab:trackLocation (no-op)</a>\n      <a onClick=\"appboyBridge.logClick('1')\" />ab:logClick WithButtonId</a>\n      <a onClick=\"appboyBridge.logClick()\" />ab:logClick</a>\n      <a onClick=\"appboyBridge.getUser().setGender('m')\" />ab: setGender Male</a>\n      <a onClick=\"appboyBridge.getUser().setGender('f')\" />ab: setGender Female</a>\n      <a onClick=\"appboyBridge.getUser().setGender('o')\" />ab: setGender Other</a>\n      <a onClick=\"appboyBridge.getUser().setGender('u')\" />ab: setGender Unknown</a>\n      <a onClick=\"appboyBridge.getUser().setGender('n')\" />ab: setGender Not Applicable</a>\n      <a onClick=\"appboyBridge.getUser().setGender('p')\" />ab: setGender Prefer Not To Say</a>\n\n      <img src=\"HTML_ZIP_STOPWATCH/jpg_3.jpg\" width=\"100%\">\n      <div class=\"relativeLeft\">\n        <a href=\"https://twitter.com/braze?abButtonId=0&abExternalOpen=true&\">Braze Twitter</a>\n      </div>\n      <div class=\"relativeRight\">\n        <a href=\"appboy://close\">Close</a>\n      </div>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/UI/HTML/InAppMessageWithoutAssetZip.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head lang=\"en\">\n    <meta charset=\"UTF-8\"/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\"/>\n    <style>\n      * {\n        -webkit-box-sizing: border-box;\n        -moz-box-sizing: border-box;\n        box-sizing: border-box;\n      }\n    body {\n      background: transparent;\n      font-family: \"Roboto\", sans-serif;\n      -ms-text-size-adjust: 100%;\n      -webkit-text-size-adjust: 100%;\n      color: #333;\n      text-align: left;\n      background-color: rgba(128,255,128,.98);\n    }\n    .box {\n      padding-top: 25px;\n      border-radius: 2px;\n      width: 100%;\n      height: 100%;\n      min-width: 220px;\n      min-height: 220px;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n    }\n    a, p {\n      display: block;\n      text-align: center;\n      text-decoration: none;\n      text-transform: uppercase;\n      color: #0606e0;\n      padding: 20px;\n    }\n    div.relativeLeft {\n      position: relative;\n      top: 0px;\n      right: 0;\n      width: 0px;\n      height: 0px;\n    }\n    div.relativeRight {\n      position: relative;\n      float: right;\n    }\n    div.relativeTopRight {\n      position: relative;\n      float: top;\n      float: right;\n    }\n    </style>\n  </head>\n  <body>\n    <div class=\"box\">\n      <div class=\"relativeTopRight\">\n        <a href=\"appboy://close\">X</a>\n      </div>\n      <p>This is an HTML in-app message without a zip file.</p>\n      <a href=\"https://www.braze.com\">Visit braze.com</a>\n      <a href=\"mailto:stopwatch@braze.com\">Email Stopwatch</a>\n      <a href=\"appboy://feed\">Open the Newsfeed</a>\n      <a onClick=\"appboyBridge.logClick('1')\" />ab: logClick WithButtonId</a>\n      <a onClick=\"appboyBridge.logClick()\" />ab: logClick</a>\n      <button onclick=\"window.location = \\'appboy://customEvent?name=iOSHtmlIamCustomEvent&pOne=pTwo\\';\">Log Custom Event</button>\n      <img src=\"https://appboy-images.com/appboy/communication/marketing/slide_up/slide_up_message_parameters/images/55e0c42664617307440c0000/147326cf775c7ce6f24ad5ad731254f040ed97f7/original.?1440793642\" width=\"100%\">\n        <div class=\"relativeLeft\">\n          <a href=\"https://twitter.com/braze?abButtonId=0&abExternalOpen=true\">Braze Twitter</a>\n        </div>\n        <div class=\"relativeRight\">\n          <a href=\"appboy://close\">Close</a>\n        </div>\n        </div>\n  </body>\n</html>\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/UI/InAppMessageHTMLComposerViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"StopwatchSegmentedControl.h\"\n\n@interface InAppMessageHTMLComposerViewController : UIViewController\n\n@property (nonatomic, weak) IBOutlet StopwatchSegmentedControl *HTMLTypeSegment;\n\n- (void)dismissKeyboard;\n- (NSURL *)remoteURL;\n- (NSString *)inAppText;\n- (void)setHTMLComposerBottomSpace:(CGFloat)bottomSpace;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/UI/InAppMessageHTMLComposerViewController.m",
    "content": "#import \"InAppMessageHTMLComposerViewController.h\"\n#import \"UIViewController+Keyboard.h\"\n\nstatic NSString *const HTMLAssetsZip = @\"https://appboy-images.com/HTML_ZIP_STOPWATCH.zip\";\n\n@interface InAppMessageHTMLComposerViewController ()\n\n@property (nonatomic, weak) IBOutlet UITextField *zipRemoteURLTextField;\n@property (nonatomic, weak) IBOutlet UITextView *HTMLInAppTextView;\n@property (nonatomic, weak) IBOutlet NSLayoutConstraint *htmlComposerBottomConstraint;\n\n@property (nonatomic) NSString *htmlWithJS;\n@property (nonatomic) NSString *htmlWithoutAssetZip;\n\n- (void)addTextViewBorder;\n- (void)populateHTMLVariables;\n- (NSString *)getHTMLStringFromFile:(NSString *)filePath;\n\n- (IBAction)HTMLTypeChanged:(id)sender;\n\n@end\n\n@implementation InAppMessageHTMLComposerViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  [self populateHTMLVariables];\n  [self addDismissGestureForView:self.view];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  [self addTextViewBorder];\n}\n\n#pragma mark - UI\n\n- (void)addTextViewBorder {\n  CALayer *textViewLayer = self.HTMLInAppTextView.layer;\n  textViewLayer.cornerRadius = 2.0;\n  textViewLayer.masksToBounds = YES;\n  textViewLayer.borderWidth = 0.5;\n  textViewLayer.borderColor = [UIColor lightGrayColor].CGColor;\n}\n\n#pragma mark - Populate HTML strings\n\n- (void)populateHTMLVariables {\n  self.htmlWithJS = [self getHTMLStringFromFile:@\"InAppMessageWithJS\"];\n  self.htmlWithoutAssetZip = [self getHTMLStringFromFile:@\"InAppMessageWithoutAssetZip\"];\n  self.HTMLInAppTextView.text = self.htmlWithJS;\n}\n\n- (NSString *)getHTMLStringFromFile:(NSString *)filePath {\n  NSString *filepath = [[NSBundle mainBundle] pathForResource:filePath ofType:@\"html\"];\n  return [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:nil];\n}\n\n#pragma mark - Actions\n\n- (IBAction)HTMLTypeChanged:(id)sender {\n  switch (self.HTMLTypeSegment.selectedSegmentIndex) {\n    case 0:\n      self.zipRemoteURLTextField.text = HTMLAssetsZip;\n      self.HTMLInAppTextView.text = self.htmlWithJS;\n      break;\n    case 1:\n      self.zipRemoteURLTextField.text = @\"\";\n      self.HTMLInAppTextView.text = self.htmlWithoutAssetZip;\n      break;\n  }\n}\n\n#pragma mark - Keyboard\n\n- (void)dismissKeyboard {\n  [self.view endEditing:YES];\n}\n\n#pragma mark - Get texts\n\n- (NSURL *)remoteURL {\n  NSString *urlText = self.zipRemoteURLTextField.text;\n  if (urlText != nil && ![urlText isEqualToString:@\"\"]) {\n    return [NSURL URLWithString:urlText];\n  }\n  return nil;\n}\n\n- (NSString *)inAppText {\n  return self.HTMLInAppTextView.text;\n}\n\n- (void)setHTMLComposerBottomSpace:(CGFloat)bottomSpace {\n  self.htmlComposerBottomConstraint.constant = bottomSpace;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/UI/InAppMessageUICells.h",
    "content": "#import \"AppboyKit.h\"\n#import \"KKColorListPicker.h\"\n\nstatic NSString *const ItemIcon = @\"Icon Badge\";\nstatic NSString *const ItemImageURL = @\"Image URL\";\nstatic NSString *const ItemIconColor = @\"Icon Color\";\nstatic NSString *const ItemIconBackgroundColor = @\"Icon Background\";\nstatic NSString *const ItemMessage = @\"Message\";\nstatic NSString *const ItemBodyColor = @\"Body Text Color\";\nstatic NSString *const ItemHeader = @\"Title\";\nstatic NSString *const ItemHeaderColor = @\"Title Color\";\nstatic NSString *const ItemBackgroundColor = @\"Background\";\nstatic NSString *const ItemHideChevron = @\"Hide Chevron\";\nstatic NSString *const ItemChevronColor = @\"Chevron Color\";\nstatic NSString *const ItemCloseButtonColor = @\"Close Button Color\";\nstatic NSString *const ItemClickAction = @\"Action\";\nstatic NSString *const ItemClickActionURL = @\"Action URL\";\nstatic NSString *const ItemDismissType = @\"Dismiss\";\nstatic NSString *const ItemDuration = @\"Duration(s)\";\nstatic NSString *const ItemAnimatedFrom = @\"Aminated From\";\nstatic NSString *const ItemButtonNumber = @\"Buttons:\";\nstatic NSString *const ItemButtonOne = @\"Button One\";\nstatic NSString *const ItemButtonTwo = @\"Button Two\";\nstatic NSString *const ItemModalFrameColor = @\"Frame Color\";\nstatic NSString *const ItemOrientation = @\"Orientation\";\nstatic NSString *const ItemImageGraphic = @\"Graphic Image\";\nstatic NSString *const ItemImageContentMode = @\"Image Content\";\nstatic NSString *const ItemMessageAlignment = @\"Message Align\";\nstatic NSString *const ItemHeaderAlignment  = @\"Header Align\";\n\nstatic NSString *const CellIdentifierSegment = @\"SegmentCellIdentifier\";\nstatic NSString *const CellIdentifierText = @\"TextCellIdentifier\";\nstatic NSString *const CellIdentifierChevron = @\"ChevronCellIdentifier\";\nstatic NSString *const CellIdentifierColor = @\"ColorCellIdentifier\";\nstatic NSString *const CellIdentifierButton = @\"ButtonCellIdentifer\";\nstatic NSString *const CellIdentifierButtonLabel = @\"ButtonLabelCellIdentifier\";\n\n@interface SegmentCell : UITableViewCell\n\n@property IBOutlet UILabel *titleLabel;\n@property IBOutlet UISegmentedControl *segmentControl;\n- (void)setUpWithItem:(NSString *)item;\n\n@end\n\n@interface TextFieldCell : UITableViewCell\n\n@property IBOutlet UILabel *titleLabel;\n@property IBOutlet UITextField *textField;\n\n@end\n\n@interface ButtonLabelCell : TextFieldCell\n\n@property IBOutlet UIButton *titleButton;\n@property NSMutableDictionary *inAppMessageDictionary;\n+ (NSDictionary *)imageDictionary;\n+ (NSDictionary *)messageDictionary;\n+ (NSDictionary *)headerDictionary;\n- (UIAlertController *)getAlertControllerWithInAppMessageDictionary:(NSMutableDictionary *)dictionary;\n\n@end\n\n@interface ColorCell : UITableViewCell\n\n@property IBOutlet UILabel *titleLabel;\n@property IBOutlet UIButton *colorButton;\n@property IBOutlet UILabel *opacityLabel;\n@property IBOutlet UISlider *opacitySlider;\n\n- (void)setColor:(UIColor *)color;\n- (UIColor *)color;\n\n@end\n\n@interface SwitchCell : UITableViewCell\n\n@property IBOutlet UILabel *titleLabel;\n@property IBOutlet UISwitch *hideChevronSwitch;\n\n@end\n\n@interface InAppMessageButtonCell : UITableViewCell <UITextFieldDelegate, KKColorListViewControllerDelegate>\n\n@property IBOutlet UITextField *titleTextField;\n@property IBOutlet UIButton *textColorButton;\n@property IBOutlet UIButton *backgroundColorButton;\n@property IBOutlet UISegmentedControl *actionSegmentControl;\n@property IBOutlet UITextField *URITextField;\n@property (nonatomic) ABKInAppMessageButton *button;\n@property NSURL *buttonURL;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/UI/InAppMessageUICells.m",
    "content": "#import \"InAppMessageUICells.h\"\n#import \"ColorUtils.h\"\n\n@implementation SegmentCell\n\n- (void)setUpWithItem:(NSString *)item {\n  self.titleLabel.text = item;\n  NSDictionary *segmentDictionary = @{ItemIcon : @[@\"None\", @\"Badge\", @\"URL\"],\n                                      ItemClickAction : @[@\"Feed\", @\"None\", @\"URL\"],\n                                      ItemDismissType : @[@\"Auto\", @\"Swipe\"],\n                                      ItemAnimatedFrom : @[@\"Bottom\", @\"Top\"],\n                                      ItemOrientation : @[@\"Any\", @\"Por\", @\"Landscape\"],\n                                      ItemButtonNumber : @[@\"None\", @\"One\", @\"Two\"],\n                                      ItemMessageAlignment : @[@\"Center\", @\"Start\", @\"End\"],\n                                      ItemHeaderAlignment : @[@\"Center\", @\"Start\", @\"End\"],\n                                      ItemImageContentMode : @[@\"Fit\", @\"Fill\"]};\n  NSArray *segmentList = segmentDictionary[item];\n  [self.segmentControl removeAllSegments];\n  for (int i = 0; i < segmentList.count; i ++) {\n    self.segmentControl.tintColor = [ColorUtils stopwatchBlueColor];\n    [self.segmentControl insertSegmentWithTitle:segmentList[i] atIndex:i animated:NO];\n  }\n}\n@end\n\n@implementation TextFieldCell\n\n@end\n\n@implementation ButtonLabelCell\n\n+ (NSDictionary *)imageDictionary {\n  return @{@\"956x400\" : @\"https://www.dropbox.com/s/aug2ym2ve6l93ot/wow956x400.png?dl=1\",\n           @\"(graphic modal)1000x1000\" : @\"https://www.dropbox.com/s/vp8xic22wuo20c9/wow1000x1000.png?dl=1\",\n           @\"(full - portrait)1000x800\" : @\"https://www.dropbox.com/s/rnfxchj8zn6vf2b/wow1000x800.png?dl=1\",\n           @\"(graphic full - portrait)1000x1600\" : @\"https://www.dropbox.com/s/04sh1u47vf02ayt/wow1000x1600.png?dl=1\",\n           @\"(graphic full - landscape)1600x1000\" : @\"https://www.dropbox.com/s/uarvtlcrpro6dpy/wow1600x1000.png?dl=1\",\n           @\"(full - landscape)1600x500\" : @\"https://www.dropbox.com/s/baam4syqx4ig42z/wow1600x500.png?dl=1\",\n           @\"(modal)1160x400\" : @\"https://www.dropbox.com/s/r3uj7t7qx6jgzyy/wow1160x400.png?dl=1\",\n           @\"No Image\" : [NSNull null]};\n}\n\n+ (NSDictionary *)headerDictionary {\n  return @{@\"None\" : @\"\",\n           @\"10 Chars\" : @\"Hey there#\",\n           @\"20 Chars\" : @\"Hey hey from Braze!#\",\n           @\"30 Chars\" : @\"Good morning from us @ Braze!#\",\n           @\"80 Chars\" : @\"Hello from Braze!! Have a fun day okay. Hello from Braze!! Have a fun day today#\"};\n}\n\n+ (NSDictionary *)messageDictionary {\n  return @{@\"20 Chars\" : @\"Hey hey from Braze!#\",\n           @\"40 Chars\" : @\"Hello there!  This is an in-app message#\",\n           @\"70 Chars\" : @\"Hello there! This is an in-app message. Yo, this is an in-app message#\",\n           @\"90 Chars\" : @\"Hello there! This is an in-app message.  Hello again!  Anyways, this is an in-app message#\",\n           @\"140 Chars\" : @\"Welcome to Braze!! Braze! is Marketing Automation for Apps. This is an in-app message - this message is exactly one hundred and forty chars#\",\n           @\"240 Chars\" : @\"Welcome to Braze!! Braze! is Marketing Automation for Apps. This is an in-app message - this message is exactly two hundred and forty chars!  We don\\'t recommend making in-app messages longer than 140 characters due to variations in screens#\",\n           @\"640 Chars\" : @\"Welcome to Braze!! Braze! is Marketing Automation for Apps. This is an in-app message - this message is exactly six hundred and forty chars!  We don\\'t recommend making in-app messages longer than 140 characters due to variations in screens.  This is an in-app message - this message is exactly six hundred and forty chars!  We don\\'t recommend making in-app messages longer than 140 characters due to variations in screens.  This is an in-app message - this message is exactly six hundred and forty chars!  We don\\'t recommend making in-app messages longer than 140 characters due to variations in screens.  This is a waaaay too long message#\"};\n}\n\n- (UIAlertController *)getAlertControllerWithInAppMessageDictionary:(NSMutableDictionary *)dictionary {\n  NSString *buttonTitle = self.titleButton.titleLabel.text;\n  NSDictionary *optionDictionary;\n  if ([buttonTitle isEqualToString:ItemImageURL]) {\n    optionDictionary = [ButtonLabelCell imageDictionary];\n  } else if ([buttonTitle isEqualToString:ItemMessage]) {\n    optionDictionary = [ButtonLabelCell messageDictionary];\n  } else if ([buttonTitle isEqualToString:ItemHeader]) {\n    optionDictionary = [ButtonLabelCell headerDictionary];\n  }\n  \n  UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:buttonTitle\n                                                                       message:nil\n                                                                preferredStyle:UIAlertControllerStyleActionSheet];\n  \n  for (NSString *title in [optionDictionary allKeys]) {\n    UIAlertAction *action = [UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {\n      if (optionDictionary[action.title] != [NSNull null]) {\n        self.textField.text  = optionDictionary[action.title];\n      } else {\n        self.textField.text  = @\"\";\n      }\n      dictionary[buttonTitle] = self.textField.text;\n    }];\n    [actionSheet addAction:action];\n  }\n  [actionSheet addAction:[UIAlertAction actionWithTitle:@\"Cancel\" style:UIAlertActionStyleCancel handler:nil]];\n  return actionSheet;\n}\n\n@end\n\n@implementation ColorCell\n\n- (void)setColor:(UIColor *)color {\n  if (color != nil) {\n    self.colorButton.backgroundColor = color;\n  } else {\n    self.colorButton.backgroundColor = [UIColor lightGrayColor];\n  }\n}\n\n- (UIColor *)color {\n  return self.colorButton.backgroundColor;\n}\n\n@end\n\n@implementation SwitchCell\n\n@end\n\n@implementation InAppMessageButtonCell\n\n- (void)setButton:(ABKInAppMessageButton *)button {\n  _button = button;\n  self.titleTextField.text = button.buttonText;\n  if (button.buttonTextColor) {\n    self.textColorButton.backgroundColor = button.buttonTextColor;\n  }\n  if (button.buttonBackgroundColor) {\n    self.backgroundColorButton.backgroundColor = button.buttonBackgroundColor;\n  }\n  self.actionSegmentControl.selectedSegmentIndex = button.buttonClickActionType;\n  self.URITextField.text = [button.buttonClickedURI absoluteString];\n}\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField {\n  [textField resignFirstResponder];\n  if (textField == self.titleTextField) {\n    self.button.buttonText = textField.text;\n  } else if (textField == self.URITextField) {\n    self.buttonURL = [NSURL URLWithString:textField.text];\n    if (self.actionSegmentControl.selectedSegmentIndex == 2) {\n      [self.button setButtonClickAction:ABKInAppMessageRedirectToURI\n                                withURI:self.buttonURL];\n    }\n  }\n  return YES;\n}\n\n- (IBAction)changeColor:(UIButton *)sender {\n  KKColorListViewController *colorListViewController = [[KKColorListViewController alloc] initWithSchemeType:KKColorsSchemeTypeCrayola];\n  colorListViewController.delegate = self;\n  sender.selected = YES;\n  [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:colorListViewController animated:YES completion:nil];\n}\n\n- (void)colorListController:(KKColorListViewController *)controller didSelectColor:(KKColor *)color {\n  if (self.textColorButton.selected) {\n    self.textColorButton.backgroundColor = [color uiColor];\n    self.button.buttonTextColor = self.textColorButton.backgroundColor;\n    self.textColorButton.selected = NO;\n  } else if (self.backgroundColorButton.selected) {\n    self.backgroundColorButton.backgroundColor = [color uiColor];\n    self.button.buttonBackgroundColor = self.backgroundColorButton.backgroundColor;\n    self.backgroundColorButton.selected = NO;\n  }\n}\n\n- (void)colorListPickerDidComplete:(KKColorListViewController *)controller {\n  [controller dismissViewControllerAnimated:YES completion:nil];\n}\n\n- (IBAction)actionChanged:(UISegmentedControl *)sender {\n  switch (sender.selectedSegmentIndex) {\n    case 0:\n      [self.button setButtonClickAction:ABKInAppMessageDisplayNewsFeed withURI:nil];\n      break;\n    case 1:\n      [self.button setButtonClickAction:ABKInAppMessageNoneClickAction withURI:nil];\n      break;\n    case 2:\n      [self.button setButtonClickAction:ABKInAppMessageRedirectToURI withURI:self.buttonURL];\n      break;\n    default:\n      break;\n  }\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/UI/InAppMessageUIViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"KKColorListPicker.h\"\n\n@class ABKSlideup;\n\n@interface InAppMessageUIViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, KKColorListViewControllerDelegate>\n@property NSMutableArray *inAppSlideupList;\n@property NSMutableArray *inAppModalList;\n@property NSMutableArray *inAppFullList;\n@property NSMutableDictionary *inAppMessageDictionary;\n@property IBOutlet UISegmentedControl *inAppMessageTypeSegment;\n@property IBOutlet UITableView *tableView;\n\n@property UITextField *currentTextField;\n\n- (IBAction)inAppMessageTypeChanged:(id)sender;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/IAM/UI/InAppMessageUIViewController.m",
    "content": "#import \"InAppMessageUIViewController.h\"\n#import \"InAppMessageUICells.h\"\n#import \"InAppMessageHTMLComposerViewController.h\"\n#import \"AppboyKit.h\"\n#import \"UIViewController+Keyboard.h\"\n#import \"ColorUtils.h\"\n#import \"ABKInAppMessageHTMLFull.h\"\n#import \"ABKInAppMessageHTML.h\"\n\nstatic const NSInteger textFieldTagNumber = 50;\nstatic const CGFloat ButtonTableViewCellHeight = 176.0f;\nstatic const CGFloat NormalTableViewCellHeight = 44.0f;\nstatic const CGFloat ColorTableViewCellHeight = 88.0f;\n\nstatic const int CustomInAppMessageDuration = 5;\n\n@interface InAppMessageUIViewController()\n\n@property (nonatomic, weak) IBOutlet UIView *HTMLComposerView;\n\n@property (nonatomic, strong) InAppMessageHTMLComposerViewController *htmlComposerVC;\n@property (nonatomic, assign) BOOL keyboardIsShown;\n@property (nonatomic, assign) BOOL inAppMessagePending;\n\n- (void)loadHTMLComposer;\n- (void)setHTMLHidden:(BOOL)hidden;\n- (void)setViewBottomSpace:(CGFloat)bottomSpace;\n- (void)keyboardDidShow:(NSNotification *)notification;\n- (void)keyboardWillHide:(NSNotification *)notification;\n\n@end\n\n@implementation InAppMessageUIViewController\n\n- (UIStatusBarStyle)preferredStatusBarStyle {\n  // Replace with UIStatusBarStyleLightContent to verify that IAM respects the\n  // status bar style when displayed\n  return UIStatusBarStyleDefault;\n}\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  \n  self.inAppMessageDictionary = [NSMutableDictionary dictionaryWithCapacity:3];\n  self.inAppSlideupList = [NSMutableArray arrayWithArray:\n    @[ItemIcon, ItemIconBackgroundColor, ItemImageURL, ItemMessage, ItemBodyColor, ItemBackgroundColor, ItemHideChevron,\n      ItemChevronColor, ItemClickAction, ItemClickActionURL, ItemDismissType, ItemDuration, ItemAnimatedFrom,\n      ItemMessageAlignment, ItemImageContentMode]];\n  self.inAppModalList = [NSMutableArray arrayWithArray:\n    @[ItemIcon, ItemIconBackgroundColor, ItemImageURL, ItemIconColor, ItemHeader, ItemHeaderColor, ItemModalFrameColor,\n      ItemMessage, ItemBodyColor, ItemBackgroundColor, ItemCloseButtonColor, ItemClickAction, ItemClickActionURL,\n      ItemDismissType, ItemDuration, ItemOrientation, ItemImageGraphic, ItemMessageAlignment, ItemHeaderAlignment, ItemImageContentMode, ItemButtonNumber]];\n  self.inAppFullList = [NSMutableArray arrayWithArray:\n    @[ItemImageURL, ItemHeader, ItemHeaderColor, ItemMessage, ItemBodyColor, ItemBackgroundColor, ItemCloseButtonColor, ItemModalFrameColor,\n      ItemClickAction, ItemClickActionURL, ItemDismissType, ItemDuration, ItemOrientation, ItemImageGraphic, ItemMessageAlignment, ItemHeaderAlignment, ItemImageContentMode, ItemButtonNumber]];\n  self.inAppMessageDictionary[ItemImageURL] = @\"https://appboy-images.com/appboy/communication/marketing/slide_up/slide_up_message_parameters/images/55e0c42664617307440c0000/147326cf775c7ce6f24ad5ad731254f040ed97f7/original.?1440793642\";\n  \n  [self loadHTMLComposer];\n  \n  NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n  [notificationCenter addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];\n  [notificationCenter addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];\n  [notificationCenter addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  [ColorUtils applyThemeToViewController:self];\n}\n\n#pragma mark - Child VC\n\n- (void)loadHTMLComposer {\n  self.htmlComposerVC = [self.storyboard instantiateViewControllerWithIdentifier:@\"InAppMessageHTMLComposerViewController\"];\n  self.htmlComposerVC.view.translatesAutoresizingMaskIntoConstraints = NO;\n  [self addChildViewController:self.htmlComposerVC];\n  [ColorUtils applyThemeToViewController:self.htmlComposerVC];\n\n  [self.HTMLComposerView addSubview:self.htmlComposerVC.view];\n  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"V:|-0-[v]-0-|\" options:0 metrics:nil views:@{ @\"v\": self.htmlComposerVC.view }]];\n  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@\"H:|-0-[v]-0-|\" options:0 metrics:nil views:@{ @\"v\": self.htmlComposerVC.view }]];\n  \n  [self.htmlComposerVC didMoveToParentViewController:self];\n}\n\n- (IBAction)inAppMessageTypeChanged:(id)sender {\n  [self dismissKeyboard];\n  if (self.inAppMessageTypeSegment.selectedSegmentIndex == 3) {\n    [self setHTMLHidden:NO];\n    return;\n  }\n  [self.htmlComposerVC dismissKeyboard];\n  [self setHTMLHidden:YES];\n  [self.tableView reloadData];\n}\n\n- (void)dealloc {\n  [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n- (NSMutableArray *)currentArrayList {\n  switch (self.inAppMessageTypeSegment.selectedSegmentIndex) {\n    case 0:\n      return self.inAppSlideupList;\n    case 1:\n      return self.inAppModalList;\n    case 2:\n      return self.inAppFullList;\n    default:\n      return self.inAppSlideupList;\n  }\n  return nil;\n}\n\n#pragma mark - Table view datasource & delegate\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n  return [self currentArrayList].count;\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {\n  NSString *item = [self currentArrayList][indexPath.row];\n  if ([item isEqualToString:ItemButtonOne] || [item isEqualToString:ItemButtonTwo]) {\n    return ButtonTableViewCellHeight;\n  } else if ([item isEqualToString:ItemHeaderColor] ||\n             [item isEqualToString:ItemBodyColor] ||\n             [item isEqualToString:ItemBackgroundColor] ||\n             [item isEqualToString:ItemModalFrameColor] ||\n             [item isEqualToString:ItemIconColor] ||\n             [item isEqualToString:ItemIconBackgroundColor] ||\n             [item isEqualToString:ItemChevronColor] ||\n             [item isEqualToString:ItemCloseButtonColor]) {\n    return ColorTableViewCellHeight;\n  } else {\n    return NormalTableViewCellHeight;\n  }\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  NSString *item = [self currentArrayList][indexPath.row];\n  UITableViewCell *cell = nil;\n  if ([item isEqualToString:ItemClickAction] ||\n      [item isEqualToString:ItemDismissType] ||\n      [item isEqualToString:ItemAnimatedFrom] ||\n      [item isEqualToString:ItemOrientation] ||\n      [item isEqualToString:ItemMessageAlignment] ||\n      [item isEqualToString:ItemHeaderAlignment] ||\n      [item isEqualToString:ItemImageContentMode] ||\n      [item isEqualToString:ItemButtonNumber]) {\n    cell = [self createCellWithCellIdentifier:CellIdentifierSegment withClass:[SegmentCell class] tableView:tableView];\n    [(SegmentCell *)cell setUpWithItem:item];\n    if (self.inAppMessageDictionary[item]) {\n      ((SegmentCell *)cell).segmentControl.selectedSegmentIndex = [self.inAppMessageDictionary[item] integerValue];\n    } else if (((SegmentCell *)cell).titleLabel != nil) {\n      NSString *cellText = ((SegmentCell *)cell).titleLabel.text;\n      self.inAppMessageDictionary[cellText] =  @(0);\n      // Keep the default image content as \"fill\" for Full IAMs\n      if (self.inAppMessageTypeSegment.selectedSegmentIndex == 2 && [cellText isEqualToString:ItemImageContentMode]) {\n        self.inAppMessageDictionary[cellText] =  @(1);\n      }\n    }\n  } else if ([item isEqualToString:ItemMessage] ||\n             [item isEqualToString:ItemHeader] ||\n             [item isEqualToString:ItemImageURL]) {\n    cell = [self createCellWithCellIdentifier:CellIdentifierButtonLabel withClass:[ButtonLabelCell class] tableView:tableView];\n    ButtonLabelCell *buttonLabelCell = ((ButtonLabelCell *) cell);\n    [buttonLabelCell.titleButton setTitle:item forState:UIControlStateNormal];\n    buttonLabelCell.textField.text = self.inAppMessageDictionary[item];\n    buttonLabelCell.textField.delegate = self;\n  } else if ([item isEqualToString:ItemIcon] ||\n    [item isEqualToString:ItemClickActionURL] ||\n    [item isEqualToString:ItemDuration]) {\n    cell = [self createCellWithCellIdentifier:CellIdentifierText withClass:[TextFieldCell class] tableView:tableView];\n    \n    // Pre-populate message and header\n    if (([item isEqualToString:ItemMessage] || [item isEqualToString:ItemHeader]) && self.inAppMessageDictionary[item] == nil) {\n      self.inAppMessageDictionary[item] = @\"Testing\";\n    }\n    \n    TextFieldCell *textFieldCell = ((TextFieldCell *)cell);\n    textFieldCell.titleLabel.text = item;\n    textFieldCell.textField.text = self.inAppMessageDictionary[item];\n    textFieldCell.textField.delegate = self;\n    textFieldCell.textField.tag = [item isEqualToString:ItemIcon] ? textFieldTagNumber : 0;\n  } else if ([item isEqualToString:ItemHeaderColor] ||\n             [item isEqualToString:ItemBodyColor] ||\n             [item isEqualToString:ItemBackgroundColor] ||\n             [item isEqualToString:ItemModalFrameColor] ||\n             [item isEqualToString:ItemIconColor] ||\n             [item isEqualToString:ItemIconBackgroundColor] ||\n             [item isEqualToString:ItemChevronColor] ||\n             [item isEqualToString:ItemCloseButtonColor]) {\n    cell = [self createCellWithCellIdentifier:CellIdentifierColor withClass:[ColorCell class] tableView:tableView];\n    ColorCell *colorCell = ((ColorCell *)cell);\n    colorCell.titleLabel.text = item;\n    [colorCell setColor:self.inAppMessageDictionary[item]];\n    colorCell.opacitySlider.value = 1.0;\n    colorCell.opacitySlider.tintColor = [ColorUtils stopwatchBlueColor];\n    colorCell.colorButton.backgroundColor = [((ColorCell *) cell).colorButton.backgroundColor colorWithAlphaComponent:1.0];\n  } else if ([item isEqualToString:ItemHideChevron] ||\n             [item isEqualToString:ItemImageGraphic]) {\n    cell = [self createCellWithCellIdentifier:CellIdentifierChevron withClass:[SwitchCell class] tableView:tableView];\n    SwitchCell *switchCell = ((SwitchCell *)cell);\n    switchCell.titleLabel.text = item;\n    switchCell.hideChevronSwitch.on = [self.inAppMessageDictionary[item] boolValue];\n  } else if ([item isEqualToString:ItemButtonOne] ||\n             [item isEqualToString:ItemButtonTwo]) {\n    cell = [self createCellWithCellIdentifier:CellIdentifierButton withClass:[InAppMessageButtonCell class] tableView:tableView];\n    ((InAppMessageButtonCell *)cell).button = self.inAppMessageDictionary[item];\n  }\n  return cell;\n}\n\n- (UITableViewCell *)createCellWithCellIdentifier:(NSString *)identifier withClass:(Class)cellClass tableView:(UITableView *)tableView {\n  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];\n  if (cell == nil && [cellClass isKindOfClass:[UITableViewCell class]]) {\n    cell = (UITableViewCell *)[[cellClass alloc] init];\n  }\n  return cell;\n}\n\n- (IBAction)ChangeTextFieldContent:(UIButton *)sender {\n  [self dismissKeyboard];\n  UIView *cell = sender.superview;\n  while (![cell isKindOfClass:[ButtonLabelCell class]] && cell.superview != nil) {\n    cell = cell.superview;\n  }\n  \n  UIAlertController *actionSheet = [(ButtonLabelCell *)cell getAlertControllerWithInAppMessageDictionary:self.inAppMessageDictionary];\n  actionSheet.popoverPresentationController.sourceView = sender;\n  actionSheet.popoverPresentationController.sourceRect = sender.bounds;\n\n  [self presentViewController:actionSheet animated:YES completion:nil];\n}\n\n- (IBAction)changeColor:(UIButton *)sender {\n  [self dismissKeyboard];\n  UIView *cell = sender.superview;\n  while (![cell isKindOfClass:[ColorCell class]] && cell.superview != nil) {\n    cell = cell.superview;\n  }\n  KKColorListViewController *colorListViewController = [[KKColorListViewController alloc] initWithSchemeType:KKColorsSchemeTypePantone];\n  colorListViewController.delegate = self;\n  colorListViewController.headerTitle = [cell isKindOfClass:[ColorCell class]] ? ((ColorCell *)cell).titleLabel.text : nil;\n  [self presentViewController:colorListViewController animated:YES completion:nil];\n}\n\n- (void)colorListPickerDidComplete:(KKColorListViewController *)controller {\n  [controller dismissViewControllerAnimated:YES completion:nil];\n}\n\n- (void)colorListController:(KKColorListViewController *)controller didSelectColor:(KKColor *)color {\n  NSString *item = controller.headerTitle;\n  NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[[self currentArrayList] indexOfObject:item] inSection:0];\n  ColorCell *cell = (ColorCell *)[self.tableView cellForRowAtIndexPath:indexPath];\n  [cell setColor:[[color uiColor] colorWithAlphaComponent:cell.opacitySlider.value]];\n  self.inAppMessageDictionary[item] = [[color uiColor] colorWithAlphaComponent:cell.opacitySlider.value];\n}\n\n- (IBAction)hideChevronChanged:(UISwitch *)sender {\n  [self dismissKeyboard];\n  self.inAppMessageDictionary[ItemHideChevron] = @(sender.on);\n  \n  UIView *cell = sender.superview;\n  while (![cell isKindOfClass:[SwitchCell class]] && cell.superview != nil) {\n    cell = cell.superview;\n  }\n  self.inAppMessageDictionary[((SwitchCell *)cell).titleLabel.text] = @(sender.on);\n}\n\n- (IBAction)buttonSegmentChanged:(UISegmentedControl *)sender {\n  [self dismissKeyboard];\n  UIView *cell = sender.superview;\n  while (![cell isKindOfClass:[SegmentCell class]] && cell.superview != nil) {\n    cell = cell.superview;\n  }\n  if ([cell isKindOfClass:[SegmentCell class]]) {\n    self.inAppMessageDictionary[((SegmentCell *)cell).titleLabel.text] = @(sender.selectedSegmentIndex);\n    if ([((SegmentCell *)cell).titleLabel.text isEqualToString:ItemButtonNumber]) {\n      switch (sender.selectedSegmentIndex) {\n        case 0:\n          [[self currentArrayList] removeObject:ItemButtonOne];\n          [[self currentArrayList] removeObject:ItemButtonTwo];\n          [self.inAppMessageDictionary removeObjectsForKeys:@[ItemButtonTwo, ItemButtonOne]];\n          break;\n        case 1:\n          [[self currentArrayList] removeObject:ItemButtonTwo];\n          [self.inAppMessageDictionary removeObjectForKey:ItemButtonTwo];\n          if ([[self currentArrayList] indexOfObject:ItemButtonOne] == NSNotFound) {\n            [[self currentArrayList] addObject:ItemButtonOne];\n            self.inAppMessageDictionary[ItemButtonOne] = [self getButtonWithFont:[UIFont fontWithName:@\"MarkerFelt-Wide\" size:13]];\n          }\n          break;\n        case 2:\n          if ([[self currentArrayList] indexOfObject:ItemButtonOne] == NSNotFound) {\n            [[self currentArrayList] addObject:ItemButtonOne];\n            self.inAppMessageDictionary[ItemButtonOne] = [self getButtonWithFont:[UIFont fontWithName:@\"MarkerFelt-Wide\" size:13]];\n          }\n          if ([[self currentArrayList] indexOfObject:ItemButtonTwo] == NSNotFound) {\n            [[self currentArrayList] addObject:ItemButtonTwo];\n            self.inAppMessageDictionary[ItemButtonTwo] = [self getButtonWithFont:[UIFont fontWithName:@\"MarkerFelt-Wide\" size:13]];\n          }\n          break;\n        default:\n          break;\n      }\n      [self.tableView reloadData];\n    }\n  }\n}\n\n- (ABKInAppMessageButton *)getButtonWithFont:(UIFont *)font {\n  ABKInAppMessageButton *button = [[ABKInAppMessageButton alloc] init];\n  button.buttonTextFont = font;\n  return button;\n}\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField {\n  [textField resignFirstResponder];\n  return YES;\n}\n\n- (void)textFieldDidBeginEditing:(UITextField *)textField {\n  self.currentTextField = textField;\n}\n\n- (void)textFieldDidEndEditing:(UITextField *)textField {\n  UIView *cell = textField.superview;\n  while (![cell isKindOfClass:[TextFieldCell class]] && cell.superview != nil) {\n    cell = cell.superview;\n  }\n  if ([cell isKindOfClass:[ButtonLabelCell class]]) {\n    self.inAppMessageDictionary[((ButtonLabelCell *)cell).titleButton.titleLabel.text] = textField.text;\n  } else if ([cell isKindOfClass:[TextFieldCell class]]) {\n    self.inAppMessageDictionary[((TextFieldCell *)cell).titleLabel.text] = textField.text;\n  }\n  self.currentTextField = nil;\n}\n\n- (IBAction)opacitySliderValueChanged:(UISlider *)slider {\n  [self dismissKeyboard];\n  UIView *cell = slider.superview;\n  while (![cell isKindOfClass:[ColorCell class]] && cell.superview != nil) {\n    cell = cell.superview;\n  }\n  if ([cell isKindOfClass:[ColorCell class]]) {\n    ((ColorCell *)cell).colorButton.backgroundColor = [((ColorCell *)cell).colorButton.backgroundColor colorWithAlphaComponent:((ColorCell *)cell).opacitySlider.value];\n    self.inAppMessageDictionary[((ColorCell *)cell).titleLabel.text] = [((ColorCell *)cell).colorButton.backgroundColor colorWithAlphaComponent:slider.value];\n  }\n}\n\n- (void)displayInAppMessage {\n  ABKInAppMessage *inAppMessage = nil;\n  switch (self.inAppMessageTypeSegment.selectedSegmentIndex) {\n    case 3: {\n      switch (self.htmlComposerVC.HTMLTypeSegment.selectedSegmentIndex) {\n        case 0: {\n          ABKInAppMessageHTMLFull *inAppHTMLFull = [[ABKInAppMessageHTMLFull alloc] init];\n          inAppHTMLFull.assetsZipRemoteUrl = [self.htmlComposerVC remoteURL];\n          inAppHTMLFull.message = [self.htmlComposerVC inAppText];\n          [[Appboy sharedInstance].inAppMessageController addInAppMessage:inAppHTMLFull];\n          return;\n        }\n        case 1: {\n          ABKInAppMessageHTML *inAppHTML = [[ABKInAppMessageHTML alloc] init];\n          inAppHTML.message = [self.htmlComposerVC inAppText];\n          [[Appboy sharedInstance].inAppMessageController addInAppMessage:inAppHTML];\n          return;\n        }\n      }\n    }\n    case 2:\n      inAppMessage = [[ABKInAppMessageFull alloc] init];\n      break;\n    case 1:\n      inAppMessage = [[ABKInAppMessageModal alloc] init];\n      break;\n    case 0:\n    default:\n      inAppMessage = [[ABKInAppMessageSlideup alloc] init];\n      break;\n  }\n  for (NSString *key in [self.inAppMessageDictionary allKeys]) {\n    if ([key isEqualToString:ItemIcon]) {\n      NSString *icon = [self.inAppMessageDictionary[key] lowercaseString];\n      inAppMessage.icon = icon;\n    } else if ([key isEqualToString:ItemImageURL]) {\n      if ([(NSString *)self.inAppMessageDictionary[key] length] > 0) {\n        inAppMessage.imageURI = [NSURL URLWithString:self.inAppMessageDictionary[key]];\n      }\n    } else if ([key isEqualToString:ItemIconColor]) {\n      inAppMessage.iconColor = self.inAppMessageDictionary[key];\n    } else if ([key isEqualToString:ItemIconBackgroundColor]) {\n      inAppMessage.iconBackgroundColor = self.inAppMessageDictionary[key];\n    } else if ([key isEqualToString:ItemMessage]) {\n      inAppMessage.message = self.inAppMessageDictionary[key];\n    } else if ([key isEqualToString:ItemBodyColor]) {\n      inAppMessage.textColor = self.inAppMessageDictionary[key];\n    } else if ([key isEqualToString:ItemBackgroundColor]) {\n      inAppMessage.backgroundColor = self.inAppMessageDictionary[key];\n    } else if ([key isEqualToString:ItemDismissType]) {\n      switch ([self.inAppMessageDictionary[key] integerValue]) {\n        case 0:\n          inAppMessage.inAppMessageDismissType = ABKInAppMessageDismissAutomatically;\n          break;\n        case 1:\n          inAppMessage.inAppMessageDismissType = ABKInAppMessageDismissManually;\n          break;\n        default:\n          break;\n      }\n    } else if ([key isEqualToString:ItemClickAction]) {\n      ABKInAppMessageClickActionType clickAction;\n      switch ([self.inAppMessageDictionary[key] integerValue]) {\n        case 0:\n        default:\n          clickAction = ABKInAppMessageDisplayNewsFeed;\n          break;\n        case 1:\n          clickAction = ABKInAppMessageNoneClickAction;\n          break;\n        case 2:\n          clickAction = ABKInAppMessageRedirectToURI;\n          break;\n      }\n      [inAppMessage setInAppMessageClickAction:clickAction withURI:[NSURL URLWithString:self.inAppMessageDictionary[ItemClickActionURL]]];\n    } else if ([key isEqualToString:ItemDuration]) {\n      if ([self.inAppMessageDictionary[key] doubleValue] != 0.0) {\n        inAppMessage.duration = [self.inAppMessageDictionary[key] doubleValue];\n      } else {\n        inAppMessage.duration = CustomInAppMessageDuration;\n      }\n    } else if ([key isEqualToString:ItemOrientation]) {\n      ABKInAppMessageOrientation orientation;\n      switch ([self.inAppMessageDictionary[key] integerValue]) {\n        case 0:\n        default:\n          orientation = ABKInAppMessageOrientationAny;\n          break;\n        case 1:\n          orientation = ABKInAppMessageOrientationPortrait;\n          break;\n        case 2:\n          orientation = ABKInAppMessageOrientationLandscape;\n          break;\n      }\n      inAppMessage.orientation = orientation;\n    } else if ([key isEqualToString:ItemMessageAlignment]) {\n      switch ([self.inAppMessageDictionary[key] integerValue]) {\n        case 0:\n        default:\n          inAppMessage.messageTextAlignment = NSTextAlignmentCenter;\n          break;\n        case 1:\n          inAppMessage.messageTextAlignment = NSTextAlignmentLeft;\n          break;\n        case 2:\n          inAppMessage.messageTextAlignment = NSTextAlignmentRight;\n          break;\n      }\n    } else if ([key isEqualToString:ItemImageContentMode]) {\n      switch ([self.inAppMessageDictionary[key] integerValue]) {\n        case 0:\n        default:\n          inAppMessage.imageContentMode = UIViewContentModeScaleAspectFit;\n          break;\n        case 1:\n          inAppMessage.imageContentMode = UIViewContentModeScaleAspectFill;\n          break;\n      }\n    }\n    \n    if ([inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n      ABKInAppMessageSlideup *inAppSlideup = (ABKInAppMessageSlideup *) inAppMessage;\n      if ([key isEqualToString:ItemHideChevron]) {\n        inAppSlideup.hideChevron = [self.inAppMessageDictionary[key] boolValue];\n      } else if ([key isEqualToString:ItemChevronColor]) {\n        inAppSlideup.chevronColor = self.inAppMessageDictionary[key];\n      } else if ([key isEqualToString:ItemAnimatedFrom]) {\n        switch ([self.inAppMessageDictionary[key] integerValue]) {\n          case 0:\n            inAppSlideup.inAppMessageSlideupAnchor = ABKInAppMessageSlideupFromBottom;\n            break;\n          case 1:\n            inAppSlideup.inAppMessageSlideupAnchor = ABKInAppMessageSlideupFromTop;\n            break;\n          default:\n            break;\n        }\n      }\n    } else if ([inAppMessage isKindOfClass:[ABKInAppMessageImmersive class]]) {\n      ABKInAppMessageImmersive *inAppImmersive = (ABKInAppMessageImmersive *) inAppMessage;\n      if ([key isEqualToString:ItemHeader]) {\n        inAppImmersive.header = self.inAppMessageDictionary[key];\n      }else if ([key isEqualToString:ItemHeaderAlignment]) {\n        switch ([self.inAppMessageDictionary[key] integerValue]) {\n          case 0:\n          default:\n            inAppImmersive.headerTextAlignment = NSTextAlignmentCenter;\n            break;\n          case 1:\n            inAppImmersive.headerTextAlignment = NSTextAlignmentLeft;\n            break;\n          case 2:\n            inAppImmersive.headerTextAlignment = NSTextAlignmentRight;\n            break;\n        }\n      } else if ([key isEqualToString:ItemHeaderColor]) {\n        inAppImmersive.headerTextColor = self.inAppMessageDictionary[key];\n      } else if ([key isEqualToString:ItemCloseButtonColor]) {\n        inAppImmersive.closeButtonColor = self.inAppMessageDictionary[key];\n      } else if ([key isEqualToString:ItemButtonOne]) {\n        if (self.inAppMessageDictionary[ItemButtonTwo] != nil) {\n          [inAppImmersive setInAppMessageButtons: @[self.inAppMessageDictionary[ItemButtonOne], self.inAppMessageDictionary[ItemButtonTwo]]];\n        } else {\n          [inAppImmersive setInAppMessageButtons:@[self.inAppMessageDictionary[ItemButtonOne]]];\n        }\n      }else if ([key isEqualToString:ItemImageGraphic]) {\n        if ([self.inAppMessageDictionary[key] boolValue]) {\n          inAppImmersive.imageStyle = ABKInAppMessageGraphic;\n        } else {\n          inAppImmersive.imageStyle = ABKInAppMessageTopImage;\n        }\n      }else if ([key isEqualToString:ItemModalFrameColor]) {\n        ((ABKInAppMessageImmersive *)inAppMessage).frameColor = self.inAppMessageDictionary[key];\n      }\n    }\n  }\n  inAppMessage.openUrlInWebView = YES;\n  [[Appboy sharedInstance].inAppMessageController addInAppMessage:inAppMessage];\n}\n\n- (IBAction)displayInAppMessage:(id)sender {\n  if (self.keyboardIsShown) {\n    self.inAppMessagePending = YES;\n    [self dismissKeyboard];\n  } else {\n    [self displayInAppMessage];\n  }\n}\n\n#pragma mark - Keyboard\n\n- (void)keyboardDidShow:(NSNotification *)notification {\n  self.keyboardIsShown = YES;\n  CGSize keyboardSize = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;\n  CGFloat keyboardHeight = MIN(keyboardSize.width, keyboardSize.height);\n  [self setViewBottomSpace:keyboardHeight];\n}\n\n- (void)keyboardWillHide:(NSNotification *)notification {\n  [self setViewBottomSpace:0.0];\n}\n\n- (void)keyboardDidHide:(NSNotification *)notification {\n  self.keyboardIsShown = NO;\n  if (self.inAppMessagePending) {\n    self.inAppMessagePending = NO;\n    [self displayInAppMessage];\n  }\n}\n\n#pragma mark - UI\n\n- (void)setHTMLHidden:(BOOL)hidden {\n  if (hidden) {\n    [self.htmlComposerVC dismissKeyboard];\n  }\n  self.HTMLComposerView.hidden = hidden;\n  self.tableView.userInteractionEnabled = hidden;\n}\n\n- (void)setViewBottomSpace:(CGFloat)bottomSpace {\n  self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, bottomSpace, 0.0);\n  if (bottomSpace > 0.0) {\n    [self.htmlComposerVC setHTMLComposerBottomSpace:bottomSpace];\n  } else {\n    [self.htmlComposerVC setHTMLComposerBottomSpace:10.0];\n  }\n  [self.view invalidateIntrinsicContentSize];\n  [self.view setNeedsLayout];\n  [self.view layoutIfNeeded];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Alias/AliasViewController.h",
    "content": "@interface AliasViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UITextField *aliasLabelTextField;\n@property (weak, nonatomic) IBOutlet UITextField *aliasTextField;\n\n- (IBAction)addUserAliasButtonClick:(id)sender;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Alias/AliasViewController.m",
    "content": "#import \"AliasViewController.h\"\n#import \"AppboyKit.h\"\n#import \"UIViewController+Keyboard.h\"\n\n@implementation AliasViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  [self addDismissGestureForView:self.view];\n}\n\n- (IBAction)addUserAliasButtonClick:(id)sender {  \n  [[Appboy sharedInstance].user addAlias:self.aliasTextField.text withLabel:self.aliasLabelTextField.text];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Array/UserAttributesArrayViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface UserAttributesArrayViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate>\n\n@property (weak, nonatomic) IBOutlet UITableView *tableView;\n@property (weak, nonatomic) IBOutlet UITextField *attributeKeyTextField;\n@property (weak, nonatomic) IBOutlet UITextField *attributeValueTextField;\n@property (weak, nonatomic) IBOutlet UISegmentedControl *setToSegmentedControl;\n@property NSMutableArray *setValuesArray;\n@property UITextField *currentTextField;\n@property (nonatomic, assign) BOOL isEditing;\n@property (weak, nonatomic) IBOutlet UIButton *removeValuesButton;\n@property (weak, nonatomic) IBOutlet UIButton *addValuesButton;\n\n@end"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Array/UserAttributesArrayViewController.m",
    "content": "#import \"UserAttributesArrayViewController.h\"\n#import \"UserCells.h\"\n#import <AppboyKit.h>\n#import \"UIViewController+Keyboard.h\"\n#import \"AlertControllerUtils.h\"\n\n@interface UserAttributesArrayViewController ()\n\n- (void)setupNotifications;\n- (void)keyboardDidShow:(NSNotification *)notification;\n- (void)keyboardWillHide:(NSNotification *)notification;\n- (void)setViewBottomSpace:(CGFloat)bottomSpace;\n\n@end\n\n@implementation UserAttributesArrayViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  [self customizeRemoveValuesButton];\n  [self setupNotifications];\n}\n\n- (void)setupNotifications {\n  NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n  [notificationCenter addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];\n  [notificationCenter addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];\n}\n\n#pragma mark - UITableViewDataSource\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n  return self.setValuesArray.count;\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  static NSString *CellIdentifier = @\"attributeValueCell\";\n  UserAttributeCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];\n  if (cell == nil) {\n    cell = [[UserAttributeCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];\n  }\n  cell.attributeNameLabel.text = @\"Value\";\n  cell.attributeTextField.text = self.setValuesArray[indexPath.row];\n  return cell;\n}\n\n- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {\n  // if a cell is deleted, remove data from setValuesArray and cell from tableView\n  if (editingStyle == UITableViewCellEditingStyleDelete) {\n    [self.setValuesArray removeObjectAtIndex:indexPath.row];\n    UserAttributeCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];\n    cell.attributeTextField.text = @\"\";\n    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];\n    if (self.setValuesArray.count == 0) {\n      [self exitEditingMode];\n    }\n  }\n}\n\n- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {\n  return YES;\n}\n\n#pragma mark - UITextFieldDelegate\n\n- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {\n  self.currentTextField = textField;\n  return YES;\n}\n\n- (void)customizeRemoveValuesButton {\n  [self.removeValuesButton setTitle:@\"Edit\" forState:UIControlStateNormal];\n  [self.removeValuesButton setTitle:@\"Done\" forState:UIControlStateSelected];\n  self.removeValuesButton.selected = NO;\n}\n\n- (void)sendAlertWithMessage:(NSString*)message {\n  [AlertControllerUtils presentTemporaryAlertWithTitle:nil\n                                                 message:message\n                                            presentingVC:self];\n}\n\n- (BOOL)stringIsNotEmpty:(NSString *)string {\n  return (string && [string length] > 0);\n}\n\n// Returns appropriate error message if input(s) are invalid\n- (BOOL)inputIsValid:(BOOL)isValid forKeyOrValue:(NSString *)keyOrValue {\n  if (!isValid) {\n    if ([keyOrValue isEqualToString:@\"k\"]) {\n      [self sendAlertWithMessage:NSLocalizedString(@\"Appboy.Stopwatch.user-attributes-array.missing-key\", nil)];\n    } else if ([keyOrValue isEqualToString:@\"v\"]) {\n      [self sendAlertWithMessage:NSLocalizedString(@\"Appboy.Stopwatch.user-attributes-array.missing-value\", nil)];\n    } else if ([keyOrValue isEqualToString:@\"vs\"]) {\n      [self sendAlertWithMessage:NSLocalizedString(@\"Appboy.Stopwatch.user-attributes-array.missing-values\", nil)];\n    }\n  }\n  return isValid;\n}\n\n// Exit tableView editing mode\n- (void)exitEditingMode {\n  [self.tableView setEditing:NO animated:YES];\n  self.isEditing = NO;\n  self.removeValuesButton.selected = NO;\n}\n\n// Tell Braze to add or remove values from array\n- (void)addOrRemoveFromArray:(NSString *)addOrRemove {\n  BOOL keyIsValid = [self stringIsNotEmpty:self.attributeKeyTextField.text];\n  BOOL valueIsValid = [self stringIsNotEmpty:self.attributeValueTextField.text];\n  \n  if ([self inputIsValid:keyIsValid forKeyOrValue:@\"k\"] && [self inputIsValid:valueIsValid forKeyOrValue:@\"v\"]) {\n    if ([addOrRemove isEqualToString:@\"add\"]) {\n      [[Appboy sharedInstance].user addToCustomAttributeArrayWithKey:self.attributeKeyTextField.text value:self.attributeValueTextField.text];\n      [self sendAlertWithMessage:[NSString stringWithFormat:NSLocalizedString(@\"Added %@ to Custom Attributes array\", nil), self.attributeValueTextField.text]];\n    } else if ([addOrRemove isEqualToString:@\"remove\"]) {\n      [[Appboy sharedInstance].user removeFromCustomAttributeArrayWithKey:self.attributeKeyTextField.text value:self.attributeValueTextField.text];\n      [self sendAlertWithMessage:[NSString stringWithFormat:NSLocalizedString(@\"Removed %@ from Custom Attributes array\", nil), self.attributeValueTextField.text]];\n    }\n  }\n}\n\n// Tell Braze to set array values\n- (IBAction)setArrayValues:(id)sender {\n  BOOL keyIsValid = [self stringIsNotEmpty:self.attributeKeyTextField.text];\n  \n  if ([self inputIsValid:keyIsValid forKeyOrValue:@\"k\"]) {\n    if (self.setToSegmentedControl.selectedSegmentIndex == 1) {\n      // Set array to nil\n      [[Appboy sharedInstance].user setCustomAttributeArrayWithKey:self.attributeKeyTextField.text array:nil];\n      [self sendAlertWithMessage:NSLocalizedString(@\"Set array to nil\", nil)];\n    } else {\n      // Set array to setValuesArray\n      BOOL valuesAreValid = self.setValuesArray.count > 0;\n      for (NSString* value in self.setValuesArray) {\n        valuesAreValid = valuesAreValid && [self stringIsNotEmpty:value];\n      }\n      \n      if ([self inputIsValid:valuesAreValid forKeyOrValue:@\"vs\"]) {\n        [[Appboy sharedInstance].user setCustomAttributeArrayWithKey:self.attributeKeyTextField.text array:self.setValuesArray];\n        [self sendAlertWithMessage:[NSString stringWithFormat:NSLocalizedString(@\"Set array to values %@\", nil), self.setValuesArray]];\n      }\n    }\n  }\n}\n\n// Enable removal of tableView rows\n- (IBAction)removeArrayValueRows:(id)sender {\n  if (self.isEditing) {\n    // Disable removal\n    [self exitEditingMode];\n  } else if (self.setValuesArray.count > 0) {\n    // Enable removal\n    [self.tableView setEditing:YES animated:YES];\n    self.isEditing = YES;\n    self.removeValuesButton.selected = YES;\n  }\n}\n\n// Add rows to tableView for setting array values\n- (IBAction)addObject:(id)sender {\n  if (!self.setValuesArray) {\n    self.setValuesArray = [[NSMutableArray alloc] init];\n  }\n  NSInteger valuesArrayIndex = self.setValuesArray.count;\n  [self.setValuesArray insertObject: [NSString string] atIndex:valuesArrayIndex];\n  NSIndexPath *indexPath = [NSIndexPath indexPathForRow:valuesArrayIndex inSection:0];\n  [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];\n}\n\n// \"Add\" button tapped\n- (IBAction)addArrayValue:(id)sender {\n  [self addOrRemoveFromArray:@\"add\"];\n}\n\n// \"Remove\" button tapped\n- (IBAction)removeArrayValue:(id)sender {\n  [self addOrRemoveFromArray:@\"remove\"];\n}\n\n- (IBAction)hideKeyboard:(id)sender {\n  [self dismissKeyboard];\n}\n\n- (IBAction)setToSegmentedControlChanged:(id)sender {\n  if (self.setToSegmentedControl.selectedSegmentIndex == 1) {\n    // if set to nil is selected, hide tableView\n    self.tableView.hidden = YES;\n    self.addValuesButton.hidden = YES;\n    self.removeValuesButton.hidden = YES;\n  } else {\n    self.tableView.hidden = NO;\n    self.addValuesButton.hidden = NO;\n    self.removeValuesButton.hidden = NO;\n  }\n}\n\n// Add text field value to array at tableView row index\n- (IBAction)addValue:(id)sender {\n  id cell = [[((UIView *)sender) superview] superview]; // Get UITextField's parent UITableViewCell\n  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];\n  NSInteger row = [indexPath row];\n  self.setValuesArray[row] = ((UITextField *)sender).text;\n}\n\n#pragma mark - Keyboard\n\n- (void)keyboardDidShow:(NSNotification *)notification {\n  CGSize keyboardSize = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;\n  CGFloat keyboardHeight = MIN(keyboardSize.width, keyboardSize.height);\n  if (![self.attributeKeyTextField isFirstResponder] && ![self.attributeValueTextField isFirstResponder]) {\n    [self setViewBottomSpace:keyboardHeight];\n  }\n}\n\n- (void)keyboardWillHide:(NSNotification *)notification {\n  [self setViewBottomSpace:0.0];\n}\n\n- (void)setViewBottomSpace:(CGFloat)bottomSpace {\n  [UIView animateWithDuration:0.4 animations:^{\n    self.view.bounds = CGRectMake(0.0, bottomSpace, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds));\n  }];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Location Custom Attribute/LocationAnnotation.h",
    "content": "#import <Foundation/Foundation.h>\n#import <MapKit/MapKit.h>\n\n@interface LocationAnnotation : NSObject <MKAnnotation>\n\n@property (nonatomic) CLLocationCoordinate2D coordinate;\n\n- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Location Custom Attribute/LocationAnnotation.m",
    "content": "#import \"LocationAnnotation.h\"\n\n@implementation LocationAnnotation\n\n- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate {\n  self = [super init];\n  if (self) {\n    _coordinate = coordinate;\n  }\n  return self;\n}\n\n- (NSString *)title {\n  return NSLocalizedString(@\"Picked Location\", @\"\");\n}\n\n- (NSString *)subtitle {\n  return [NSString stringWithFormat:@\"%@: %lf, %@: %lf\", NSLocalizedString(@\"Latitude\", @\"\"),\n          self.coordinate.latitude, NSLocalizedString(@\"longitude\", @\"\"), self.coordinate.longitude];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Location Custom Attribute/LocationCustomAttributeViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface LocationCustomAttributeViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Location Custom Attribute/LocationCustomAttributeViewController.m",
    "content": "#import \"LocationCustomAttributeViewController.h\"\n#import <MapKit/MapKit.h>\n#import <AppboyKit.h>\n#import \"UIViewController+Keyboard.h\"\n#import \"LocationAnnotation.h\"\n\ntypedef NS_ENUM(NSInteger, LocationCustomAttributeAlertType) {\n  LocationCustomAttributeAlertTypeAddSuccess,\n  LocationCustomAttributeAlertTypeAddError,\n  LocationCustomAttributeAlertTypeRemoveSuccess,\n  LocationCustomAttributeAlertTypeRemoveError,\n  LocationCustomAttributeAlertTypeEmptyKey,\n  LocationCustomAttributeAlertTypeEmptyLocation\n};\n\nstatic NSString *const AnnotationReusableIdentifier = @\"LocationReusableIdentifier\";\n\n@interface LocationCustomAttributeViewController () <UITextFieldDelegate, MKMapViewDelegate>\n\n@property (nonatomic, weak) IBOutlet UITextField *keyTextField;\n@property (nonatomic, weak) IBOutlet UITextField *latitudeTextField;\n@property (nonatomic, weak) IBOutlet UITextField *longitudeTextField;\n@property (nonatomic, weak) IBOutlet MKMapView *mapView;\n\n@property (nonatomic, strong) LocationAnnotation *annotation;\n\n- (void)addAttribute;\n- (void)removeAttribute;\n- (NSString *)keyFromTextField;\n- (CLLocation *)locationFromTextFieldShowAlert:(BOOL)show;\n- (void)showAlertOfType:(LocationCustomAttributeAlertType)alertType argument:(NSString *)argument;\n\n- (IBAction)addCustomAttributeTapped:(id)sender;\n- (IBAction)removeCustomAttributeTapped:(id)sender;\n\n@end\n\n@implementation LocationCustomAttributeViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  [self addDismissGestureForView:self.view];\n  [self addMapGesture];\n}\n\n- (void)addAttribute {\n  NSString *key = [self keyFromTextField];\n  if (key == nil) {\n    return;\n  }\n  CLLocation *location = [self locationFromTextFieldShowAlert:YES];\n  if (location == nil) {\n    return;\n  }\n  BOOL success = [Appboy.sharedInstance.user addLocationCustomAttributeWithKey:key\n                                                                      latitude:location.coordinate.latitude\n                                                                     longitude:location.coordinate.longitude];\n  LocationCustomAttributeAlertType alertType = success ? LocationCustomAttributeAlertTypeAddSuccess : LocationCustomAttributeAlertTypeAddError;\n  [self showAlertOfType:alertType argument:key];\n}\n\n- (void)removeAttribute {\n  NSString *key = [self keyFromTextField];\n  if (key == nil) {\n    return;\n  }\n  BOOL success = [Appboy.sharedInstance.user removeLocationCustomAttributeWithKey:key];\n  LocationCustomAttributeAlertType alertType = success ? LocationCustomAttributeAlertTypeRemoveSuccess : LocationCustomAttributeAlertTypeRemoveError;\n  [self showAlertOfType:alertType argument:key];\n}\n\n- (NSString *)keyFromTextField {\n  NSString *key = [self.keyTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n  if (key.length == 0) {\n    [self showAlertOfType:LocationCustomAttributeAlertTypeEmptyKey argument:nil];\n    return nil;\n  }\n  return key;\n}\n\n- (CLLocation *)locationFromTextFieldShowAlert:(BOOL)show {\n  NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];\n  NSString *latitudeString = [self.latitudeTextField.text stringByTrimmingCharactersInSet:whitespaceCharacterSet];\n  NSString *longitudeString = [self.longitudeTextField.text stringByTrimmingCharactersInSet:whitespaceCharacterSet];\n  if (latitudeString.length == 0 || longitudeString.length == 0) {\n    if (show) {\n      [self showAlertOfType:LocationCustomAttributeAlertTypeEmptyLocation argument:nil];\n    }\n    return nil;\n  }\n  double latitude = [latitudeString doubleValue];\n  double longitude = [longitudeString doubleValue];\n  return [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];\n}\n\n- (void)addMapGesture {\n  UILongPressGestureRecognizer *gestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self\n                                                                                                  action:@selector(longGesturePressed:)];\n  [self.mapView addGestureRecognizer:gestureRecognizer];\n}\n\n- (void)updateMapAnnotation {\n  CLLocation *location = [self locationFromTextFieldShowAlert:NO];\n  if (location) {\n    CLLocationCoordinate2D coordinate = location.coordinate;\n    if (self.annotation == nil) {\n      self.annotation = [[LocationAnnotation alloc] initWithCoordinate:coordinate];\n      [self.mapView addAnnotation:self.annotation];\n    } else {\n      [self.annotation setCoordinate:coordinate];\n    }\n    [self.mapView setRegion:MKCoordinateRegionMake(coordinate, MKCoordinateSpanMake(5.0, 5.0)) animated:YES];\n  } else {\n    [self.mapView removeAnnotation:self.annotation];\n    self.annotation = nil;\n  }\n}\n\n#pragma mark - Alert\n\n- (void)showAlertOfType:(LocationCustomAttributeAlertType)alertType argument:(NSString *)argument {\n  NSString *title = NSLocalizedString(@\"Location Custom Attribute\", @\"\");\n  NSString *message = @\"\";\n  switch (alertType) {\n    case LocationCustomAttributeAlertTypeAddError:\n      message = [NSString stringWithFormat:@\"%@ %@.\", NSLocalizedString(@\"Error when adding location custom attribute\", @\"\"),\n                 argument];\n      break;\n      \n    case LocationCustomAttributeAlertTypeAddSuccess:\n      message = [NSString stringWithFormat:@\"%@ %@ %@.\", NSLocalizedString(@\"Location custom attribute\", @\"\"),\n                 argument, @\"was added successfully\"];\n      break;\n      \n    case LocationCustomAttributeAlertTypeRemoveError:\n      message = [NSString stringWithFormat:@\"%@ %@.\", NSLocalizedString(@\"Error when removing location custom attribute\", @\"\"),\n                 argument];\n      break;\n      \n    case LocationCustomAttributeAlertTypeRemoveSuccess:\n      message = [NSString stringWithFormat:@\"%@ %@ %@.\", @\"Location custom attribute\", argument, @\"was removed successfully\"];\n      break;\n      \n    case LocationCustomAttributeAlertTypeEmptyKey:\n      message = @\"Key must be not empty\";\n      break;\n      \n    case LocationCustomAttributeAlertTypeEmptyLocation:\n      message = @\"Location must be not empty\";\n      break;\n  }\n  \n  UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title\n                                                                           message:message\n                                                                    preferredStyle:UIAlertControllerStyleAlert];\n  [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@\"OK\", @\"\")\n                                                      style:UIAlertActionStyleCancel\n                                                    handler:nil]];\n  [self presentViewController:alertController animated:YES completion:nil];\n}\n\n#pragma mark - Buttons\n\n- (IBAction)addCustomAttributeTapped:(id)sender {\n  [self addAttribute];\n}\n\n- (IBAction)removeCustomAttributeTapped:(id)sender {\n  [self removeAttribute];\n}\n\n- (void)longGesturePressed:(UILongPressGestureRecognizer *)gestureRecognizer {\n  CGPoint point = [gestureRecognizer locationInView:self.mapView];\n  CLLocationCoordinate2D coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];\n  self.latitudeTextField.text = [NSString stringWithFormat:@\"%lf\", coordinate.latitude];\n  self.longitudeTextField.text = [NSString stringWithFormat:@\"%lf\", coordinate.longitude];\n  [self updateMapAnnotation];\n}\n\n#pragma mark - Text field delegate\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField {\n  if (textField == self.longitudeTextField) {\n    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n      [textField resignFirstResponder];\n    });\n    return YES;\n  }\n  NSInteger nextTag = textField.tag + 1;\n  UIResponder *nextResponder = [self.view viewWithTag:nextTag];\n  [nextResponder becomeFirstResponder];\n  return YES;\n}\n\n- (void)textFieldDidEndEditing:(UITextField *)textField {\n  if (textField == self.latitudeTextField || textField == self.longitudeTextField) {\n    [self updateMapAnnotation];\n  }\n}\n\n#pragma mark - Map view delegate\n\n- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {\n  MKAnnotationView *pinView = [self.mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationReusableIdentifier];\n  if (!pinView) {\n    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationReusableIdentifier];\n    pinView.canShowCallout = YES;\n  }\n  return pinView;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/UserAttributesViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface UserAttributesViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate>\n\n@property (nonatomic, strong) NSArray *attributesLabelsArray;\n@property (nonatomic, weak) IBOutlet UINavigationBar *modalNavBar;\n@property (nonatomic, weak) IBOutlet UITableView *attributesTableView;\n@property (nonatomic, strong) NSString *userId;\n\n- (IBAction)doneButtonTapped:(id)sender;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/UserAttributesViewController.m",
    "content": "#import \"UserAttributesViewController.h\"\n#import <AppboyKit.h>\n#import \"UserCells.h\"\n#import \"UIViewController+Keyboard.h\"\n#import \"UserCustomAttribute.h\"\n#import \"UserCustomAttributeCell.h\"\n#import \"UserSubscriptionGroup.h\"\n#import \"UserSubscriptionGroupCell.h\"\n#import \"AlertControllerUtils.h\"\n\nstatic NSInteger const TextFieldTagNumber = 1000;\nstatic NSInteger const TotalNumberOfAttributes = 12;\nstatic NSInteger const IndexOfBirthday = 9;\nstatic NSInteger const IndexOfPushSubscriptionState = 12;\nstatic NSInteger const IndexOfEmailSubscriptionState = 13;\nstatic NSMutableArray *attributesValuesArray = nil;\n\n@interface UserAttributesViewController ()\n\n@property (nonatomic, strong) NSMutableArray<UserCustomAttribute *> *userCustomAttributes;\n@property (nonatomic, strong) NSMutableArray<UserSubscriptionGroup *> *userSubscriptionGroups;\n\n@end\n\n@implementation UserAttributesViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n\n  self.attributesLabelsArray = @[NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.user-ID\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.first-name\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.last-name\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.email\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.country\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.home-city\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.language\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.gender\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.phone\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.date-of-birth\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.push-subscription\", nil),\n                                 NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.email-subscription\", nil)];\n\n  if (attributesValuesArray == nil || [attributesValuesArray count] <= 0) {\n    attributesValuesArray = [NSMutableArray arrayWithCapacity:TotalNumberOfAttributes];\n    for (int i = 0; i < TotalNumberOfAttributes; i ++) {\n      [attributesValuesArray addObject:[NSNull null]];\n    }\n  }\n  self.userCustomAttributes = [NSMutableArray array];\n  self.userSubscriptionGroups = [NSMutableArray array];\n}\n\n- (void)dealloc {\n  [[NSNotificationCenter defaultCenter] removeObserver:self.modalNavBar];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];\n  \n  // Pull current, locally-stored user ID every time user navigates to this page\n  NSString *appboyUserId = [Appboy sharedInstance].user.userID;\n  if (appboyUserId != nil) {\n    self.userId = appboyUserId;\n    attributesValuesArray[0] = self.userId;\n    [self.attributesTableView reloadData];\n  }\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n  [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];\n  [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];\n}\n\n#pragma mark - Table view cells setup methods\n\n- (UITableViewCell *)setupTableView:(UITableView *)tableView subscriptionCellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  NSString *cellIdentifier = @\"subscription cell\";\n  \n  UserAttributeCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];\n  cell.attributeNameLabel.text = self.attributesLabelsArray[(NSUInteger)indexPath.row];\n  [cell.attributeSegmentedControl setTag:(TextFieldTagNumber + indexPath.row)]; // Segmented control's tag is 1000 + row number\n  \n  id object = attributesValuesArray[(NSUInteger)indexPath.row];\n  if ([object isKindOfClass:[NSString class]] && ((NSString *)object).length == 1) {\n    if ([(NSString *)object isEqualToString:@\"u\"]) {\n      cell.attributeSegmentedControl.selectedSegmentIndex = 0;\n    } else if ([(NSString *)object isEqualToString:@\"s\"]) {\n      cell.attributeSegmentedControl.selectedSegmentIndex = 1;\n    } else {\n      cell.attributeSegmentedControl.selectedSegmentIndex = 2;\n    }\n  }\n  return cell;\n}\n\n- (UITableViewCell *)setupTableView:(UITableView *)tableView textFieldCellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  static NSString *CellIdentifier = @\"text field cell\";\n  \n  UserAttributeCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];\n  cell.attributeNameLabel.text = self.attributesLabelsArray[(NSUInteger)indexPath.row];\n  \n  // Keyboard typing\n  cell.attributeTextField.inputView = nil;\n  if ([cell.attributeNameLabel.text isEqualToString:NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.email\", nil)]) {\n    // Email keyboard\n    cell.attributeTextField.keyboardType = UIKeyboardTypeEmailAddress;\n  } else if ([cell.attributeNameLabel.text isEqualToString:NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.phone\", nil)]) {\n    // Phone keyboard\n    cell.attributeTextField.keyboardType = UIKeyboardTypePhonePad;\n  } else {\n    cell.attributeTextField.keyboardType = UIKeyboardTypeDefault;\n  }\n  \n  // Preview text\n  if ([cell.attributeNameLabel.text isEqualToString:NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.gender\", nil)]) {\n    cell.attributeTextField.placeholder = @\"Enter 'm', 'f', 'u', 'o', 'n', or 'p'\";\n  } else {\n    cell.attributeTextField.placeholder = @\"\";\n  }\n  \n  cell.attributeTextField.tag = TextFieldTagNumber + indexPath.row; // The text field's tag is 1000 plus the row number\n  id object = attributesValuesArray[(NSUInteger)indexPath.row];\n  if ([object isKindOfClass:[NSString class]]) {\n    cell.attributeTextField.text = (NSString *)object;\n  } else if ([object isKindOfClass:[NSDate class]]) {\n    cell.attributeTextField.text = [self getBirthdayStringFromDate:(NSDate *)object];\n  } else {\n    cell.attributeTextField.text = nil;\n  }\n  \n  return cell;\n}\n\n- (UITableViewCell *)setupTableView:(UITableView *)tableView customAttributeCellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  UserCustomAttributeCell *cell = (UserCustomAttributeCell *)[tableView dequeueReusableCellWithIdentifier:@\"CustomAttributeCell\" forIndexPath:indexPath];\n  UserCustomAttribute *attribute = self.userCustomAttributes[indexPath.row - 1];\n  typeof(self) __weak weakSelf = self;\n  [cell setUserCustomAttribute:attribute selectNextCellBlock:^(UITableViewCell *cell){\n    NSIndexPath *indexPath = [weakSelf.attributesTableView indexPathForCell:cell];\n    if (indexPath && (weakSelf.userCustomAttributes.count > indexPath.row)) {\n      // we can pick next cell since it exists\n      UserCustomAttributeCell *nextCell = [weakSelf.attributesTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:(indexPath.row + 1) inSection:indexPath.section]];\n      [nextCell.keyTextField becomeFirstResponder];\n    }\n  } textFieldShouldBeginEditingBlock:^(UITableViewCell *cell) {\n    NSIndexPath *indexPath = [weakSelf.attributesTableView indexPathForCell:cell];\n    if (indexPath) {\n      [weakSelf.attributesTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];\n    }\n  }];\n  return cell;\n}\n\n- (UITableViewCell *)setupTableView:(UITableView *)tableView subscriptionGroupCellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  UserSubscriptionGroupCell *cell = (UserSubscriptionGroupCell *)[tableView dequeueReusableCellWithIdentifier:@\"SubscriptionGroupCell\" forIndexPath:indexPath];\n  UserSubscriptionGroup *subscriptionGroup = self.userSubscriptionGroups[indexPath.row - 1];\n  typeof(self) __weak weakSelf = self;\n  [cell setUserSubscriptionGroup:subscriptionGroup selectNextCellBlock:^(UITableViewCell *cell) {\n    NSIndexPath *indexPath = [weakSelf.attributesTableView indexPathForCell:cell];\n    if (indexPath && (weakSelf.userCustomAttributes.count > indexPath.row)) {\n      // we can pick next cell since it exists\n      UserSubscriptionGroupCell *nextCell = [weakSelf.attributesTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:(indexPath.row + 1) inSection:indexPath.section]];\n      [nextCell.groupIdTextField becomeFirstResponder];\n    }\n  } textFieldShouldBeginEditingBlock:^(UITableViewCell *cell) {\n    NSIndexPath *indexPath = [weakSelf.attributesTableView indexPathForCell:cell];\n    if (indexPath) {\n      [weakSelf.attributesTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];\n    }\n  }];\n  return cell;\n}\n\n\n#pragma mark - UITableViewDataSource Methods\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {\n  return 4;\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n  switch (indexPath.section) {\n    case 0: {\n      // default user attributes\n      if (indexPath.row == IndexOfPushSubscriptionState || indexPath.row == IndexOfEmailSubscriptionState) {\n        // Cells with subscription state segmented control\n        return [self setupTableView:tableView subscriptionCellForRowAtIndexPath:indexPath];\n      } else {\n        // Cell with text field\n        return [self setupTableView:tableView textFieldCellForRowAtIndexPath:indexPath];\n      }\n    }\n      \n    case 1: {\n      return [tableView dequeueReusableCellWithIdentifier:@\"LocationAttributeCell\" forIndexPath:indexPath];\n    }\n      \n    case 2: {\n      // custom user attributes\n      if (indexPath.row == 0) {\n        return [tableView dequeueReusableCellWithIdentifier:@\"AddAttributeCell\" forIndexPath:indexPath];\n      } else {\n        return [self setupTableView:tableView customAttributeCellForRowAtIndexPath:indexPath];\n      }\n    }\n      \n    case 3: {\n      // subscription groups\n      if (indexPath.row == 0) {\n        return [tableView dequeueReusableCellWithIdentifier:@\"AddSubscriptionGroupCell\" forIndexPath:indexPath];\n      } else {\n        return [self setupTableView:tableView subscriptionGroupCellForRowAtIndexPath:indexPath];\n      }\n    }\n      \n    default:\n      return [UITableViewCell new];\n  }\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n  switch (section) {\n    case 0:\n      // default attributes\n      return TotalNumberOfAttributes;\n      \n    case 1:\n      // location custom attribute\n      return 1;\n      \n    case 2:\n      // 'add attribute' button + custom attributes\n      return 1 + self.userCustomAttributes.count;\n      \n    case 3:\n      // 'add subscription group' button + subscription groups\n      return 1 + self.userSubscriptionGroups.count;\n      \n    default:\n      return 0;\n  }\n}\n\n- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {\n  switch (section) {\n    case 0:\n      // default attributes\n      return NSLocalizedString(@\"Default Attributes\", @\"\");\n      \n    case 1:\n      // 'location custom attribute' button\n      return NSLocalizedString(@\"Location Custom Attribute\", @\"\");\n      \n    case 2:\n      // 'add attribute' button + custom attributes\n      return NSLocalizedString(@\"Custom Attributes\", @\"\");\n      \n    case 3:\n      // 'add subscription group' button + subscription groups\n      return NSLocalizedString(@\"Subscription Groups\", @\"\");\n      \n    default:\n      return @\"\";\n  }\n}\n\n- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {\n  // we can remove custom attributes and subscription groups\n  return ((indexPath.section == 2 && indexPath.row > 0) ||\n          (indexPath.section == 3 && indexPath.row > 0));\n}\n\n- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {\n  return UITableViewCellEditingStyleDelete;\n}\n\n- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(nonnull NSIndexPath *)indexPath {\n  if (indexPath.section == 2) {\n    [self.userCustomAttributes removeObjectAtIndex:(indexPath.row - 1)]; // since 0th row in the table view is button, not array element\n    [self.attributesTableView deleteRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];\n  } else if (indexPath.section == 3) {\n    [self.userSubscriptionGroups removeObjectAtIndex:(indexPath.row - 1)];\n    [self.attributesTableView deleteRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];\n  }\n}\n\n#pragma mark - Text Field Delegate Methods\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField {\n  NSInteger nextTag = textField.tag + 1;\n  // Try to find next responder\n  UIResponder *nextResponder = [self.view viewWithTag:nextTag];\n  [nextResponder becomeFirstResponder];\n  return YES;\n}\n\n- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {\n  // Scroll the table view to make the text field visible\n  NSIndexPath *indexPath = [self indexPathFromTextFieldTag:textField.tag];\n  [self.attributesTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];\n  \n  // If it is the text field for birthday, change the keyboard to date picker\n  if (textField.tag == IndexOfBirthday + TextFieldTagNumber) {\n    UIDatePicker *datePicker = [[UIDatePicker alloc] init];\n    datePicker.datePickerMode = UIDatePickerModeDate;\n    [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];\n    datePicker.backgroundColor = [UIColor clearColor];\n    textField.inputView = datePicker;\n    if (textField.text && textField.text.length > 0) {\n      datePicker.date = [self getDateFromBirthdayString:textField.text];\n    } else {\n      textField.text = [self getBirthdayStringFromDate:datePicker.date];\n    }\n  }\n\n  return YES;\n}\n\n- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {\n  // When it's the date of birth text field get edited, we don't want to save the text in text field\n  // but the date object. Ignore the input of text filled here.\n  if (textField.tag == IndexOfBirthday + TextFieldTagNumber) {\n    return YES;\n  }\n  \n  NSIndexPath *indexPath = [self indexPathFromTextFieldTag:textField.tag];\n  if (textField.text.length > 0) {\n    attributesValuesArray[indexPath.row] = textField.text;\n  } else {\n    attributesValuesArray[indexPath.row] = [NSNull null];\n  }\n  return YES;\n}\n\n#pragma mark - Buttons actions\n\n- (void)datePickerValueChanged:(UIDatePicker *)sender {\n  // Save the date value\n  attributesValuesArray[IndexOfBirthday] = sender.date;\n\n  // Display the date value in the text field while user changing the date picker\n  ((UITextField *)[self.view viewWithTag:IndexOfBirthday + TextFieldTagNumber]).text = [self getBirthdayStringFromDate:sender.date];\n}\n\n- (IBAction)setSubscriptionState:(UISegmentedControl *)sender {\n  [self dismissKeyboard];\n  NSString *subscriptionState;\n  if (sender.selectedSegmentIndex == 0) {\n    subscriptionState = @\"u\"; // unsubscribed\n  } else if (sender.selectedSegmentIndex == 1) {\n    subscriptionState = @\"s\"; // subscribed\n  } else {\n    subscriptionState = @\"o\"; // opted-in\n  }\n\n  attributesValuesArray[sender.tag - TextFieldTagNumber] = subscriptionState;\n}\n\n- (IBAction)addCustomAttributeTapped:(id)sender {\n  [self.userCustomAttributes addObject:[UserCustomAttribute new]];\n  NSIndexPath *addedIndexPath = [NSIndexPath indexPathForRow:self.userCustomAttributes.count inSection:2];\n  [self.attributesTableView insertRowsAtIndexPaths:@[ addedIndexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];\n  [self.attributesTableView scrollToRowAtIndexPath:addedIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];\n}\n\n- (IBAction)locationCustomAttributeTapped:(id)sender {\n  UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@\"LocationCustomAttributeViewController\"];\n  [self.navigationController pushViewController:vc animated:YES];\n  return;\n}\n\n- (IBAction)addSubscriptionGroupTapped:(id)sender {\n  [self.userSubscriptionGroups addObject:[UserSubscriptionGroup new]];\n  NSIndexPath *addedIndexPath = [NSIndexPath indexPathForRow:self.userSubscriptionGroups.count inSection:3];\n  [self.attributesTableView insertRowsAtIndexPaths:@[ addedIndexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];\n  [self.attributesTableView scrollToRowAtIndexPath:addedIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];\n}\n\n// Set user attributes and/or change the current userId.  See Appboy.h for a discussion about changing the userId.\n- (IBAction)doneButtonTapped:(id)sender {\n  [self dismissKeyboard];\n\n  [self showAttributesSetAlert];\n\n  Appboy *appboyInstance = [Appboy sharedInstance];\n  for (NSUInteger i = 0; i < TotalNumberOfAttributes; i ++) {\n    id object = attributesValuesArray[i];\n    if (object && object != [NSNull null]) {\n      switch (i) {\n        case 0:\n          [appboyInstance changeUser:(NSString *)object];\n          continue;\n\n        case 1:\n          appboyInstance.user.firstName = (NSString *)object;\n          continue;\n\n        case 2:\n          appboyInstance.user.lastName = (NSString *)object;\n          continue;\n\n        case 3:\n          appboyInstance.user.email = (NSString *)object;\n          continue;\n\n        case 4:\n          appboyInstance.user.country = (NSString *)object;\n          continue;\n\n        case 5:\n          appboyInstance.user.homeCity = (NSString *)object;\n          continue;\n          \n        case 6:\n          appboyInstance.user.language = (NSString *)object;\n          continue;\n\n        case 7: {\n          [appboyInstance.user setGender:[self parseGenderFromString:(NSString *)object]];\n          continue;\n        }\n\n        case 8:\n          appboyInstance.user.phone = (NSString *)object;\n          continue;\n\n        case 9:\n          appboyInstance.user.dateOfBirth = (NSDate *)object;\n          continue;\n          \n        case 10: {\n          [appboyInstance.user setPushNotificationSubscriptionType:[self getSubscriptionType:object]];\n          continue;\n        }\n          \n        case 11: {\n          [appboyInstance.user setEmailNotificationSubscriptionType:[self getSubscriptionType:object]];\n          continue;\n        }\n\n        default:\n          break;\n      }\n    }\n  }\n  \n  for (UserCustomAttribute *attribute in self.userCustomAttributes) {\n    if (![attribute.attributeKey isEqualToString:@\"\"] && ![attribute.attributeValue isEqualToString:@\"\"]) {\n      if ([self stringIsADouble:attribute.attributeValue]) {\n        [appboyInstance.user setCustomAttributeWithKey:attribute.attributeKey\n                                        andDoubleValue:[attribute.attributeValue doubleValue]];\n      } else {\n        [appboyInstance.user setCustomAttributeWithKey:attribute.attributeKey andStringValue:attribute.attributeValue];\n      }\n    }\n  }\n  \n  for (UserSubscriptionGroup *subscriptionGroup in self.userSubscriptionGroups) {\n    if ([subscriptionGroup.groupId isEqualToString:@\"\"]) {\n      continue;\n    }\n    if ([subscriptionGroup.status isEqualToString:@\"s\"]) {\n      [appboyInstance.user addToSubscriptionGroupWithGroupId:subscriptionGroup.groupId];\n    } else if ([subscriptionGroup.status isEqualToString:@\"u\"]) {\n      [appboyInstance.user removeFromSubscriptionGroupWithGroupId:subscriptionGroup.groupId];\n    }\n  }\n}\n\n#pragma mark - Keyboard\n\n- (void)keyboardDidShow:(NSNotification *)notification {\n  CGSize keyboardSize = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;\n  CGFloat keyboardHeight = MIN(keyboardSize.height, keyboardSize.width);\n  self.attributesTableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight, 0.0);\n}\n\n- (void)keyboardWillHide:(NSNotification *)notification {\n  self.attributesTableView.contentInset = UIEdgeInsetsZero;\n}\n\n#pragma mark - UI\n\n- (void)showAttributesSetAlert {\n  [AlertControllerUtils presentTemporaryAlertWithTitle:nil\n                                                 message:NSLocalizedString(@\"Appboy.Stopwatch.user-attributes.updated-message\", nil)\n                                            presentingVC:self];\n}\n\n- (BOOL)prefersStatusBarHidden {\n  return YES;\n}\n\n#pragma mark - Private methods\n\n- (NSIndexPath *)indexPathFromTextFieldTag:(NSInteger)tag {\n  return [NSIndexPath indexPathForRow:(tag - TextFieldTagNumber) inSection:0];\n}\n\n- (NSString *)getBirthdayStringFromDate:(NSDate *)date {\n  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];\n  dateFormatter.dateFormat = @\"MM/dd/yyyy\";\n  NSString *dateString = [dateFormatter stringFromDate:date];\n  return dateString;\n}\n\n- (NSDate *)getDateFromBirthdayString:(NSString *)birthdayString {\n  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];\n  dateFormatter.dateFormat = @\"MM/dd/yyyy\";\n  NSDate *date = [dateFormatter dateFromString:birthdayString];\n  return date;\n}\n\n- (ABKUserGenderType)parseGenderFromString:(NSString *)string {\n  NSString *lowercaseString = [string lowercaseString];\n  ABKUserGenderType gender;\n  if ([lowercaseString isEqualToString:@\"m\"]) {\n    gender = ABKUserGenderMale;\n  } else if ([lowercaseString isEqualToString:@\"f\"]) {\n    gender = ABKUserGenderFemale;\n  } else if ([lowercaseString isEqualToString:@\"o\"]) {\n    gender = ABKUserGenderOther;\n  } else if ([lowercaseString isEqualToString:@\"u\"]) {\n    gender = ABKUserGenderUnknown;\n  } else if ([lowercaseString isEqualToString:@\"n\"]) {\n    gender = ABKUserGenderNotApplicable;\n  } else if ([lowercaseString isEqualToString:@\"p\"]) {\n    gender = ABKUserGenderPreferNotToSay;\n  } else {\n    gender = ABKUserGenderUnknown;\n  }\n  return gender;\n}\n\n- (ABKNotificationSubscriptionType)getSubscriptionType:(id)object {\n  NSString *subscriptionValue = (NSString*)object;\n  ABKNotificationSubscriptionType subscriptionType;\n  if ([subscriptionValue isEqualToString:@\"u\"]) {\n    subscriptionType = ABKUnsubscribed;\n  } else if ([subscriptionValue isEqualToString:@\"s\"]) {\n    subscriptionType = ABKSubscribed;\n  } else {\n    subscriptionType = ABKOptedIn;\n  }\n  return subscriptionType;\n}\n\n// Returns YES if it is a valid double. In the case where there are letters\n// in the string, [string doubleValue] will return a valid number if it begins with\n// a numeric character or \"-\"\n- (BOOL)stringIsADouble:(NSString *)string {\n  return [string doubleValue] != 0 || [string isEqualToString:@\"0\"];\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserCells.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface UserAttributeCell : UITableViewCell\n\n@property IBOutlet UILabel *attributeNameLabel;\n@property IBOutlet UITextField *attributeTextField;\n@property IBOutlet UISegmentedControl *attributeSegmentedControl;\n\n@end\n\n@interface EventTextFieldCell : UITableViewCell\n\n@property IBOutlet UILabel *eventLabel;\n@property IBOutlet UITextField *eventTextField;\n\n@end\n\n@interface EventSwitchCell : UITableViewCell\n\n@property IBOutlet UILabel *eventLabel;\n@property IBOutlet UISwitch *eventPropertySwitch;\n\n@end\n\n@interface EventButtonCell : UITableViewCell\n\n@property IBOutlet UIButton *eventButton;\n@property (nonatomic, weak) IBOutlet UIView *divView;\n\n@end\n\n@interface EventSegmentedControlCell : UITableViewCell\n\n@property IBOutlet UISegmentedControl *customEventPropertyTypeSegment;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserCells.m",
    "content": "#import \"UserCells.h\"\n\n@implementation UserAttributeCell\n\n@end\n\n@implementation EventTextFieldCell\n\n@end\n\n@implementation EventSwitchCell\n\n@end\n\n@implementation EventButtonCell\n\n@end\n\n@implementation EventSegmentedControlCell\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserCustomAttribute.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface UserCustomAttribute : NSObject\n\n@property (nonatomic, strong) NSString *attributeKey;\n@property (nonatomic, strong) NSString *attributeValue;\n\n- (instancetype)initWithKey:(NSString *)attributeKey value:(NSString *)attributeValue;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserCustomAttribute.m",
    "content": "#import \"UserCustomAttribute.h\"\n\n@implementation UserCustomAttribute\n\n- (instancetype)init {\n  self = [super init];\n  if (self) {\n    self.attributeKey = @\"\";\n    self.attributeValue = @\"\";\n  }\n  return self;\n}\n\n- (instancetype)initWithKey:(NSString *)attributeKey value:(NSString *)attributeValue {\n  self = [super init];\n  if (self) {\n    self.attributeKey = attributeKey;\n    self.attributeValue = attributeValue;\n  }\n  return self;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserCustomAttributeCell.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"UserCustomAttribute.h\"\n\ntypedef void (^SelectNextCellBlock) (UITableViewCell *);\ntypedef void (^TextFieldShouldBeginEditingBlock) (UITableViewCell *);\n\n@interface UserCustomAttributeCell: UITableViewCell\n\n@property (nonatomic, weak) IBOutlet UITextField *keyTextField;\n@property (nonatomic, weak) IBOutlet UITextField *valueTextField;\n\n@property (nonatomic, weak) UserCustomAttribute *customAttibute;\n@property (nonatomic, copy) SelectNextCellBlock selectNextCellBlock;\n@property (nonatomic, copy) TextFieldShouldBeginEditingBlock textFieldShouldBeginEditingBlock;\n\n- (void)setUserCustomAttribute:(UserCustomAttribute *)customAttribute selectNextCellBlock:(SelectNextCellBlock)nextCellBlock textFieldShouldBeginEditingBlock:(TextFieldShouldBeginEditingBlock)textFieldBlock;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserCustomAttributeCell.m",
    "content": "#import \"UserCustomAttributeCell.h\"\n\nstatic NSInteger const TextFieldTagNumber = 2000;\n\n@implementation UserCustomAttributeCell\n\n- (void)awakeFromNib {\n  [super awakeFromNib];\n  self.keyTextField.tag = TextFieldTagNumber;\n  self.valueTextField.tag = TextFieldTagNumber + 1;\n}\n\n- (void)setUserCustomAttribute:(UserCustomAttribute *)customAttribute selectNextCellBlock:(SelectNextCellBlock)nextCellBlock textFieldShouldBeginEditingBlock:(TextFieldShouldBeginEditingBlock)textFieldBlock {\n  self.customAttibute = customAttribute;\n  self.keyTextField.text = customAttribute.attributeKey;\n  self.valueTextField.text = customAttribute.attributeValue;\n  self.selectNextCellBlock = nextCellBlock;\n  self.textFieldShouldBeginEditingBlock = textFieldBlock;\n}\n\n#pragma mark: - Text field delegate\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField {\n  if (textField.tag != TextFieldTagNumber && self.selectNextCellBlock) {\n    // next cell should be called\n    self.selectNextCellBlock(self);\n    return YES;\n  }\n  NSInteger nextTag = textField.tag + 1;\n  UIResponder *nextResponder = [self.contentView viewWithTag:nextTag];\n  [nextResponder becomeFirstResponder];\n  return YES;\n}\n\n- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {\n  if (self.textFieldShouldBeginEditingBlock) {\n    self.textFieldShouldBeginEditingBlock(self);\n  }\n  return YES;\n}\n\n- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {\n  NSString *text = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n  if (textField == self.keyTextField) {\n    self.customAttibute.attributeKey = text;\n  } else if (textField == self.valueTextField) {\n    self.customAttibute.attributeValue = text;\n  }\n  return YES;\n}\n\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserSubscriptionGroup.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface UserSubscriptionGroup : NSObject\n\n@property (nonatomic, strong) NSString *groupId;\n@property (nonatomic, strong) NSString *status;\n\n- (instancetype)initWithGroupId:(NSString *)groupId status:(NSString *)status;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserSubscriptionGroup.m",
    "content": "#import \"UserSubscriptionGroup.h\"\n\n@implementation UserSubscriptionGroup\n\n- (instancetype)init {\n  self = [super init];\n  if (self) {\n    self.groupId = @\"\";\n    self.status = @\"\";\n  }\n  return self;\n}\n\n- (instancetype)initWithGroupId:(NSString *)groupId status:(NSString *)status {\n  self = [super init];\n  if (self) {\n    self.groupId = groupId;\n    self.status = status;\n  }\n  return self;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserSubscriptionGroupCell.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"UserSubscriptionGroup.h\"\n#import \"StopwatchSegmentedControl.h\"\n\ntypedef void (^SelectNextCellBlock) (UITableViewCell *);\ntypedef void (^TextFieldShouldBeginEditingBlock) (UITableViewCell *);\n\n@interface UserSubscriptionGroupCell: UITableViewCell\n\n@property (nonatomic, weak) IBOutlet UITextField *groupIdTextField;\n@property (nonatomic, weak) IBOutlet StopwatchSegmentedControl *statusSegmentControl;\n\n@property (nonatomic, weak) UserSubscriptionGroup *subscriptionGroup;\n@property (nonatomic, copy) SelectNextCellBlock selectNextCellBlock;\n@property (nonatomic, copy) TextFieldShouldBeginEditingBlock textFieldShouldBeginEditingBlock;\n\n- (void)setUserSubscriptionGroup:(UserSubscriptionGroup *)subscriptionGroup\n             selectNextCellBlock:(SelectNextCellBlock)nextCellBlock\ntextFieldShouldBeginEditingBlock:(TextFieldShouldBeginEditingBlock)textFieldBlock;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Attributes/Views/UserSubscriptionGroupCell.m",
    "content": "#import \"UserSubscriptionGroupCell.h\"\n\nstatic NSInteger const TextFieldTagNumber = 4000;\n\n@implementation UserSubscriptionGroupCell\n\n- (void)awakeFromNib {\n  [super awakeFromNib];\n  self.groupIdTextField.tag = TextFieldTagNumber;\n  self.statusSegmentControl.tag = TextFieldTagNumber + 1;\n}\n\n- (void)setUserSubscriptionGroup:(UserSubscriptionGroup *)subscriptionGroup\n             selectNextCellBlock:(SelectNextCellBlock)nextCellBlock\ntextFieldShouldBeginEditingBlock:(TextFieldShouldBeginEditingBlock)textFieldBlock {\n  self.subscriptionGroup = subscriptionGroup;\n  self.groupIdTextField.text = subscriptionGroup.groupId;\n  \n  if ([subscriptionGroup.status isEqualToString:@\"s\"]) {\n    self.statusSegmentControl.selectedSegmentIndex = 0;\n  } else if ([subscriptionGroup.status isEqualToString:@\"u\"]) {\n    self.statusSegmentControl.selectedSegmentIndex = 1;\n  } else {\n    self.statusSegmentControl.selectedSegmentIndex = UISegmentedControlNoSegment;\n  }\n  \n  self.selectNextCellBlock = nextCellBlock;\n  self.textFieldShouldBeginEditingBlock = textFieldBlock;\n}\n\n#pragma mark: - Text field delegate\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField {\n  if (textField.tag != TextFieldTagNumber && self.selectNextCellBlock) {\n    // next cell should be called\n    self.selectNextCellBlock(self);\n    return YES;\n  }\n  NSInteger nextTag = textField.tag + 1;\n  UIResponder *nextResponder = [self.contentView viewWithTag:nextTag];\n  [nextResponder becomeFirstResponder];\n  return YES;\n}\n\n- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {\n  if (self.textFieldShouldBeginEditingBlock) {\n    self.textFieldShouldBeginEditingBlock(self);\n  }\n  return YES;\n}\n\n- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {\n  NSString *text = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n  if (textField == self.groupIdTextField) {\n    self.subscriptionGroup.groupId = text;\n  }\n  return YES;\n}\n\n- (IBAction)statusSegmentControlSelectionDidChange:(UISegmentedControl *)sender {\n  NSString *newStatus = @\"\";\n  switch (sender.selectedSegmentIndex) {\n    case 0:\n      newStatus = @\"s\";\n      break;\n      \n    case 1:\n      newStatus = @\"u\";\n      break;\n      \n    default:\n      break;\n  }\n  self.subscriptionGroup.status = newStatus;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Events/EventsViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface EventsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate>\n\n@property (weak, nonatomic) IBOutlet UITableView *tableView;\n@property NSMutableArray *labelsArraySection0;\n@property NSMutableArray *labelsArraySection1;\n@property NSMutableArray *labelsArraySection2;\n@property NSMutableDictionary *valuesDictionary;\n@property UITextField *currentTextField;\n@property NSInteger eventPropertyType;\n@property NSInteger purchasePropertyType;\n\n- (IBAction)switchChangedValue:(UISwitch *)sender;\n- (IBAction)logEventOrPurchase:(UIButton *)sender;\n- (IBAction)customEventPropertyTypeChanged:(UISegmentedControl *)sender;\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/ViewControllers/User/Events/EventsViewController.m",
    "content": "#import \"EventsViewController.h\"\n#import <AppboyKit.h>\n#import \"AlertControllerUtils.h\"\n#import \"UserCells.h\"\n#import \"SdkAuthDelegate.h\"\n\n/*\n * We use the number 44 here because the height of a table view cell is 44.\n */\nstatic const int TableViewTopY = 44;\n\n@implementation EventsViewController\n\nstatic NSString *const LogEvent = @\"Log Custom Event\";\nstatic NSString *const LogPurchase = @\"Log Purchase\";\nstatic NSString *const EventSwitch = @\"Event Property\";\nstatic NSString *const PurchaseSwitch = @\"Purchase Property\";\nstatic NSString *const Name = @\"Event Name\";\nstatic NSString *const ProductId = @\"Product ID\";\nstatic NSString *const CurrencyCode = @\"Currency Code\";\nstatic NSString *const Price = @\"Price\";\nstatic NSString *const Quantity = @\"Quantity\";\nstatic NSString *const EventPropertyKey = @\"Event Key\";\nstatic NSString *const EventPropertyValue = @\"Event Value\";\nstatic NSString *const PurchasePropertyKey = @\"Purchase Key\";\nstatic NSString *const PurchasePropertyValue = @\"Purchase Value\";\nstatic NSString *const CustomEventPropertyType = @\"Custom Event Property Type\";\nstatic NSString *const PurchasePropertyType = @\"Purchase Property Type\";\nstatic NSString *const ButtonCell = @\"button cell\";\nstatic NSString *const TextFieldCell = @\"text field cell\";\nstatic NSString *const SegmentedControlCell = @\"segmented control cell\";\nstatic NSString *const SwitchCell = @\"switch cell\";\nstatic NSString *const UserId = @\"User ID\";\nstatic NSString *const ChangeUser = @\"Set User ID\";\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  \n  self.eventPropertyType = 0;\n  self.purchasePropertyType = 0;\n  \n  self.labelsArraySection1 = [NSMutableArray arrayWithArray:@[Name,\n                                                              EventSwitch,\n                                                              LogEvent]];\n  \n  self.labelsArraySection2 = [NSMutableArray arrayWithArray:@[ProductId,\n                                                              CurrencyCode,\n                                                              Price,\n                                                              Quantity,\n                                                              PurchaseSwitch,\n                                                              LogPurchase]];\n    \n  self.labelsArraySection0 = [NSMutableArray arrayWithArray:@[UserId,\n                                                              ChangeUser]];\n  \n  self.valuesDictionary = [NSMutableDictionary dictionaryWithDictionary:@{\n                                                                          Name : @\"\",\n                                                                          EventSwitch : @NO,\n                                                                          ProductId : @\"\",\n                                                                          CurrencyCode : @\"USD\",\n                                                                          Price: @\"5\",\n                                                                          Quantity : @\"1\",\n                                                                          PurchaseSwitch : @NO,\n                                                                          EventPropertyKey : @\"\",\n                                                                          EventPropertyValue : @\"\",\n                                                                          PurchasePropertyKey : @\"\",\n                                                                          PurchasePropertyValue : @\"\",\n                                                                          UserId: @\"\"\n                                                                          }];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];\n    \n  NSString *appboyUserId = [Appboy sharedInstance].user.userID;\n  if (appboyUserId != nil) {\n    self.valuesDictionary[UserId] = appboyUserId;\n    [self.tableView reloadData];\n  }\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n  [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];\n  [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];\n}\n\n- (void)keyboardDidShow:(NSNotification *)notification {\n  NSDictionary *info = [notification userInfo];\n  CGSize keyboardSize = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;\n  CGFloat keyboardHeight = keyboardSize.height < keyboardSize.width ? keyboardSize.height : keyboardSize.width;\n  CGRect aRect = self.tableView.frame;\n  aRect.size.height = self.view.bounds.size.height - keyboardHeight + TableViewTopY;\n  self.tableView.frame = aRect;\n}\n\n- (void)keyboardWillHide:(NSNotification *)notification {\n  [self.tableView setNeedsUpdateConstraints];\n}\n\n#pragma mark UITableViewDataSource\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {\n  return 3;\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n  NSString *label = [self labelForIndexPath:indexPath];\n  NSInteger row = indexPath.row;\n  UITableViewCell *cell = nil;\n  if ([label isEqualToString:LogEvent] || [label isEqualToString:LogPurchase] || [label isEqualToString:ChangeUser]) {\n    // EventButtonCell\n    cell = [self createCellWithIdentifier:ButtonCell withClass:[EventButtonCell class]];\n    EventButtonCell *buttonCell = (EventButtonCell *)cell;\n    [buttonCell.eventButton setTitle:label forState:UIControlStateNormal];\n  } else if ([label isEqualToString:Name]\n             || [label isEqualToString:ProductId]\n             || [label isEqualToString:CurrencyCode]\n             || [label isEqualToString:Price]\n             || [label isEqualToString:Quantity]\n             || [label isEqualToString:EventPropertyKey]\n             || [label isEqualToString:EventPropertyValue]\n             || [label isEqualToString:PurchasePropertyKey]\n             || [label isEqualToString:PurchasePropertyValue]\n             || [label isEqualToString:UserId]) {\n    // EventTextFieldCell\n    cell = [self createCellWithIdentifier:TextFieldCell withClass:[EventTextFieldCell class]];\n    ((EventTextFieldCell *)cell).eventLabel.text = label;\n    if (indexPath.section == 0) {\n      ((EventTextFieldCell *)cell).eventTextField.text = self.valuesDictionary[self.labelsArraySection0[row]];\n    } else if (indexPath.section == 1) {\n      ((EventTextFieldCell *)cell).eventTextField.text = self.valuesDictionary[self.labelsArraySection1[row]];\n    } else if (indexPath.section == 2) {\n      ((EventTextFieldCell *)cell).eventTextField.text = self.valuesDictionary[self.labelsArraySection2[row]];\n    }\n  } else if ([label isEqualToString:CustomEventPropertyType] || [label isEqualToString:PurchasePropertyType]) {\n    // EventSegmentedControlCell\n    cell = [self createCellWithIdentifier:SegmentedControlCell withClass:[EventSegmentedControlCell class]];\n    if (indexPath.section == 1) {\n      ((EventSegmentedControlCell *)cell).customEventPropertyTypeSegment.selectedSegmentIndex = self.eventPropertyType;\n    } else if (indexPath.section == 2) {\n      ((EventSegmentedControlCell *)cell).customEventPropertyTypeSegment.selectedSegmentIndex = self.purchasePropertyType;\n    }\n  } else {\n    // EventSwitchCell\n    cell = [self createCellWithIdentifier:SwitchCell withClass:[EventSwitchCell class]];\n    ((EventSwitchCell *)cell).eventLabel.text = label;\n    if (indexPath.section == 1) {\n      ((EventSwitchCell *)cell).eventPropertySwitch.on = [self.valuesDictionary[self.labelsArraySection1[row]] boolValue];\n    } else if (indexPath.section == 2) {\n      ((EventSwitchCell *)cell).eventPropertySwitch.on = [self.valuesDictionary[self.labelsArraySection2[row]] boolValue];\n    }\n  }\n  return cell;\n}\n\n- (UITableViewCell *)createCellWithIdentifier:(NSString *)identifier withClass:(Class)class {\n  UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:identifier];\n  return cell;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n  if (section == 1) {\n    return self.labelsArraySection1.count;\n  } else if (section == 2 ) {\n    return self.labelsArraySection2.count;\n  } else {\n    return self.labelsArraySection0.count;\n  }\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {\n  NSString *label = [self labelForIndexPath:indexPath];\n  if ([label isEqualToString:LogEvent] ||\n      [label isEqualToString:LogPurchase] ||\n      [label isEqualToString:ChangeUser]) {\n    return TableViewTopY + 22.0;\n  } else if ([label isEqualToString:Name] ||\n             [label isEqualToString:ProductId] ||\n             [label isEqualToString:CurrencyCode] ||\n             [label isEqualToString:Price] ||\n             [label isEqualToString:Quantity] ||\n             [label isEqualToString:UserId]) {\n    return TableViewTopY + 6.0;\n  }\n  return TableViewTopY;\n}\n\n- (NSString *)labelForIndexPath:(NSIndexPath *)indexPath {\n  NSString *label = @\"\";\n  if (indexPath.section == 0) {\n    label = self.labelsArraySection0[indexPath.row];\n  } else if (indexPath.section == 1) {\n    label = self.labelsArraySection1[indexPath.row];\n  } else if (indexPath.section == 2) {\n    label = self.labelsArraySection2[indexPath.row];\n  }\n  return label;\n}\n\n#pragma mark UITextFieldDelegate\n\n- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {\n  // Need to know index path to know which section this text field is in\n  UITableViewCell *cell = ((UITableViewCell *)[[((UIView *)textField) superview] superview]); // Get UITextField's parent UITableViewCell\n  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];\n  \n  // Check if the text field being edited is the event value or purchase value so we can implement the date picker if\n  // the user wants to input a date value\n  if ((indexPath.section == 1 && self.eventPropertyType == 3 && [self.labelsArraySection1[indexPath.row] isEqualToString:EventPropertyValue]) ||\n          (indexPath.section == 2 && self.purchasePropertyType == 3 && [self.labelsArraySection2[indexPath.row] isEqualToString:PurchasePropertyValue])) {\n    self.currentTextField = textField;\n    textField.text = nil;\n    UIDatePicker *datePicker = [[UIDatePicker alloc] init];\n    datePicker.datePickerMode = UIDatePickerModeDate;\n    [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];\n    datePicker.backgroundColor = [UIColor clearColor];\n    textField.inputView = datePicker;\n    if (textField.text && textField.text.length > 0) {\n      datePicker.date = [self getDateFromString:textField.text];\n    } else {\n      textField.text = [self getStringFromDate:datePicker.date];\n    }\n  }\n\n  if ((indexPath.section == 1 && self.eventPropertyType == 4 && [self.labelsArraySection1[indexPath.row] isEqualToString:EventPropertyValue]) ||\n          (indexPath.section == 2 && self.purchasePropertyType == 4 && [self.labelsArraySection2[indexPath.row] isEqualToString:PurchasePropertyValue])) {\n    if (@available(iOS 11.0, *)) {\n      // Smart quotes make it impossible to type JSON in for nested properties.\n      textField.smartQuotesType = UITextSmartQuotesTypeNo;\n    }\n  }\n  \n  if (indexPath.section == 1) {\n    if ([self.labelsArraySection1[indexPath.row] isEqualToString:Name]\n        || [self.labelsArraySection1[indexPath.row] isEqualToString:EventPropertyKey]) {\n      [self setUpTextField:textField withKeyboardType:UIKeyboardTypeDefault];\n    }\n  } else if (indexPath.section == 2) {\n    if ([self.labelsArraySection2[indexPath.row] isEqualToString:ProductId]\n        || [self.labelsArraySection2[indexPath.row] isEqualToString:PurchasePropertyKey]\n        || [self.labelsArraySection2[indexPath.row] isEqualToString:CurrencyCode]) {\n      [self setUpTextField:textField withKeyboardType:UIKeyboardTypeDefault];\n    } else if ([self.labelsArraySection2[indexPath.row] isEqualToString:Price]\n               || [self.labelsArraySection2[indexPath.row] isEqualToString:Quantity]) {\n      [self setUpTextField:textField withKeyboardType:UIKeyboardTypeNumberPad];\n    }\n  }\n  \n  return YES;\n}\n\n- (void)setUpTextField:(UITextField *)textField withKeyboardType:(UIKeyboardType)keyboardType {\n  textField.inputView = nil;\n  [textField reloadInputViews];\n  textField.keyboardType = keyboardType;\n}\n\n- (void)textFieldDidEndEditing:(UITextField *)textField {\n  // Need to know index path to know which section this text field is in\n  UITableViewCell *cell = ((UITableViewCell *)[[((UIView *)textField) superview] superview]); // Get UITextField's parent UITableViewCell\n  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];\n  if (indexPath.section == 0) {\n    self.valuesDictionary[self.labelsArraySection0[indexPath.row]] = textField.text;\n  } else if (indexPath.section == 1) {\n    self.valuesDictionary[self.labelsArraySection1[indexPath.row]] = textField.text;\n  } else if (indexPath.section == 2) {\n    self.valuesDictionary[self.labelsArraySection2[indexPath.row]] = textField.text;\n  }\n  self.currentTextField = nil;\n}\n\n- (IBAction)hideKeyboard:(UITextField*)textField {\n  [self.view endEditing:YES];\n}\n\n- (void)setUpPropertyKeyTextFieldWithSwitchIndexPath:(NSIndexPath *)indexPath {\n  NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:indexPath.row-1 inSection:indexPath.section];\n  EventTextFieldCell *textFieldCell = [self.tableView cellForRowAtIndexPath:newIndexPath];\n  UITextField *textField = textFieldCell.eventTextField;\n  textField.keyboardType = UIKeyboardTypeDefault;\n  textField.text = nil;\n}\n\n- (IBAction)switchChangedValue:(UISwitch *)sender {\n  [self.view endEditing:YES];\n  \n  // Need to know index path to know which section this switch is in\n  UITableViewCell *cell = ((UITableViewCell *)[[((UIView *)sender) superview] superview]); // Get UISwitch's parent UITableViewCell\n  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];\n  \n  if (indexPath.section == 1) {\n    self.valuesDictionary[self.labelsArraySection1[indexPath.row]] = @(sender.on);\n    if (sender.on) {\n      // Add Key and Value to labelsArray\n      [self.labelsArraySection1 insertObject:EventPropertyKey atIndex:indexPath.row + 1];\n      [self.labelsArraySection1 insertObject:CustomEventPropertyType atIndex:indexPath.row + 2];\n      [self.labelsArraySection1 insertObject:EventPropertyValue atIndex:indexPath.row + 3];\n    \n      [self setUpPropertyKeyTextFieldWithSwitchIndexPath:indexPath];\n      self.eventPropertyType = 0;\n    } else {\n      // Remove Key and Value from labelsArray\n      NSRange indexRange = NSMakeRange(indexPath.row + 1, 3);\n      [self.labelsArraySection1 removeObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:indexRange]];\n    }\n  } else if (indexPath.section == 2) {\n    self.valuesDictionary[self.labelsArraySection2[indexPath.row]] = @(sender.on);\n    if (sender.on) {\n      // Add Key and Value to labelsArray\n      [self.labelsArraySection2 insertObject:PurchasePropertyKey atIndex:indexPath.row + 1];\n      [self.labelsArraySection2 insertObject:PurchasePropertyType atIndex:indexPath.row + 2];\n      [self.labelsArraySection2 insertObject:PurchasePropertyValue atIndex:indexPath.row + 3];\n      \n      [self setUpPropertyKeyTextFieldWithSwitchIndexPath:indexPath];\n      self.purchasePropertyType = 0;\n    } else {\n      // Remove Key and Value from labelsArray\n      NSRange indexRange = NSMakeRange(indexPath.row + 1, 3);\n      [self.labelsArraySection2 removeObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:indexRange]];\n    }\n  }\n  \n  [self.tableView reloadData];\n}\n\n- (void)showAlertWithMessage:(NSString *)message {\n  [AlertControllerUtils presentTemporaryAlertWithTitle:nil\n                                                 message:message\n                                            presentingVC:self];\n}\n\n- (BOOL)checkIfFieldIsEmpty:(NSString *)field {\n  NSString *string = self.valuesDictionary[field];\n  if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] <= 0) {\n    NSString *message = [NSString localizedStringWithFormat:@\"Cannot have blank %@\", field];\n    [self showAlertWithMessage:message];\n    return NO;\n  }\n  return YES;\n}\n\n- (BOOL)validateIntegerForField:(NSString *)field {\n  // Check if it's a string because if you click \"Log Custom Event\" or \"Log Purchase\", the value becomes an integer in\n  // the dictionary so then if you click the button again without changing the value, it'll try to read it as a string and\n  // throw an exception.\n  if ([self.valuesDictionary[field] isKindOfClass:[NSString class]]) {\n    NSString *string = self.valuesDictionary[field];\n    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] <= 0\n        || [string integerValue] == 0) {\n      NSString *message = [NSString localizedStringWithFormat:@\"%@ is an invalid number\", field];\n      [self showAlertWithMessage:message];\n      return NO;\n    }\n  }\n  return YES;\n}\n\n- (IBAction)logEventOrPurchase:(UIButton *)sender {\n  [self.view endEditing:YES];\n\n  // Custom Event\n  if ([sender.titleLabel.text isEqualToString:LogEvent] && [self checkIfFieldIsEmpty:Name]) {\n    NSString *eventName = self.valuesDictionary[Name];\n    if (![self.valuesDictionary[EventSwitch] boolValue]) {\n      // Log Event\n      [[Appboy sharedInstance] logCustomEvent:eventName];\n      [self showAlertWithMessage:[NSString localizedStringWithFormat:@\"%@ logged\", eventName]];\n    } else {\n      // Log Event with Properties\n      if ([self validateAndStorePropertyWithKey:EventPropertyKey andValue:EventPropertyValue withPropertyType:self.eventPropertyType]) {\n        NSDictionary *properties = @{self.valuesDictionary[EventPropertyKey] : self.valuesDictionary[EventPropertyValue]};\n        [[Appboy sharedInstance] logCustomEvent:eventName withProperties:properties];\n        if ([self.valuesDictionary[EventPropertyValue] isKindOfClass:[NSDate class]]) {\n          [self showAlertWithMessage:[NSString localizedStringWithFormat:@\"%@ logged with properties {\\n%@ = %@\\n}\", eventName, self.valuesDictionary[EventPropertyKey], [self getStringFromDate:self.valuesDictionary[EventPropertyValue]]]];\n        } else {\n          [self showAlertWithMessage:[NSString localizedStringWithFormat:@\"%@ logged with properties %@\", eventName, properties]];\n        }\n      }\n    }\n  }\n  // Purchase Event\n  else if ([sender.titleLabel.text isEqualToString:LogPurchase]\n             && [self checkIfFieldIsEmpty:ProductId]\n             && [self checkIfFieldIsEmpty:CurrencyCode]\n             && [self checkIfFieldIsEmpty:Price]\n             && [self validateIntegerForField:Quantity]){\n    NSString *productId = self.valuesDictionary[ProductId];\n    NSString *currencyCode = self.valuesDictionary[CurrencyCode];\n    NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithString:self.valuesDictionary[Price]];\n    NSUInteger quantity = (NSUInteger)[self.valuesDictionary[Quantity] integerValue];\n    if (![self.valuesDictionary[PurchaseSwitch] boolValue]) {\n      // Log Purchase\n      [[Appboy sharedInstance] logPurchase:productId inCurrency:currencyCode atPrice:price withQuantity:quantity];\n      [self showAlertWithMessage:[NSString localizedStringWithFormat:@\"%@ purchased\", productId]];\n    } else {\n      // Log Purchase with Properties\n      if ([self validateAndStorePropertyWithKey:PurchasePropertyKey andValue:PurchasePropertyValue withPropertyType:self.purchasePropertyType]) {\n        NSDictionary *properties = @{self.valuesDictionary[PurchasePropertyKey] : self.valuesDictionary[PurchasePropertyValue]};\n        [[Appboy sharedInstance] logPurchase:productId inCurrency:currencyCode atPrice:price withQuantity:quantity andProperties:properties];\n        if ([self.valuesDictionary[PurchasePropertyValue] isKindOfClass:[NSDate class]]) {\n          [self showAlertWithMessage:[NSString localizedStringWithFormat:@\"%@ purchased with properties {\\n%@ = %@\\n}\", productId, self.valuesDictionary[PurchasePropertyKey], [self getStringFromDate:self.valuesDictionary[PurchasePropertyValue]]]];\n        } else {\n          [self showAlertWithMessage:[NSString localizedStringWithFormat:@\"%@ purchased with properties %@\", productId, properties]];\n        }\n      }\n    }\n  } else if ([sender.titleLabel.text isEqualToString:ChangeUser] && [self checkIfFieldIsEmpty:UserId]){\n    NSString *userId = self.valuesDictionary[UserId];\n\n    SdkAuthDelegate *authDelegate = (SdkAuthDelegate *)Appboy.sharedInstance.sdkAuthenticationDelegate;\n    if (authDelegate) {\n      // Sdk Authentication is enabled, request new token and update auth signature\n      [authDelegate requestSdkAuthTokenForUserId:userId\n                                      completion:^(NSString * _Nullable token) {\n        [Appboy.sharedInstance changeUser:userId sdkAuthSignature:token];\n      }];\n    } else {\n      [[Appboy sharedInstance] changeUser:userId];\n    }\n    [self showAlertWithMessage:[NSString localizedStringWithFormat:@\"Changed user to %@\", userId]];\n  }\n  // restoring NSNumber/NSDate values back to NSString\n  NSMutableDictionary *updatedValues = [NSMutableDictionary dictionary];\n  for (NSString *key in self.valuesDictionary) {\n    id value = self.valuesDictionary[key];\n    if ([value isKindOfClass:[NSNumber class]]) {\n      updatedValues[key] = [NSString stringWithFormat:@\"%@\", value];\n    } else if ([value isKindOfClass:[NSDate class]]) {\n      updatedValues[key] = [self getStringFromDate:value];\n    }\n  }\n  [self.valuesDictionary addEntriesFromDictionary:updatedValues];\n}\n\n- (BOOL)validateAndStorePropertyWithKey: (NSString *)key andValue:(NSString *)value withPropertyType:(NSInteger)propertyType {\n  if (![self checkIfFieldIsEmpty:key]) {\n    return NO;\n  }\n  switch (propertyType) {\n    case 0:\n      if (![self checkIfFieldIsEmpty:value]) {\n        return NO;\n      }\n      break;\n    case 1:\n      if (![self checkIfFieldIsEmpty:value]) {\n        return NO;\n      }\n      self.valuesDictionary[value] = @([self.valuesDictionary[value] integerValue]);\n      break;\n    case 2:\n      if (![self checkIfFieldIsEmpty:value]) {\n        return NO;\n      }\n      self.valuesDictionary[value] = @([self.valuesDictionary[value] doubleValue]);\n      break;\n    case 3:\n      if (![self.valuesDictionary[value] isKindOfClass:[NSDate class]]) {\n        self.valuesDictionary[value] = [self getDateFromString:self.valuesDictionary[value]];\n      }\n      break;\n    case 4: {\n        NSData *jsonData = [self.valuesDictionary[value] dataUsingEncoding:NSUTF8StringEncoding];\n        NSError *error;\n        id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];\n        if (error) {\n          NSLog(@\"Error parsing JSON: %@\", error);\n          return NO;\n        }\n        self.valuesDictionary[value] = jsonObject;\n      }\n      break;\n    case 5:\n      if (![self checkIfFieldIsEmpty:value]) {\n        return NO;\n      }\n      self.valuesDictionary[value] = @([self.valuesDictionary[value] boolValue]);\n      break;\n  }\n  return YES;\n}\n\n- (IBAction)customEventPropertyTypeChanged:(UISegmentedControl *)sender {\n  [self.view endEditing:YES];\n  // Need to know index path to know which section this text field is in\n  UITableViewCell *cell = ((UITableViewCell *)[[((UIView *)sender) superview] superview]); // Get UISegmentedControl's parent UITableViewCell\n  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];\n  if (indexPath.section == 1) {\n    self.eventPropertyType = sender.selectedSegmentIndex;\n    self.valuesDictionary[EventPropertyValue] = @\"\";\n  } else if (indexPath.section == 2) {\n    self.purchasePropertyType = sender.selectedSegmentIndex;\n    self.valuesDictionary[PurchasePropertyValue] = @\"\";\n  }\n  \n  NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section];\n  EventTextFieldCell *textFieldCell = [self.tableView cellForRowAtIndexPath:newIndexPath];\n  UITextField *textField = textFieldCell.eventTextField;\n  textField.text = nil;\n  \n  switch(sender.selectedSegmentIndex) {\n    case 0:\n      [self setUpTextField:textField withKeyboardType:UIKeyboardTypeDefault];\n      break;\n    case 1:\n      [self setUpTextField:textField withKeyboardType:UIKeyboardTypeNumberPad];\n      break;\n    case 2:\n      [self setUpTextField:textField withKeyboardType:UIKeyboardTypeDecimalPad];\n      break;\n    case 3:\n      break;\n  }\n}\n\n- (void)datePickerValueChanged:(UIDatePicker *)sender {\n  self.currentTextField.text = [self getStringFromDate:sender.date];\n}\n\n- (NSString *)getStringFromDate:(NSDate *)date {\n  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];\n  dateFormatter.dateFormat = @\"MM/dd/yyyy\";\n  NSString *dateString = [dateFormatter stringFromDate:date];\n  return dateString;\n}\n\n- (NSDate *)getDateFromString:(NSString *)birthdayString {\n  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];\n  dateFormatter.dateFormat = @\"MM/dd/yyyy\";\n  NSDate *date = [dateFormatter dateFromString:birthdayString];\n  return date;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Views/ScrollContentView.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface ScrollContentView : UIView\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Views/ScrollContentView.m",
    "content": "#import \"ScrollContentView.h\"\n\n@implementation ScrollContentView\n\n- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {\n  return YES;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Views/StopwatchButton.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface StopwatchButton : UIButton <NSSecureCoding>\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Views/StopwatchButton.m",
    "content": "#import \"StopwatchButton.h\"\n#import \"ColorUtils.h\"\n\n@implementation StopwatchButton\n\n- (instancetype)initWithCoder:(NSCoder *)aDecoder {\n  self = [super initWithCoder:aDecoder];\n  if (self) {\n    self.backgroundColor = [ColorUtils stopwatchBlueColor];\n    [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];\n    self.layer.cornerRadius = 3.0;\n    self.layer.masksToBounds = YES;\n  }\n  return self;\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n  return YES;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Views/StopwatchSegmentedControl.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface StopwatchSegmentedControl : UISegmentedControl <NSSecureCoding>\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/Views/StopwatchSegmentedControl.m",
    "content": "#import \"StopwatchSegmentedControl.h\"\n#import \"ColorUtils.h\"\n\n@implementation StopwatchSegmentedControl\n\n- (instancetype)initWithCoder:(NSCoder *)aDecoder {\n  self = [super initWithCoder:aDecoder];\n  if (self) {\n    self.tintColor = [ColorUtils stopwatchBlueColor];\n  }\n  return self;\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n  return YES;\n}\n\n@end\n"
  },
  {
    "path": "Example/Stopwatch/Sources/main.m",
    "content": "#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": "Example/Stopwatch/Supporting Files/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\n\t\n\t<key>CFBundleShortVersionString</key>\n\t<string>4.7.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleURLTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>com.appboy.stopwatch</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>stopwatch</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>ITSAppUsesNonExemptEncryption</key>\n\t<false/>\n\t<key>LSApplicationCategoryType</key>\n\t<string>NSAppTransportSecurity</string>\n\t<key>LSApplicationQueriesSchemes</key>\n\t<array>\n\t\t<string>twitter</string>\n\t\t<string>stopwatch</string>\n\t\t<string>fb</string>\n\t</array>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSExceptionDomains</key>\n\t<string/>\n\t<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>\n\t<string>Allow Stopwatch to access location information at all times and while in use.</string>\n\t<key>NSLocationAlwaysUsageDescription</key>\n\t<string>Allow Stopwatch to access location information at all times.</string>\n\t<key>NSLocationWhenInUseUsageDescription</key>\n\t<string>Allow Stopwatch to access location information while in use.</string>\n\t<key>NSUserTrackingUsageDescription</key>\n\t<string>To retarget ads and build a global profile to better serve you things you would like.</string>\n\t<key>UIBackgroundModes</key>\n\t<array>\n\t\t<string>remote-notification</string>\n\t</array>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>MainStoryboard</string>\n\t<key>UIMainStoryboardFile~ipad</key>\n\t<string>MainStoryboard</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UIRequiresFullScreen</key>\n\t<true/>\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\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<true/>\n\t<key>branch_app_domain</key>\n\t<string>appboy.app.link</string>\n\t<key>branch_key</key>\n\t<dict>\n\t\t<key>live</key>\n\t\t<string>key_live_ieufKEuaPmEyPngVcbb8woferFmUriF3</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Stopwatch/Supporting Files/Stopwatch-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'Stopwatch' target in the 'Stopwatch' project\n//\n\n#import <Availability.h>\n\n#ifdef __OBJC__\n  #import <UIKit/UIKit.h>\n  #import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "Example/Stopwatch/Supporting Files/Stopwatch.entitlements",
    "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>aps-environment</key>\n\t<string>development</string>\n\t<key>com.apple.developer.associated-domains</key>\n\t<array>\n\t\t<string>applinks:sweeney.appboy.com</string>\n\t\t<string>webcredentials:example.com</string>\n\t\t<string>applinks:ku67u.app.goo.gl</string>\n\t\t<string>applinks:appboy.app.link</string>\n\t\t<string>applinks:appboy-alternate.app.link</string>\n\t</array>\n\t<key>com.apple.developer.usernotifications.time-sensitive</key>\n\t<true/>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.com.appboy.stopwatch</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Stopwatch.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\t04CA21193CABC6C6C41A1BCC /* libPods-Stopwatch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 97A0CC58F9372681494D0BFE /* libPods-Stopwatch.a */; };\n\t\t1379A02923731F1300578296 /* AboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1379A02823731F1300578296 /* AboutViewController.m */; };\n\t\t4E3E94E318BD52C60008C815 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4E3E94E118BD52C60008C815 /* Localizable.strings */; };\n\t\t4E6D661619DCC18F009983AD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4E6D661519DCC18F009983AD /* Assets.xcassets */; };\n\t\t4E94D7711743EE8900604EA0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E94D7701743EE8900604EA0 /* AppDelegate.m */; };\n\t\t4EA3EE241745B9A2000E403C /* UserCells.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EA3EE231745B9A2000E403C /* UserCells.m */; };\n\t\t4EA7AA8E185626EC00D2B651 /* MiscViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EA7AA8D185626EC00D2B651 /* MiscViewController.m */; };\n\t\t4EABC19A1A606D00007259BD /* InAppMessageUIViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EABC1991A606D00007259BD /* InAppMessageUIViewController.m */; };\n\t\t4EABC19D1A621B7F007259BD /* InAppMessageUICells.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EABC19C1A621B7F007259BD /* InAppMessageUICells.m */; };\n\t\t4EB014FD1A79D31D00E11E41 /* InAppMessageTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955DE8941741A70700C07A57 /* InAppMessageTestViewController.m */; };\n\t\t703BF6D4245A2AD9001C1963 /* InAppMessageWithoutAssetZip.html in Resources */ = {isa = PBXBuildFile; fileRef = 703BF6D2245A2AD9001C1963 /* InAppMessageWithoutAssetZip.html */; };\n\t\t703BF6D5245A2AD9001C1963 /* InAppMessageWithJS.html in Resources */ = {isa = PBXBuildFile; fileRef = 703BF6D3245A2AD9001C1963 /* InAppMessageWithJS.html */; };\n\t\t70AAB53D2548663C00F64D7C /* StopwatchNotificationContentExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C1C53EFF1F7D7CA600042AA5 /* StopwatchNotificationContentExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t7435A384D098710E76548E58 /* libPods-StopwatchNotificationContentExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A07EA9383F93EFF70E1F00B /* libPods-StopwatchNotificationContentExtension.a */; };\n\t\t7F825DEA205C810100150F07 /* DataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F825DE9205C810100150F07 /* DataViewController.m */; };\n\t\t7FBB842C22D91B65001BF587 /* StopwatchSegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FBB842B22D91B65001BF587 /* StopwatchSegmentedControl.m */; };\n\t\t7FBB842F22D92398001BF587 /* ColorUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FBB842E22D92398001BF587 /* ColorUtils.m */; };\n\t\t7FEEFA4A23BFFCAA00255541 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7FEEFA4923BFFCAA00255541 /* LaunchScreen.storyboard */; };\n\t\t953574AB1743F862003A64B3 /* UserAttributesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 953574A81743F862003A64B3 /* UserAttributesViewController.m */; };\n\t\t95EF511A173D5FD600C0D780 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 95EF5119173D5FD600C0D780 /* main.m */; };\n\t\t95EF5127173D5FD600C0D780 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 95EF5125173D5FD600C0D780 /* MainStoryboard.storyboard */; };\n\t\tA2CB3EE5B8F45B82D4BF8C0E /* libPods-tvOS_TVML_Stopwatch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B29A6B5454ECF928424D0588 /* libPods-tvOS_TVML_Stopwatch.a */; };\n\t\tA2EC0F842F658E1B50CE05E2 /* libPods-tvOS_Stopwatch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7198A927FDBA136DD1BAA0 /* libPods-tvOS_Stopwatch.a */; };\n\t\tAD26107C20FE3E5000023BCD /* StopwatchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = AD26107B20FE3E5000023BCD /* StopwatchButton.m */; };\n\t\tAD884BF52081289900DA304A /* UserCustomAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = AD884BF42081289900DA304A /* UserCustomAttribute.m */; };\n\t\tAD884BF820813F1B00DA304A /* UserCustomAttributeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AD884BF720813F1B00DA304A /* UserCustomAttributeCell.m */; };\n\t\tADC332E12076A56F00D688E3 /* InAppMessageHTMLComposerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ADC332E02076A56F00D688E3 /* InAppMessageHTMLComposerViewController.m */; };\n\t\tADC332E42077A43E00D688E3 /* UIViewController+Keyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = ADC332E32077A43E00D688E3 /* UIViewController+Keyboard.m */; };\n\t\tADC332E82077AB4200D688E3 /* ScrollContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = ADC332E72077AB4200D688E3 /* ScrollContentView.m */; };\n\t\tADDAFB8E2107BAA30061C96E /* LocationCustomAttributeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ADDAFB8D2107BAA30061C96E /* LocationCustomAttributeViewController.m */; };\n\t\tADDAFB912107C2080061C96E /* LocationAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = ADDAFB902107C2080061C96E /* LocationAnnotation.m */; };\n\t\tB24B1724248151AB00127211 /* CustomThemesDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = B24B1723248151AB00127211 /* CustomThemesDataSource.m */; };\n\t\tB27A30AF263094D900149654 /* ABKNewsFeedCardStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B27A30AE263094D900149654 /* ABKNewsFeedCardStoryboard.storyboard */; };\n\t\tB2FF90FF25C9AE9E006DC3BB /* ABKContentCardsCustomStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2FF90FD25C9AE9E006DC3BB /* ABKContentCardsCustomStoryboard.storyboard */; };\n\t\tB2FF910025C9AE9E006DC3BB /* ABKContentCardsStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2FF90FE25C9AE9E006DC3BB /* ABKContentCardsStoryboard.storyboard */; };\n\t\tC1C53F001F7D7CA700042AA5 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C12172071D5A3815003B986E /* UserNotifications.framework */; };\n\t\tC1C53F011F7D7CA700042AA5 /* UserNotificationsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3688B1A1D6BB2DD0032091D /* UserNotificationsUI.framework */; };\n\t\tC1C53F051F7D7CA700042AA5 /* NotificationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C1C53F041F7D7CA700042AA5 /* NotificationViewController.m */; };\n\t\tC1C53F081F7D7CA700042AA5 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C1C53F061F7D7CA700042AA5 /* MainInterface.storyboard */; };\n\t\tD400EBF31CC86A6100550AD8 /* EventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D400EBF21CC86A6100550AD8 /* EventsViewController.m */; };\n\t\tD411F3121CD0355200100702 /* CustomTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = D411F3111CD0355200100702 /* CustomTabBarController.m */; };\n\t\tD4139BEC1CBDA4F200CA3307 /* FeedUIViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D4139BEB1CBDA4F200CA3307 /* FeedUIViewController.m */; };\n\t\tD41D8F741CB70A4600D622EF /* ContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D41D8F731CB70A4600D622EF /* ContainerViewController.m */; };\n\t\tD4C6940D1CA5E2E2006B69B1 /* UserAttributesArrayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D4C6940C1CA5E2E2006B69B1 /* UserAttributesArrayViewController.m */; };\n\t\tD5405F0D22162FD600E2958C /* AlertControllerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D5405F0C22162FD600E2958C /* AlertControllerUtils.m */; };\n\t\tE325DF461E29A93300B3E168 /* GeofencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E325DF451E29A93300B3E168 /* GeofencesViewController.m */; };\n\t\tE32835B11CC6C6F200E2C2DE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E32835B01CC6C6F200E2C2DE /* main.m */; };\n\t\tE32835B41CC6C6F200E2C2DE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E32835B31CC6C6F200E2C2DE /* AppDelegate.m */; };\n\t\tE32835B71CC6C6F200E2C2DE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E32835B61CC6C6F200E2C2DE /* Assets.xcassets */; };\n\t\tE32835BD1CC6CEAF00E2C2DE /* application.js in Resources */ = {isa = PBXBuildFile; fileRef = E32835B51CC6C6F200E2C2DE /* application.js */; };\n\t\tE330881D1D6BB0B4008935A9 /* NotificationService.m in Sources */ = {isa = PBXBuildFile; fileRef = E330881C1D6BB0B4008935A9 /* NotificationService.m */; };\n\t\tE33088211D6BB0B4008935A9 /* StopwatchNotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E33088191D6BB0B4008935A9 /* StopwatchNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tE340E7EC1CCED05B00042335 /* AppboyBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = E340E7EB1CCED05B00042335 /* AppboyBridge.m */; };\n\t\tE397F4111CC5BA540095A3ED /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E397F4101CC5BA540095A3ED /* main.m */; };\n\t\tE397F4141CC5BA540095A3ED /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E397F4131CC5BA540095A3ED /* AppDelegate.m */; };\n\t\tE397F4171CC5BA540095A3ED /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E397F4161CC5BA540095A3ED /* ViewController.m */; };\n\t\tE397F41A1CC5BA550095A3ED /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E397F4181CC5BA540095A3ED /* Main.storyboard */; };\n\t\tE397F41C1CC5BA550095A3ED /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E397F41B1CC5BA550095A3ED /* Assets.xcassets */; };\n\t\tE3A8A3641E5E6C07002E8821 /* IDFADelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A8A3631E5E6C07002E8821 /* IDFADelegate.m */; };\n\t\tE3C754A41E70DE7D004E1CCE /* AliasViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C754A31E70DE7D004E1CCE /* AliasViewController.m */; };\n\t\tF541E1CC26CC153D008FCBD9 /* UserSubscriptionGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = F541E1CB26CC153D008FCBD9 /* UserSubscriptionGroup.m */; };\n\t\tF541E1D026CC15FD008FCBD9 /* UserSubscriptionGroupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F541E1CF26CC15FD008FCBD9 /* UserSubscriptionGroupCell.m */; };\n\t\tFC6D804325D31AF90069B800 /* SdkAuthDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FC6D804225D31AF90069B800 /* SdkAuthDelegate.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t70AAB53E2548663C00F64D7C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 95EF5102173D5FD600C0D780 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C1C53EFE1F7D7CA600042AA5;\n\t\t\tremoteInfo = StopwatchNotificationContentExtension;\n\t\t};\n\t\tE330881F1D6BB0B4008935A9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 95EF5102173D5FD600C0D780 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E33088181D6BB0B4008935A9;\n\t\t\tremoteInfo = StopwatchNotificationService;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t4E321B9519C12246000EE12B /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE33088141D6BB09D008935A9 /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\tE33088211D6BB0B4008935A9 /* StopwatchNotificationService.appex in Embed App Extensions */,\n\t\t\t\t70AAB53D2548663C00F64D7C /* StopwatchNotificationContentExtension.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1379A02723731F1300578296 /* AboutViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutViewController.h; sourceTree = \"<group>\"; };\n\t\t1379A02823731F1300578296 /* AboutViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutViewController.m; sourceTree = \"<group>\"; };\n\t\t2091B415532A3DD4F91082D1 /* Pods-StopwatchNotificationContentExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-StopwatchNotificationContentExtension.debug.xcconfig\"; path = \"Target Support Files/Pods-StopwatchNotificationContentExtension/Pods-StopwatchNotificationContentExtension.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t45C6947D7796136ED06ECD25 /* Pods-StopwatchNotificationContentExtension.develop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-StopwatchNotificationContentExtension.develop.xcconfig\"; path = \"Target Support Files/Pods-StopwatchNotificationContentExtension/Pods-StopwatchNotificationContentExtension.develop.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t4E3E94E218BD52C60008C815 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = \"<group>\"; };\n\t\t4E3E94E418BD52CE0008C815 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hans\"; path = \"zh-Hans.lproj/Localizable.strings\"; sourceTree = \"<group>\"; };\n\t\t4E6D661519DCC18F009983AD /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t4E94D76F1743EE8900604EA0 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t4E94D7701743EE8900604EA0 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t4EA3EE221745B9A2000E403C /* UserCells.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserCells.h; sourceTree = \"<group>\"; };\n\t\t4EA3EE231745B9A2000E403C /* UserCells.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserCells.m; sourceTree = \"<group>\"; };\n\t\t4EA7AA8C185626EC00D2B651 /* MiscViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MiscViewController.h; sourceTree = \"<group>\"; };\n\t\t4EA7AA8D185626EC00D2B651 /* MiscViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MiscViewController.m; sourceTree = \"<group>\"; };\n\t\t4EABC1981A606D00007259BD /* InAppMessageUIViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InAppMessageUIViewController.h; sourceTree = \"<group>\"; };\n\t\t4EABC1991A606D00007259BD /* InAppMessageUIViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InAppMessageUIViewController.m; sourceTree = \"<group>\"; };\n\t\t4EABC19B1A621AF4007259BD /* InAppMessageUICells.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InAppMessageUICells.h; sourceTree = \"<group>\"; };\n\t\t4EABC19C1A621B7F007259BD /* InAppMessageUICells.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InAppMessageUICells.m; sourceTree = \"<group>\"; };\n\t\t4EEAD0EE1B0FB00700883707 /* Stopwatch.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Stopwatch.entitlements; sourceTree = \"<group>\"; };\n\t\t554E827EA66F0EED2E46DF49 /* Pods-tvOS_TVML_Stopwatch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-tvOS_TVML_Stopwatch.release.xcconfig\"; path = \"Target Support Files/Pods-tvOS_TVML_Stopwatch/Pods-tvOS_TVML_Stopwatch.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t565720DCB77F36634910F317 /* Pods-StopwatchNotificationContentExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-StopwatchNotificationContentExtension.release.xcconfig\"; path = \"Target Support Files/Pods-StopwatchNotificationContentExtension/Pods-StopwatchNotificationContentExtension.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t589612CCA0D76EF6AEF29E34 /* Pods-tvOS_TVML_Stopwatch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-tvOS_TVML_Stopwatch.debug.xcconfig\"; path = \"Target Support Files/Pods-tvOS_TVML_Stopwatch/Pods-tvOS_TVML_Stopwatch.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t5D73428FE25A52C20DE8FB52 /* Pods-tvOS_Stopwatch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-tvOS_Stopwatch.release.xcconfig\"; path = \"Target Support Files/Pods-tvOS_Stopwatch/Pods-tvOS_Stopwatch.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6FF9B51023BC03F4714FB1AD /* Pods-Stopwatch.develop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Stopwatch.develop.xcconfig\"; path = \"Target Support Files/Pods-Stopwatch/Pods-Stopwatch.develop.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7014253D2554AE3B00D4E695 /* libAppboyPushStory.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAppboyPushStory.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t703BF6D2245A2AD9001C1963 /* InAppMessageWithoutAssetZip.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = InAppMessageWithoutAssetZip.html; sourceTree = \"<group>\"; };\n\t\t703BF6D3245A2AD9001C1963 /* InAppMessageWithJS.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = InAppMessageWithJS.html; sourceTree = \"<group>\"; };\n\t\t7A0037A504F2E807F4865219 /* Pods-Stopwatch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Stopwatch.release.xcconfig\"; path = \"Target Support Files/Pods-Stopwatch/Pods-Stopwatch.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7F825DE8205C80D300150F07 /* DataViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataViewController.h; sourceTree = \"<group>\"; };\n\t\t7F825DE9205C810100150F07 /* DataViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DataViewController.m; sourceTree = \"<group>\"; };\n\t\t7FBB842B22D91B65001BF587 /* StopwatchSegmentedControl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StopwatchSegmentedControl.m; sourceTree = \"<group>\"; };\n\t\t7FBB842D22D91B7C001BF587 /* StopwatchSegmentedControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StopwatchSegmentedControl.h; sourceTree = \"<group>\"; };\n\t\t7FBB842E22D92398001BF587 /* ColorUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ColorUtils.m; sourceTree = \"<group>\"; };\n\t\t7FBB843022D923A7001BF587 /* ColorUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ColorUtils.h; sourceTree = \"<group>\"; };\n\t\t7FEEFA4923BFFCAA00255541 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t8A07EA9383F93EFF70E1F00B /* libPods-StopwatchNotificationContentExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-StopwatchNotificationContentExtension.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9311555CE650329171621395 /* Pods-Stopwatch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Stopwatch.debug.xcconfig\"; path = \"Target Support Files/Pods-Stopwatch/Pods-Stopwatch.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t953574A81743F862003A64B3 /* UserAttributesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserAttributesViewController.m; sourceTree = \"<group>\"; };\n\t\t953574A91743F862003A64B3 /* UserAttributesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserAttributesViewController.h; sourceTree = \"<group>\"; };\n\t\t955DE8931741A70700C07A57 /* InAppMessageTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InAppMessageTestViewController.h; sourceTree = \"<group>\"; };\n\t\t955DE8941741A70700C07A57 /* InAppMessageTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InAppMessageTestViewController.m; sourceTree = \"<group>\"; };\n\t\t958071A7173D727000129B89 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };\n\t\t95EF510A173D5FD600C0D780 /* Stopwatch.Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Stopwatch.Debug.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t95EF510D173D5FD600C0D780 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t95EF510F173D5FD600C0D780 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t95EF5111173D5FD600C0D780 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t95EF5115173D5FD600C0D780 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t95EF5119173D5FD600C0D780 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t95EF511B173D5FD600C0D780 /* Stopwatch-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"Stopwatch-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t95EF5126173D5FD600C0D780 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = \"<group>\"; };\n\t\t95EF514D173D6A6100C0D780 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\t95EF514F173D6A6800C0D780 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; };\n\t\t95EF5151173D6A6F00C0D780 /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; };\n\t\t95EF5153173D6A7700C0D780 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };\n\t\t95EF5155173D6A8000C0D780 /* Social.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; };\n\t\t95EF5157173D6A8800C0D780 /* Twitter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Twitter.framework; path = System/Library/Frameworks/Twitter.framework; sourceTree = SDKROOT; };\n\t\t95EF5159173D6A9000C0D780 /* Accounts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accounts.framework; path = System/Library/Frameworks/Accounts.framework; sourceTree = SDKROOT; };\n\t\t95EF515B173D6A9800C0D780 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };\n\t\t95EF515D173D6AAA00C0D780 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };\n\t\t95EF515F173D6AB100C0D780 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };\n\t\t97A0CC58F9372681494D0BFE /* libPods-Stopwatch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-Stopwatch.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9D70411FFED99E4EE8846042 /* Pods-tvOS_Stopwatch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-tvOS_Stopwatch.debug.xcconfig\"; path = \"Target Support Files/Pods-tvOS_Stopwatch/Pods-tvOS_Stopwatch.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA77A349C24E6AE46F1B800EA /* Pods-tvOS_TVML_Stopwatch.develop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-tvOS_TVML_Stopwatch.develop.xcconfig\"; path = \"Target Support Files/Pods-tvOS_TVML_Stopwatch/Pods-tvOS_TVML_Stopwatch.develop.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAA7198A927FDBA136DD1BAA0 /* libPods-tvOS_Stopwatch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-tvOS_Stopwatch.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tAD26107A20FE3E5000023BCD /* StopwatchButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StopwatchButton.h; sourceTree = \"<group>\"; };\n\t\tAD26107B20FE3E5000023BCD /* StopwatchButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StopwatchButton.m; sourceTree = \"<group>\"; };\n\t\tAD884BF32081289900DA304A /* UserCustomAttribute.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserCustomAttribute.h; sourceTree = \"<group>\"; };\n\t\tAD884BF42081289900DA304A /* UserCustomAttribute.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserCustomAttribute.m; sourceTree = \"<group>\"; };\n\t\tAD884BF620813F1B00DA304A /* UserCustomAttributeCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserCustomAttributeCell.h; sourceTree = \"<group>\"; };\n\t\tAD884BF720813F1B00DA304A /* UserCustomAttributeCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserCustomAttributeCell.m; sourceTree = \"<group>\"; };\n\t\tADC332DF2076A56F00D688E3 /* InAppMessageHTMLComposerViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InAppMessageHTMLComposerViewController.h; sourceTree = \"<group>\"; };\n\t\tADC332E02076A56F00D688E3 /* InAppMessageHTMLComposerViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InAppMessageHTMLComposerViewController.m; sourceTree = \"<group>\"; };\n\t\tADC332E22077A43E00D688E3 /* UIViewController+Keyboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"UIViewController+Keyboard.h\"; sourceTree = \"<group>\"; };\n\t\tADC332E32077A43E00D688E3 /* UIViewController+Keyboard.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = \"UIViewController+Keyboard.m\"; sourceTree = \"<group>\"; };\n\t\tADC332E62077AB4200D688E3 /* ScrollContentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScrollContentView.h; sourceTree = \"<group>\"; };\n\t\tADC332E72077AB4200D688E3 /* ScrollContentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScrollContentView.m; sourceTree = \"<group>\"; };\n\t\tADDAFB8C2107BAA30061C96E /* LocationCustomAttributeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LocationCustomAttributeViewController.h; sourceTree = \"<group>\"; };\n\t\tADDAFB8D2107BAA30061C96E /* LocationCustomAttributeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LocationCustomAttributeViewController.m; sourceTree = \"<group>\"; };\n\t\tADDAFB8F2107C2080061C96E /* LocationAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LocationAnnotation.h; sourceTree = \"<group>\"; };\n\t\tADDAFB902107C2080061C96E /* LocationAnnotation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LocationAnnotation.m; sourceTree = \"<group>\"; };\n\t\tB24B1722248151AB00127211 /* CustomThemesDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CustomThemesDataSource.h; sourceTree = \"<group>\"; };\n\t\tB24B1723248151AB00127211 /* CustomThemesDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CustomThemesDataSource.m; sourceTree = \"<group>\"; };\n\t\tB253831D24CF2CEF001575CA /* AppTrackingTransparency.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppTrackingTransparency.framework; path = System/Library/Frameworks/AppTrackingTransparency.framework; sourceTree = SDKROOT; };\n\t\tB27A30AE263094D900149654 /* ABKNewsFeedCardStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = ABKNewsFeedCardStoryboard.storyboard; sourceTree = \"<group>\"; };\n\t\tB29A6B5454ECF928424D0588 /* libPods-tvOS_TVML_Stopwatch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-tvOS_TVML_Stopwatch.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB2FF90FD25C9AE9E006DC3BB /* ABKContentCardsCustomStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = ABKContentCardsCustomStoryboard.storyboard; sourceTree = \"<group>\"; };\n\t\tB2FF90FE25C9AE9E006DC3BB /* ABKContentCardsStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = ABKContentCardsStoryboard.storyboard; sourceTree = \"<group>\"; };\n\t\tC03E52C51D46574A0065ABD6 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = \"<group>\"; };\n\t\tC0A45ABC1E66155C0028C5DF /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hant\"; path = \"zh-Hant.lproj/Localizable.strings\"; sourceTree = \"<group>\"; };\n\t\tC12172071D5A3815003B986E /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };\n\t\tC16085C51B964BC600E57F30 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };\n\t\tC17BAFC21F7DA64D006B65CE /* StopwatchNotificationContentExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = StopwatchNotificationContentExtension.entitlements; sourceTree = \"<group>\"; };\n\t\tC17BCBCE1F7DCF2C00F65F39 /* AppboyPushStory.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppboyPushStory.framework; path = \"../Appboy-Push-Story/Appboy-Push-Story/AppboyPushStory.framework\"; sourceTree = \"<group>\"; };\n\t\tC1C53EFF1F7D7CA600042AA5 /* StopwatchNotificationContentExtension.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = StopwatchNotificationContentExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC1C53F031F7D7CA700042AA5 /* NotificationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationViewController.h; sourceTree = \"<group>\"; };\n\t\tC1C53F041F7D7CA700042AA5 /* NotificationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationViewController.m; sourceTree = \"<group>\"; };\n\t\tC1C53F071F7D7CA700042AA5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\tC1C53F091F7D7CA700042AA5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD400EBF11CC86A6100550AD8 /* EventsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventsViewController.h; sourceTree = \"<group>\"; };\n\t\tD400EBF21CC86A6100550AD8 /* EventsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EventsViewController.m; sourceTree = \"<group>\"; };\n\t\tD411F3101CD0355200100702 /* CustomTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTabBarController.h; sourceTree = \"<group>\"; };\n\t\tD411F3111CD0355200100702 /* CustomTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTabBarController.m; sourceTree = \"<group>\"; };\n\t\tD4139BEA1CBDA4E500CA3307 /* FeedUIViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedUIViewController.h; sourceTree = \"<group>\"; };\n\t\tD4139BEB1CBDA4F200CA3307 /* FeedUIViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FeedUIViewController.m; sourceTree = \"<group>\"; };\n\t\tD41D8F701CB7049400D622EF /* ContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContainerViewController.h; sourceTree = \"<group>\"; };\n\t\tD41D8F731CB70A4600D622EF /* ContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContainerViewController.m; sourceTree = \"<group>\"; };\n\t\tD4C6940C1CA5E2E2006B69B1 /* UserAttributesArrayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserAttributesArrayViewController.m; sourceTree = \"<group>\"; };\n\t\tD4C6940E1CAA0F34006B69B1 /* UserAttributesArrayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserAttributesArrayViewController.h; sourceTree = \"<group>\"; };\n\t\tD5405F0B22162FD600E2958C /* AlertControllerUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AlertControllerUtils.h; sourceTree = \"<group>\"; };\n\t\tD5405F0C22162FD600E2958C /* AlertControllerUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AlertControllerUtils.m; sourceTree = \"<group>\"; };\n\t\tD5427CD725E703AC00018244 /* LoggerUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoggerUtils.h; sourceTree = \"<group>\"; };\n\t\tE325DF441E29A93300B3E168 /* GeofencesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeofencesViewController.h; sourceTree = \"<group>\"; };\n\t\tE325DF451E29A93300B3E168 /* GeofencesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeofencesViewController.m; sourceTree = \"<group>\"; };\n\t\tE325DF471E2AE5FD00B3E168 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; };\n\t\tE32835AD1CC6C6F200E2C2DE /* tvOS_TVML_Stopwatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tvOS_TVML_Stopwatch.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE32835B01CC6C6F200E2C2DE /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tE32835B21CC6C6F200E2C2DE /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tE32835B31CC6C6F200E2C2DE /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tE32835B51CC6C6F200E2C2DE /* application.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = application.js; sourceTree = \"<group>\"; };\n\t\tE32835B61CC6C6F200E2C2DE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tE32835B81CC6C6F200E2C2DE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tE33088191D6BB0B4008935A9 /* StopwatchNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = StopwatchNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE330881B1D6BB0B4008935A9 /* NotificationService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationService.h; sourceTree = \"<group>\"; };\n\t\tE330881C1D6BB0B4008935A9 /* NotificationService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationService.m; sourceTree = \"<group>\"; };\n\t\tE330881E1D6BB0B4008935A9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tE340E7EA1CCED05B00042335 /* AppboyBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppboyBridge.h; sourceTree = \"<group>\"; };\n\t\tE340E7EB1CCED05B00042335 /* AppboyBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppboyBridge.m; sourceTree = \"<group>\"; };\n\t\tE3688B1A1D6BB2DD0032091D /* UserNotificationsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotificationsUI.framework; path = System/Library/Frameworks/UserNotificationsUI.framework; sourceTree = SDKROOT; };\n\t\tE397F40D1CC5BA540095A3ED /* tvOS_Stopwatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tvOS_Stopwatch.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE397F4101CC5BA540095A3ED /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tE397F4121CC5BA540095A3ED /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tE397F4131CC5BA540095A3ED /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tE397F4151CC5BA540095A3ED /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\tE397F4161CC5BA540095A3ED /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\tE397F4191CC5BA550095A3ED /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tE397F41B1CC5BA550095A3ED /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tE397F41D1CC5BA550095A3ED /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tE3A8A3621E5E6C07002E8821 /* IDFADelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDFADelegate.h; sourceTree = \"<group>\"; };\n\t\tE3A8A3631E5E6C07002E8821 /* IDFADelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IDFADelegate.m; sourceTree = \"<group>\"; };\n\t\tE3C754A21E70DE7D004E1CCE /* AliasViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliasViewController.h; sourceTree = \"<group>\"; };\n\t\tE3C754A31E70DE7D004E1CCE /* AliasViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AliasViewController.m; sourceTree = \"<group>\"; };\n\t\tE3ED8D401CE54C0300C23B99 /* AppboyTVOSKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppboyTVOSKit.framework; path = ../Public/AppboyTVOSKit.framework; sourceTree = \"<group>\"; };\n\t\tF07931EB0C9AC8C0CBB3F52D /* Pods-tvOS_Stopwatch.develop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-tvOS_Stopwatch.develop.xcconfig\"; path = \"Target Support Files/Pods-tvOS_Stopwatch/Pods-tvOS_Stopwatch.develop.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tF541E1CA26CC1525008FCBD9 /* UserSubscriptionGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserSubscriptionGroup.h; sourceTree = \"<group>\"; };\n\t\tF541E1CB26CC153D008FCBD9 /* UserSubscriptionGroup.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserSubscriptionGroup.m; sourceTree = \"<group>\"; };\n\t\tF541E1CD26CC15B8008FCBD9 /* UserSubscriptionGroupCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserSubscriptionGroupCell.h; sourceTree = \"<group>\"; };\n\t\tF541E1CF26CC15FD008FCBD9 /* UserSubscriptionGroupCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserSubscriptionGroupCell.m; sourceTree = \"<group>\"; };\n\t\tFC6D804125D31AD90069B800 /* SdkAuthDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SdkAuthDelegate.h; sourceTree = \"<group>\"; };\n\t\tFC6D804225D31AF90069B800 /* SdkAuthDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SdkAuthDelegate.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t95EF5107173D5FD600C0D780 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t04CA21193CABC6C6C41A1BCC /* libPods-Stopwatch.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC1C53EFC1F7D7CA600042AA5 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC1C53F011F7D7CA700042AA5 /* UserNotificationsUI.framework in Frameworks */,\n\t\t\t\tC1C53F001F7D7CA700042AA5 /* UserNotifications.framework in Frameworks */,\n\t\t\t\t7435A384D098710E76548E58 /* libPods-StopwatchNotificationContentExtension.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE32835AA1CC6C6F200E2C2DE /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA2CB3EE5B8F45B82D4BF8C0E /* libPods-tvOS_TVML_Stopwatch.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE33088161D6BB0B4008935A9 /* 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\tE397F40A1CC5BA540095A3ED /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA2EC0F842F658E1B50CE05E2 /* libPods-tvOS_Stopwatch.a 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\t2DA6CCD23772F28D45CA1407 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9311555CE650329171621395 /* Pods-Stopwatch.debug.xcconfig */,\n\t\t\t\t6FF9B51023BC03F4714FB1AD /* Pods-Stopwatch.develop.xcconfig */,\n\t\t\t\t7A0037A504F2E807F4865219 /* Pods-Stopwatch.release.xcconfig */,\n\t\t\t\t2091B415532A3DD4F91082D1 /* Pods-StopwatchNotificationContentExtension.debug.xcconfig */,\n\t\t\t\t45C6947D7796136ED06ECD25 /* Pods-StopwatchNotificationContentExtension.develop.xcconfig */,\n\t\t\t\t565720DCB77F36634910F317 /* Pods-StopwatchNotificationContentExtension.release.xcconfig */,\n\t\t\t\t9D70411FFED99E4EE8846042 /* Pods-tvOS_Stopwatch.debug.xcconfig */,\n\t\t\t\tF07931EB0C9AC8C0CBB3F52D /* Pods-tvOS_Stopwatch.develop.xcconfig */,\n\t\t\t\t5D73428FE25A52C20DE8FB52 /* Pods-tvOS_Stopwatch.release.xcconfig */,\n\t\t\t\t589612CCA0D76EF6AEF29E34 /* Pods-tvOS_TVML_Stopwatch.debug.xcconfig */,\n\t\t\t\tA77A349C24E6AE46F1B800EA /* Pods-tvOS_TVML_Stopwatch.develop.xcconfig */,\n\t\t\t\t554E827EA66F0EED2E46DF49 /* Pods-tvOS_TVML_Stopwatch.release.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6B9245A1E46001C1963 /* ViewControllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t703BF6BB245A1F28001C1963 /* User */,\n\t\t\t\t703BF6BD245A204B001C1963 /* IAM */,\n\t\t\t\t703BF6C2245A21B2001C1963 /* Braze UI */,\n\t\t\t\t703BF6C3245A21BE001C1963 /* Advanced */,\n\t\t\t\tD41D8F701CB7049400D622EF /* ContainerViewController.h */,\n\t\t\t\tD41D8F731CB70A4600D622EF /* ContainerViewController.m */,\n\t\t\t\tD411F3101CD0355200100702 /* CustomTabBarController.h */,\n\t\t\t\tD411F3111CD0355200100702 /* CustomTabBarController.m */,\n\t\t\t);\n\t\t\tpath = ViewControllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6BB245A1F28001C1963 /* User */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t703BF6C7245A2444001C1963 /* Events */,\n\t\t\t\t703BF6C8245A2453001C1963 /* Attributes */,\n\t\t\t\t703BF6C9245A2461001C1963 /* Array */,\n\t\t\t\t703BF6CA245A2468001C1963 /* Alias */,\n\t\t\t);\n\t\t\tpath = User;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6BD245A204B001C1963 /* IAM */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t703BF6BE245A20C4001C1963 /* UI */,\n\t\t\t\t703BF6BF245A20CD001C1963 /* Controls */,\n\t\t\t);\n\t\t\tpath = IAM;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6BE245A20C4001C1963 /* UI */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t703BF6D1245A2AB6001C1963 /* HTML */,\n\t\t\t\t4EABC1981A606D00007259BD /* InAppMessageUIViewController.h */,\n\t\t\t\t4EABC1991A606D00007259BD /* InAppMessageUIViewController.m */,\n\t\t\t\t4EABC19B1A621AF4007259BD /* InAppMessageUICells.h */,\n\t\t\t\t4EABC19C1A621B7F007259BD /* InAppMessageUICells.m */,\n\t\t\t\tADC332DF2076A56F00D688E3 /* InAppMessageHTMLComposerViewController.h */,\n\t\t\t\tADC332E02076A56F00D688E3 /* InAppMessageHTMLComposerViewController.m */,\n\t\t\t);\n\t\t\tpath = UI;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6BF245A20CD001C1963 /* Controls */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t955DE8931741A70700C07A57 /* InAppMessageTestViewController.h */,\n\t\t\t\t955DE8941741A70700C07A57 /* InAppMessageTestViewController.m */,\n\t\t\t);\n\t\t\tpath = Controls;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C0245A212D001C1963 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAD26107A20FE3E5000023BCD /* StopwatchButton.h */,\n\t\t\t\tAD26107B20FE3E5000023BCD /* StopwatchButton.m */,\n\t\t\t\t7FBB842D22D91B7C001BF587 /* StopwatchSegmentedControl.h */,\n\t\t\t\t7FBB842B22D91B65001BF587 /* StopwatchSegmentedControl.m */,\n\t\t\t\tADC332E62077AB4200D688E3 /* ScrollContentView.h */,\n\t\t\t\tADC332E72077AB4200D688E3 /* ScrollContentView.m */,\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C1245A2148001C1963 /* Categories */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADC332E22077A43E00D688E3 /* UIViewController+Keyboard.h */,\n\t\t\t\tADC332E32077A43E00D688E3 /* UIViewController+Keyboard.m */,\n\t\t\t);\n\t\t\tpath = Categories;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C2245A21B2001C1963 /* Braze UI */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD4139BEA1CBDA4E500CA3307 /* FeedUIViewController.h */,\n\t\t\t\tD4139BEB1CBDA4F200CA3307 /* FeedUIViewController.m */,\n\t\t\t);\n\t\t\tpath = \"Braze UI\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C3245A21BE001C1963 /* Advanced */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t703BF6C4245A22BE001C1963 /* Misc */,\n\t\t\t\t703BF6C5245A22CF001C1963 /* Data */,\n\t\t\t\t703BF6C6245A22DA001C1963 /* About */,\n\t\t\t);\n\t\t\tpath = Advanced;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C4245A22BE001C1963 /* Misc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4EA7AA8C185626EC00D2B651 /* MiscViewController.h */,\n\t\t\t\t4EA7AA8D185626EC00D2B651 /* MiscViewController.m */,\n\t\t\t\tE325DF441E29A93300B3E168 /* GeofencesViewController.h */,\n\t\t\t\tE325DF451E29A93300B3E168 /* GeofencesViewController.m */,\n\t\t\t\tB24B1722248151AB00127211 /* CustomThemesDataSource.h */,\n\t\t\t\tB24B1723248151AB00127211 /* CustomThemesDataSource.m */,\n\t\t\t);\n\t\t\tpath = Misc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C5245A22CF001C1963 /* Data */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7F825DE8205C80D300150F07 /* DataViewController.h */,\n\t\t\t\t7F825DE9205C810100150F07 /* DataViewController.m */,\n\t\t\t);\n\t\t\tpath = Data;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C6245A22DA001C1963 /* About */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1379A02723731F1300578296 /* AboutViewController.h */,\n\t\t\t\t1379A02823731F1300578296 /* AboutViewController.m */,\n\t\t\t);\n\t\t\tpath = About;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C7245A2444001C1963 /* Events */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD400EBF11CC86A6100550AD8 /* EventsViewController.h */,\n\t\t\t\tD400EBF21CC86A6100550AD8 /* EventsViewController.m */,\n\t\t\t);\n\t\t\tpath = Events;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C8245A2453001C1963 /* Attributes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t703BF6CB245A2819001C1963 /* Views */,\n\t\t\t\t703BF6CC245A28AA001C1963 /* Location Custom Attribute */,\n\t\t\t\t953574A91743F862003A64B3 /* UserAttributesViewController.h */,\n\t\t\t\t953574A81743F862003A64B3 /* UserAttributesViewController.m */,\n\t\t\t);\n\t\t\tpath = Attributes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6C9245A2461001C1963 /* Array */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD4C6940E1CAA0F34006B69B1 /* UserAttributesArrayViewController.h */,\n\t\t\t\tD4C6940C1CA5E2E2006B69B1 /* UserAttributesArrayViewController.m */,\n\t\t\t);\n\t\t\tpath = Array;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6CA245A2468001C1963 /* Alias */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE3C754A21E70DE7D004E1CCE /* AliasViewController.h */,\n\t\t\t\tE3C754A31E70DE7D004E1CCE /* AliasViewController.m */,\n\t\t\t);\n\t\t\tpath = Alias;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6CB245A2819001C1963 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4EA3EE221745B9A2000E403C /* UserCells.h */,\n\t\t\t\t4EA3EE231745B9A2000E403C /* UserCells.m */,\n\t\t\t\tAD884BF620813F1B00DA304A /* UserCustomAttributeCell.h */,\n\t\t\t\tAD884BF720813F1B00DA304A /* UserCustomAttributeCell.m */,\n\t\t\t\tAD884BF32081289900DA304A /* UserCustomAttribute.h */,\n\t\t\t\tAD884BF42081289900DA304A /* UserCustomAttribute.m */,\n\t\t\t\tF541E1CA26CC1525008FCBD9 /* UserSubscriptionGroup.h */,\n\t\t\t\tF541E1CB26CC153D008FCBD9 /* UserSubscriptionGroup.m */,\n\t\t\t\tF541E1CD26CC15B8008FCBD9 /* UserSubscriptionGroupCell.h */,\n\t\t\t\tF541E1CF26CC15FD008FCBD9 /* UserSubscriptionGroupCell.m */,\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6CC245A28AA001C1963 /* Location Custom Attribute */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADDAFB8C2107BAA30061C96E /* LocationCustomAttributeViewController.h */,\n\t\t\t\tADDAFB8D2107BAA30061C96E /* LocationCustomAttributeViewController.m */,\n\t\t\t\tADDAFB8F2107C2080061C96E /* LocationAnnotation.h */,\n\t\t\t\tADDAFB902107C2080061C96E /* LocationAnnotation.m */,\n\t\t\t);\n\t\t\tpath = \"Location Custom Attribute\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6CD245A28C6001C1963 /* Utils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD5427CD725E703AC00018244 /* LoggerUtils.h */,\n\t\t\t\tE3A8A3621E5E6C07002E8821 /* IDFADelegate.h */,\n\t\t\t\tE3A8A3631E5E6C07002E8821 /* IDFADelegate.m */,\n\t\t\t\tD5405F0B22162FD600E2958C /* AlertControllerUtils.h */,\n\t\t\t\tD5405F0C22162FD600E2958C /* AlertControllerUtils.m */,\n\t\t\t\t7FBB843022D923A7001BF587 /* ColorUtils.h */,\n\t\t\t\t7FBB842E22D92398001BF587 /* ColorUtils.m */,\n\t\t\t\tFC6D804125D31AD90069B800 /* SdkAuthDelegate.h */,\n\t\t\t\tFC6D804225D31AF90069B800 /* SdkAuthDelegate.m */,\n\t\t\t);\n\t\t\tpath = Utils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6CF245A29D6001C1963 /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t95EF5119173D5FD600C0D780 /* main.m */,\n\t\t\t\t4E94D76F1743EE8900604EA0 /* AppDelegate.h */,\n\t\t\t\t4E94D7701743EE8900604EA0 /* AppDelegate.m */,\n\t\t\t\t703BF6B9245A1E46001C1963 /* ViewControllers */,\n\t\t\t\t703BF6C0245A212D001C1963 /* Views */,\n\t\t\t\t703BF6CD245A28C6001C1963 /* Utils */,\n\t\t\t\t703BF6C1245A2148001C1963 /* Categories */,\n\t\t\t);\n\t\t\tpath = Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6D0245A29F1001C1963 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB27A30AE263094D900149654 /* ABKNewsFeedCardStoryboard.storyboard */,\n\t\t\t\tB2FF90FD25C9AE9E006DC3BB /* ABKContentCardsCustomStoryboard.storyboard */,\n\t\t\t\tB2FF90FE25C9AE9E006DC3BB /* ABKContentCardsStoryboard.storyboard */,\n\t\t\t\t95EF5125173D5FD600C0D780 /* MainStoryboard.storyboard */,\n\t\t\t\t7FEEFA4923BFFCAA00255541 /* LaunchScreen.storyboard */,\n\t\t\t\t4E6D661519DCC18F009983AD /* Assets.xcassets */,\n\t\t\t\t4E3E94E118BD52C60008C815 /* Localizable.strings */,\n\t\t\t);\n\t\t\tpath = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6D1245A2AB6001C1963 /* HTML */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t703BF6D3245A2AD9001C1963 /* InAppMessageWithJS.html */,\n\t\t\t\t703BF6D2245A2AD9001C1963 /* InAppMessageWithoutAssetZip.html */,\n\t\t\t);\n\t\t\tpath = HTML;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t703BF6D6245A2B00001C1963 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t95EF511B173D5FD600C0D780 /* Stopwatch-Prefix.pch */,\n\t\t\t\t4EEAD0EE1B0FB00700883707 /* Stopwatch.entitlements */,\n\t\t\t\t95EF5115173D5FD600C0D780 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t95EF5101173D5FD600C0D780 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t95EF5113173D5FD600C0D780 /* Stopwatch */,\n\t\t\t\tE397F40E1CC5BA540095A3ED /* tvOS_Stopwatch */,\n\t\t\t\tE32835AE1CC6C6F200E2C2DE /* tvOS_TVML_Stopwatch */,\n\t\t\t\tE330881A1D6BB0B4008935A9 /* StopwatchNotificationService */,\n\t\t\t\tC1C53F021F7D7CA700042AA5 /* StopwatchNotificationContentExtension */,\n\t\t\t\t95EF510C173D5FD600C0D780 /* Frameworks */,\n\t\t\t\t95EF510B173D5FD600C0D780 /* Products */,\n\t\t\t\t2DA6CCD23772F28D45CA1407 /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t95EF510B173D5FD600C0D780 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t95EF510A173D5FD600C0D780 /* Stopwatch.Debug.app */,\n\t\t\t\tE397F40D1CC5BA540095A3ED /* tvOS_Stopwatch.app */,\n\t\t\t\tE32835AD1CC6C6F200E2C2DE /* tvOS_TVML_Stopwatch.app */,\n\t\t\t\tE33088191D6BB0B4008935A9 /* StopwatchNotificationService.appex */,\n\t\t\t\tC1C53EFF1F7D7CA600042AA5 /* StopwatchNotificationContentExtension.appex */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t95EF510C173D5FD600C0D780 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7014253D2554AE3B00D4E695 /* libAppboyPushStory.a */,\n\t\t\t\tB253831D24CF2CEF001575CA /* AppTrackingTransparency.framework */,\n\t\t\t\tC17BCBCE1F7DCF2C00F65F39 /* AppboyPushStory.framework */,\n\t\t\t\tE325DF471E2AE5FD00B3E168 /* MapKit.framework */,\n\t\t\t\tE3688B1A1D6BB2DD0032091D /* UserNotificationsUI.framework */,\n\t\t\t\tC12172071D5A3815003B986E /* UserNotifications.framework */,\n\t\t\t\tE3ED8D401CE54C0300C23B99 /* AppboyTVOSKit.framework */,\n\t\t\t\tC16085C51B964BC600E57F30 /* libz.dylib */,\n\t\t\t\t958071A7173D727000129B89 /* QuartzCore.framework */,\n\t\t\t\t95EF514D173D6A6100C0D780 /* SystemConfiguration.framework */,\n\t\t\t\t95EF514F173D6A6800C0D780 /* AssetsLibrary.framework */,\n\t\t\t\t95EF5151173D6A6F00C0D780 /* CoreImage.framework */,\n\t\t\t\t95EF5153173D6A7700C0D780 /* CoreTelephony.framework */,\n\t\t\t\t95EF5155173D6A8000C0D780 /* Social.framework */,\n\t\t\t\t95EF5157173D6A8800C0D780 /* Twitter.framework */,\n\t\t\t\t95EF5159173D6A9000C0D780 /* Accounts.framework */,\n\t\t\t\t95EF515B173D6A9800C0D780 /* AdSupport.framework */,\n\t\t\t\t95EF515D173D6AAA00C0D780 /* StoreKit.framework */,\n\t\t\t\t95EF515F173D6AB100C0D780 /* CoreLocation.framework */,\n\t\t\t\t95EF510D173D5FD600C0D780 /* UIKit.framework */,\n\t\t\t\t95EF510F173D5FD600C0D780 /* Foundation.framework */,\n\t\t\t\t95EF5111173D5FD600C0D780 /* CoreGraphics.framework */,\n\t\t\t\t97A0CC58F9372681494D0BFE /* libPods-Stopwatch.a */,\n\t\t\t\t8A07EA9383F93EFF70E1F00B /* libPods-StopwatchNotificationContentExtension.a */,\n\t\t\t\tAA7198A927FDBA136DD1BAA0 /* libPods-tvOS_Stopwatch.a */,\n\t\t\t\tB29A6B5454ECF928424D0588 /* libPods-tvOS_TVML_Stopwatch.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t95EF5113173D5FD600C0D780 /* Stopwatch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t703BF6CF245A29D6001C1963 /* Sources */,\n\t\t\t\t703BF6D0245A29F1001C1963 /* Resources */,\n\t\t\t\t703BF6D6245A2B00001C1963 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Stopwatch;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC1C53F021F7D7CA700042AA5 /* StopwatchNotificationContentExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC17BAFC21F7DA64D006B65CE /* StopwatchNotificationContentExtension.entitlements */,\n\t\t\t\tC1C53F031F7D7CA700042AA5 /* NotificationViewController.h */,\n\t\t\t\tC1C53F041F7D7CA700042AA5 /* NotificationViewController.m */,\n\t\t\t\tC1C53F061F7D7CA700042AA5 /* MainInterface.storyboard */,\n\t\t\t\tC1C53F091F7D7CA700042AA5 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = StopwatchNotificationContentExtension;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE32835AE1CC6C6F200E2C2DE /* tvOS_TVML_Stopwatch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE32835B21CC6C6F200E2C2DE /* AppDelegate.h */,\n\t\t\t\tE32835B31CC6C6F200E2C2DE /* AppDelegate.m */,\n\t\t\t\tE32835B61CC6C6F200E2C2DE /* Assets.xcassets */,\n\t\t\t\tE32835B81CC6C6F200E2C2DE /* Info.plist */,\n\t\t\t\tE32835AF1CC6C6F200E2C2DE /* Supporting Files */,\n\t\t\t\tE340E7EA1CCED05B00042335 /* AppboyBridge.h */,\n\t\t\t\tE340E7EB1CCED05B00042335 /* AppboyBridge.m */,\n\t\t\t);\n\t\t\tpath = tvOS_TVML_Stopwatch;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE32835AF1CC6C6F200E2C2DE /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE32835B01CC6C6F200E2C2DE /* main.m */,\n\t\t\t\tE32835B51CC6C6F200E2C2DE /* application.js */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE330881A1D6BB0B4008935A9 /* StopwatchNotificationService */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE330881B1D6BB0B4008935A9 /* NotificationService.h */,\n\t\t\t\tE330881C1D6BB0B4008935A9 /* NotificationService.m */,\n\t\t\t\tE330881E1D6BB0B4008935A9 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = StopwatchNotificationService;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE397F40E1CC5BA540095A3ED /* tvOS_Stopwatch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE397F4121CC5BA540095A3ED /* AppDelegate.h */,\n\t\t\t\tE397F4131CC5BA540095A3ED /* AppDelegate.m */,\n\t\t\t\tE397F4151CC5BA540095A3ED /* ViewController.h */,\n\t\t\t\tE397F4161CC5BA540095A3ED /* ViewController.m */,\n\t\t\t\tE397F4181CC5BA540095A3ED /* Main.storyboard */,\n\t\t\t\tE397F41B1CC5BA550095A3ED /* Assets.xcassets */,\n\t\t\t\tE397F41D1CC5BA550095A3ED /* Info.plist */,\n\t\t\t\tE397F40F1CC5BA540095A3ED /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = tvOS_Stopwatch;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE397F40F1CC5BA540095A3ED /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE397F4101CC5BA540095A3ED /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t95EF5109173D5FD600C0D780 /* Stopwatch */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 95EF5130173D5FD600C0D780 /* Build configuration list for PBXNativeTarget \"Stopwatch\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t818B85034C3EC518E534B358 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t95EF5106173D5FD600C0D780 /* Sources */,\n\t\t\t\t95EF5107173D5FD600C0D780 /* Frameworks */,\n\t\t\t\t95EF5108173D5FD600C0D780 /* Resources */,\n\t\t\t\t4E321B9519C12246000EE12B /* Embed Frameworks */,\n\t\t\t\tE33088141D6BB09D008935A9 /* Embed App Extensions */,\n\t\t\t\tA10B5E478A4A9F80DF968923 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE33088201D6BB0B4008935A9 /* PBXTargetDependency */,\n\t\t\t\t70AAB53F2548663C00F64D7C /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Stopwatch;\n\t\t\tproductName = Stopwatch;\n\t\t\tproductReference = 95EF510A173D5FD600C0D780 /* Stopwatch.Debug.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tC1C53EFE1F7D7CA600042AA5 /* StopwatchNotificationContentExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C1C53F101F7D7CA700042AA5 /* Build configuration list for PBXNativeTarget \"StopwatchNotificationContentExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t70B082B5E2A3981BE36C4929 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tC1C53EFB1F7D7CA600042AA5 /* Sources */,\n\t\t\t\tC1C53EFC1F7D7CA600042AA5 /* Frameworks */,\n\t\t\t\tC1C53EFD1F7D7CA600042AA5 /* Resources */,\n\t\t\t\t5A55984A618F87C3B8D78B07 /* [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 = StopwatchNotificationContentExtension;\n\t\t\tproductName = StopwatchNotificationContentExtension;\n\t\t\tproductReference = C1C53EFF1F7D7CA600042AA5 /* StopwatchNotificationContentExtension.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\tE32835AC1CC6C6F200E2C2DE /* tvOS_TVML_Stopwatch */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E32835BC1CC6C6F200E2C2DE /* Build configuration list for PBXNativeTarget \"tvOS_TVML_Stopwatch\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t36927375C931CB3ACA277ECD /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tE32835A91CC6C6F200E2C2DE /* Sources */,\n\t\t\t\tE32835AA1CC6C6F200E2C2DE /* Frameworks */,\n\t\t\t\tE32835AB1CC6C6F200E2C2DE /* Resources */,\n\t\t\t\tBF1984FD03485A456FABED85 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tvOS_TVML_Stopwatch;\n\t\t\tproductName = tvOS_TVML_Stopwatch;\n\t\t\tproductReference = E32835AD1CC6C6F200E2C2DE /* tvOS_TVML_Stopwatch.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tE33088181D6BB0B4008935A9 /* StopwatchNotificationService */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E33088221D6BB0B4008935A9 /* Build configuration list for PBXNativeTarget \"StopwatchNotificationService\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE33088151D6BB0B4008935A9 /* Sources */,\n\t\t\t\tE33088161D6BB0B4008935A9 /* Frameworks */,\n\t\t\t\tE33088171D6BB0B4008935A9 /* 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 = StopwatchNotificationService;\n\t\t\tproductName = StopwatchNotificationService;\n\t\t\tproductReference = E33088191D6BB0B4008935A9 /* StopwatchNotificationService.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\tE397F40C1CC5BA540095A3ED /* tvOS_Stopwatch */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E397F4211CC5BA550095A3ED /* Build configuration list for PBXNativeTarget \"tvOS_Stopwatch\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t211BB88E24DB5A4F886F4443 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tE397F4091CC5BA540095A3ED /* Sources */,\n\t\t\t\tE397F40A1CC5BA540095A3ED /* Frameworks */,\n\t\t\t\tE397F40B1CC5BA540095A3ED /* Resources */,\n\t\t\t\t5ED538A56B68D4674FED7AF1 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tvOS_Stopwatch;\n\t\t\tproductName = tvOS_Stopwatch;\n\t\t\tproductReference = E397F40D1CC5BA540095A3ED /* tvOS_Stopwatch.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t95EF5102173D5FD600C0D780 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1240;\n\t\t\t\tORGANIZATIONNAME = Appboy;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t95EF5109173D5FD600C0D780 = {\n\t\t\t\t\t\tDevelopmentTeam = 5GLZKGNWQ3;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.BackgroundModes = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.GameCenter = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.SafariKeychain = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\tC1C53EFE1F7D7CA600042AA5 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.0;\n\t\t\t\t\t\tDevelopmentTeam = 5GLZKGNWQ3;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.SafariKeychain = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\tE32835AC1CC6C6F200E2C2DE = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tDevelopmentTeam = 5GLZKGNWQ3;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\tE33088181D6BB0B4008935A9 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.0;\n\t\t\t\t\t\tDevelopmentTeam = 5GLZKGNWQ3;\n\t\t\t\t\t\tDevelopmentTeamName = \"Appboy Inc.\";\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\tE397F40C1CC5BA540095A3ED = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tDevelopmentTeam = 5GLZKGNWQ3;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 95EF5105173D5FD600C0D780 /* Build configuration list for PBXProject \"Stopwatch\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\t\"zh-Hans\",\n\t\t\t\tBase,\n\t\t\t\the,\n\t\t\t\t\"zh-Hant\",\n\t\t\t);\n\t\t\tmainGroup = 95EF5101173D5FD600C0D780;\n\t\t\tproductRefGroup = 95EF510B173D5FD600C0D780 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t95EF5109173D5FD600C0D780 /* Stopwatch */,\n\t\t\t\tE397F40C1CC5BA540095A3ED /* tvOS_Stopwatch */,\n\t\t\t\tE32835AC1CC6C6F200E2C2DE /* tvOS_TVML_Stopwatch */,\n\t\t\t\tE33088181D6BB0B4008935A9 /* StopwatchNotificationService */,\n\t\t\t\tC1C53EFE1F7D7CA600042AA5 /* StopwatchNotificationContentExtension */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t95EF5108173D5FD600C0D780 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t703BF6D5245A2AD9001C1963 /* InAppMessageWithJS.html in Resources */,\n\t\t\t\t4E6D661619DCC18F009983AD /* Assets.xcassets in Resources */,\n\t\t\t\t7FEEFA4A23BFFCAA00255541 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tB2FF90FF25C9AE9E006DC3BB /* ABKContentCardsCustomStoryboard.storyboard in Resources */,\n\t\t\t\t703BF6D4245A2AD9001C1963 /* InAppMessageWithoutAssetZip.html in Resources */,\n\t\t\t\t4E3E94E318BD52C60008C815 /* Localizable.strings in Resources */,\n\t\t\t\tB2FF910025C9AE9E006DC3BB /* ABKContentCardsStoryboard.storyboard in Resources */,\n\t\t\t\t95EF5127173D5FD600C0D780 /* MainStoryboard.storyboard in Resources */,\n\t\t\t\tB27A30AF263094D900149654 /* ABKNewsFeedCardStoryboard.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC1C53EFD1F7D7CA600042AA5 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC1C53F081F7D7CA700042AA5 /* MainInterface.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE32835AB1CC6C6F200E2C2DE /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE32835BD1CC6CEAF00E2C2DE /* application.js in Resources */,\n\t\t\t\tE32835B71CC6C6F200E2C2DE /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE33088171D6BB0B4008935A9 /* 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\tE397F40B1CC5BA540095A3ED /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE397F41C1CC5BA550095A3ED /* Assets.xcassets in Resources */,\n\t\t\t\tE397F41A1CC5BA550095A3ED /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t211BB88E24DB5A4F886F4443 /* [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\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-tvOS_Stopwatch-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t36927375C931CB3ACA277ECD /* [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\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-tvOS_TVML_Stopwatch-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t5A55984A618F87C3B8D78B07 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-StopwatchNotificationContentExtension/Pods-StopwatchNotificationContentExtension-resources.sh\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-Push-Story/AppboyPushStory.bundle\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyPushStory.bundle\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-StopwatchNotificationContentExtension/Pods-StopwatchNotificationContentExtension-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t5ED538A56B68D4674FED7AF1 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-tvOS_Stopwatch/Pods-tvOS_Stopwatch-frameworks.sh\",\n\t\t\t\t\"${PODS_ROOT}/../../../Appboy-tvOS-SDK/Appboy-tvOS-SDK/AppboyTVOSKit.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppboyTVOSKit.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-tvOS_Stopwatch/Pods-tvOS_Stopwatch-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t70B082B5E2A3981BE36C4929 /* [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\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-StopwatchNotificationContentExtension-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t818B85034C3EC518E534B358 /* [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\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Stopwatch-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tA10B5E478A4A9F80DF968923 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-Stopwatch/Pods-Stopwatch-resources.sh\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.ContentCards.bundle\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/Appboy.bundle\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.InAppMessage.bundle\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.NewsFeed.bundle\",\n\t\t\t\t\"${PODS_ROOT}/KKColorListPicker/src/KKColorListPicker/Cells/KKColorCell.xib\",\n\t\t\t\t\"${PODS_ROOT}/KKColorListPicker/src/KKColorListPicker/Cells/KKColorsHeaderView.xib\",\n\t\t\t\t\"${PODS_ROOT}/KKColorListPicker/src/KKColorListPicker/Schemes/colors_crayola.plist\",\n\t\t\t\t\"${PODS_ROOT}/KKColorListPicker/src/KKColorListPicker/Schemes/colors_pantone.plist\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.ContentCards.bundle\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Appboy.bundle\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.InAppMessage.bundle\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.NewsFeed.bundle\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/KKColorCell.nib\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/KKColorsHeaderView.nib\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/colors_crayola.plist\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/colors_pantone.plist\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-Stopwatch/Pods-Stopwatch-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tBF1984FD03485A456FABED85 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-tvOS_TVML_Stopwatch/Pods-tvOS_TVML_Stopwatch-frameworks.sh\",\n\t\t\t\t\"${PODS_ROOT}/../../../Appboy-tvOS-SDK/Appboy-tvOS-SDK/AppboyTVOSKit.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppboyTVOSKit.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-tvOS_TVML_Stopwatch/Pods-tvOS_TVML_Stopwatch-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t95EF5106173D5FD600C0D780 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t95EF511A173D5FD600C0D780 /* main.m in Sources */,\n\t\t\t\tD4139BEC1CBDA4F200CA3307 /* FeedUIViewController.m in Sources */,\n\t\t\t\tD4C6940D1CA5E2E2006B69B1 /* UserAttributesArrayViewController.m in Sources */,\n\t\t\t\tF541E1CC26CC153D008FCBD9 /* UserSubscriptionGroup.m in Sources */,\n\t\t\t\tD41D8F741CB70A4600D622EF /* ContainerViewController.m in Sources */,\n\t\t\t\tADDAFB912107C2080061C96E /* LocationAnnotation.m in Sources */,\n\t\t\t\t4EA7AA8E185626EC00D2B651 /* MiscViewController.m in Sources */,\n\t\t\t\tADC332E42077A43E00D688E3 /* UIViewController+Keyboard.m in Sources */,\n\t\t\t\tE3C754A41E70DE7D004E1CCE /* AliasViewController.m in Sources */,\n\t\t\t\tE325DF461E29A93300B3E168 /* GeofencesViewController.m in Sources */,\n\t\t\t\tB24B1724248151AB00127211 /* CustomThemesDataSource.m in Sources */,\n\t\t\t\t4EB014FD1A79D31D00E11E41 /* InAppMessageTestViewController.m in Sources */,\n\t\t\t\t1379A02923731F1300578296 /* AboutViewController.m in Sources */,\n\t\t\t\tFC6D804325D31AF90069B800 /* SdkAuthDelegate.m in Sources */,\n\t\t\t\t4EABC19A1A606D00007259BD /* InAppMessageUIViewController.m in Sources */,\n\t\t\t\tAD884BF52081289900DA304A /* UserCustomAttribute.m in Sources */,\n\t\t\t\tF541E1D026CC15FD008FCBD9 /* UserSubscriptionGroupCell.m in Sources */,\n\t\t\t\t4EABC19D1A621B7F007259BD /* InAppMessageUICells.m in Sources */,\n\t\t\t\t7F825DEA205C810100150F07 /* DataViewController.m in Sources */,\n\t\t\t\tD411F3121CD0355200100702 /* CustomTabBarController.m in Sources */,\n\t\t\t\t4E94D7711743EE8900604EA0 /* AppDelegate.m in Sources */,\n\t\t\t\tE3A8A3641E5E6C07002E8821 /* IDFADelegate.m in Sources */,\n\t\t\t\t7FBB842F22D92398001BF587 /* ColorUtils.m in Sources */,\n\t\t\t\t953574AB1743F862003A64B3 /* UserAttributesViewController.m in Sources */,\n\t\t\t\tAD884BF820813F1B00DA304A /* UserCustomAttributeCell.m in Sources */,\n\t\t\t\tADC332E82077AB4200D688E3 /* ScrollContentView.m in Sources */,\n\t\t\t\tADC332E12076A56F00D688E3 /* InAppMessageHTMLComposerViewController.m in Sources */,\n\t\t\t\tADDAFB8E2107BAA30061C96E /* LocationCustomAttributeViewController.m in Sources */,\n\t\t\t\t4EA3EE241745B9A2000E403C /* UserCells.m in Sources */,\n\t\t\t\t7FBB842C22D91B65001BF587 /* StopwatchSegmentedControl.m in Sources */,\n\t\t\t\tD400EBF31CC86A6100550AD8 /* EventsViewController.m in Sources */,\n\t\t\t\tD5405F0D22162FD600E2958C /* AlertControllerUtils.m in Sources */,\n\t\t\t\tAD26107C20FE3E5000023BCD /* StopwatchButton.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC1C53EFB1F7D7CA600042AA5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC1C53F051F7D7CA700042AA5 /* NotificationViewController.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE32835A91CC6C6F200E2C2DE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE32835B41CC6C6F200E2C2DE /* AppDelegate.m in Sources */,\n\t\t\t\tE32835B11CC6C6F200E2C2DE /* main.m in Sources */,\n\t\t\t\tE340E7EC1CCED05B00042335 /* AppboyBridge.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE33088151D6BB0B4008935A9 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE330881D1D6BB0B4008935A9 /* NotificationService.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE397F4091CC5BA540095A3ED /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE397F4171CC5BA540095A3ED /* ViewController.m in Sources */,\n\t\t\t\tE397F4141CC5BA540095A3ED /* AppDelegate.m in Sources */,\n\t\t\t\tE397F4111CC5BA540095A3ED /* main.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\t70AAB53F2548663C00F64D7C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C1C53EFE1F7D7CA600042AA5 /* StopwatchNotificationContentExtension */;\n\t\t\ttargetProxy = 70AAB53E2548663C00F64D7C /* PBXContainerItemProxy */;\n\t\t};\n\t\tE33088201D6BB0B4008935A9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = E33088181D6BB0B4008935A9 /* StopwatchNotificationService */;\n\t\t\ttargetProxy = E330881F1D6BB0B4008935A9 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t4E3E94E118BD52C60008C815 /* Localizable.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t4E3E94E218BD52C60008C815 /* en */,\n\t\t\t\t4E3E94E418BD52CE0008C815 /* zh-Hans */,\n\t\t\t\tC03E52C51D46574A0065ABD6 /* he */,\n\t\t\t\tC0A45ABC1E66155C0028C5DF /* zh-Hant */,\n\t\t\t);\n\t\t\tname = Localizable.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t95EF5125173D5FD600C0D780 /* MainStoryboard.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t95EF5126173D5FD600C0D780 /* en */,\n\t\t\t);\n\t\t\tname = MainStoryboard.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC1C53F061F7D7CA700042AA5 /* MainInterface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tC1C53F071F7D7CA700042AA5 /* Base */,\n\t\t\t);\n\t\t\tname = MainInterface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE397F4181CC5BA540095A3ED /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tE397F4191CC5BA550095A3ED /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t95EF512E173D5FD600C0D780 /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Distribution: Braze, Inc. (5GLZKGNWQ3)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 4.7.0;\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\t\"PUSH_DEV=1\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_TREAT_WARNINGS_AS_ERRORS = YES;\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 = 9.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALID_ARCHS = \"$(VALID_ARCHS)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t95EF512F173D5FD600C0D780 /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Distribution: Braze, Inc. (5GLZKGNWQ3)\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 4.7.0;\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_PREPROCESSOR_DEFINITIONS = \"\";\n\t\t\t\tGCC_TREAT_WARNINGS_AS_ERRORS = YES;\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 = 9.0;\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVALID_ARCHS = \"$(VALID_ARCHS)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t95EF5131173D5FD600C0D780 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9311555CE650329171621395 /* Pods-Stopwatch.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"$(SRCROOT)/Stopwatch/Supporting Files/Stopwatch.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"$(SRCROOT)/Stopwatch/Supporting Files/Stopwatch-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/Stopwatch/Supporting Files/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.stopwatch;\n\t\t\t\tPRODUCT_NAME = Stopwatch.Debug;\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t95EF5132173D5FD600C0D780 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7A0037A504F2E807F4865219 /* Pods-Stopwatch.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"$(SRCROOT)/Stopwatch/Supporting Files/Stopwatch.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"$(SRCROOT)/Stopwatch/Supporting Files/Stopwatch-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/Stopwatch/Supporting Files/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.stopwatch;\n\t\t\t\tPRODUCT_NAME = Stopwatch;\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC1C53F0D1F7D7CA700042AA5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 2091B415532A3DD4F91082D1 /* Pods-StopwatchNotificationContentExtension.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = StopwatchNotificationContentExtension/StopwatchNotificationContentExtension.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\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\tINFOPLIST_FILE = StopwatchNotificationContentExtension/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.stopwatch.StopwatchNotificationContentExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC1C53F0F1F7D7CA700042AA5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 565720DCB77F36634910F317 /* Pods-StopwatchNotificationContentExtension.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = StopwatchNotificationContentExtension/StopwatchNotificationContentExtension.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\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 = gnu11;\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\tINFOPLIST_FILE = StopwatchNotificationContentExtension/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.stopwatch.StopwatchNotificationContentExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE32835B91CC6C6F200E2C2DE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 589612CCA0D76EF6AEF29E34 /* Pods-tvOS_TVML_Stopwatch.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"App Icon & Top Shelf Image\";\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\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_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\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\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/SDWebImage\\\"\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = tvOS_TVML_Stopwatch/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.appboy.tvOS-TVML-Stopwatch\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.2;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE32835BB1CC6C6F200E2C2DE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 554E827EA66F0EED2E46DF49 /* Pods-tvOS_TVML_Stopwatch.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"App Icon & Top Shelf Image\";\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\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_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\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\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/SDWebImage\\\"\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = tvOS_TVML_Stopwatch/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.appboy.tvOS-TVML-Stopwatch\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 9.2;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE33088231D6BB0B4008935A9 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\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_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = 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\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\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\tINFOPLIST_FILE = StopwatchNotificationService/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.stopwatch.StopwatchNotificationService;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE33088251D6BB0B4008935A9 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\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_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = 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\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\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\tINFOPLIST_FILE = StopwatchNotificationService/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.stopwatch.StopwatchNotificationService;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE397F41E1CC5BA550095A3ED /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9D70411FFED99E4EE8846042 /* Pods-tvOS_Stopwatch.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"App Icon & Top Shelf Image\";\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\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_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\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\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/SDWebImage\\\"\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = tvOS_Stopwatch/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.appboy.tvOS-Stopwatch\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE397F4201CC5BA550095A3ED /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 5D73428FE25A52C20DE8FB52 /* Pods-tvOS_Stopwatch.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"App Icon & Top Shelf Image\";\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\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_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\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\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/SDWebImage\\\"\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = tvOS_Stopwatch/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.appboy.tvOS-Stopwatch\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t95EF5105173D5FD600C0D780 /* Build configuration list for PBXProject \"Stopwatch\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t95EF512E173D5FD600C0D780 /* Debug */,\n\t\t\t\t95EF512F173D5FD600C0D780 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\t95EF5130173D5FD600C0D780 /* Build configuration list for PBXNativeTarget \"Stopwatch\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t95EF5131173D5FD600C0D780 /* Debug */,\n\t\t\t\t95EF5132173D5FD600C0D780 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tC1C53F101F7D7CA700042AA5 /* Build configuration list for PBXNativeTarget \"StopwatchNotificationContentExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC1C53F0D1F7D7CA700042AA5 /* Debug */,\n\t\t\t\tC1C53F0F1F7D7CA700042AA5 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tE32835BC1CC6C6F200E2C2DE /* Build configuration list for PBXNativeTarget \"tvOS_TVML_Stopwatch\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE32835B91CC6C6F200E2C2DE /* Debug */,\n\t\t\t\tE32835BB1CC6C6F200E2C2DE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tE33088221D6BB0B4008935A9 /* Build configuration list for PBXNativeTarget \"StopwatchNotificationService\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE33088231D6BB0B4008935A9 /* Debug */,\n\t\t\t\tE33088251D6BB0B4008935A9 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n\t\tE397F4211CC5BA550095A3ED /* Build configuration list for PBXNativeTarget \"tvOS_Stopwatch\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE397F41E1CC5BA550095A3ED /* Debug */,\n\t\t\t\tE397F4201CC5BA550095A3ED /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Debug;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 95EF5102173D5FD600C0D780 /* Project object */;\n}\n"
  },
  {
    "path": "Example/Stopwatch.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/Stopwatch.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Stopwatch.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/StopwatchNotificationContentExtension/Base.lproj/MainInterface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"16096\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"M4Y-Lb-cyx\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"16086\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Notification View Controller-->\n        <scene sceneID=\"cwh-vc-ff4\">\n            <objects>\n                <viewController id=\"M4Y-Lb-cyx\" userLabel=\"Notification View Controller\" customClass=\"NotificationViewController\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" simulatedAppContext=\"notificationCenter\" id=\"S3S-Oj-5AN\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"37\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hWD-Pr-bVE\" customClass=\"ABKStoriesView\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"37\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.45882353186607361\" green=\"0.74901962280273438\" blue=\"0.66666668653488159\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"2BE-c3-nQJ\" firstAttribute=\"trailing\" secondItem=\"hWD-Pr-bVE\" secondAttribute=\"trailing\" id=\"ak1-0q-DBe\"/>\n                            <constraint firstItem=\"hWD-Pr-bVE\" firstAttribute=\"leading\" secondItem=\"2BE-c3-nQJ\" secondAttribute=\"leading\" id=\"bGw-wp-4vj\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"hWD-Pr-bVE\" secondAttribute=\"bottom\" id=\"kUM-uE-kTh\"/>\n                            <constraint firstItem=\"hWD-Pr-bVE\" firstAttribute=\"top\" secondItem=\"S3S-Oj-5AN\" secondAttribute=\"top\" id=\"pwz-9v-vuZ\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"2BE-c3-nQJ\"/>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n                    <size key=\"freeformSize\" width=\"320\" height=\"37\"/>\n                    <connections>\n                        <outlet property=\"storiesView\" destination=\"hWD-Pr-bVE\" id=\"tGj-ur-jdm\"/>\n                        <outlet property=\"view\" destination=\"S3S-Oj-5AN\" id=\"Pgf-cU-uw4\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"vXp-U4-Rya\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example/StopwatchNotificationContentExtension/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>CFBundleShortVersionString</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>StopwatchNotificationContentExtension</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>XPC!</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionAttributes</key>\n\t\t<dict>\n\t\t\t<key>UNNotificationExtensionCategory</key>\n\t\t\t<string>ab_cat_push_story_v2</string>\n\t\t\t<key>UNNotificationExtensionDefaultContentHidden</key>\n\t\t\t<true/>\n\t\t\t<key>UNNotificationExtensionInitialContentSizeRatio</key>\n\t\t\t<real>0.65</real>\n\t\t</dict>\n\t\t<key>NSExtensionMainStoryboard</key>\n\t\t<string>MainInterface</string>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.usernotifications.content-extension</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/StopwatchNotificationContentExtension/NotificationViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <AppboyPushStory/AppboyPushStory.h>\n#import <UserNotificationsUI/UserNotificationsUI.h>\n\n@interface NotificationViewController : UIViewController <UNNotificationContentExtension>\n\n@property (nonatomic) IBOutlet ABKStoriesView *storiesView;\n@property (nonatomic) ABKStoriesViewDataSource *dataSource;\n\n@end\n"
  },
  {
    "path": "Example/StopwatchNotificationContentExtension/NotificationViewController.m",
    "content": "#import \"NotificationViewController.h\"\n#import <UserNotifications/UserNotifications.h>\n\n@implementation NotificationViewController\n\n- (void)didReceiveNotification:(UNNotification *)notification {\n  self.dataSource = [[ABKStoriesViewDataSource alloc] initWithNotification:notification\n                                                               storiesView:self.storiesView\n                                                                  appGroup:@\"group.com.appboy.stopwatch\"];\n}\n\n- (void)didReceiveNotificationResponse:(UNNotificationResponse *)response\n                     completionHandler:(void (^)(UNNotificationContentExtensionResponseOption option))completion {\n  UNNotificationContentExtensionResponseOption option = [self.dataSource didReceiveNotificationResponse:response];\n  completion(option);\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n  [self.dataSource viewWillDisappear];\n  [super viewWillDisappear:animated];\n}\n\n@end\n"
  },
  {
    "path": "Example/StopwatchNotificationContentExtension/StopwatchNotificationContentExtension.entitlements",
    "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>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.com.appboy.stopwatch</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/StopwatchNotificationService/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>CFBundleShortVersionString</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>StopwatchNotificationService</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>XPC!</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.usernotifications.service</string>\n\t\t<key>NSExtensionPrincipalClass</key>\n\t\t<string>NotificationService</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/StopwatchNotificationService/NotificationService.h",
    "content": "#import <UserNotifications/UserNotifications.h>\n\n@interface NotificationService : UNNotificationServiceExtension\n\n@end\n"
  },
  {
    "path": "Example/StopwatchNotificationService/NotificationService.m",
    "content": "#import \"NotificationService.h\"\n#import <UIKit/UIKit.h>\n\nstatic NSString *const AppboyAPNSDictionaryKey = @\"ab\";\nstatic NSString *const AppboyAPNSDictionaryAttachmentKey = @\"att\";\nstatic NSString *const AppboyAPNSDictionaryAttachmentURLKey = @\"url\";\nstatic NSString *const AppboyAPNSDictionaryAttachmentTypeKey = @\"type\";\n\n@interface NotificationService ()\n\n@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);\n@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;\n@property (nonatomic, strong) UNMutableNotificationContent *originalContent;\n@property BOOL abortOnAttachmentFailure;\n@property NSURLSession *session;\n\n@end\n\n@implementation NotificationService\n\n- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {\n  self.contentHandler = contentHandler;\n  self.bestAttemptContent = [request.content mutableCopy];\n  self.originalContent = [request.content mutableCopy];\n  self.abortOnAttachmentFailure = NO;\n  \n  [self.class logMessage:@\"Push with mutable content received\"];\n  \n  NSMutableArray *attachments = [NSMutableArray arrayWithCapacity:1];\n  NSDictionary *userInfo = request.content.userInfo;\n  \n  // Check that the push is from Braze\n  if (userInfo == nil || userInfo[AppboyAPNSDictionaryKey] == nil) {\n    [self.class logMessage:@\"Push not from Braze.\"];\n    // Note: if you have other push senders and want to handler here, fork your code here to handle\n    [self displayOriginalContent];\n    return;\n  }\n  \n  NSDictionary *appboyPayload = userInfo[AppboyAPNSDictionaryKey];\n  \n  // Check that the push has an attachment\n  if (appboyPayload[AppboyAPNSDictionaryAttachmentKey] == nil) {\n    [self.class logMessage:@\"Push has no attachment.\"];\n    [self displayOriginalContent];\n    return;\n  }\n  \n  NSDictionary *attachmentPayload = appboyPayload[AppboyAPNSDictionaryAttachmentKey];\n  \n  // Check that the attachment has a URL\n  if (attachmentPayload[AppboyAPNSDictionaryAttachmentURLKey] == nil) {\n    NSLog(@\"Push attachment has no url.\");\n    [self displayOriginalContent];\n    return;\n  }\n  \n  NSString *attachmentURLString = attachmentPayload[AppboyAPNSDictionaryAttachmentURLKey];\n  [self.class logMessage:@\"Attachment URL string is %@\", attachmentURLString];\n  \n  // Get the type\n  if (attachmentPayload[AppboyAPNSDictionaryAttachmentTypeKey] == nil) {\n    NSLog(@\"Push attachment has no type.\");\n    [self displayOriginalContent];\n    return;\n  }\n  \n  NSString *attachmentType = attachmentPayload[AppboyAPNSDictionaryAttachmentTypeKey];\n  [self.class logMessage:@\"Attachment type is %@\", attachmentType];\n  NSString *fileSuffix = [@\".\" stringByAppendingString:attachmentType];\n  \n  // Download, store, and attach the content to the notification\n  if (attachmentURLString) {\n    NSURL *attachmentURL = [NSURL URLWithString:attachmentURLString];\n    self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];\n    [[self.session downloadTaskWithURL:attachmentURL\n                completionHandler:^(NSURL *temporaryFileLocation, NSURLResponse *response, NSError *error) {\n                  if (error != nil) {\n                    [self.class logMessage:@\"Error fetching attachment, displaying content unaltered: %@\", [error localizedDescription]];\n                    [self displayOriginalContent];\n                    return;\n                  } else {\n                    [self.class logMessage:@\"Data fetched from server, processing with temporary file url %@\", [temporaryFileLocation absoluteString]];\n\n                    NSFileManager *fileManager = [NSFileManager defaultManager];\n                    NSURL *typedAttachmentURL = [NSURL fileURLWithPath:[temporaryFileLocation.path stringByAppendingString:fileSuffix]];\n                    [fileManager moveItemAtURL:temporaryFileLocation toURL:typedAttachmentURL error:&error];\n                    \n                    NSError *attachError = nil;\n                    UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@\"\" URL:typedAttachmentURL options:nil error:&attachError];\n                    if (attachment == nil) {\n                      [self.class logMessage:@\"Attachment returned error: %@\", [attachError localizedDescription]];\n                      [self displayOriginalContent];\n                      return;\n                    }\n\n                    attachments[0] = attachment;\n                    self.bestAttemptContent.attachments = attachments;\n                    self.contentHandler(self.bestAttemptContent);\n                    [self.session finishTasksAndInvalidate];\n                  }\n                }] resume];\n  }\n}\n\n+ (void)logMessage:(NSString *)message, ... {\n  va_list args;\n  va_start(args, message);\n  NSLog(@\"%@\", [[NSString alloc] initWithFormat:[@\"[APPBOY] \" stringByAppendingString:message] arguments:args]);\n  va_end(args);\n}\n\n- (void)displayOriginalContent {\n  [self.class logMessage:@\"Displaying original content\"];\n  self.contentHandler(self.originalContent);\n}\n\n- (void)serviceExtensionTimeWillExpire {\n  [self.session invalidateAndCancel];\n  [self.class logMessage:@\"Service extension called, displaying original content\"];\n  // Called just before the extension will be terminated by the system.\n  // Use this as an opportunity to deliver your \"best attempt\" at modified content, otherwise the original push payload will be used.\n  [self displayOriginalContent];\n}\n\n@end\n"
  },
  {
    "path": "Example/tvOS_Stopwatch/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n#import <AppboyTVOSKit/AppboyKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "Example/tvOS_Stopwatch/AppDelegate.m",
    "content": "#import \"AppDelegate.h\"\n#import <AppboyTVOSKit/AppboyKit.h>\n\nstatic NSString *const AppboyApiKey = @\"appboy-sample-ios\";\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  [Appboy startWithApiKey:AppboyApiKey\n            inApplication:application\n        withLaunchOptions:launchOptions\n        withAppboyOptions:@{ABKRequestProcessingPolicyOptionKey: @(ABKAutomaticRequestProcessing),\n                            ABKMinimumTriggerTimeIntervalKey: @(5)}];\n\n  return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n  // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n  // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n  // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n  // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n  // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n  // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n  // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n@end\n"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-App-Store-1280x768.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json",
    "content": "{\n  \"layers\" : [\n    {\n      \"filename\" : \"Front.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Middle.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Back.imagestacklayer\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-App-Store-1280x768.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-App-Store-1280x768.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-Small-400x240.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-Small-400x240-P3@2x.jpg\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json",
    "content": "{\n  \"layers\" : [\n    {\n      \"filename\" : \"Front.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Middle.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Back.imagestacklayer\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-Small-400x240.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-Small-400x240-P3@2x.jpg\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-Small-400x240.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Icon-App-Small-400x240-P3@2x.jpg\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json",
    "content": "{\n  \"assets\" : [\n    {\n      \"size\" : \"1280x768\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"App Icon - Large.imagestack\",\n      \"role\" : \"primary-app-icon\"\n    },\n    {\n      \"size\" : \"400x240\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"App Icon - Small.imagestack\",\n      \"role\" : \"primary-app-icon\"\n    },\n    {\n      \"size\" : \"2320x720\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Top Shelf Image Wide.imageset\",\n      \"role\" : \"top-shelf-image-wide\"\n    },\n    {\n      \"size\" : \"1920x720\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Top Shelf Image.imageset\",\n      \"role\" : \"top-shelf-image\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"TopShelf-Wide-2320x720.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"TopShelf-Wide-2320x720-P3@2x.jpg\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"TopShelf-Wide-1920x720.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"filename\" : \"TopShelf-Wide-3840x1440.jpg\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Assets.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"tv\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"11.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"tv\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"9.0\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_Stopwatch/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder.AppleTV.Storyboard\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"AppleTV\" propertyAccessControl=\"none\" useAutolayout=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"appleTV\" orientation=\"landscape\">\n        <adaptation id=\"light\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"tvOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14460.20\"/>\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=\"1920\" height=\"1080\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cks-TN-4vx\">\n                                <rect key=\"frame\" x=\"693\" y=\"253\" width=\"303\" height=\"86\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"40\" minY=\"20\" maxX=\"40\" maxY=\"20\"/>\n                                <state key=\"normal\" title=\"Change User\"/>\n                                <connections>\n                                    <action selector=\"changeUserClick:\" destination=\"BYZ-38-t0r\" eventType=\"primaryActionTriggered\" id=\"pVo-9o-xwC\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"o2z-GS-v1c\">\n                                <rect key=\"frame\" x=\"799\" y=\"473\" width=\"323\" height=\"86\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"40\" minY=\"20\" maxX=\"40\" maxY=\"20\"/>\n                                <state key=\"normal\" title=\"Log Attributes\"/>\n                                <connections>\n                                    <action selector=\"attributesClick:\" destination=\"BYZ-38-t0r\" eventType=\"primaryActionTriggered\" id=\"9fI-Je-jPL\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NyT-wE-jg3\">\n                                <rect key=\"frame\" x=\"693\" y=\"363\" width=\"535\" height=\"86\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"40\" minY=\"20\" maxX=\"40\" maxY=\"20\"/>\n                                <state key=\"normal\" title=\"Log Purchases And Events\"/>\n                                <connections>\n                                    <action selector=\"eventAndPurchasesClick:\" destination=\"BYZ-38-t0r\" eventType=\"primaryActionTriggered\" id=\"WP3-eS-hVS\"/>\n                                </connections>\n                            </button>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yTU-bU-SZd\">\n                                <rect key=\"frame\" x=\"1004\" y=\"273\" width=\"224\" height=\"46\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" style=\"UICTFontTextStyleHeadline\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Yzc-rj-KNK\">\n                                <rect key=\"frame\" x=\"735\" y=\"705\" width=\"451\" height=\"86\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <inset key=\"contentEdgeInsets\" minX=\"40\" minY=\"20\" maxX=\"40\" maxY=\"20\"/>\n                                <state key=\"normal\" title=\"Get News Feed Cards\"/>\n                                <connections>\n                                    <action selector=\"feedCardsClick:\" destination=\"BYZ-38-t0r\" eventType=\"primaryActionTriggered\" id=\"1Lv-Lm-C7t\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"changeUserText\" destination=\"yTU-bU-SZd\" id=\"fEc-6i-3ar\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"375\" y=\"469\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example/tvOS_Stopwatch/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\n\t\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\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>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>arm64</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/tvOS_Stopwatch/ViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UITextField *changeUserText;\n\n@end\n\n"
  },
  {
    "path": "Example/tvOS_Stopwatch/ViewController.m",
    "content": "#import \"ViewController.h\"\n#import <AppboyTVOSKit/AppboyKit.h>\n\n@interface ViewController ()\n\n@end\n\n@implementation ViewController\n\n- (IBAction)changeUserClick:(id)sender {\n  [[Appboy sharedInstance] changeUser:self.changeUserText.text];\n}\n\n- (IBAction)eventAndPurchasesClick:(id)sender {\n  [[Appboy sharedInstance] logCustomEvent:@\"tvOSEvent\" withProperties:@{@\"tvOSEventPKey\" : @1}];\n  [[Appboy sharedInstance] logPurchase:@\"tvOSPurchase\" inCurrency:@\"USD\" atPrice:[[NSDecimalNumber alloc] initWithString:@\"0.99\"] withQuantity:1 andProperties:@{@\"tvOSPurchasePKey\" : @1}];\n}\n\n- (IBAction)attributesClick:(id)sender {\n  [Appboy sharedInstance].user.firstName = @\"tvFirstName\";\n  [[Appboy sharedInstance].user setCustomAttributeWithKey:@\"tvCustomAttribute\" andBOOLValue:YES];\n}\n\n- (IBAction)feedCardsClick:(id)sender {\n  NSArray *feedCards =  [[Appboy sharedInstance].feedController getNewsFeedCards];\n  for (ABKCard *card in feedCards) {\n    if ([card isKindOfClass:[ABKBannerCard class]]) {\n      NSLog(@\"Card with value: %@\", ((ABKBannerCard *)card).image);\n    } else if ([card isKindOfClass:[ABKClassicCard class]]) {\n      NSLog(@\"Card with value: %@\", ((ABKClassicCard *)card).title);\n    } else if ([card isKindOfClass:[ABKCaptionedImageCard class]]) {\n      NSLog(@\"Card with value: %@\", ((ABKCaptionedImageCard *)card).title);\n    } else if ([card isKindOfClass:[ABKTextAnnouncementCard class]]) {\n      NSLog(@\"Card with value: %@\", ((ABKTextAnnouncementCard *)card).title);\n    }\n  }\n}\n\n@end\n"
  },
  {
    "path": "Example/tvOS_Stopwatch/main.m",
    "content": "#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": "Example/tvOS_TVML_Stopwatch/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n#import <TVMLKit/TVMLKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate, TVApplicationControllerDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n@property (strong, nonatomic) TVApplicationController *appController;\n\n@end\n\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/AppDelegate.m",
    "content": "#import \"AppDelegate.h\"\n#import <AppboyTVOSKit/AppboyKit.h>\n#import \"AppboyBridge.h\"\n\nstatic NSString *tvBaseURL = @\"http://localhost:9001/\";\nstatic NSString *tvBootURL = @\"http://localhost:9001/application.js\";\nstatic NSString *const AppboyApiKey = @\"appboy-sample-ios\";\n\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n#pragma mark Javascript Execution Helper\n\n- (void)executeRemoteMethod:(NSString *)methodName completion:(void (^)(BOOL))completion {\n    [self.appController evaluateInJavaScriptContext:^(JSContext *context) {\n        JSValue *appObject = [context objectForKeyedSubscript:@\"App\"];\n        \n        if ([appObject hasProperty:methodName]) {\n            [appObject invokeMethod:methodName withArguments:@[]];\n        }\n    } completion:completion];\n}\n\n#pragma mark UIApplicationDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    // Override point for customization after application launch.\n    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n    \n    // Create the TVApplicationControllerContext for this application and set the properties that will be passed to the `App.onLaunch` function in JavaScript.\n    TVApplicationControllerContext *appControllerContext = [[TVApplicationControllerContext alloc] init];\n    \n    // The JavaScript URL is used to create the JavaScript context for your TVMLKit application. Although it is possible to separate your JavaScript into separate files, to help reduce the launch time of your application we recommend creating minified and compressed version of this resource. This will allow for the resource to be retrieved and UI presented to the user quickly.\n    NSURL *javaScriptURL = [[NSBundle mainBundle] URLForResource:@\"application\" withExtension:@\"js\"];\n    appControllerContext.javaScriptApplicationURL = javaScriptURL;\n    \n    NSMutableDictionary *appControllerOptions = [appControllerContext.launchOptions mutableCopy];\n    appControllerOptions[@\"BASEURL\"] = tvBaseURL;\n    \n    for (NSString *key in launchOptions) {\n        appControllerOptions[key] = launchOptions[key];\n    }\n    appControllerContext.launchOptions = appControllerOptions;\n    \n    self.appController = [[TVApplicationController alloc] initWithContext:appControllerContext window:self.window delegate:self];\n\n    [Appboy startWithApiKey:AppboyApiKey\n              inApplication:application\n          withLaunchOptions:launchOptions\n          withAppboyOptions:@{ABKRequestProcessingPolicyOptionKey: @(ABKAutomaticRequestProcessing),\n                              ABKMinimumTriggerTimeIntervalKey: @(5)}];\n  \n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n    [self executeRemoteMethod:@\"onWillResignActive\" completion: ^(BOOL success) {\n        // ...\n    }];\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    [self executeRemoteMethod:@\"onDidEnterBackground\" completion: ^(BOOL success) {\n        // ...\n    }];\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n    [self executeRemoteMethod:@\"onWillEnterForeground\" completion: ^(BOOL success) {\n        // ...\n    }];\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    [self executeRemoteMethod:@\"onDidBecomeActive\" completion: ^(BOOL success) {\n        // ...\n    }];\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    [self executeRemoteMethod:@\"onWillTerminate\" completion: ^(BOOL success) {\n        // ...\n    }];\n}\n\n#pragma mark TVApplicationControllerDelegate\n\n- (void)appController:(TVApplicationController *)appController didFinishLaunchingWithOptions:(nullable NSDictionary<NSString *, id> *)options {\n    NSLog(@\"appController:didFinishLaunchingWithOptions: invoked with options: %@\", options);\n}\n\n- (void)appController:(TVApplicationController *)appController didFailWithError:(NSError *)error {\n    NSLog(@\"appController:didFailWithError: invoked with error: %@\", error);\n    \n    NSString *title = @\"Error Launching Application\";\n    NSString *message = error.localizedDescription;\n    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];\n    [self.appController.navigationController presentViewController:alertController animated:YES completion: ^() {\n        // ...\n    }];\n}\n\n- (void)appController:(TVApplicationController *)appController didStopWithOptions:(nullable NSDictionary<NSString *, id> *)options {\n    NSLog(@\"appController:didStopWithOptions: invoked with options: %@\", options);\n}\n\n- (void)appController:(TVApplicationController *)appController evaluateAppJavaScriptInContext:(JSContext *)jsContext {\n  jsContext[@\"AppboyBridge\"] = [[AppboyBridge alloc] initWithJSContext:jsContext];\n}\n\n@end\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/AppboyBridge.h",
    "content": "#import <Foundation/Foundation.h>\n#import <JavaScriptCore/JavaScriptCore.h>\n\n@protocol AppboyBridgeExport <JSExport>\n- (void)changeUser:(NSString *)userId;\n- (void)logCustomEventsAndPurchases;\n- (void)logAttributes;\n@end\n\n@interface AppboyBridge : NSObject <AppboyBridgeExport>\n- (instancetype)initWithJSContext:(JSContext *)jsContext;\n- (void)changeUser:(NSString *)userId;\n- (void)logCustomEventsAndPurchases;\n- (void)logAttributes;\n@end\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/AppboyBridge.m",
    "content": "#import \"AppboyBridge.h\"\n#import <AppboyTVOSKit/AppboyKit.h>\n\n@implementation AppboyBridge\n\n- (instancetype)initWithJSContext:(JSContext *)jsContext\n{\n  return [super init];\n}\n- (void)changeUser:(NSString *)userId {\n  [[Appboy sharedInstance] changeUser:[userId stringByAppendingString:[NSString stringWithFormat:@\"%.0f\", [[NSDate date] timeIntervalSince1970]]]];\n}\n- (void)logCustomEventsAndPurchases {\n  [[Appboy sharedInstance] logCustomEvent:@\"tvOS_TVML_Event_noProps\"];\n  [[Appboy sharedInstance] logCustomEvent:@\"tvOS_TVML_Event\" withProperties:@{@\"tvOS_TVML_EventPKey\" : @123}];\n\n  [[Appboy sharedInstance] logPurchase:@\"tvOS_TVML_Purchase_noProps\" inCurrency:@\"USD\" atPrice:[[NSDecimalNumber alloc] initWithString:@\"0.11\"] withQuantity:1];\n  [[Appboy sharedInstance] logPurchase:@\"tvOS_TVML_Purchase\" inCurrency:@\"USD\" atPrice:[[NSDecimalNumber alloc] initWithString:@\"0.88\"] withQuantity:2 andProperties:@{@\"tvOS_TVML_PurchasePKey\" : @456}];\n}\n- (void)logAttributes {\n  [[Appboy sharedInstance].user setLastName:@\"West\"];\n}\n@end\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json",
    "content": "{\n  \"layers\" : [\n    {\n      \"filename\" : \"Front.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Middle.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Back.imagestacklayer\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json",
    "content": "{\n  \"layers\" : [\n    {\n      \"filename\" : \"Front.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Middle.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Back.imagestacklayer\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json",
    "content": "{\n  \"assets\" : [\n    {\n      \"size\" : \"1280x768\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"App Icon - Large.imagestack\",\n      \"role\" : \"primary-app-icon\"\n    },\n    {\n      \"size\" : \"400x240\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"App Icon - Small.imagestack\",\n      \"role\" : \"primary-app-icon\"\n    },\n    {\n      \"size\" : \"1920x720\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Top Shelf Image.imageset\",\n      \"role\" : \"top-shelf-image\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/Assets.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"tv\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"9.0\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/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\n\t\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\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>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>arm64</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/application.js",
    "content": "//# sourceURL=application.js\n\n/*\n application.js\n tvOS_TVML_Stopwatch\n \n Copyright (c) 2018 Braze. All rights reserved.\n*/\n\n/*\n * This file provides an example skeletal stub for the server-side implementation \n * of a TVML application.\n *\n * A javascript file such as this should be provided at the tvBootURL that is \n * configured in the AppDelegate of the TVML application. Note that  the various \n * javascript functions here are referenced by name in the AppDelegate. This skeletal \n * implementation shows the basic entry points that you will want to handle \n * application lifecycle events.\n */\n\n/**\n * @description The onLaunch callback is invoked after the application JavaScript \n * has been parsed into a JavaScript context. The handler is passed an object \n * that contains options passed in for launch. These options are defined in the\n * swift or objective-c client code. Options can be used to communicate to\n * your JavaScript code that data and as well as state information, like if the \n * the app is being launched in the background.\n *\n * The location attribute is automatically added to the object and represents \n * the URL that was used to retrieve the application JavaScript.\n */\nApp.onLaunch = function(options) {\n    var alert = createAlert(\"Hello Braze!\", \"Welcome to tvOS\");\n    alert.getElementById(\"changeUserButton\").addEventListener(\"select\", changeUser);\n    alert.getElementById(\"logEventsAndPurchasesButton\").addEventListener(\"select\", logEventsAndPurchases);\n    alert.getElementById(\"logAttributesButton\").addEventListener(\"select\", logAttributes);\n    navigationDocument.pushDocument(alert);\n}\n\nApp.onWillResignActive = function() {\n\n}\n\nApp.onDidEnterBackground = function() {\n\n}\n\nApp.onWillEnterForeground = function() {\n}\n\nApp.onDidBecomeActive = function() {\n    \n}\n\nApp.onWillTerminate = function() {\n    \n}\n\nvar changeUser = function() {\n  AppboyBridge.changeUser(\"tvOSUser\");\n}\nvar logEventsAndPurchases = function() {\n  AppboyBridge.logCustomEventsAndPurchases();\n}\nvar logAttributes = function() {\n  AppboyBridge.logAttributes();\n}\n\n/**\n * This convenience funnction returns an alert template, which can be used to present errors to the user.\n */\nvar createAlert = function(title, description) {\n    var alertString = `<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n        <document>\n          <alertTemplate>\n            <title>${title}</title>\n            <description>${description}</description>\n              <button id=\"changeUserButton\">\n                <text>Change User</text>\n              </button>\n              <button id=\"logEventsAndPurchasesButton\">\n              <text>Log Custom Events And Purchases</text>\n              </button>\n              <button id=\"logAttributesButton\">\n                <text>Log Attributes</text>\n              </button>\n          </alertTemplate>\n        </document>`\n\n    var parser = new DOMParser();\n\n    var alertDoc = parser.parseFromString(alertString, \"application/xml\");\n\n    return alertDoc\n}\n"
  },
  {
    "path": "Example/tvOS_TVML_Stopwatch/main.m",
    "content": "#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": "HelloSwift/HelloSwift/AppDelegate.swift",
    "content": "import UIKit\nimport Appboy_iOS_SDK\nimport UserNotifications\nimport StoreKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, ABKInAppMessageControllerDelegate, ABKURLDelegate {\n\n  var window: UIWindow?\n\n  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {\n    // Override point for customization after application launch.\n    let appboyOptions: [AnyHashable: Any] = [\n      ABKMinimumTriggerTimeIntervalKey : 1,\n      ABKInAppMessageControllerDelegateKey : self,\n      ABKURLDelegateKey : self,\n      ABKPushStoryAppGroupKey : \"group.Appboy.HelloSwift\"\n    ]\n    Appboy.start(withApiKey: \"1fbb9af3-93e0-43a2-920c-c6d867dab72a\", in:application, withLaunchOptions:launchOptions, withAppboyOptions: appboyOptions)\n\n    let center = UNUserNotificationCenter.current()\n    var options: UNAuthorizationOptions = [.alert, .sound, .badge]\n    if #available(iOS 12.0, *) {\n      options = UNAuthorizationOptions(rawValue: options.rawValue | UNAuthorizationOptions.provisional.rawValue)\n    }\n    center.requestAuthorization(options: options) { (granted, error) in\n      Appboy.sharedInstance()?.pushAuthorization(fromUserNotificationCenter: granted)\n    }\n    center.delegate = self\n    center.setNotificationCategories(ABKPushUtils.getAppboyUNNotificationCategorySet())\n    UIApplication.shared.registerForRemoteNotifications()\n\n    // Sample usage of unsafeInstance.  Note: startWithApiKey: MUST be called before calling unsafeInstance or an exception will be thrown.\n    // Note: this is a nonoptional alternative to sharedInstance()\n    Appboy.unsafeInstance().user.setCustomAttributeWithKey(\"unsafeCustomAttributeSwift\", andStringValue: \"unsafeCustomAttributeSwift value\")\n\n    return true\n  }\n\n  func applicationDidBecomeActive(_ application: UIApplication) {\n    UIApplication.shared.applicationIconBadgeNumber = 0\n  }\n\n  func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {\n    Appboy.sharedInstance()!.registerDeviceToken(deviceToken)\n  }\n\n  func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {\n    Appboy.sharedInstance()?.register(application, didReceiveRemoteNotification:userInfo, fetchCompletionHandler: completionHandler)\n  }\n\n  func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {\n    Appboy.sharedInstance()!.userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)\n  }\n\n  func userNotificationCenter(_ center: UNUserNotificationCenter,\n                              willPresent notification: UNNotification,\n                              withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {\n    if #available(iOS 14.0, *) {\n      completionHandler([.list, .banner]);\n    } else {\n      completionHandler([.alert]);\n    }\n  }\n\n  func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {\n    NSLog(\"HelloSwift open url delegate called with: %@\", url.absoluteString)\n    let urlString = url.absoluteString.removingPercentEncoding\n    if (urlString == \"helloswift:appstore-review\") {\n      NSLog(\"Received app store review request.\")\n      if #available(iOS 10.3, *) {\n        SKStoreReviewController.requestReview()\n      }\n      return true;\n    }\n    let deeplinkAlert = UIAlertController(title: \"Deeplink\", message: urlString, preferredStyle: UIAlertControllerStyle.alert)\n    let action = UIAlertAction(title: \"ok\", style: .default, handler: nil)\n    deeplinkAlert.addAction(action)\n    self.window?.rootViewController?.present(deeplinkAlert, animated: true, completion: nil)\n\n    return true;\n  }\n\n  func before(inAppMessageDisplayed inAppMessage: ABKInAppMessage) -> ABKInAppMessageDisplayChoice {\n    if inAppMessage.extras?[\"Appstore Review\"] != nil && inAppMessage.uri != nil {\n      UIApplication.shared.open(inAppMessage.uri!, options: [:], completionHandler: nil)\n      return ABKInAppMessageDisplayChoice.discardInAppMessage\n    } else {\n      return ABKInAppMessageDisplayChoice.displayInAppMessageNow\n    }\n  }\n\n  func handleAppboyURL(_ url: URL?, from channel: ABKChannel, withExtras extras: [AnyHashable : Any]?) -> Bool {\n    guard let url = url, url.host == \"sweeney.appboy.com\" else {\n      // Let Braze handle links otherwise\n      return false\n    }\n    NSLog(\"Received link with host sweeney.appboy.com.\")\n    return true;\n  }\n}\n"
  },
  {
    "path": "HelloSwift/HelloSwift/Base.lproj/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6250\" systemVersion=\"13F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6244\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2014 Appboy. All rights reserved.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"HelloSwift\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "HelloSwift/HelloSwift/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=\"18122\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"B2b-IW-ogs\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"18093\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Navigation Controller-->\n        <scene sceneID=\"qQV-SA-bvX\">\n            <objects>\n                <navigationController id=\"B2b-IW-ogs\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" insetsLayoutMarginsFromSafeArea=\"NO\" id=\"vaD-tS-mal\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"BYZ-38-t0r\" kind=\"relationship\" relationship=\"rootViewController\" id=\"3YL-XC-HIu\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dGx-w9-o5K\" userLabel=\"First Responder\" customClass=\"UIResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-924\" y=\"645\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"HelloSwift\" customModuleProvider=\"target\" 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                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dKu-zb-hIz\">\n                                <rect key=\"frame\" x=\"20\" y=\"90\" width=\"250\" height=\"34\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"250\" id=\"JFc-Ac-xZD\"/>\n                                </constraints>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" spellCheckingType=\"no\"/>\n                            </textField>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Set your User ID:\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Rff-8R-zZa\">\n                                <rect key=\"frame\" x=\"20\" y=\"59\" width=\"129\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vPf-gV-CTE\">\n                                <rect key=\"frame\" x=\"280\" y=\"92\" width=\"30\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Set\">\n                                    <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"updateUserIdWithSender:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"Tmj-kR-IEb\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7WZ-ry-KG3\">\n                                <rect key=\"frame\" x=\"20\" y=\"594\" width=\"335\" height=\"33\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <state key=\"normal\" title=\"Content Cards\"/>\n                                <connections>\n                                    <action selector=\"contentCardButtonTapped:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"IEF-1a-ycj\"/>\n                                </connections>\n                            </button>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Unread Content Cards: \" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"qYV-XB-kwJ\">\n                                <rect key=\"frame\" x=\"98\" y=\"512\" width=\"179.5\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"plain\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zRD-cw-5Od\">\n                                <rect key=\"frame\" x=\"20\" y=\"548\" width=\"335\" height=\"32\"/>\n                                <segments>\n                                    <segment title=\"Modal\"/>\n                                    <segment title=\"Navigation\"/>\n                                </segments>\n                            </segmentedControl>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"IRI-jF-kbd\">\n                                <rect key=\"frame\" x=\"145\" y=\"468\" width=\"85\" height=\"33\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <state key=\"normal\" title=\"News Feed\"/>\n                                <connections>\n                                    <action selector=\"newsFeedButtonTapped:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"Oqu-TM-X0a\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"h8U-ZM-Nel\">\n                                <rect key=\"frame\" x=\"280\" y=\"197\" width=\"68\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Log Event\">\n                                    <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                </state>\n                                <connections>\n                                    <action selector=\"logCustomEventButtonTappedWithSender:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"zRE-2a-fD8\"/>\n                                </connections>\n                            </button>\n                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8Fo-Tc-mkG\">\n                                <rect key=\"frame\" x=\"20\" y=\"195\" width=\"250\" height=\"34\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"250\" id=\"SSZ-ar-2kf\"/>\n                                </constraints>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" spellCheckingType=\"no\"/>\n                            </textField>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Custom Event Name:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"VXY-50-8l3\">\n                                <rect key=\"frame\" x=\"20\" y=\"164\" width=\"160\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"8Fo-Tc-mkG\" firstAttribute=\"leading\" secondItem=\"VXY-50-8l3\" secondAttribute=\"leading\" id=\"66s-xj-Cex\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"7WZ-ry-KG3\" secondAttribute=\"trailing\" constant=\"20\" id=\"IY3-XY-WWb\"/>\n                            <constraint firstItem=\"h8U-ZM-Nel\" firstAttribute=\"leading\" secondItem=\"8Fo-Tc-mkG\" secondAttribute=\"trailing\" constant=\"10\" id=\"J7U-jw-6A7\"/>\n                            <constraint firstItem=\"Rff-8R-zZa\" firstAttribute=\"leading\" secondItem=\"VXY-50-8l3\" secondAttribute=\"leading\" id=\"JEa-EQ-5a7\"/>\n                            <constraint firstItem=\"vPf-gV-CTE\" firstAttribute=\"centerY\" secondItem=\"dKu-zb-hIz\" secondAttribute=\"centerY\" id=\"MLO-ta-5Oi\"/>\n                            <constraint firstItem=\"zRD-cw-5Od\" firstAttribute=\"leading\" secondItem=\"7WZ-ry-KG3\" secondAttribute=\"leading\" id=\"Ouq-Fw-OAW\"/>\n                            <constraint firstItem=\"7WZ-ry-KG3\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" constant=\"20\" id=\"PqE-HI-GPq\"/>\n                            <constraint firstItem=\"wfy-db-euE\" firstAttribute=\"top\" secondItem=\"7WZ-ry-KG3\" secondAttribute=\"bottom\" constant=\"40\" id=\"T5l-d4-axQ\"/>\n                            <constraint firstItem=\"7WZ-ry-KG3\" firstAttribute=\"top\" secondItem=\"zRD-cw-5Od\" secondAttribute=\"bottom\" constant=\"15\" id=\"XN9-Uh-egl\"/>\n                            <constraint firstItem=\"zRD-cw-5Od\" firstAttribute=\"top\" secondItem=\"qYV-XB-kwJ\" secondAttribute=\"bottom\" constant=\"15\" id=\"YZp-iZ-UCk\"/>\n                            <constraint firstItem=\"vPf-gV-CTE\" firstAttribute=\"leading\" secondItem=\"dKu-zb-hIz\" secondAttribute=\"trailing\" constant=\"10\" id=\"Yr6-63-AUe\"/>\n                            <constraint firstItem=\"zRD-cw-5Od\" firstAttribute=\"centerX\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerX\" id=\"Yy0-yI-daX\"/>\n                            <constraint firstItem=\"qYV-XB-kwJ\" firstAttribute=\"centerX\" secondItem=\"7WZ-ry-KG3\" secondAttribute=\"centerX\" id=\"aNC-Zu-HXq\"/>\n                            <constraint firstItem=\"dKu-zb-hIz\" firstAttribute=\"top\" secondItem=\"Rff-8R-zZa\" secondAttribute=\"bottom\" constant=\"10\" id=\"bYP-Pu-GNS\"/>\n                            <constraint firstItem=\"h8U-ZM-Nel\" firstAttribute=\"centerY\" secondItem=\"8Fo-Tc-mkG\" secondAttribute=\"centerY\" id=\"cKL-Fk-PbG\"/>\n                            <constraint firstItem=\"VXY-50-8l3\" firstAttribute=\"top\" secondItem=\"dKu-zb-hIz\" secondAttribute=\"bottom\" constant=\"40\" id=\"hGu-7s-GD7\"/>\n                            <constraint firstItem=\"8Fo-Tc-mkG\" firstAttribute=\"top\" secondItem=\"VXY-50-8l3\" secondAttribute=\"bottom\" constant=\"10\" id=\"oGW-0I-cFm\"/>\n                            <constraint firstItem=\"VXY-50-8l3\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" constant=\"20\" id=\"pCc-Xr-5GE\"/>\n                            <constraint firstItem=\"Rff-8R-zZa\" firstAttribute=\"top\" secondItem=\"y3c-jy-aDJ\" secondAttribute=\"bottom\" constant=\"15\" id=\"pMl-oA-Tei\"/>\n                            <constraint firstItem=\"IRI-jF-kbd\" firstAttribute=\"centerX\" secondItem=\"qYV-XB-kwJ\" secondAttribute=\"centerX\" id=\"vcd-Xn-vEV\"/>\n                            <constraint firstItem=\"7WZ-ry-KG3\" firstAttribute=\"centerX\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"centerX\" id=\"vqQ-x3-FHK\"/>\n                            <constraint firstItem=\"qYV-XB-kwJ\" firstAttribute=\"top\" secondItem=\"IRI-jF-kbd\" secondAttribute=\"bottom\" constant=\"11\" id=\"wb2-gx-3gr\"/>\n                            <constraint firstItem=\"dKu-zb-hIz\" firstAttribute=\"leading\" secondItem=\"VXY-50-8l3\" secondAttribute=\"leading\" id=\"xlH-U1-sdH\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" id=\"sKM-0b-XwR\"/>\n                    <connections>\n                        <outlet property=\"customEventNameTextField\" destination=\"8Fo-Tc-mkG\" id=\"VAe-Em-G8N\"/>\n                        <outlet property=\"modalOrNavigationPicker\" destination=\"zRD-cw-5Od\" id=\"F5m-NU-Lyc\"/>\n                        <outlet property=\"unreadContentCardLabel\" destination=\"qYV-XB-kwJ\" id=\"S7g-yM-WI2\"/>\n                        <outlet property=\"userIdTextField\" destination=\"dKu-zb-hIz\" id=\"zkv-5e-KMV\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"81\" y=\"645\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <systemColor name=\"systemBackgroundColor\">\n            <color white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "HelloSwift/HelloSwift/HelloSwift-Bridging-Header.h",
    "content": "\n"
  },
  {
    "path": "HelloSwift/HelloSwift/HelloSwift.entitlements",
    "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>aps-environment</key>\n\t<string>development</string>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.Appboy.HelloSwift</string>\n\t</array>\n\t<key>com.apple.security.network.client</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "HelloSwift/HelloSwift/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/HelloSwift/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\n\t\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>CFBundleURLTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>Appboy.HelloSwift</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>HelloSwift</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSApplicationQueriesSchemes</key>\n\t<array>\n\t\t<string>HelloSwift</string>\n\t</array>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIBackgroundModes</key>\n\t<array>\n\t\t<string>fetch</string>\n\t\t<string>processing</string>\n\t\t<string>remote-notification</string>\n\t</array>\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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "HelloSwift/HelloSwift/ViewController.swift",
    "content": "import UIKit\nimport Appboy_iOS_SDK\n\nclass ViewController: UIViewController {\n  @IBOutlet weak var userIdTextField: UITextField!\n  @IBOutlet weak var customEventNameTextField: UITextField!\n  @IBOutlet weak var unreadContentCardLabel: UILabel!\n  @IBOutlet weak var modalOrNavigationPicker: UISegmentedControl!\n\n  override func viewDidLoad() {\n    super.viewDidLoad()\n    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))\n    tapGesture.numberOfTapsRequired = 1\n    self.view.addGestureRecognizer(tapGesture)\n    self.setUnreadContentCardLabelText()\n    NotificationCenter.default.addObserver(self, selector: #selector(contentCardsUpdated(_:)), name: NSNotification.Name.ABKContentCardsProcessed, object: nil)\n  }\n  \n  override func viewDidAppear(_ animated: Bool) {\n    // Display the Braze user ID in the text field\n    userIdTextField.text = Appboy.sharedInstance()?.user.userID\n  }\n  \n  @IBAction func logCustomEventButtonTapped(sender: AnyObject) {\n    let customEventName:String! = customEventNameTextField.text\n    if (customEventName.count > 0) {\n      Appboy.sharedInstance()?.logCustomEvent(customEventName!)\n    }\n  }\n  \n  @IBAction func updateUserId(sender: AnyObject) {\n    userIdTextField.resignFirstResponder()\n    Appboy.sharedInstance()?.changeUser(userIdTextField.text!)\n  }\n\n  @IBAction func newsFeedButtonTapped(_ sender: Any) {\n    let newsFeed = ABKNewsFeedViewController()\n    newsFeed.newsFeed.navigationItem.title = \"News Feed\"\n    self.navigationController?.present(newsFeed, animated: true, completion: nil)\n  }\n  \n  @IBAction func contentCardButtonTapped(_ sender: Any) {\n    if modalOrNavigationPicker.selectedSegmentIndex == 0 {\n      let contentCards = ABKContentCardsViewController();\n      contentCards.contentCardsViewController.navigationItem.title = \"Modal Cards\";\n      self.navigationController?.present(contentCards, animated: true, completion: nil)\n    } else {\n      let contentCards = ABKContentCardsTableViewController();\n      contentCards.navigationItem.title = \"Navigation Cards\"\n      self.navigationController?.pushViewController(contentCards, animated: true)\n    }\n  }\n\n  @objc func contentCardsUpdated(_ notification: NSNotification) {\n    self.setUnreadContentCardLabelText();\n  }\n\n  func setUnreadContentCardLabelText() {\n    let unreadContentCardCount = Appboy.sharedInstance()?.contentCardsController.unviewedContentCardCount() ?? 0\n    let totalCardCount = Appboy.sharedInstance()?.contentCardsController.contentCardCount() ?? 0\n    self.unreadContentCardLabel.text = \"Unread Content Cards: \\(unreadContentCardCount)/\\(totalCardCount)\";\n    self.view.setNeedsDisplay();\n  }\n\n  @objc func dismissKeyboard() {\n    self.view.endEditing(true)\n  }\n}\n"
  },
  {
    "path": "HelloSwift/HelloSwift.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t132CC59C2375E3FE007F3576 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 132CC59B2375E3FE007F3576 /* UserNotifications.framework */; };\n\t\t132CC59E2375E3FE007F3576 /* UserNotificationsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 132CC59D2375E3FE007F3576 /* UserNotificationsUI.framework */; };\n\t\t132CC5A12375E3FE007F3576 /* NotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132CC5A02375E3FE007F3576 /* NotificationViewController.swift */; };\n\t\t132CC5A42375E3FE007F3576 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 132CC5A22375E3FE007F3576 /* MainInterface.storyboard */; };\n\t\t132CC5A82375E3FE007F3576 /* HelloSwiftNotificationContentExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 132CC59A2375E3FE007F3576 /* HelloSwiftNotificationContentExtension.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t1B519B5D7338B6EE97A7AA84 /* Pods_HelloSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A213016B5A5A0CFB251B52D /* Pods_HelloSwift.framework */; };\n\t\t4E1644F21A04170E0007CA5C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E1644F11A04170E0007CA5C /* AppDelegate.swift */; };\n\t\t4E1644F41A04170E0007CA5C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E1644F31A04170E0007CA5C /* ViewController.swift */; };\n\t\t4E1644F71A04170E0007CA5C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4E1644F51A04170E0007CA5C /* Main.storyboard */; };\n\t\t4E1644F91A04170E0007CA5C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4E1644F81A04170E0007CA5C /* Images.xcassets */; };\n\t\t4E1644FC1A04170E0007CA5C /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4E1644FA1A04170E0007CA5C /* LaunchScreen.xib */; };\n\t\t7FE56AD92347F15B00A1AB59 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FE56AD82347F15B00A1AB59 /* AppDelegate.swift */; };\n\t\t7FE56ADB2347F15B00A1AB59 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FE56ADA2347F15B00A1AB59 /* ContentView.swift */; };\n\t\t7FE56ADD2347F15D00A1AB59 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7FE56ADC2347F15D00A1AB59 /* Assets.xcassets */; };\n\t\t7FE56AE02347F15D00A1AB59 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7FE56ADF2347F15D00A1AB59 /* Preview Assets.xcassets */; };\n\t\t7FE56AE32347F15D00A1AB59 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7FE56AE12347F15D00A1AB59 /* LaunchScreen.storyboard */; };\n\t\tC06D5DDE1ED367C200087F72 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C06D5DDD1ED367C200087F72 /* NotificationService.swift */; };\n\t\tC06D5DE21ED367C200087F72 /* HelloSwiftNotificationExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C06D5DDB1ED367C100087F72 /* HelloSwiftNotificationExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tC1E6FB391D83682F0084F8CE /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1E6FB331D835D5C0084F8CE /* NotificationCenter.framework */; platformFilter = ios; };\n\t\tD4528D6C115B674A8DEB61AC /* Pods_HelloSwiftNotificationContentExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27658BFFA84789D98BEACCAA /* Pods_HelloSwiftNotificationContentExtension.framework */; };\n\t\tD7789190F858A7FBDEE9FD00 /* Pods_tvOS_HelloSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD6740CA2507ABD4AFC5877C /* Pods_tvOS_HelloSwift.framework */; };\n\t\tEF913A14EF551336F39B2170 /* Pods_HelloSwiftTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75641A9D867E2AAC83965F0B /* Pods_HelloSwiftTests.framework */; };\n\t\tF58337B227EBBC220084DED0 /* AppboyPushUnitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F58337B127EBBC220084DED0 /* AppboyPushUnitTests.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t132CC5A62375E3FE007F3576 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4E1644E41A04170E0007CA5C /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 132CC5992375E3FE007F3576;\n\t\t\tremoteInfo = HelloSwiftNotificationContentExtension;\n\t\t};\n\t\t7FE56AEA2347F15D00A1AB59 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4E1644E41A04170E0007CA5C /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7FE56AD52347F15B00A1AB59;\n\t\t\tremoteInfo = tvOS_HelloSwift;\n\t\t};\n\t\t7FE56AF52347F15D00A1AB59 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4E1644E41A04170E0007CA5C /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7FE56AD52347F15B00A1AB59;\n\t\t\tremoteInfo = tvOS_HelloSwift;\n\t\t};\n\t\tC06D5DE01ED367C200087F72 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4E1644E41A04170E0007CA5C /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C06D5DDA1ED367C100087F72;\n\t\t\tremoteInfo = HelloSwiftNotificationExtension;\n\t\t};\n\t\tF58337AC27EBBBEA0084DED0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4E1644E41A04170E0007CA5C /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4E1644EB1A04170E0007CA5C;\n\t\t\tremoteInfo = HelloSwift;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t132CC5B223760367007F3576 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC06D5DE61ED367C200087F72 /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\t132CC5A82375E3FE007F3576 /* HelloSwiftNotificationContentExtension.appex in Embed App Extensions */,\n\t\t\t\tC06D5DE21ED367C200087F72 /* HelloSwiftNotificationExtension.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t07EE7CBFD0B37B99E667B7D3 /* Pods-HelloSwiftTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-HelloSwiftTests.release.xcconfig\"; path = \"Target Support Files/Pods-HelloSwiftTests/Pods-HelloSwiftTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t132CC59A2375E3FE007F3576 /* HelloSwiftNotificationContentExtension.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = HelloSwiftNotificationContentExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t132CC59B2375E3FE007F3576 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };\n\t\t132CC59D2375E3FE007F3576 /* UserNotificationsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotificationsUI.framework; path = System/Library/Frameworks/UserNotificationsUI.framework; sourceTree = SDKROOT; };\n\t\t132CC5A02375E3FE007F3576 /* NotificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationViewController.swift; sourceTree = \"<group>\"; };\n\t\t132CC5A32375E3FE007F3576 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\t132CC5A52375E3FE007F3576 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t132CC5AC2375E478007F3576 /* HelloSwift-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"HelloSwift-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t132CC5AD2375EE2A007F3576 /* HelloSwiftNotificationContentExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HelloSwiftNotificationContentExtension.entitlements; sourceTree = \"<group>\"; };\n\t\t132CC5AF23760367007F3576 /* AppboyPushStory.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppboyPushStory.framework; path = \"Pods/Appboy-Push-Story/Appboy-Push-Story/AppboyPushStory.framework\"; sourceTree = \"<group>\"; };\n\t\t1EE5CC8DA7D5DF8152E000B6 /* Pods-HelloSwiftTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-HelloSwiftTests.debug.xcconfig\"; path = \"Target Support Files/Pods-HelloSwiftTests/Pods-HelloSwiftTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t27658BFFA84789D98BEACCAA /* Pods_HelloSwiftNotificationContentExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HelloSwiftNotificationContentExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2A213016B5A5A0CFB251B52D /* Pods_HelloSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HelloSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t446901049F7C1F60144D6DC2 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4E1644EC1A04170E0007CA5C /* HelloSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloSwift.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4E1644F01A04170E0007CA5C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4E1644F11A04170E0007CA5C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t4E1644F31A04170E0007CA5C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t4E1644F61A04170E0007CA5C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t4E1644F81A04170E0007CA5C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t4E1644FB1A04170E0007CA5C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\t6D7AD2FB444492B74DBC24D0 /* Pods-HelloSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-HelloSwift.debug.xcconfig\"; path = \"Target Support Files/Pods-HelloSwift/Pods-HelloSwift.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t75641A9D867E2AAC83965F0B /* Pods_HelloSwiftTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HelloSwiftTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7FE56AD62347F15B00A1AB59 /* tvOS_HelloSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tvOS_HelloSwift.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7FE56AD82347F15B00A1AB59 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t7FE56ADA2347F15B00A1AB59 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = \"<group>\"; };\n\t\t7FE56ADC2347F15D00A1AB59 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t7FE56ADF2347F15D00A1AB59 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = \"Preview Assets.xcassets\"; sourceTree = \"<group>\"; };\n\t\t7FE56AE22347F15D00A1AB59 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t7FE56AE42347F15D00A1AB59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t7FE56AE92347F15D00A1AB59 /* tvOS_HelloSwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = tvOS_HelloSwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t7FE56AF42347F15D00A1AB59 /* tvOS_HelloSwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = tvOS_HelloSwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9C092523A071C1D0B861AF84 /* Pods-tvOS_HelloSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-tvOS_HelloSwift.release.xcconfig\"; path = \"Target Support Files/Pods-tvOS_HelloSwift/Pods-tvOS_HelloSwift.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t9DE7E291CEFF12F7718C1C33 /* Pods-HelloSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-HelloSwift.release.xcconfig\"; path = \"Target Support Files/Pods-HelloSwift/Pods-HelloSwift.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAD4B0F7FE291E7D3736A0157 /* Pods-HelloSwiftNotificationContentExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-HelloSwiftNotificationContentExtension.release.xcconfig\"; path = \"Target Support Files/Pods-HelloSwiftNotificationContentExtension/Pods-HelloSwiftNotificationContentExtension.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAD6740CA2507ABD4AFC5877C /* Pods_tvOS_HelloSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_tvOS_HelloSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB73F246918A581AD40E4C249 /* Pods-tvOS_HelloSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-tvOS_HelloSwift.debug.xcconfig\"; path = \"Target Support Files/Pods-tvOS_HelloSwift/Pods-tvOS_HelloSwift.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tBD0DDDF3128C8BAAC10F18AC /* Pods-HelloSwiftNotificationContentExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-HelloSwiftNotificationContentExtension.debug.xcconfig\"; path = \"Target Support Files/Pods-HelloSwiftNotificationContentExtension/Pods-HelloSwiftNotificationContentExtension.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC06D5DDB1ED367C100087F72 /* HelloSwiftNotificationExtension.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = HelloSwiftNotificationExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC06D5DDD1ED367C200087F72 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = \"<group>\"; };\n\t\tC06D5DDF1ED367C200087F72 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC1E6FB321D835D230084F8CE /* HelloSwift.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HelloSwift.entitlements; sourceTree = \"<group>\"; };\n\t\tC1E6FB331D835D5C0084F8CE /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; };\n\t\tD5C4C2AA26D59845000EBC35 /* HelloSwiftNotificationExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HelloSwiftNotificationExtension.entitlements; sourceTree = \"<group>\"; };\n\t\tF58337A827EBBBEA0084DED0 /* HelloSwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HelloSwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF58337B127EBBC220084DED0 /* AppboyPushUnitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppboyPushUnitTests.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t132CC5972375E3FE007F3576 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t132CC59E2375E3FE007F3576 /* UserNotificationsUI.framework in Frameworks */,\n\t\t\t\t132CC59C2375E3FE007F3576 /* UserNotifications.framework in Frameworks */,\n\t\t\t\tD4528D6C115B674A8DEB61AC /* Pods_HelloSwiftNotificationContentExtension.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4E1644E91A04170E0007CA5C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC1E6FB391D83682F0084F8CE /* NotificationCenter.framework in Frameworks */,\n\t\t\t\t1B519B5D7338B6EE97A7AA84 /* Pods_HelloSwift.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7FE56AD32347F15B00A1AB59 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD7789190F858A7FBDEE9FD00 /* Pods_tvOS_HelloSwift.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7FE56AE62347F15D00A1AB59 /* 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\t7FE56AF12347F15D00A1AB59 /* 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\tC06D5DD81ED367C100087F72 /* 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\tF58337A527EBBBEA0084DED0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEF913A14EF551336F39B2170 /* Pods_HelloSwiftTests.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\t132CC59F2375E3FE007F3576 /* HelloSwiftNotificationContentExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t132CC5AD2375EE2A007F3576 /* HelloSwiftNotificationContentExtension.entitlements */,\n\t\t\t\t132CC5A02375E3FE007F3576 /* NotificationViewController.swift */,\n\t\t\t\t132CC5A22375E3FE007F3576 /* MainInterface.storyboard */,\n\t\t\t\t132CC5A52375E3FE007F3576 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = HelloSwiftNotificationContentExtension;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1EEA6C99BDF3CA22E76D7805 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D7AD2FB444492B74DBC24D0 /* Pods-HelloSwift.debug.xcconfig */,\n\t\t\t\t9DE7E291CEFF12F7718C1C33 /* Pods-HelloSwift.release.xcconfig */,\n\t\t\t\tBD0DDDF3128C8BAAC10F18AC /* Pods-HelloSwiftNotificationContentExtension.debug.xcconfig */,\n\t\t\t\tAD4B0F7FE291E7D3736A0157 /* Pods-HelloSwiftNotificationContentExtension.release.xcconfig */,\n\t\t\t\t1EE5CC8DA7D5DF8152E000B6 /* Pods-HelloSwiftTests.debug.xcconfig */,\n\t\t\t\t07EE7CBFD0B37B99E667B7D3 /* Pods-HelloSwiftTests.release.xcconfig */,\n\t\t\t\tB73F246918A581AD40E4C249 /* Pods-tvOS_HelloSwift.debug.xcconfig */,\n\t\t\t\t9C092523A071C1D0B861AF84 /* Pods-tvOS_HelloSwift.release.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4E1644E31A04170E0007CA5C = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4E1644EE1A04170E0007CA5C /* HelloSwift */,\n\t\t\t\tC06D5DDC1ED367C200087F72 /* HelloSwiftNotificationExtension */,\n\t\t\t\t7FE56AD72347F15B00A1AB59 /* tvOS_HelloSwift */,\n\t\t\t\t132CC59F2375E3FE007F3576 /* HelloSwiftNotificationContentExtension */,\n\t\t\t\tF58337A927EBBBEA0084DED0 /* HelloSwiftTests */,\n\t\t\t\t4E1644ED1A04170E0007CA5C /* Products */,\n\t\t\t\t5C274ADBE04DAF82D572D7B9 /* Frameworks */,\n\t\t\t\t1EEA6C99BDF3CA22E76D7805 /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4E1644ED1A04170E0007CA5C /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4E1644EC1A04170E0007CA5C /* HelloSwift.app */,\n\t\t\t\tC06D5DDB1ED367C100087F72 /* HelloSwiftNotificationExtension.appex */,\n\t\t\t\t7FE56AD62347F15B00A1AB59 /* tvOS_HelloSwift.app */,\n\t\t\t\t7FE56AE92347F15D00A1AB59 /* tvOS_HelloSwiftTests.xctest */,\n\t\t\t\t7FE56AF42347F15D00A1AB59 /* tvOS_HelloSwiftUITests.xctest */,\n\t\t\t\t132CC59A2375E3FE007F3576 /* HelloSwiftNotificationContentExtension.appex */,\n\t\t\t\tF58337A827EBBBEA0084DED0 /* HelloSwiftTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4E1644EE1A04170E0007CA5C /* HelloSwift */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC1E6FB321D835D230084F8CE /* HelloSwift.entitlements */,\n\t\t\t\t4E1644F11A04170E0007CA5C /* AppDelegate.swift */,\n\t\t\t\t4E1644F31A04170E0007CA5C /* ViewController.swift */,\n\t\t\t\t4E1644F51A04170E0007CA5C /* Main.storyboard */,\n\t\t\t\t4E1644F81A04170E0007CA5C /* Images.xcassets */,\n\t\t\t\t4E1644FA1A04170E0007CA5C /* LaunchScreen.xib */,\n\t\t\t\t4E1644EF1A04170E0007CA5C /* Supporting Files */,\n\t\t\t\t132CC5AC2375E478007F3576 /* HelloSwift-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = HelloSwift;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4E1644EF1A04170E0007CA5C /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4E1644F01A04170E0007CA5C /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C274ADBE04DAF82D572D7B9 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t132CC5AF23760367007F3576 /* AppboyPushStory.framework */,\n\t\t\t\tC1E6FB331D835D5C0084F8CE /* NotificationCenter.framework */,\n\t\t\t\t446901049F7C1F60144D6DC2 /* Pods.framework */,\n\t\t\t\t132CC59B2375E3FE007F3576 /* UserNotifications.framework */,\n\t\t\t\t132CC59D2375E3FE007F3576 /* UserNotificationsUI.framework */,\n\t\t\t\t2A213016B5A5A0CFB251B52D /* Pods_HelloSwift.framework */,\n\t\t\t\t27658BFFA84789D98BEACCAA /* Pods_HelloSwiftNotificationContentExtension.framework */,\n\t\t\t\t75641A9D867E2AAC83965F0B /* Pods_HelloSwiftTests.framework */,\n\t\t\t\tAD6740CA2507ABD4AFC5877C /* Pods_tvOS_HelloSwift.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7FE56AD72347F15B00A1AB59 /* tvOS_HelloSwift */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7FE56AD82347F15B00A1AB59 /* AppDelegate.swift */,\n\t\t\t\t7FE56ADA2347F15B00A1AB59 /* ContentView.swift */,\n\t\t\t\t7FE56ADC2347F15D00A1AB59 /* Assets.xcassets */,\n\t\t\t\t7FE56AE12347F15D00A1AB59 /* LaunchScreen.storyboard */,\n\t\t\t\t7FE56AE42347F15D00A1AB59 /* Info.plist */,\n\t\t\t\t7FE56ADE2347F15D00A1AB59 /* Preview Content */,\n\t\t\t);\n\t\t\tpath = tvOS_HelloSwift;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7FE56ADE2347F15D00A1AB59 /* Preview Content */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7FE56ADF2347F15D00A1AB59 /* Preview Assets.xcassets */,\n\t\t\t);\n\t\t\tpath = \"Preview Content\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC06D5DDC1ED367C200087F72 /* HelloSwiftNotificationExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD5C4C2AA26D59845000EBC35 /* HelloSwiftNotificationExtension.entitlements */,\n\t\t\t\tC06D5DDD1ED367C200087F72 /* NotificationService.swift */,\n\t\t\t\tC06D5DDF1ED367C200087F72 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = HelloSwiftNotificationExtension;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF58337A927EBBBEA0084DED0 /* HelloSwiftTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF58337B127EBBC220084DED0 /* AppboyPushUnitTests.m */,\n\t\t\t);\n\t\t\tpath = HelloSwiftTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t132CC5992375E3FE007F3576 /* HelloSwiftNotificationContentExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 132CC5AB2375E3FE007F3576 /* Build configuration list for PBXNativeTarget \"HelloSwiftNotificationContentExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF807FE5B4E41739B28F15A1C /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t132CC5962375E3FE007F3576 /* Sources */,\n\t\t\t\t132CC5972375E3FE007F3576 /* Frameworks */,\n\t\t\t\t132CC5982375E3FE007F3576 /* Resources */,\n\t\t\t\t132CC5B223760367007F3576 /* Embed Frameworks */,\n\t\t\t\t196C3398E92D45E5AAB1BF26 /* [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 = HelloSwiftNotificationContentExtension;\n\t\t\tproductName = HelloSwiftNotificationContentExtension;\n\t\t\tproductReference = 132CC59A2375E3FE007F3576 /* HelloSwiftNotificationContentExtension.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\t4E1644EB1A04170E0007CA5C /* HelloSwift */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4E16450B1A04170E0007CA5C /* Build configuration list for PBXNativeTarget \"HelloSwift\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD9111A74880B4992F72D3D91 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t4E1644E81A04170E0007CA5C /* Sources */,\n\t\t\t\t4E1644E91A04170E0007CA5C /* Frameworks */,\n\t\t\t\t4E1644EA1A04170E0007CA5C /* Resources */,\n\t\t\t\tC06D5DE61ED367C200087F72 /* Embed App Extensions */,\n\t\t\t\tCBC027A786165FD675F18422 /* [CP] Embed Pods Frameworks */,\n\t\t\t\t1FC446F86EC24B6EBD51DAE7 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tC06D5DE11ED367C200087F72 /* PBXTargetDependency */,\n\t\t\t\t132CC5A72375E3FE007F3576 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = HelloSwift;\n\t\t\tproductName = HelloSwift;\n\t\t\tproductReference = 4E1644EC1A04170E0007CA5C /* HelloSwift.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t7FE56AD52347F15B00A1AB59 /* tvOS_HelloSwift */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7FE56B012347F15D00A1AB59 /* Build configuration list for PBXNativeTarget \"tvOS_HelloSwift\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tCE93076C7DBCA3910A2559DC /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t7FE56AD22347F15B00A1AB59 /* Sources */,\n\t\t\t\t7FE56AD32347F15B00A1AB59 /* Frameworks */,\n\t\t\t\t7FE56AD42347F15B00A1AB59 /* Resources */,\n\t\t\t\t7C912B988CE1FED70FB94D3C /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = tvOS_HelloSwift;\n\t\t\tproductName = tvOS_HelloSwift;\n\t\t\tproductReference = 7FE56AD62347F15B00A1AB59 /* tvOS_HelloSwift.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t7FE56AE82347F15D00A1AB59 /* tvOS_HelloSwiftTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7FE56B022347F15D00A1AB59 /* Build configuration list for PBXNativeTarget \"tvOS_HelloSwiftTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7FE56AE52347F15D00A1AB59 /* Sources */,\n\t\t\t\t7FE56AE62347F15D00A1AB59 /* Frameworks */,\n\t\t\t\t7FE56AE72347F15D00A1AB59 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t7FE56AEB2347F15D00A1AB59 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = tvOS_HelloSwiftTests;\n\t\t\tproductName = tvOS_HelloSwiftTests;\n\t\t\tproductReference = 7FE56AE92347F15D00A1AB59 /* tvOS_HelloSwiftTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t7FE56AF32347F15D00A1AB59 /* tvOS_HelloSwiftUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7FE56B032347F15D00A1AB59 /* Build configuration list for PBXNativeTarget \"tvOS_HelloSwiftUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7FE56AF02347F15D00A1AB59 /* Sources */,\n\t\t\t\t7FE56AF12347F15D00A1AB59 /* Frameworks */,\n\t\t\t\t7FE56AF22347F15D00A1AB59 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t7FE56AF62347F15D00A1AB59 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = tvOS_HelloSwiftUITests;\n\t\t\tproductName = tvOS_HelloSwiftUITests;\n\t\t\tproductReference = 7FE56AF42347F15D00A1AB59 /* tvOS_HelloSwiftUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n\t\tC06D5DDA1ED367C100087F72 /* HelloSwiftNotificationExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C06D5DE31ED367C200087F72 /* Build configuration list for PBXNativeTarget \"HelloSwiftNotificationExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC06D5DD71ED367C100087F72 /* Sources */,\n\t\t\t\tC06D5DD81ED367C100087F72 /* Frameworks */,\n\t\t\t\tC06D5DD91ED367C100087F72 /* 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 = HelloSwiftNotificationExtension;\n\t\t\tproductName = HelloSwiftNotificationExtension;\n\t\t\tproductReference = C06D5DDB1ED367C100087F72 /* HelloSwiftNotificationExtension.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\tF58337A727EBBBEA0084DED0 /* HelloSwiftTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F58337B027EBBBEA0084DED0 /* Build configuration list for PBXNativeTarget \"HelloSwiftTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t526AFFECE5BABB7B11603D2C /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tF58337A427EBBBEA0084DED0 /* Sources */,\n\t\t\t\tF58337A527EBBBEA0084DED0 /* Frameworks */,\n\t\t\t\tF58337A627EBBBEA0084DED0 /* Resources */,\n\t\t\t\t63C51E5C8179D661AA09C412 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tF58337AD27EBBBEA0084DED0 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = HelloSwiftTests;\n\t\t\tproductName = HelloSwiftTests;\n\t\t\tproductReference = F58337A827EBBBEA0084DED0 /* HelloSwiftTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t4E1644E41A04170E0007CA5C /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 1320;\n\t\t\t\tLastUpgradeCheck = 0900;\n\t\t\t\tORGANIZATIONNAME = Appboy;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t132CC5992375E3FE007F3576 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 11.1;\n\t\t\t\t\t};\n\t\t\t\t\t4E1644EB1A04170E0007CA5C = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t7FE56AD52347F15B00A1AB59 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 11.0;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t7FE56AE82347F15D00A1AB59 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 11.0;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 7FE56AD52347F15B00A1AB59;\n\t\t\t\t\t};\n\t\t\t\t\t7FE56AF32347F15D00A1AB59 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 11.0;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 7FE56AD52347F15B00A1AB59;\n\t\t\t\t\t};\n\t\t\t\t\tC06D5DDA1ED367C100087F72 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.3.2;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t};\n\t\t\t\t\tF58337A727EBBBEA0084DED0 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 13.2.1;\n\t\t\t\t\t\tLastSwiftMigration = 1320;\n\t\t\t\t\t\tTestTargetID = 4E1644EB1A04170E0007CA5C;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 4E1644E71A04170E0007CA5C /* Build configuration list for PBXProject \"HelloSwift\" */;\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\tEnglish,\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 4E1644E31A04170E0007CA5C;\n\t\t\tproductRefGroup = 4E1644ED1A04170E0007CA5C /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t4E1644EB1A04170E0007CA5C /* HelloSwift */,\n\t\t\t\tC06D5DDA1ED367C100087F72 /* HelloSwiftNotificationExtension */,\n\t\t\t\t7FE56AD52347F15B00A1AB59 /* tvOS_HelloSwift */,\n\t\t\t\t7FE56AE82347F15D00A1AB59 /* tvOS_HelloSwiftTests */,\n\t\t\t\t7FE56AF32347F15D00A1AB59 /* tvOS_HelloSwiftUITests */,\n\t\t\t\t132CC5992375E3FE007F3576 /* HelloSwiftNotificationContentExtension */,\n\t\t\t\tF58337A727EBBBEA0084DED0 /* HelloSwiftTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t132CC5982375E3FE007F3576 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t132CC5A42375E3FE007F3576 /* MainInterface.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4E1644EA1A04170E0007CA5C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4E1644F71A04170E0007CA5C /* Main.storyboard in Resources */,\n\t\t\t\t4E1644FC1A04170E0007CA5C /* LaunchScreen.xib in Resources */,\n\t\t\t\t4E1644F91A04170E0007CA5C /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7FE56AD42347F15B00A1AB59 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7FE56AE32347F15D00A1AB59 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t7FE56AE02347F15D00A1AB59 /* Preview Assets.xcassets in Resources */,\n\t\t\t\t7FE56ADD2347F15D00A1AB59 /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7FE56AE72347F15D00A1AB59 /* 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\t7FE56AF22347F15D00A1AB59 /* 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\tC06D5DD91ED367C100087F72 /* 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\tF58337A627EBBBEA0084DED0 /* 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\t196C3398E92D45E5AAB1BF26 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-HelloSwiftNotificationContentExtension/Pods-HelloSwiftNotificationContentExtension-resources.sh\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-Push-Story/AppboyPushStory.bundle\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyPushStory.bundle\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-HelloSwiftNotificationContentExtension/Pods-HelloSwiftNotificationContentExtension-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t1FC446F86EC24B6EBD51DAE7 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-HelloSwift/Pods-HelloSwift-resources.sh\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-Push-Story/AppboyPushStory.bundle\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyPushStory.bundle\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-HelloSwift/Pods-HelloSwift-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t526AFFECE5BABB7B11603D2C /* [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\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-HelloSwiftTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t63C51E5C8179D661AA09C412 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-HelloSwiftTests/Pods-HelloSwiftTests-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/OCMock/OCMock.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OCMock.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-HelloSwiftTests/Pods-HelloSwiftTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t7C912B988CE1FED70FB94D3C /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-tvOS_HelloSwift/Pods-tvOS_HelloSwift-frameworks.sh\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-tvOS-SDK/Appboy-tvOS-SDK/AppboyTVOSKit.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppboyTVOSKit.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-tvOS_HelloSwift/Pods-tvOS_HelloSwift-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tCBC027A786165FD675F18422 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-HelloSwift/Pods-HelloSwift-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Appboy-iOS-SDK/Appboy_iOS_SDK.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Appboy_iOS_SDK.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-HelloSwift/Pods-HelloSwift-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tCE93076C7DBCA3910A2559DC /* [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\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-tvOS_HelloSwift-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tD9111A74880B4992F72D3D91 /* [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\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-HelloSwift-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF807FE5B4E41739B28F15A1C /* [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\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-HelloSwiftNotificationContentExtension-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t132CC5962375E3FE007F3576 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t132CC5A12375E3FE007F3576 /* NotificationViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4E1644E81A04170E0007CA5C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4E1644F41A04170E0007CA5C /* ViewController.swift in Sources */,\n\t\t\t\t4E1644F21A04170E0007CA5C /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7FE56AD22347F15B00A1AB59 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7FE56ADB2347F15B00A1AB59 /* ContentView.swift in Sources */,\n\t\t\t\t7FE56AD92347F15B00A1AB59 /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7FE56AE52347F15D00A1AB59 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7FE56AF02347F15D00A1AB59 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC06D5DD71ED367C100087F72 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC06D5DDE1ED367C200087F72 /* NotificationService.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF58337A427EBBBEA0084DED0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF58337B227EBBC220084DED0 /* AppboyPushUnitTests.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\t132CC5A72375E3FE007F3576 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tplatformFilter = ios;\n\t\t\ttarget = 132CC5992375E3FE007F3576 /* HelloSwiftNotificationContentExtension */;\n\t\t\ttargetProxy = 132CC5A62375E3FE007F3576 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7FE56AEB2347F15D00A1AB59 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 7FE56AD52347F15B00A1AB59 /* tvOS_HelloSwift */;\n\t\t\ttargetProxy = 7FE56AEA2347F15D00A1AB59 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7FE56AF62347F15D00A1AB59 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 7FE56AD52347F15B00A1AB59 /* tvOS_HelloSwift */;\n\t\t\ttargetProxy = 7FE56AF52347F15D00A1AB59 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC06D5DE11ED367C200087F72 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C06D5DDA1ED367C100087F72 /* HelloSwiftNotificationExtension */;\n\t\t\ttargetProxy = C06D5DE01ED367C200087F72 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF58337AD27EBBBEA0084DED0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 4E1644EB1A04170E0007CA5C /* HelloSwift */;\n\t\t\ttargetProxy = F58337AC27EBBBEA0084DED0 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t132CC5A22375E3FE007F3576 /* MainInterface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t132CC5A32375E3FE007F3576 /* Base */,\n\t\t\t);\n\t\t\tname = MainInterface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4E1644F51A04170E0007CA5C /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t4E1644F61A04170E0007CA5C /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4E1644FA1A04170E0007CA5C /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t4E1644FB1A04170E0007CA5C /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7FE56AE12347F15D00A1AB59 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t7FE56AE22347F15D00A1AB59 /* 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\t132CC5A92375E3FE007F3576 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = BD0DDDF3128C8BAAC10F18AC /* Pods-HelloSwiftNotificationContentExtension.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = HelloSwiftNotificationContentExtension/HelloSwiftNotificationContentExtension.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = HelloSwiftNotificationContentExtension/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Appboy.HelloSwift.HelloSwiftNotificationContentExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t132CC5AA2375E3FE007F3576 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = AD4B0F7FE291E7D3736A0157 /* Pods-HelloSwiftNotificationContentExtension.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = HelloSwiftNotificationContentExtension/HelloSwiftNotificationContentExtension.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = HelloSwiftNotificationContentExtension/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Appboy.HelloSwift.HelloSwiftNotificationContentExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4E1645091A04170E0007CA5C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\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_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_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.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPROVISIONING_PROFILE = \"$(sigh_Appboy.HelloSwift_development)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"match Development Appboy.HelloSwift\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloSwift/HelloSwift-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4E16450A1A04170E0007CA5C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Distribution\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\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.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPROVISIONING_PROFILE = \"$(sigh_Appboy.HelloSwift_development)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"match Development Appboy.HelloSwift\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"HelloSwift/HelloSwift-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4E16450C1A04170E0007CA5C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6D7AD2FB444492B74DBC24D0 /* Pods-HelloSwift.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = HelloSwift/HelloSwift.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=macosx*]\" = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = HelloSwift/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\t\"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]\" = 14.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Appboy.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]\" = \"\";\n\t\t\t\tSUPPORTS_MACCATALYST = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4E16450D1A04170E0007CA5C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9DE7E291CEFF12F7718C1C33 /* Pods-HelloSwift.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = HelloSwift/HelloSwift.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=macosx*]\" = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = HelloSwift/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\t\"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]\" = 14.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Appboy.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]\" = \"\";\n\t\t\t\tSUPPORTS_MACCATALYST = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t7FE56AFB2347F15D00A1AB59 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B73F246918A581AD40E4C249 /* Pods-tvOS_HelloSwift.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"App Icon & Top Shelf Image\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"tvOS_HelloSwift/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = tvOS_HelloSwift/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.braze.tvOS-HelloSwift\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t7FE56AFC2347F15D00A1AB59 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9C092523A071C1D0B861AF84 /* Pods-tvOS_HelloSwift.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"App Icon & Top Shelf Image\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"tvOS_HelloSwift/Preview Content\\\"\";\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = tvOS_HelloSwift/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.braze.tvOS-HelloSwift\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t7FE56AFD2347F15D00A1AB59 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = tvOS_HelloSwiftTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.braze.tvOS-HelloSwiftTests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/tvOS_HelloSwift.app/tvOS_HelloSwift\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t7FE56AFE2347F15D00A1AB59 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = tvOS_HelloSwiftTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.braze.tvOS-HelloSwiftTests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/tvOS_HelloSwift.app/tvOS_HelloSwift\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t7FE56AFF2347F15D00A1AB59 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = tvOS_HelloSwiftUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.braze.tvOS-HelloSwiftUITests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTEST_TARGET_NAME = tvOS_HelloSwift;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t7FE56B002347F15D00A1AB59 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tINFOPLIST_FILE = tvOS_HelloSwiftUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.braze.tvOS-HelloSwiftUITests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTEST_TARGET_NAME = tvOS_HelloSwift;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 13.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC06D5DE41ED367C200087F72 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = HelloSwiftNotificationExtension/HelloSwiftNotificationExtension.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=macosx*]\" = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = HelloSwiftNotificationExtension/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Appboy.HelloSwift.HelloSwiftNotificationExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]\" = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTS_MACCATALYST = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC06D5DE51ED367C200087F72 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = HelloSwiftNotificationExtension/HelloSwiftNotificationExtension.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=macosx*]\" = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = HelloSwiftNotificationExtension/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@executable_path/../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = Appboy.HelloSwift.HelloSwiftNotificationExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]\" = \"\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTS_MACCATALYST = YES;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF58337AE27EBBBEA0084DED0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1EE5CC8DA7D5DF8152E000B6 /* Pods-HelloSwiftTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++17\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.HelloSwiftTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = NO;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/HelloSwift.app/HelloSwift\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF58337AF27EBBBEA0084DED0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 07EE7CBFD0B37B99E667B7D3 /* Pods-HelloSwiftTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++17\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.HelloSwiftTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = NO;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/HelloSwift.app/HelloSwift\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t132CC5AB2375E3FE007F3576 /* Build configuration list for PBXNativeTarget \"HelloSwiftNotificationContentExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t132CC5A92375E3FE007F3576 /* Debug */,\n\t\t\t\t132CC5AA2375E3FE007F3576 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4E1644E71A04170E0007CA5C /* Build configuration list for PBXProject \"HelloSwift\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4E1645091A04170E0007CA5C /* Debug */,\n\t\t\t\t4E16450A1A04170E0007CA5C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4E16450B1A04170E0007CA5C /* Build configuration list for PBXNativeTarget \"HelloSwift\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4E16450C1A04170E0007CA5C /* Debug */,\n\t\t\t\t4E16450D1A04170E0007CA5C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7FE56B012347F15D00A1AB59 /* Build configuration list for PBXNativeTarget \"tvOS_HelloSwift\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t7FE56AFB2347F15D00A1AB59 /* Debug */,\n\t\t\t\t7FE56AFC2347F15D00A1AB59 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7FE56B022347F15D00A1AB59 /* Build configuration list for PBXNativeTarget \"tvOS_HelloSwiftTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t7FE56AFD2347F15D00A1AB59 /* Debug */,\n\t\t\t\t7FE56AFE2347F15D00A1AB59 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7FE56B032347F15D00A1AB59 /* Build configuration list for PBXNativeTarget \"tvOS_HelloSwiftUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t7FE56AFF2347F15D00A1AB59 /* Debug */,\n\t\t\t\t7FE56B002347F15D00A1AB59 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC06D5DE31ED367C200087F72 /* Build configuration list for PBXNativeTarget \"HelloSwiftNotificationExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC06D5DE41ED367C200087F72 /* Debug */,\n\t\t\t\tC06D5DE51ED367C200087F72 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF58337B027EBBBEA0084DED0 /* Build configuration list for PBXNativeTarget \"HelloSwiftTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF58337AE27EBBBEA0084DED0 /* Debug */,\n\t\t\t\tF58337AF27EBBBEA0084DED0 /* 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 = 4E1644E41A04170E0007CA5C /* Project object */;\n}\n"
  },
  {
    "path": "HelloSwift/HelloSwift.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:HelloSwift.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "HelloSwift/HelloSwiftNotificationContentExtension/Base.lproj/MainInterface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"15400\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"M4Y-Lb-cyx\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"15404\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Notification View Controller-->\n        <scene sceneID=\"cwh-vc-ff4\">\n            <objects>\n                <viewController id=\"M4Y-Lb-cyx\" userLabel=\"Notification View Controller\" customClass=\"NotificationViewController\" customModule=\"HelloSwiftNotificationContentExtension\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" simulatedAppContext=\"notificationCenter\" id=\"S3S-Oj-5AN\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"37\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sCf-6s-Piw\" customClass=\"ABKStoriesView\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"37\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.45882353186607361\" green=\"0.74901962280273438\" blue=\"0.66666668653488159\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"2BE-c3-nQJ\"/>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n                    <size key=\"freeformSize\" width=\"320\" height=\"37\"/>\n                    <connections>\n                        <outlet property=\"storiesView\" destination=\"sCf-6s-Piw\" id=\"UgQ-aq-GTC\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"vXp-U4-Rya\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"139\" y=\"70\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "HelloSwift/HelloSwiftNotificationContentExtension/HelloSwiftNotificationContentExtension.entitlements",
    "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>aps-environment</key>\n\t<string>development</string>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.Appboy.HelloSwift</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "HelloSwift/HelloSwiftNotificationContentExtension/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>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>HelloSwiftNotificationContentExtension</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>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionAttributes</key>\n\t\t<dict>\n\t\t\t<key>UNNotificationExtensionDefaultContentHidden</key>\n\t\t\t<true/>\n\t\t\t<key>UNNotificationExtensionCategory</key>\n\t\t\t<string>ab_cat_push_story_v2</string>\n\t\t\t<key>UNNotificationExtensionInitialContentSizeRatio</key>\n\t\t\t<real>0.65</real>\n\t\t</dict>\n\t\t<key>NSExtensionMainStoryboard</key>\n\t\t<string>MainInterface</string>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.usernotifications.content-extension</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "HelloSwift/HelloSwiftNotificationContentExtension/NotificationViewController.swift",
    "content": "import AppboyPushStory\nimport UIKit\nimport UserNotifications\nimport UserNotificationsUI\n\nclass NotificationViewController: UIViewController, UNNotificationContentExtension {\n\n  @IBOutlet weak var storiesView: ABKStoriesView!\n  var dataSource: ABKStoriesViewDataSource?\n    \n  func didReceive(_ notification: UNNotification) {\n    dataSource = ABKStoriesViewDataSource(notification: notification, storiesView: storiesView, appGroup: \"group.Appboy.HelloSwift\")\n  }\n    \n  func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {\n    if dataSource != nil {\n      let option: UNNotificationContentExtensionResponseOption = dataSource!.didReceive(response)\n      completion(option)\n    }\n  }\n    \n  override func viewWillDisappear(_ animated: Bool) {\n    dataSource?.viewWillDisappear()\n    super.viewWillDisappear(animated)\n  }\n}\n"
  },
  {
    "path": "HelloSwift/HelloSwiftNotificationExtension/HelloSwiftNotificationExtension.entitlements",
    "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>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.network.client</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "HelloSwift/HelloSwiftNotificationExtension/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>HelloSwiftNotificationExtension</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>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.usernotifications.service</string>\n\t\t<key>NSExtensionPrincipalClass</key>\n\t\t<string>$(PRODUCT_MODULE_NAME).NotificationService</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "HelloSwift/HelloSwiftNotificationExtension/NotificationService.swift",
    "content": "import UserNotifications\nimport UIKit\n\nlet AppboyAPNSDictionaryKey = \"ab\"\nlet AppboyAPNSDictionaryAttachmentKey = \"att\"\nlet AppboyAPNSDictionaryAttachmentURLKey = \"url\"\nlet AppboyAPNSDictionaryAttachmentTypeKey = \"type\"\n\nclass NotificationService: UNNotificationServiceExtension {\n  \n  var bestAttemptContent: UNMutableNotificationContent?\n  var contentHandler: ((UNNotificationContent) -> Void)?\n  var originalContent: UNMutableNotificationContent?\n  var abortOnAttachmentFailure: Bool = false\n  \n  override func didReceive(_ request: UNNotificationRequest, withContentHandler handler: @escaping (UNNotificationContent) -> Void) {\n    \n    contentHandler = handler\n    bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)\n    originalContent = (request.content.mutableCopy() as? UNMutableNotificationContent)\n      \n    print(\"[APPBOY] Push with mutable content received.\")\n      \n    guard let appboyPayload = request.content.userInfo[AppboyAPNSDictionaryKey] as? [AnyHashable : Any] else { return displayOriginalContent(\"Push is not from Appboy.\") }\n    \n    guard let attachmentPayload = appboyPayload[AppboyAPNSDictionaryAttachmentKey] as? [AnyHashable : Any] else { return displayOriginalContent(\"Push has no attachment.\") }\n    \n    guard let attachmentURLString = attachmentPayload[AppboyAPNSDictionaryAttachmentURLKey] as? String else { return displayOriginalContent(\"Push has no attachment.\") }\n    \n    guard let attachmentURL = URL(string: attachmentURLString) else { return displayOriginalContent(\"Cannot parse \\(attachmentURLString) to URL.\") }\n    \n    print(\"[APPBOY] Attachment URL string is \\(attachmentURLString)\")\n    \n    guard let attachmentType = attachmentPayload[AppboyAPNSDictionaryAttachmentTypeKey] as? String else { return displayOriginalContent(\"Push attachment has no type.\") }\n    \n    print(\"[APPBOY] Attachment type is \\(attachmentType)\")\n    let fileSuffix: String = \".\\(attachmentType)\"\n    \n    // Download, store, and attach the content to the notification\n    let session = URLSession(configuration: URLSessionConfiguration.default)\n      \n    session.downloadTask(\n      with: attachmentURL,\n      completionHandler: { (temporaryFileLocation, response, error) in\n        \n      guard let temporaryFileLocation = temporaryFileLocation, error == nil else {\n        return self.displayOriginalContent(\"Error fetching attachment, displaying content unaltered: \\(String(describing: error?.localizedDescription))\")\n      }\n        \n      print(\"[Appboy] Data fetched from server, processing with temporary file url \\(temporaryFileLocation.absoluteString)\")\n        \n      let typedAttachmentURL = URL(fileURLWithPath:\"\\(temporaryFileLocation.path)\\(fileSuffix)\")\n        \n      do {\n        try FileManager.default.moveItem(at: temporaryFileLocation, to: typedAttachmentURL)\n      }\n      catch {\n        return self.displayOriginalContent(\"Failed to move file path.\")\n      }\n        \n      guard let attachment = try? UNNotificationAttachment(identifier: \"\", url: typedAttachmentURL, options: nil) else { return self.displayOriginalContent(\"Attachment returned error.\") }\n        \n      guard let bestAttemptContent = self.bestAttemptContent else { return self.displayOriginalContent(\"bestAttemptContent is nil\") }\n        \n      bestAttemptContent.attachments = [attachment];\n      handler(bestAttemptContent);\n      }).resume()\n  }\n    \n  func displayOriginalContent(_ extraLogging: String) {\n    print(\"[APPBOY] \\(extraLogging)\")\n    print(\"[APPBOY] Displaying original content.\")\n      \n    guard let contentHandler = contentHandler, let originalContent = originalContent else { return }\n    \n    contentHandler(originalContent)\n  }\n    \n  override func serviceExtensionTimeWillExpire() {\n    // Called just before the extension will be terminated by the system.\n    // Use this as an opportunity to deliver your \"best attempt\" at modified content, otherwise the original push payload will be used.\n    displayOriginalContent(\"Service extension called, displaying original content.\")\n  }\n\n}\n"
  },
  {
    "path": "HelloSwift/HelloSwiftTests/AppboyPushUnitTests.m",
    "content": "#import \"Appboy.h\"\n#import <OCMock/OCMock.h>\n#import <UIKit/UIKit.h>\n#import <UserNotifications/UserNotifications.h>\n#import <XCTest/XCTest.h>\n\n/**\n * A collection of test cases to verify a successful implementation of push\n * notifications using Braze.\n\n * In a unit testing target, as long as this file is included,\n * the target will run all of this class's unit tests. No additional code is required.\n *\n * @seealso https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/\n */\n@interface AppboyPushUnitTests : XCTestCase\n\n@end\n\n@implementation AppboyPushUnitTests\n\n// MARK: - Push Registration\n\n/**\n * Checks whether the app registers for push notifications when launching.\n *\n * @discussion This test case will pass if the AppDelegate's\n * @c application:didFinishLaunchingWithOptions: method results in a call to:\n *\n * @code\n * [[UIApplication sharedApplication] registerForRemoteNotifications];\n * @endcode\n *\n * @seealso https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/#step-3-register-for-push-notifications\n */\n- (void)testDidFinishLaunchingWithOptions_RegistersForPush {\n  id partialMock = [OCMockObject partialMockForObject:UIApplication.sharedApplication];\n  UIApplication *application = UIApplication.sharedApplication;\n\n  // Launch app\n  [application.delegate application:application didFinishLaunchingWithOptions:nil];\n\n  // Confirm app registered for push\n  OCMVerify([partialMock registerForRemoteNotifications]);\n}\n\n// MARK: - Push Tokens\n\n/**\n * Checks whether the app registers the device's push token with the\n * Braze SDK when the system registers for push notifications.\n *\n * @discussion This test case will pass if the AppDelegate's\n * @c application:didRegisterForRemoteNotificationsWithDeviceToken: method\n * results in a call to:\n *\n * @code\n * [[Appboy sharedInstance] registerDeviceToken:deviceToken];\n * @endcode\n *\n * @seealso https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/#step-4-register-push-tokens-with-braze\n */\n- (void)testDidRegisterForRemoteNotificationsWithDeviceToken {\n  id partialMock = [OCMockObject partialMockForObject:[Appboy sharedInstance]];\n  UIApplication *application = UIApplication.sharedApplication;\n  NSData *token = [[NSData alloc] init];\n\n  // Register with device token\n  [application.delegate application:application didRegisterForRemoteNotificationsWithDeviceToken:token];\n\n  // Confirm device token logged to Braze\n  OCMVerify([partialMock registerDeviceToken:token]);\n}\n\n// MARK: - Push Analytics and Handling\n\n/**\n * Checks whether the app uses Braze to handle newly received push notifications.\n *\n * @discussion This test case will pass if the AppDelegate's\n * @c application:didFinishLaunchingWithOptions: method sets a valid\n * @c UNUserNotificationCenterDelegate as the\n *\n * @code\n * [UNUserNotificationCenter currentNotificationCenter].delegate\n * @endcode\n *\n * AND the AppDelegate's\n * @c application:didReceiveRemoteNotification:fetchCompletionHandler: method\n * results in a call to:\n *\n * @code\n * [[Appboy sharedInstance] registerApplication:application\n *                 didReceiveRemoteNotification:userInfo\n *                       fetchCompletionHandler:completionHandler];\n * @endcode\n *\n * @seealso https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/#step-5-enable-push-handling\n */\n- (void)testDidReceiveRemoteNotification {\n  id partialMock = [OCMockObject partialMockForObject:[Appboy sharedInstance]];\n  UIApplication *application = UIApplication.sharedApplication;\n\n  // Receive notification\n  [application.delegate application:application\n       didReceiveRemoteNotification:@{}\n             fetchCompletionHandler:^(UIBackgroundFetchResult result) {}];\n\n  // Confirm notification logged to Braze\n  OCMVerify([partialMock registerApplication:application\n                didReceiveRemoteNotification:@{}\n                      fetchCompletionHandler:[OCMArg any]]);\n}\n\n/**\n * Checks whether the app uses Braze to handle any interaction with a push notification.\n *\n * @discussion This test case will pass if the AppDelegate's\n * @c application:didFinishLaunchingWithOptions: method sets a valid\n * @c UNUserNotificationCenterDelegate as the\n *\n * @code\n * [UNUserNotificationCenter currentNotificationCenter].delegate\n * @endcode\n *\n * AND the AppDelegate's\n * @c userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: method\n * results in a call to:\n *\n * @code\n * [[Appboy sharedInstance] userNotificationCenter:center\n *                  didReceiveNotificationResponse:response\n *                           withCompletionHandler:completionHandler];\n * @endcode\n *\n * @seealso https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/#step-5-enable-push-handling\n */\n- (void)testDidReceiveNotificationResponse {\n  id partialMock = [OCMockObject partialMockForObject:[Appboy sharedInstance]];\n  UNUserNotificationCenter *notificationCenter = UNUserNotificationCenter.currentNotificationCenter;\n  UNNotificationResponse *response = OCMClassMock([UNNotificationResponse class]);\n\n  // Receive notification response\n  [notificationCenter.delegate userNotificationCenter:notificationCenter\n                       didReceiveNotificationResponse:response\n                                withCompletionHandler:^{}];\n\n  // Confirm response logged to Braze\n  OCMVerify([partialMock userNotificationCenter:notificationCenter\n                 didReceiveNotificationResponse:response\n                          withCompletionHandler:[OCMArg any]]);\n}\n\n/**\n * Checks whether the app handles push notifications while foregrounded.\n *\n * @discussion This test case will pass if the AppDelegate's\n * @c userNotificationCenter:willPresentNotification:withCompletionHandler: method\n * results in calling the provided @c completionHandler\n *\n * @seealso https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/#step-5-enable-push-handling\n */\n- (void)testForegroundPushHandling {\n  UNUserNotificationCenter *notificationCenter = UNUserNotificationCenter.currentNotificationCenter;\n  UNNotification *notification = OCMClassMock([UNNotification class]);\n\n  XCTestExpectation *expectation = [[XCTestExpectation alloc] initWithDescription:@\"Completion handler should be called\"];\n\n  [notificationCenter.delegate userNotificationCenter:notificationCenter\n                              willPresentNotification:notification\n                                withCompletionHandler:^(UNNotificationPresentationOptions options) {\n    [expectation fulfill];\n  }];\n\n  [self waitForExpectations:@[expectation] timeout:0.5];\n}\n\n@end\n"
  },
  {
    "path": "HelloSwift/Podfile",
    "content": "# We use the spec repository instead of the cdn because it is doesn't suffer\n# from the cdn's caching delays.\nsource 'https://github.com/CocoaPods/Specs.git'\n\nuse_frameworks!\n\ntarget 'HelloSwift' do\n  platform :ios, '11.0'\n  pod 'Appboy-iOS-SDK'\n  # pod 'Appboy-iOS-SDK', :path => './../../Appboy-iOS-SDK/'\n\n  target 'HelloSwiftTests' do\n    inherit! :search_paths\n    pod 'OCMock'\n  end\n  \nend\n\ntarget 'HelloSwiftNotificationContentExtension' do\n  platform :ios, '11.0'\n  pod 'Appboy-Push-Story'\n  # pod 'Appboy-Push-Story', :path => './../../Appboy-Push-Story/'\nend\n\ntarget 'tvOS_HelloSwift' do\n  platform :tvos, '11.0'\n  pod 'Appboy-tvOS-SDK'\n  # pod 'Appboy-tvOS-SDK', :path => './../../Appboy-tvOS-SDK/'\nend\n\npost_install do |installer|\n    installer.pods_project.targets.each do |target|\n        # Fix bundle targets' 'Signing Certificate' to 'Sign to Run Locally'\n        if target.respond_to?(:product_type) and target.product_type == \"com.apple.product-type.bundle\"\n            target.build_configurations.each do |config|\n                config.build_settings['CODE_SIGN_IDENTITY[sdk=macosx*]'] = '-'\n            end\n        end\n    end\nend\n"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/AppDelegate.swift",
    "content": "import UIKit\nimport SwiftUI\nimport AppboyTVOSKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n  var window: UIWindow?\n\n  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n    // Create the SwiftUI view that provides the window contents.\n    let contentView = ContentView()\n\n    // Use a UIHostingController as window root view controller.\n    let window = UIWindow(frame: UIScreen.main.bounds)\n    window.rootViewController = UIHostingController(rootView: contentView)\n    self.window = window\n    window.makeKeyAndVisible()\n\n    Appboy.start(withApiKey: \"1fbb9af3-93e0-43a2-920c-c6d867dab72a\", in:application, withLaunchOptions:launchOptions)\n    Appboy.sharedInstance()?.logCustomEvent(\"hello-tv-OS\");\n\n    return true\n  }\n\n  func applicationWillResignActive(_ application: UIApplication) {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n  }\n\n  func applicationDidEnterBackground(_ application: UIApplication) {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n  }\n\n  func applicationWillEnterForeground(_ application: UIApplication) {\n    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.\n  }\n\n  func applicationDidBecomeActive(_ application: UIApplication) {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n  }\n}\n"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json",
    "content": "{\n  \"layers\" : [\n    {\n      \"filename\" : \"Front.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Middle.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Back.imagestacklayer\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json",
    "content": "{\n  \"layers\" : [\n    {\n      \"filename\" : \"Front.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Middle.imagestacklayer\"\n    },\n    {\n      \"filename\" : \"Back.imagestacklayer\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json",
    "content": "{\n  \"assets\" : [\n    {\n      \"size\" : \"1280x768\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"App Icon - App Store.imagestack\",\n      \"role\" : \"primary-app-icon\"\n    },\n    {\n      \"size\" : \"400x240\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"App Icon.imagestack\",\n      \"role\" : \"primary-app-icon\"\n    },\n    {\n      \"size\" : \"2320x720\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Top Shelf Image Wide.imageset\",\n      \"role\" : \"top-shelf-image-wide\"\n    },\n    {\n      \"size\" : \"1920x720\",\n      \"idiom\" : \"tv\",\n      \"filename\" : \"Top Shelf Image.imageset\",\n      \"role\" : \"top-shelf-image\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"tv-marketing\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv-marketing\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"tv-marketing\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"tv-marketing\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder.AppleTV.Storyboard\" version=\"3.0\" toolsVersion=\"13122.16\" targetRuntime=\"AppleTV\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\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\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1920\" height=\"1080\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"wu6-TO-1qx\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/ContentView.swift",
    "content": "import SwiftUI\nimport AppboyTVOSKit\n\nstruct ContentView: View {\n    var body: some View {\n      Text(\"Logged Custom Event 'hello-tv-OS' to Braze for user: \\(Appboy.sharedInstance()?.getDeviceId() ?? \"{nil}\")\")\n    }\n}\n\nstruct ContentView_Previews: PreviewProvider {\n    static var previews: some View {\n        ContentView()\n    }\n}\n"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/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>Braze</key>\n\t<dict>\n\t\t<key>Endpoint</key>\n\t\t<string>sondheim.appboy.com</string>\n\t\t<key>LogLevel</key>\n\t\t<string>0</string>\n\t</dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</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>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</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>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>arm64</string>\n\t</array>\n\t<key>UIUserInterfaceStyle</key>\n\t<string>Automatic</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "HelloSwift/tvOS_HelloSwift/Preview Content/Preview Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2019 Braze, Inc.\nAll rights reserved.\n\n* Use of source code or binaries contained within Braze’s SDKs is permitted only to enable use of the Braze platform by customers of Braze.\n* Modification of source code and inclusion in mobile apps is explicitly allowed provided that all other conditions are met.\n* Neither the name of Braze nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n* Redistribution of source code or binaries is disallowed except with specific prior written permission. Any such redistribution must retain the above copyright notice, this list of conditions and the following disclaimer.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.3\n\nimport PackageDescription\n\nlet package = Package(\n  name: \"Appboy_iOS_SDK\",\n  defaultLocalization: \"en\",\n  platforms: [\n    .iOS(.v9)\n  ],\n  products: [\n    .library(name: \"AppboyKit\", type: .static, targets: [\"AppboyKit\"]),\n    .library(name: \"AppboyUI\", targets: [\"AppboyUI\"]),\n    .library(name: \"AppboyPushStory\", targets: [\"AppboyPushStory\"])\n  ],\n  dependencies: [\n    .package(name: \"SDWebImage\", url: \"https://github.com/SDWebImage/SDWebImage.git\", from: \"5.18.7\")\n  ],\n  targets: [\n    .binaryTarget(\n      name: \"AppboyKitLibrary\",\n      url: \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.7.0/AppboyKitLibrary.xcframework.zip\",\n      checksum: \"1b05630bf08affc7944f4cb206fab41dc176aa0ca6ff76fd81718f83691b04dc\"\n    ),\n    .target(\n      name: \"AppboyKit\",\n      dependencies: [\"SDWebImage\", \"AppboyKitLibrary\"],\n      path: \"AppboyKit\",\n      resources: [\n        .process(\"Appboy.bundle\")\n      ],\n      linkerSettings: [\n        .linkedFramework(\"SystemConfiguration\"),\n        .linkedFramework(\"QuartzCore\"),\n        .linkedFramework(\"CoreImage\"),\n        .linkedFramework(\"CoreText\"),\n        .linkedFramework(\"WebKit\"),\n        .linkedFramework(\"UserNotifications\"),\n        .linkedFramework(\"CoreTelephony\", .when(platforms: [.iOS])),\n        .linkedLibrary(\"z\"),\n      ]\n    ),\n    .target(\n      name: \"AppboyUI\",\n      dependencies: [\"AppboyKit\"],\n      path: \"AppboyUI\",\n      resources: [\n        .process(\"ABKNewsFeed/Resources\"),\n        .process(\"ABKInAppMessage/Resources\"),\n        .process(\"ABKContentCards/Resources\")\n      ],\n      publicHeadersPath: \"include/AppboyUI\"\n    ),\n    .binaryTarget(\n      name: \"AppboyPushStoryFramework\",\n      url: \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.7.0/AppboyPushStoryFramework.xcframework.zip\",\n      checksum: \"989ddc65ac05faf64df4ab0bb96bd8a34c69730c54e90487ab9eb9d89aed2b1c\"\n    ),\n    .target(\n      name: \"AppboyPushStory\",\n      dependencies: [\"AppboyPushStoryFramework\"],\n      path: \"AppboyPushStory\",\n      resources: [\n        .process(\"Resources/ABKPageView.nib\")\n      ]\n    )\n  ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "### ⚠ The new [Braze Swift SDK](https://github.com/braze-inc/braze-swift-sdk) is now available! ⚠\n\nThe Appboy iOS SDK (Objective-C SDK) is no longer in active development. All new iOS features Braze releases, like Live Activities and Feature Flags, will only be supported on the [Swift SDK](https://github.com/braze-inc/braze-swift-sdk). Any further updates the Appboy iOS SDK receives will only address security or critical bugs. After March 1, 2024 this repository will no longer be maintained.\n\nSee [our blog post](https://www.braze.com/resources/articles/introducing-the-new-braze-swift-sdk) for more information.\n\n</br>\n\n<img src=\"braze-logo.png\" width=\"300\" title=\"Braze Logo\" />\n\n# iOS SDK\n\nSuccessful marketing automation is essential to the future of your mobile app. Braze helps you engage your users beyond the download. Visit the following links for details and we'll have you up and running in no time!\n\n- [Braze User Guide](https://www.braze.com/docs/user_guide/introduction/ \"Braze User Guide\")\n- [Braze Developer Guide](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/ \"Braze Developer Guide\")\n- [Full Class Documentation](http://appboy.github.io/appboy-ios-sdk/docs/annotated.html \"Braze iOS SDK Class Documentation\")\n\n## Components\n\n- `AppboyKit` - Contains the variant of our SDK.\n- `AppboyUI` - Contains the open-source UI code of our SDK. Not all of the UI code of the SDK is open-source.\n- `Samples` - Contains sample apps for different Braze features.\n- `Example` - Contains the Stopwatch Sample App which contains integration examples for the iOS SDK.\n\t- The Stopwatch Sample App uses our [CocoaPods](http://guides.cocoapods.org/) integration (`Appboy-iOS-SDK`), so you must :\n\t  1. [Install CocoaPods](http://guides.cocoapods.org/using/getting-started.html)\n\t  2. Run `pod install` in the `Example` directory\n\t  3. Open the `Stopwatch.xcworkspace` to open the project.\n\n## Version Support\n\n- The iOS SDK supports iOS `11.0`+.\n- This SDK is built using Xcode `14.2`.\n  - SDK versions prior to `4.6.0` were built with Xcode `13.x` or older.\n\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) as a prebuilt framework.  Building from source currently not supported, see [#85](https://github.com/Appboy/appboy-ios-sdk/issues/85). \n\n## Questions?\n\nIf you have questions, please contact [support@braze.com](mailto:support@braze.com).\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n@end\n\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/AppDelegate.m",
    "content": "#import \"AppDelegate.h\"\n#import \"Appboy-iOS-SDK/AppboyKit.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  [Appboy startWithApiKey:@\"84c34224-38f6-4dad-9702-f2163df080b6\"\n            inApplication:application\n        withLaunchOptions:launchOptions];\n  \n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(contentCardsUpdatedNotificationReceived:)\n                                               name:ABKContentCardsProcessedNotification\n                                             object:nil];\n  \n  return YES;\n}\n\n- (void)contentCardsUpdatedNotificationReceived:(NSNotification *)notification {\n  BOOL updateIsSuccessful = [notification.userInfo[ABKContentCardsProcessedIsSuccessfulKey] boolValue];\n  if (updateIsSuccessful) {\n    // Get an array containing only cards that have the \"example\" feed type set in their extras.\n    NSArray<ABKContentCard *> *filteredArray = [self getCardsForFeedType:@\"example\"];\n    NSLog(@\"Got filtered array of length: %lu\", [filteredArray count]);\n  }\n}\n\n- (NSArray<ABKContentCard *> *)getCardsForFeedType:(NSString *)type {\n  NSArray<ABKContentCard *> *cards = [Appboy.sharedInstance.contentCardsController getContentCards];\n\n  NSArray<ABKContentCard *> *filteredArray = [cards filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(ABKContentCard * card, NSDictionary *bindings) {\n    NSDictionary *extras = [card extras];\n    if (extras != nil && [extras objectForKey:@\"feed_type\"] != nil && [[extras objectForKey:@\"feed_type\"] isEqualToString:type]) {\n      NSLog(@\"Got card: %@ \", card.idString);\n      return YES;\n    }\n    return NO;\n  }]];\n\n  return filteredArray;\n}\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/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=\"13122.16\" systemVersion=\"17A277\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\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": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/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=\"15400\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"8r8-z8-C9b\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"15404\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\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                    <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=\"ZJC-3N-FSW\">\n                                <rect key=\"frame\" x=\"114.5\" y=\"115\" width=\"146\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Modal Content Cards\"/>\n                                <connections>\n                                    <action selector=\"displayModalContentCards:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"Vng-cc-yKX\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2gi-3C-glS\">\n                                <rect key=\"frame\" x=\"99.5\" y=\"165\" width=\"176\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Navigation Content Cards\"/>\n                                <connections>\n                                    <action selector=\"displayNavigationContentCards:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"oZ8-H4-u1e\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Hfo-g0-YKF\">\n                                <rect key=\"frame\" x=\"109\" y=\"215\" width=\"157\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Custom Content Cards\"/>\n                                <connections>\n                                    <action selector=\"displayCustomContentCards:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"WkW-aS-ZlD\"/>\n                                </connections>\n                            </button>\n                            <stackView opaque=\"NO\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8aP-uO-Gv1\">\n                                <rect key=\"frame\" x=\"75\" y=\"265\" width=\"225\" height=\"34\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"User ID:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CVq-Ct-VRX\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"61.5\" height=\"34\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                        <nil key=\"textColor\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                    <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Gve-fy-fxm\">\n                                        <rect key=\"frame\" x=\"61.5\" y=\"0.0\" width=\"163.5\" height=\"34\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                        <textInputTraits key=\"textInputTraits\" autocorrectionType=\"no\" spellCheckingType=\"no\" smartQuotesType=\"no\"/>\n                                    </textField>\n                                </subviews>\n                            </stackView>\n                            <stackView opaque=\"NO\" contentMode=\"scaleToFill\" distribution=\"equalSpacing\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"a9I-Py-ood\">\n                                <rect key=\"frame\" x=\"89.5\" y=\"64\" width=\"196.5\" height=\"31\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Unread Indicator\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Rz3-o0-ZqT\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"127.5\" height=\"31\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                        <nil key=\"textColor\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"WTA-1U-pNL\">\n                                        <rect key=\"frame\" x=\"147.5\" y=\"0.0\" width=\"51\" height=\"31\"/>\n                                    </switch>\n                                </subviews>\n                                <constraints>\n                                    <constraint firstItem=\"WTA-1U-pNL\" firstAttribute=\"leading\" secondItem=\"Rz3-o0-ZqT\" secondAttribute=\"trailing\" constant=\"20\" id=\"zbZ-l4-pyG\"/>\n                                </constraints>\n                            </stackView>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yfQ-6j-9OW\">\n                                <rect key=\"frame\" x=\"142.5\" y=\"319\" width=\"90\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Change User\"/>\n                                <connections>\n                                    <action selector=\"changeUser:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"G8q-em-EGV\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"8aP-uO-Gv1\" firstAttribute=\"centerX\" secondItem=\"ZJC-3N-FSW\" secondAttribute=\"centerX\" id=\"3Qp-TF-n2b\"/>\n                            <constraint firstItem=\"a9I-Py-ood\" firstAttribute=\"top\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"top\" constant=\"20\" id=\"8ml-yj-h6a\"/>\n                            <constraint firstItem=\"ZJC-3N-FSW\" firstAttribute=\"top\" secondItem=\"a9I-Py-ood\" secondAttribute=\"bottom\" constant=\"20\" id=\"AOq-ZQ-GOx\"/>\n                            <constraint firstItem=\"2gi-3C-glS\" firstAttribute=\"centerX\" secondItem=\"ZJC-3N-FSW\" secondAttribute=\"centerX\" id=\"D5g-8o-Dli\"/>\n                            <constraint firstItem=\"8aP-uO-Gv1\" firstAttribute=\"top\" secondItem=\"Hfo-g0-YKF\" secondAttribute=\"bottom\" constant=\"20\" id=\"NXu-vf-yno\"/>\n                            <constraint firstItem=\"yfQ-6j-9OW\" firstAttribute=\"top\" secondItem=\"Gve-fy-fxm\" secondAttribute=\"bottom\" constant=\"20\" id=\"bL4-YH-OeM\"/>\n                            <constraint firstItem=\"2gi-3C-glS\" firstAttribute=\"top\" secondItem=\"ZJC-3N-FSW\" secondAttribute=\"bottom\" constant=\"20\" id=\"ged-50-TRH\"/>\n                            <constraint firstItem=\"yfQ-6j-9OW\" firstAttribute=\"centerX\" secondItem=\"2gi-3C-glS\" secondAttribute=\"centerX\" id=\"h1Z-mC-Pze\"/>\n                            <constraint firstItem=\"Hfo-g0-YKF\" firstAttribute=\"top\" secondItem=\"2gi-3C-glS\" secondAttribute=\"bottom\" constant=\"20\" id=\"imZ-Fo-MAp\"/>\n                            <constraint firstItem=\"a9I-Py-ood\" firstAttribute=\"centerX\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"centerX\" id=\"ml0-Dr-L45\"/>\n                            <constraint firstItem=\"ZJC-3N-FSW\" firstAttribute=\"centerX\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"centerX\" id=\"phk-Pg-kcg\"/>\n                            <constraint firstItem=\"8aP-uO-Gv1\" firstAttribute=\"leading\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"leading\" constant=\"75\" id=\"qB8-Yt-LJo\"/>\n                            <constraint firstItem=\"Hfo-g0-YKF\" firstAttribute=\"centerX\" secondItem=\"2gi-3C-glS\" secondAttribute=\"centerX\" id=\"zyn-Se-vQM\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                    </view>\n                    <navigationItem key=\"navigationItem\" id=\"mPr-Q9-uJn\"/>\n                    <connections>\n                        <outlet property=\"unreadIndicatorSwitch\" destination=\"WTA-1U-pNL\" id=\"K5f-JW-m7o\"/>\n                        <outlet property=\"userTextField\" destination=\"Gve-fy-fxm\" id=\"saq-JH-RnV\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"132\" y=\"134\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"tq5-W9-tWT\">\n            <objects>\n                <navigationController id=\"8r8-z8-C9b\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" insetsLayoutMarginsFromSafeArea=\"NO\" id=\"L1G-ow-sYw\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"BYZ-38-t0r\" kind=\"relationship\" relationship=\"rootViewController\" id=\"5Lt-gF-cYx\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"81a-d3-bar\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"671\" y=\"134\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/CustomCaptionedImageContentCardCell.h",
    "content": "#import \"ABKCaptionedImageContentCardCell.h\"\n\n@interface CustomCaptionedImageContentCardCell : ABKCaptionedImageContentCardCell\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/CustomCaptionedImageContentCardCell.m",
    "content": "#import \"CustomCaptionedImageContentCardCell.h\"\n\n@implementation CustomCaptionedImageContentCardCell\n\n- (void)setUpUI {\n  [super setUpUI];\n  self.rootView.backgroundColor = [UIColor lightGrayColor];\n  self.rootView.layer.borderColor = [UIColor purpleColor].CGColor;\n  self.unviewedLineView.backgroundColor = [UIColor redColor];\n  self.titleBackgroundView.backgroundColor = [UIColor darkGrayColor];\n  self.titleLabel.textColor = [UIColor brownColor];\n  self.titleLabel.font = [UIFont italicSystemFontOfSize:20];\n}\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/CustomClassicContentCardCell.h",
    "content": "#import \"ABKClassicContentCardCell.h\"\n\n@interface CustomClassicContentCardCell : ABKClassicContentCardCell\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/CustomClassicContentCardCell.m",
    "content": "#import \"CustomClassicContentCardCell.h\"\n\n@implementation CustomClassicContentCardCell\n\n- (void)setUpUI {\n  [super setUpUI];\n  self.rootView.backgroundColor = [UIColor lightGrayColor];\n  self.rootView.layer.borderColor = [UIColor purpleColor].CGColor;\n  self.unviewedLineView.backgroundColor = [UIColor redColor];\n  self.titleLabel.font = [UIFont italicSystemFontOfSize:20];\n}\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/CustomContentCardsTableViewController.h",
    "content": "#import \"ABKContentCardsTableViewController.h\"\n\n@interface CustomContentCardsTableViewController : ABKContentCardsTableViewController\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/CustomContentCardsTableViewController.m",
    "content": "#import \"CustomContentCardsTableViewController.h\"\n#import \"ABKBannerContentCardCell.h\"\n#import \"ABKClassicImageContentCardCell.h\"\n#import \"ABKControlTableViewCell.h\"\n#import \"CustomClassicContentCardCell.h\"\n#import \"CustomCaptionedImageContentCardCell.h\"\n\n@interface CustomContentCardsTableViewController ()\n\n@end\n\n@implementation CustomContentCardsTableViewController\n\n- (void)registerTableViewCellClasses {\n  [super registerTableViewCellClasses];\n  \n  // Replace the default class registrations with custom classes for these two types of cards\n  [self.tableView registerClass:[CustomCaptionedImageContentCardCell class]\n         forCellReuseIdentifier:@\"ABKCaptionedImageContentCardCell\"];\n  [self.tableView registerClass:[CustomClassicContentCardCell class]\n         forCellReuseIdentifier:@\"ABKClassicCardCell\"];\n}\n\n- (void)handleCardClick:(ABKContentCard *)card {\n  NSLog(@\"The card %@ is clicked.\", card.idString);\n\n  [super handleCardClick:card];\n}\n\n- (void)populateContentCards {\n  NSMutableArray<ABKContentCard *> *cards = [NSMutableArray arrayWithArray:[Appboy.sharedInstance.contentCardsController getContentCards]];\n  for (ABKContentCard *card in cards) {\n    // Replaces the card description for all Classic content cards\n    if ([card isKindOfClass:[ABKClassicContentCard class]]) {\n      ((ABKClassicContentCard *)card).cardDescription = @\"Custom Feed Override title [classic cards only]!\";\n    }\n  }\n  super.cards = cards;\n}\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/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\n\t\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</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>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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/ViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n@property IBOutlet UISwitch *unreadIndicatorSwitch;\n@property IBOutlet UITextField *userTextField;\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/ViewController.m",
    "content": "#import \"ViewController.h\"\n#import \"AppboyContentCards.h\"\n#import \"CustomContentCardsTableViewController.h\"\n\n@interface ViewController () <ABKContentCardsTableViewControllerDelegate>\n\n@end\n\n@implementation ViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  NSString *userId = [Appboy sharedInstance].user.userID;\n  if (userId != nil) {\n    self.userTextField.text = userId;\n  }\n}\n\n- (IBAction)displayModalContentCards:(id)sender {\n  ABKContentCardsViewController *contentCards = [[ABKContentCardsViewController alloc] init];\n  contentCards.contentCardsViewController.delegate = self;\n  contentCards.contentCardsViewController.disableUnreadIndicator = !self.unreadIndicatorSwitch.on;\n  contentCards.contentCardsViewController.navigationItem.title = @\"Modal Cards\";\n  [self presentViewController:contentCards animated:YES completion:nil];\n}\n\n- (IBAction)displayNavigationContentCards:(id)sender {\n  ABKContentCardsTableViewController *contentCards = [[ABKContentCardsTableViewController alloc] init];\n  contentCards.delegate = self;\n  contentCards.disableUnreadIndicator = !self.unreadIndicatorSwitch.on;\n  contentCards.navigationItem.title = @\"Navigation Cards\";\n  [self.navigationController pushViewController:contentCards animated:YES];\n}\n\n- (IBAction)displayCustomContentCards:(id)sender {\n  CustomContentCardsTableViewController *contentCards = [[CustomContentCardsTableViewController alloc] init];\n  contentCards.delegate = self;\n  contentCards.disableUnreadIndicator = !self.unreadIndicatorSwitch.on;\n  contentCards.navigationItem.title = @\"Custom Cards\";\n  [self.navigationController pushViewController:contentCards animated:YES];\n}\n\n- (IBAction)changeUser:(id)sender {\n  if (self.userTextField.text.length > 0) {\n    NSString *userID = self.userTextField.text;\n    [[Appboy sharedInstance] changeUser:userID];\n  }\n}\n\n#pragma mark - ABKContentCardsTableViewControllerDelegate\n\n- (BOOL)contentCardTableViewController:(ABKContentCardsTableViewController *)viewController\n                 shouldHandleCardClick:(NSURL *)url {\n  NSLog(@\"%@\", NSStringFromSelector(_cmd));\n  return YES;\n}\n\n- (void)contentCardTableViewController:(ABKContentCardsTableViewController *)viewController\n                    didHandleCardClick:(NSURL *)url {\n  NSLog(@\"%@\", NSStringFromSelector(_cmd));\n}\n\n@end\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp/main.m",
    "content": "#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": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 51;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t087135B4069E8E043A69613F /* libPods-BrazeContentCardsSampleApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 90978684C830B2D43412487C /* libPods-BrazeContentCardsSampleApp.a */; };\n\t\tB207A7FF25EE9CD5003149F4 /* CustomContentCardsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B207A7FE25EE9CD5003149F4 /* CustomContentCardsTableViewController.m */; };\n\t\tB254C1CA25EECF34009D77BD /* CustomClassicContentCardCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B254C1C925EECF34009D77BD /* CustomClassicContentCardCell.m */; };\n\t\tB254C1CE25EECF61009D77BD /* CustomCaptionedImageContentCardCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B254C1CD25EECF61009D77BD /* CustomCaptionedImageContentCardCell.m */; };\n\t\tFCCC1FC820F4405400297CB2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FCCC1FC720F4405400297CB2 /* AppDelegate.m */; };\n\t\tFCCC1FCB20F4405400297CB2 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCCC1FCA20F4405400297CB2 /* ViewController.m */; };\n\t\tFCCC1FCE20F4405400297CB2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FCCC1FCC20F4405400297CB2 /* Main.storyboard */; };\n\t\tFCCC1FD020F4405600297CB2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FCCC1FCF20F4405600297CB2 /* Assets.xcassets */; };\n\t\tFCCC1FD320F4405600297CB2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FCCC1FD120F4405600297CB2 /* LaunchScreen.storyboard */; };\n\t\tFCCC1FD620F4405600297CB2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FCCC1FD520F4405600297CB2 /* main.m */; };\n\t\tFCCC1FDD20F4431000297CB2 /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = FCCC1FDC20F4431000297CB2 /* Podfile */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t10FACE6E962C5AFD8C73CAA9 /* Pods-BrazeContentCardsSampleApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-BrazeContentCardsSampleApp.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-BrazeContentCardsSampleApp/Pods-BrazeContentCardsSampleApp.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t77751F8ED975D08985565294 /* Pods-BrazeContentCardsSampleApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-BrazeContentCardsSampleApp.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-BrazeContentCardsSampleApp/Pods-BrazeContentCardsSampleApp.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t90978684C830B2D43412487C /* libPods-BrazeContentCardsSampleApp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-BrazeContentCardsSampleApp.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB207A7FD25EE9CD5003149F4 /* CustomContentCardsTableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CustomContentCardsTableViewController.h; sourceTree = \"<group>\"; };\n\t\tB207A7FE25EE9CD5003149F4 /* CustomContentCardsTableViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CustomContentCardsTableViewController.m; sourceTree = \"<group>\"; };\n\t\tB254C1C825EECF34009D77BD /* CustomClassicContentCardCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CustomClassicContentCardCell.h; sourceTree = \"<group>\"; };\n\t\tB254C1C925EECF34009D77BD /* CustomClassicContentCardCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CustomClassicContentCardCell.m; sourceTree = \"<group>\"; };\n\t\tB254C1CC25EECF61009D77BD /* CustomCaptionedImageContentCardCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CustomCaptionedImageContentCardCell.h; sourceTree = \"<group>\"; };\n\t\tB254C1CD25EECF61009D77BD /* CustomCaptionedImageContentCardCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CustomCaptionedImageContentCardCell.m; sourceTree = \"<group>\"; };\n\t\tFCCC1FC320F4405400297CB2 /* BrazeContentCardsSampleApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BrazeContentCardsSampleApp.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tFCCC1FC620F4405400297CB2 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tFCCC1FC720F4405400297CB2 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tFCCC1FC920F4405400297CB2 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\tFCCC1FCA20F4405400297CB2 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\tFCCC1FCD20F4405400297CB2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tFCCC1FCF20F4405600297CB2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tFCCC1FD220F4405600297CB2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tFCCC1FD420F4405600297CB2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tFCCC1FD520F4405600297CB2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tFCCC1FDC20F4431000297CB2 /* Podfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Podfile; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tFCCC1FC020F4405400297CB2 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t087135B4069E8E043A69613F /* libPods-BrazeContentCardsSampleApp.a 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\t3C57654EDEAD3B5FAB48110C /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t90978684C830B2D43412487C /* libPods-BrazeContentCardsSampleApp.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7DDDA18253139EBE322E718F /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t10FACE6E962C5AFD8C73CAA9 /* Pods-BrazeContentCardsSampleApp.debug.xcconfig */,\n\t\t\t\t77751F8ED975D08985565294 /* Pods-BrazeContentCardsSampleApp.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFCCC1FBA20F4405400297CB2 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFCCC1FDC20F4431000297CB2 /* Podfile */,\n\t\t\t\tFCCC1FC520F4405400297CB2 /* BrazeContentCardsSampleApp */,\n\t\t\t\tFCCC1FC420F4405400297CB2 /* Products */,\n\t\t\t\t7DDDA18253139EBE322E718F /* Pods */,\n\t\t\t\t3C57654EDEAD3B5FAB48110C /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFCCC1FC420F4405400297CB2 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFCCC1FC320F4405400297CB2 /* BrazeContentCardsSampleApp.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFCCC1FC520F4405400297CB2 /* BrazeContentCardsSampleApp */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFCCC1FC620F4405400297CB2 /* AppDelegate.h */,\n\t\t\t\tFCCC1FC720F4405400297CB2 /* AppDelegate.m */,\n\t\t\t\tFCCC1FC920F4405400297CB2 /* ViewController.h */,\n\t\t\t\tFCCC1FCA20F4405400297CB2 /* ViewController.m */,\n\t\t\t\tFCCC1FCC20F4405400297CB2 /* Main.storyboard */,\n\t\t\t\tFCCC1FCF20F4405600297CB2 /* Assets.xcassets */,\n\t\t\t\tFCCC1FD120F4405600297CB2 /* LaunchScreen.storyboard */,\n\t\t\t\tFCCC1FD420F4405600297CB2 /* Info.plist */,\n\t\t\t\tFCCC1FD520F4405600297CB2 /* main.m */,\n\t\t\t\tB207A7FD25EE9CD5003149F4 /* CustomContentCardsTableViewController.h */,\n\t\t\t\tB207A7FE25EE9CD5003149F4 /* CustomContentCardsTableViewController.m */,\n\t\t\t\tB254C1CC25EECF61009D77BD /* CustomCaptionedImageContentCardCell.h */,\n\t\t\t\tB254C1CD25EECF61009D77BD /* CustomCaptionedImageContentCardCell.m */,\n\t\t\t\tB254C1C825EECF34009D77BD /* CustomClassicContentCardCell.h */,\n\t\t\t\tB254C1C925EECF34009D77BD /* CustomClassicContentCardCell.m */,\n\t\t\t);\n\t\t\tpath = BrazeContentCardsSampleApp;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tFCCC1FC220F4405400297CB2 /* BrazeContentCardsSampleApp */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = FCCC1FD920F4405600297CB2 /* Build configuration list for PBXNativeTarget \"BrazeContentCardsSampleApp\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t550E0065CF3E32E69FD5B362 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tFCCC1FBF20F4405400297CB2 /* Sources */,\n\t\t\t\tFCCC1FC020F4405400297CB2 /* Frameworks */,\n\t\t\t\tFCCC1FC120F4405400297CB2 /* Resources */,\n\t\t\t\t143B1AF282CF29DC5F0C75C2 /* [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 = BrazeContentCardsSampleApp;\n\t\t\tproductName = BrazeContentCardsSampleApp;\n\t\t\tproductReference = FCCC1FC320F4405400297CB2 /* BrazeContentCardsSampleApp.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tFCCC1FBB20F4405400297CB2 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0940;\n\t\t\t\tORGANIZATIONNAME = Appboy;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tFCCC1FC220F4405400297CB2 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.4;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = FCCC1FBE20F4405400297CB2 /* Build configuration list for PBXProject \"BrazeContentCardsSampleApp\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\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 = FCCC1FBA20F4405400297CB2;\n\t\t\tproductRefGroup = FCCC1FC420F4405400297CB2 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tFCCC1FC220F4405400297CB2 /* BrazeContentCardsSampleApp */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tFCCC1FC120F4405400297CB2 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tFCCC1FD320F4405600297CB2 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tFCCC1FD020F4405600297CB2 /* Assets.xcassets in Resources */,\n\t\t\t\tFCCC1FDD20F4431000297CB2 /* Podfile in Resources */,\n\t\t\t\tFCCC1FCE20F4405400297CB2 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t143B1AF282CF29DC5F0C75C2 /* [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\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-BrazeContentCardsSampleApp/Pods-BrazeContentCardsSampleApp-resources-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-BrazeContentCardsSampleApp/Pods-BrazeContentCardsSampleApp-resources-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-BrazeContentCardsSampleApp/Pods-BrazeContentCardsSampleApp-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t550E0065CF3E32E69FD5B362 /* [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\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-BrazeContentCardsSampleApp-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tFCCC1FBF20F4405400297CB2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB207A7FF25EE9CD5003149F4 /* CustomContentCardsTableViewController.m in Sources */,\n\t\t\t\tFCCC1FCB20F4405400297CB2 /* ViewController.m in Sources */,\n\t\t\t\tFCCC1FD620F4405600297CB2 /* main.m in Sources */,\n\t\t\t\tB254C1CA25EECF34009D77BD /* CustomClassicContentCardCell.m in Sources */,\n\t\t\t\tB254C1CE25EECF61009D77BD /* CustomCaptionedImageContentCardCell.m in Sources */,\n\t\t\t\tFCCC1FC820F4405400297CB2 /* AppDelegate.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\tFCCC1FCC20F4405400297CB2 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tFCCC1FCD20F4405400297CB2 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFCCC1FD120F4405600297CB2 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tFCCC1FD220F4405600297CB2 /* 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\tFCCC1FD720F4405600297CB2 /* 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_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"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 = gnu11;\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 = 11.4;\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\tFCCC1FD820F4405600297CB2 /* 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_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"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 = gnu11;\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 = 11.4;\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\tFCCC1FDA20F4405600297CB2 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 10FACE6E962C5AFD8C73CAA9 /* Pods-BrazeContentCardsSampleApp.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = BrazeContentCardsSampleApp/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.BrazeContentCardsSampleApp;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tFCCC1FDB20F4405600297CB2 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 77751F8ED975D08985565294 /* Pods-BrazeContentCardsSampleApp.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = BrazeContentCardsSampleApp/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.BrazeContentCardsSampleApp;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tFCCC1FBE20F4405400297CB2 /* Build configuration list for PBXProject \"BrazeContentCardsSampleApp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tFCCC1FD720F4405600297CB2 /* Debug */,\n\t\t\t\tFCCC1FD820F4405600297CB2 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tFCCC1FD920F4405600297CB2 /* Build configuration list for PBXNativeTarget \"BrazeContentCardsSampleApp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tFCCC1FDA20F4405600297CB2 /* Debug */,\n\t\t\t\tFCCC1FDB20F4405600297CB2 /* 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 = FCCC1FBB20F4405400297CB2 /* Project object */;\n}\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/BrazeContentCardsSampleApp.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:BrazeContentCardsSampleApp.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/Podfile",
    "content": "platform :ios, '11.0'\n\nsource 'https://cdn.cocoapods.org/'\n\ntarget 'BrazeContentCardsSampleApp' do\n  # pod 'Appboy-iOS-SDK/ContentCards', :path => './../../../'\n  pod 'Appboy-iOS-SDK/ContentCards'\nend\n"
  },
  {
    "path": "Samples/ContentCards/BrazeContentCardsSampleApp/Podfile.lock",
    "content": "PODS:\n  - Appboy-iOS-SDK/ContentCards (4.6.0):\n    - Appboy-iOS-SDK/Core\n    - SDWebImage (< 6, >= 5.8.2)\n  - Appboy-iOS-SDK/Core (4.6.0)\n  - SDWebImage (5.18.10):\n    - SDWebImage/Core (= 5.18.10)\n  - SDWebImage/Core (5.18.10)\n\nDEPENDENCIES:\n  - Appboy-iOS-SDK/ContentCards\n\nSPEC REPOS:\n  trunk:\n    - Appboy-iOS-SDK\n    - SDWebImage\n\nSPEC CHECKSUMS:\n  Appboy-iOS-SDK: cfe28cb711db4ec3c299d97322ae7278f3508780\n  SDWebImage: fc8f2d48bbfd72ef39d70e981bd24a3f3be53fec\n\nPODFILE CHECKSUM: 603bfa66f11831fee041df603365f21fc723fb9e\n\nCOCOAPODS: 1.14.0\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n#import <UserNotifications/UserNotifications.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate, UNUserNotificationCenterDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/AppDelegate.m",
    "content": "#import \"AppDelegate.h\"\n\n@import Appboy_iOS_SDK;\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  [Appboy startWithApiKey:@\"3ab12872-4962-4927-8a21-5a6cdf896d2c\"\n            inApplication:application\n        withLaunchOptions:launchOptions];\n      \n  if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max) {\n    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];\n    center.delegate = self;\n    [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge)\n                          completionHandler:^(BOOL granted, NSError * _Nullable error) {\n                            [[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted];\n                          }];\n    [[UIApplication sharedApplication] registerForRemoteNotifications];\n  } else {\n    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:nil];\n    [[UIApplication sharedApplication] registerForRemoteNotifications];\n    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];\n  }\n  return YES;\n}\n\n- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\n  [[Appboy sharedInstance] registerDeviceToken:deviceToken];\n}\n\n- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {\n  [[Appboy sharedInstance] registerApplication:application\n                  didReceiveRemoteNotification:userInfo\n                        fetchCompletionHandler:completionHandler];\n}\n\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {\n  [[Appboy sharedInstance] userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];\n}\n\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center\n       willPresentNotification:(UNNotification *)notification\n         withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {\n  if (@available(iOS 14.0, *)) {\n    completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);\n  } else {\n    completionHandler(UNNotificationPresentationOptionAlert);\n  }\n}\n\n@end\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/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=\"13122.16\" systemVersion=\"17A277\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\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": "Samples/Core/ObjCSample/ObjCSample/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=\"13196\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13173\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\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                    <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                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"User ID:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TkW-ot-wfA\">\n                                <rect key=\"frame\" x=\"20\" y=\"40\" width=\"62\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mT2-RF-dv8\">\n                                <rect key=\"frame\" x=\"212\" y=\"31\" width=\"143\" height=\"30\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3BI-YQ-vVY\">\n                                <rect key=\"frame\" x=\"161\" y=\"81\" width=\"52\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Identify\"/>\n                                <connections>\n                                    <action selector=\"identifyButtonClicked:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"Cye-uc-YMK\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"R0T-5B-P0t\">\n                                <rect key=\"frame\" x=\"169\" y=\"131\" width=\"37\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Flush\"/>\n                                <connections>\n                                    <action selector=\"flushButtonClicked:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"N8V-4A-9ZR\"/>\n                                </connections>\n                            </button>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Custom Attribute Key:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"bH6-LI-YUD\">\n                                <rect key=\"frame\" x=\"20\" y=\"194\" width=\"168\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Custom Attribute Value:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"r2K-23-g9X\">\n                                <rect key=\"frame\" x=\"20\" y=\"242\" width=\"182\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Uhi-0Y-CDu\">\n                                <rect key=\"frame\" x=\"212\" y=\"185\" width=\"143\" height=\"30\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"NIu-nc-F2V\">\n                                <rect key=\"frame\" x=\"212\" y=\"233\" width=\"143\" height=\"30\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3pW-Tz-TMo\">\n                                <rect key=\"frame\" x=\"115\" y=\"283\" width=\"144\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Set Custom Attribute\"/>\n                                <connections>\n                                    <action selector=\"customAttributeButtonClicked:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"rAd-J5-VL7\"/>\n                                </connections>\n                            </button>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"252\" text=\"Custom Event:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9F7-hj-Jiv\">\n                                <rect key=\"frame\" x=\"20\" y=\"333\" width=\"112\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Property Key:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eUn-2z-ZOx\">\n                                <rect key=\"frame\" x=\"20\" y=\"374\" width=\"104\" height=\"39\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Property Value:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YFt-CG-GfB\">\n                                <rect key=\"frame\" x=\"20\" y=\"433\" width=\"118\" height=\"30\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wYO-ct-sAq\">\n                                <rect key=\"frame\" x=\"211\" y=\"383\" width=\"144\" height=\"30\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2Zz-0c-K5t\">\n                                <rect key=\"frame\" x=\"168\" y=\"483\" width=\"38\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Track\"/>\n                                <connections>\n                                    <action selector=\"trackButtonClicked:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"kUt-eT-ccg\"/>\n                                </connections>\n                            </button>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Wbb-Yw-j6a\">\n                                <rect key=\"frame\" x=\"211\" y=\"333\" width=\"144\" height=\"30\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1ij-X1-obg\">\n                                <rect key=\"frame\" x=\"211\" y=\"433\" width=\"144\" height=\"30\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"2Zz-0c-K5t\" firstAttribute=\"centerX\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"centerX\" id=\"0tA-CQ-QZ1\"/>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"trailing\" secondItem=\"mT2-RF-dv8\" secondAttribute=\"trailing\" constant=\"20\" id=\"1Tk-hR-9ER\"/>\n                            <constraint firstItem=\"TkW-ot-wfA\" firstAttribute=\"leading\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"leading\" constant=\"20\" id=\"2SC-RU-BTp\"/>\n                            <constraint firstItem=\"1ij-X1-obg\" firstAttribute=\"top\" secondItem=\"wYO-ct-sAq\" secondAttribute=\"bottom\" constant=\"20\" id=\"3ll-aa-1K1\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"YFt-CG-GfB\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"EtY-0F-C1h\"/>\n                            <constraint firstItem=\"YFt-CG-GfB\" firstAttribute=\"top\" secondItem=\"eUn-2z-ZOx\" secondAttribute=\"bottom\" constant=\"20\" id=\"HN3-0D-1Cl\"/>\n                            <constraint firstItem=\"3BI-YQ-vVY\" firstAttribute=\"top\" secondItem=\"TkW-ot-wfA\" secondAttribute=\"bottom\" constant=\"20\" id=\"HU6-1A-TXB\"/>\n                            <constraint firstItem=\"3pW-Tz-TMo\" firstAttribute=\"centerX\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"centerX\" id=\"Hqe-VC-o2h\"/>\n                            <constraint firstItem=\"Uhi-0Y-CDu\" firstAttribute=\"bottom\" secondItem=\"bH6-LI-YUD\" secondAttribute=\"bottom\" id=\"IXe-VQ-KDH\"/>\n                            <constraint firstItem=\"2Zz-0c-K5t\" firstAttribute=\"top\" secondItem=\"YFt-CG-GfB\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kam-86-wY3\"/>\n                            <constraint firstItem=\"9F7-hj-Jiv\" firstAttribute=\"leading\" secondItem=\"r2K-23-g9X\" secondAttribute=\"leading\" id=\"Lmv-Tp-Guq\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"bH6-LI-YUD\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"MKd-eS-yNy\"/>\n                            <constraint firstItem=\"wYO-ct-sAq\" firstAttribute=\"top\" secondItem=\"Wbb-Yw-j6a\" secondAttribute=\"bottom\" constant=\"20\" id=\"PCa-s4-fNu\"/>\n                            <constraint firstItem=\"eUn-2z-ZOx\" firstAttribute=\"leading\" secondItem=\"9F7-hj-Jiv\" secondAttribute=\"leading\" id=\"PY8-u1-d4Z\"/>\n                            <constraint firstItem=\"R0T-5B-P0t\" firstAttribute=\"centerX\" secondItem=\"3BI-YQ-vVY\" secondAttribute=\"centerX\" id=\"QpJ-xc-Gzp\"/>\n                            <constraint firstItem=\"3BI-YQ-vVY\" firstAttribute=\"centerX\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"centerX\" id=\"T72-7D-2Ze\"/>\n                            <constraint firstItem=\"YFt-CG-GfB\" firstAttribute=\"leading\" secondItem=\"eUn-2z-ZOx\" secondAttribute=\"leading\" id=\"TTj-B4-89r\"/>\n                            <constraint firstItem=\"NIu-nc-F2V\" firstAttribute=\"leading\" secondItem=\"r2K-23-g9X\" secondAttribute=\"trailing\" constant=\"10\" id=\"UHg-pd-s0p\"/>\n                            <constraint firstItem=\"Uhi-0Y-CDu\" firstAttribute=\"trailing\" secondItem=\"mT2-RF-dv8\" secondAttribute=\"trailing\" id=\"V31-7g-MLq\"/>\n                            <constraint firstItem=\"r2K-23-g9X\" firstAttribute=\"leading\" secondItem=\"TkW-ot-wfA\" secondAttribute=\"leading\" id=\"W6U-oe-t7a\"/>\n                            <constraint firstItem=\"bH6-LI-YUD\" firstAttribute=\"leading\" secondItem=\"TkW-ot-wfA\" secondAttribute=\"leading\" id=\"WN5-VA-Ju2\"/>\n                            <constraint firstItem=\"1ij-X1-obg\" firstAttribute=\"trailing\" secondItem=\"wYO-ct-sAq\" secondAttribute=\"trailing\" id=\"XhQ-lr-ua4\"/>\n                            <constraint firstItem=\"TkW-ot-wfA\" firstAttribute=\"top\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"top\" constant=\"20\" id=\"ZAc-Hq-Uut\"/>\n                            <constraint firstItem=\"R0T-5B-P0t\" firstAttribute=\"top\" secondItem=\"3BI-YQ-vVY\" secondAttribute=\"bottom\" constant=\"20\" id=\"Zep-bY-5QQ\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"TkW-ot-wfA\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"agU-i1-Zsz\"/>\n                            <constraint firstItem=\"wYO-ct-sAq\" firstAttribute=\"bottom\" secondItem=\"eUn-2z-ZOx\" secondAttribute=\"bottom\" id=\"dk6-iH-IUg\"/>\n                            <constraint firstItem=\"1ij-X1-obg\" firstAttribute=\"bottom\" secondItem=\"YFt-CG-GfB\" secondAttribute=\"bottom\" id=\"dzg-G9-GQW\"/>\n                            <constraint firstItem=\"NIu-nc-F2V\" firstAttribute=\"leading\" secondItem=\"Uhi-0Y-CDu\" secondAttribute=\"leading\" id=\"f5l-7Y-2RE\"/>\n                            <constraint firstItem=\"Uhi-0Y-CDu\" firstAttribute=\"leading\" secondItem=\"mT2-RF-dv8\" secondAttribute=\"leading\" id=\"f6M-29-gPs\"/>\n                            <constraint firstItem=\"1ij-X1-obg\" firstAttribute=\"leading\" secondItem=\"wYO-ct-sAq\" secondAttribute=\"leading\" id=\"fUG-Co-SfW\"/>\n                            <constraint firstItem=\"9F7-hj-Jiv\" firstAttribute=\"top\" secondItem=\"3pW-Tz-TMo\" secondAttribute=\"bottom\" constant=\"20\" id=\"fyQ-aP-Xt7\"/>\n                            <constraint firstItem=\"r2K-23-g9X\" firstAttribute=\"leading\" secondItem=\"bH6-LI-YUD\" secondAttribute=\"leading\" id=\"h5x-DO-uvm\"/>\n                            <constraint firstItem=\"Wbb-Yw-j6a\" firstAttribute=\"top\" secondItem=\"3pW-Tz-TMo\" secondAttribute=\"bottom\" constant=\"20\" id=\"jAs-gZ-wFi\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"9F7-hj-Jiv\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"jiN-PQ-MNz\"/>\n                            <constraint firstItem=\"bH6-LI-YUD\" firstAttribute=\"top\" secondItem=\"R0T-5B-P0t\" secondAttribute=\"bottom\" constant=\"33\" id=\"mYv-pd-1tY\"/>\n                            <constraint firstItem=\"eUn-2z-ZOx\" firstAttribute=\"top\" secondItem=\"9F7-hj-Jiv\" secondAttribute=\"bottom\" constant=\"20\" id=\"mnZ-qb-r6e\"/>\n                            <constraint firstItem=\"mT2-RF-dv8\" firstAttribute=\"bottom\" secondItem=\"TkW-ot-wfA\" secondAttribute=\"bottom\" id=\"pqx-yI-Icm\"/>\n                            <constraint firstItem=\"3pW-Tz-TMo\" firstAttribute=\"top\" secondItem=\"r2K-23-g9X\" secondAttribute=\"bottom\" constant=\"20\" id=\"rtF-XS-isn\"/>\n                            <constraint firstItem=\"r2K-23-g9X\" firstAttribute=\"top\" secondItem=\"bH6-LI-YUD\" secondAttribute=\"bottom\" constant=\"27\" id=\"t5O-dn-GE4\"/>\n                            <constraint firstItem=\"wYO-ct-sAq\" firstAttribute=\"trailing\" secondItem=\"Wbb-Yw-j6a\" secondAttribute=\"trailing\" id=\"ug3-mb-xPV\"/>\n                            <constraint firstItem=\"NIu-nc-F2V\" firstAttribute=\"trailing\" secondItem=\"Uhi-0Y-CDu\" secondAttribute=\"trailing\" id=\"ujK-xZ-y3y\"/>\n                            <constraint firstItem=\"NIu-nc-F2V\" firstAttribute=\"bottom\" secondItem=\"r2K-23-g9X\" secondAttribute=\"bottom\" id=\"vQJ-5u-7PF\"/>\n                            <constraint firstItem=\"1ij-X1-obg\" firstAttribute=\"leading\" secondItem=\"YFt-CG-GfB\" secondAttribute=\"trailing\" constant=\"73\" id=\"vsT-4y-Tz8\"/>\n                            <constraint firstItem=\"wYO-ct-sAq\" firstAttribute=\"leading\" secondItem=\"Wbb-Yw-j6a\" secondAttribute=\"leading\" id=\"yHm-TW-mE2\"/>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"trailing\" secondItem=\"Wbb-Yw-j6a\" secondAttribute=\"trailing\" constant=\"20\" id=\"yrX-fd-SXI\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"customAttributeKeyTextField\" destination=\"Uhi-0Y-CDu\" id=\"Sns-qU-0d7\"/>\n                        <outlet property=\"customAttributeValueTextField\" destination=\"NIu-nc-F2V\" id=\"FrP-cz-Oy4\"/>\n                        <outlet property=\"customEventPropertyKeyTextField\" destination=\"wYO-ct-sAq\" id=\"Eao-8H-o5e\"/>\n                        <outlet property=\"customEventPropertyValueTextField\" destination=\"1ij-X1-obg\" id=\"uLk-yC-crI\"/>\n                        <outlet property=\"customEventTextField\" destination=\"Wbb-Yw-j6a\" id=\"xZK-hG-ESv\"/>\n                        <outlet property=\"userIDTextField\" destination=\"mT2-RF-dv8\" id=\"O6R-de-LXb\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/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\n\t\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</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>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIBackgroundModes</key>\n\t<array>\n\t\t<string>remote-notification</string>\n\t</array>\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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/ObjCSample.entitlements",
    "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>aps-environment</key>\n\t<string>development</string>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.network.client</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/ViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n@property IBOutlet UITextField *userIDTextField;\n@property IBOutlet UITextField *customAttributeKeyTextField;\n@property IBOutlet UITextField *customAttributeValueTextField;\n@property IBOutlet UITextField *customEventTextField;\n@property IBOutlet UITextField *customEventPropertyKeyTextField;\n@property IBOutlet UITextField *customEventPropertyValueTextField;\n\n- (IBAction)identifyButtonClicked:(id)sender;\n- (IBAction)flushButtonClicked:(id)sender;\n- (IBAction)customAttributeButtonClicked:(id)sender;\n- (IBAction)trackButtonClicked:(id)sender;\n\n@end\n\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/ViewController.m",
    "content": "#import \"ViewController.h\"\n\n@import Appboy_iOS_SDK.AppboyKit;\n\n@implementation ViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n}\n\n- (void)didReceiveMemoryWarning {\n  [super didReceiveMemoryWarning];\n}\n\n- (IBAction)identifyButtonClicked:(id)sender {\n  if (self.userIDTextField.text.length > 0) {\n    NSString *userID = self.userIDTextField.text;\n    [[Appboy sharedInstance] changeUser:userID];\n  }\n}\n\n- (IBAction)flushButtonClicked:(id)sender {\n  [[Appboy sharedInstance] requestImmediateDataFlush];\n}\n\n- (IBAction)customAttributeButtonClicked:(id)sender {\n  NSString *customAttributeKey = nil;\n  if (self.customAttributeKeyTextField.text.length > 0) {\n    customAttributeKey = self.customAttributeKeyTextField.text;\n  }\n  NSString *customAttributeValue = nil;\n  if (self.customAttributeValueTextField.text.length > 0) {\n    customAttributeValue = self.customAttributeValueTextField.text;\n  }\n  \n  if (customAttributeKey.length > 0 && customAttributeValue.length > 0) {\n    [[Appboy sharedInstance].user setCustomAttributeWithKey:customAttributeKey andStringValue:customAttributeValue];\n  }\n}\n\n- (IBAction)trackButtonClicked:(id)sender {\n  NSString *customEvent = nil;\n  if (self.customEventTextField.text.length > 0) {\n    customEvent = self.customEventTextField.text;\n  }\n  NSString *propertyKey = nil;\n  if (self.customEventPropertyKeyTextField.text.length > 0) {\n    propertyKey = self.customEventPropertyKeyTextField.text;\n  }\n  NSString *propertyValue = nil;\n  if (self.customEventPropertyValueTextField.text.length > 0) {\n    propertyValue = self.customEventPropertyValueTextField.text;\n  }\n  if (customEvent.length > 0) {\n    if (propertyKey.length > 0 && propertyValue > 0) {\n      NSDictionary *properties = @{propertyKey:propertyValue};\n      [[Appboy sharedInstance] logCustomEvent:customEvent withProperties:properties];\n    } else {\n      [[Appboy sharedInstance] logCustomEvent:customEvent];\n    }\n  }\n}\n\n@end\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample/main.m",
    "content": "#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": "Samples/Core/ObjCSample/ObjCSample.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tB33D49AC80F8A3E878309DBC /* Pods_ObjCSample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CE9B09B77026D5FBDF9D824 /* Pods_ObjCSample.framework */; };\n\t\tC0FC8B1D1F95196B00841660 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C0FC8B1C1F95196B00841660 /* AppDelegate.m */; };\n\t\tC0FC8B201F95196B00841660 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C0FC8B1F1F95196B00841660 /* ViewController.m */; };\n\t\tC0FC8B231F95196B00841660 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C0FC8B211F95196B00841660 /* Main.storyboard */; };\n\t\tC0FC8B251F95196B00841660 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C0FC8B241F95196B00841660 /* Assets.xcassets */; };\n\t\tC0FC8B281F95196B00841660 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C0FC8B261F95196B00841660 /* LaunchScreen.storyboard */; };\n\t\tC0FC8B2B1F95196B00841660 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C0FC8B2A1F95196B00841660 /* main.m */; };\n\t\tC0FC8B321F9519B000841660 /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = C0FC8B311F9519B000841660 /* Podfile */; };\n\t\tC0FC8B351F9527A300841660 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0FC8B341F9527A300841660 /* UserNotifications.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t07A5857A61D2D72D7CFB575B /* Pods-ObjCSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ObjCSample.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-ObjCSample/Pods-ObjCSample.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t1CE9B09B77026D5FBDF9D824 /* Pods_ObjCSample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ObjCSample.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6E52418B4967B608BD6BC4DB /* Pods-ObjCSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ObjCSample.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-ObjCSample/Pods-ObjCSample.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC0FC8B181F95196B00841660 /* ObjCSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ObjCSample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC0FC8B1B1F95196B00841660 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tC0FC8B1C1F95196B00841660 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tC0FC8B1E1F95196B00841660 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\tC0FC8B1F1F95196B00841660 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\tC0FC8B221F95196B00841660 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tC0FC8B241F95196B00841660 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tC0FC8B271F95196B00841660 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tC0FC8B291F95196B00841660 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC0FC8B2A1F95196B00841660 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tC0FC8B311F9519B000841660 /* Podfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Podfile; sourceTree = \"<group>\"; };\n\t\tC0FC8B331F9525C500841660 /* ObjCSample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ObjCSample.entitlements; sourceTree = \"<group>\"; };\n\t\tC0FC8B341F9527A300841660 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tC0FC8B151F95196B00841660 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC0FC8B351F9527A300841660 /* UserNotifications.framework in Frameworks */,\n\t\t\t\tB33D49AC80F8A3E878309DBC /* Pods_ObjCSample.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\t57AB4B13225A56C121F13A4D /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6E52418B4967B608BD6BC4DB /* Pods-ObjCSample.debug.xcconfig */,\n\t\t\t\t07A5857A61D2D72D7CFB575B /* Pods-ObjCSample.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t67B2FC52041EA5A9B30A94C2 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC0FC8B341F9527A300841660 /* UserNotifications.framework */,\n\t\t\t\t1CE9B09B77026D5FBDF9D824 /* Pods_ObjCSample.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC0FC8B0F1F95196B00841660 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC0FC8B311F9519B000841660 /* Podfile */,\n\t\t\t\tC0FC8B1A1F95196B00841660 /* ObjCSample */,\n\t\t\t\tC0FC8B191F95196B00841660 /* Products */,\n\t\t\t\t57AB4B13225A56C121F13A4D /* Pods */,\n\t\t\t\t67B2FC52041EA5A9B30A94C2 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC0FC8B191F95196B00841660 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC0FC8B181F95196B00841660 /* ObjCSample.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC0FC8B1A1F95196B00841660 /* ObjCSample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC0FC8B331F9525C500841660 /* ObjCSample.entitlements */,\n\t\t\t\tC0FC8B1B1F95196B00841660 /* AppDelegate.h */,\n\t\t\t\tC0FC8B1C1F95196B00841660 /* AppDelegate.m */,\n\t\t\t\tC0FC8B1E1F95196B00841660 /* ViewController.h */,\n\t\t\t\tC0FC8B1F1F95196B00841660 /* ViewController.m */,\n\t\t\t\tC0FC8B211F95196B00841660 /* Main.storyboard */,\n\t\t\t\tC0FC8B241F95196B00841660 /* Assets.xcassets */,\n\t\t\t\tC0FC8B261F95196B00841660 /* LaunchScreen.storyboard */,\n\t\t\t\tC0FC8B291F95196B00841660 /* Info.plist */,\n\t\t\t\tC0FC8B2A1F95196B00841660 /* main.m */,\n\t\t\t);\n\t\t\tpath = ObjCSample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tC0FC8B171F95196B00841660 /* ObjCSample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C0FC8B2E1F95196B00841660 /* Build configuration list for PBXNativeTarget \"ObjCSample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t27BA9D62D4549F2A42E27216 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tC0FC8B141F95196B00841660 /* Sources */,\n\t\t\t\tC0FC8B151F95196B00841660 /* Frameworks */,\n\t\t\t\tC0FC8B161F95196B00841660 /* Resources */,\n\t\t\t\t9465F6A2B567CF4F767501FC /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ObjCSample;\n\t\t\tproductName = ObjCSample;\n\t\t\tproductReference = C0FC8B181F95196B00841660 /* ObjCSample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tC0FC8B101F95196B00841660 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0900;\n\t\t\t\tORGANIZATIONNAME = Appboy;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tC0FC8B171F95196B00841660 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.0;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.BackgroundModes = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = C0FC8B131F95196B00841660 /* Build configuration list for PBXProject \"ObjCSample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\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 = C0FC8B0F1F95196B00841660;\n\t\t\tproductRefGroup = C0FC8B191F95196B00841660 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tC0FC8B171F95196B00841660 /* ObjCSample */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tC0FC8B161F95196B00841660 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC0FC8B281F95196B00841660 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tC0FC8B251F95196B00841660 /* Assets.xcassets in Resources */,\n\t\t\t\tC0FC8B321F9519B000841660 /* Podfile in Resources */,\n\t\t\t\tC0FC8B231F95196B00841660 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t27BA9D62D4549F2A42E27216 /* [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\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-ObjCSample-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t9465F6A2B567CF4F767501FC /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-ObjCSample/Pods-ObjCSample-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Appboy-iOS-SDK/Appboy_iOS_SDK.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Appboy_iOS_SDK.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-ObjCSample/Pods-ObjCSample-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tC0FC8B141F95196B00841660 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC0FC8B201F95196B00841660 /* ViewController.m in Sources */,\n\t\t\t\tC0FC8B2B1F95196B00841660 /* main.m in Sources */,\n\t\t\t\tC0FC8B1D1F95196B00841660 /* AppDelegate.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\tC0FC8B211F95196B00841660 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tC0FC8B221F95196B00841660 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC0FC8B261F95196B00841660 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tC0FC8B271F95196B00841660 /* 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\tC0FC8B2C1F95196B00841660 /* 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_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\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 = gnu11;\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 = 11.0;\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\tC0FC8B2D1F95196B00841660 /* 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_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Distribution\";\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 = gnu11;\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 = 11.0;\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\tC0FC8B2F1F95196B00841660 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6E52418B4967B608BD6BC4DB /* Pods-ObjCSample.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = ObjCSample/ObjCSample.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = ObjCSample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.ObjCSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSUPPORTS_MACCATALYST = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC0FC8B301F95196B00841660 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 07A5857A61D2D72D7CFB575B /* Pods-ObjCSample.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = ObjCSample/ObjCSample.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Apple Development\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = ObjCSample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.ObjCSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSUPPORTS_MACCATALYST = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tC0FC8B131F95196B00841660 /* Build configuration list for PBXProject \"ObjCSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC0FC8B2C1F95196B00841660 /* Debug */,\n\t\t\t\tC0FC8B2D1F95196B00841660 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC0FC8B2E1F95196B00841660 /* Build configuration list for PBXNativeTarget \"ObjCSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC0FC8B2F1F95196B00841660 /* Debug */,\n\t\t\t\tC0FC8B301F95196B00841660 /* 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 = C0FC8B101F95196B00841660 /* Project object */;\n}\n"
  },
  {
    "path": "Samples/Core/ObjCSample/ObjCSample.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:ObjCSample.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Samples/Core/ObjCSample/Podfile",
    "content": "platform :ios, '9.0'\n\n# We use the spec repository instead of the cdn because it is doesn't suffer\n# from the cdn's caching delays.\nsource 'https://github.com/CocoaPods/Specs.git'\n\nuse_frameworks!\n\ntarget 'ObjCSample' do\n  pod 'Appboy-iOS-SDK/Core'\nend\n\npost_install do |installer|\n    installer.pods_project.targets.each do |target|\n        # Fix bundle targets' 'Signing Certificate' to 'Sign to Run Locally'\n        if target.respond_to?(:product_type) and target.product_type == \"com.apple.product-type.bundle\"\n            target.build_configurations.each do |config|\n                config.build_settings['CODE_SIGN_IDENTITY[sdk=macosx*]'] = '-'\n            end\n        end\n    end\nend\n"
  },
  {
    "path": "Samples/Core/ObjCSample/Podfile.lock",
    "content": "PODS:\n  - Appboy-iOS-SDK/Core (4.6.0)\n\nDEPENDENCIES:\n  - Appboy-iOS-SDK/Core\n\nSPEC REPOS:\n  https://github.com/CocoaPods/Specs.git:\n    - Appboy-iOS-SDK\n\nSPEC CHECKSUMS:\n  Appboy-iOS-SDK: cfe28cb711db4ec3c299d97322ae7278f3508780\n\nPODFILE CHECKSUM: 3f9aa207cb2d4b0335c85eb8be253d687ece3835\n\nCOCOAPODS: 1.14.3\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"ABKInAppMessageControllerDelegate.h\"\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate, ABKInAppMessageControllerDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n@property BOOL keyboardIsShowing;\n\n@end\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/AppDelegate.m",
    "content": "#import \"AppDelegate.h\"\n#import \"Appboy-iOS-SDK/AppboyKit.h\"\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  NSMutableDictionary *appboyOptions = [NSMutableDictionary dictionary];\n  appboyOptions[ABKMinimumTriggerTimeIntervalKey] = @(5);\n  appboyOptions[ABKInAppMessageControllerDelegateKey] = self;\n  \n  [Appboy startWithApiKey:@\"1be9b83a-58bd-4237-b794-7713e393a3f5\"\n            inApplication:application\n        withLaunchOptions:launchOptions\n        withAppboyOptions:appboyOptions];\n  \n  self.keyboardIsShowing = NO;\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)\n                                               name:UIKeyboardWillShowNotification object:nil];\n  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:)\n                                               name:UIKeyboardWillHideNotification object:nil];\n  \n  return YES;\n}\n\n- (void)keyboardWillShow:(NSNotification *)notification\n{\n  self.keyboardIsShowing = YES;\n}\n\n- (void)keyboardWillBeHidden:(NSNotification *)notification\n{\n  self.keyboardIsShowing = NO;\n}\n\n- (ABKInAppMessageDisplayChoice)beforeInAppMessageDisplayed:(ABKInAppMessage *)inAppMessage {\n  if (self.keyboardIsShowing && [inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n    ((ABKInAppMessageSlideup *)inAppMessage).inAppMessageSlideupAnchor = ABKInAppMessageSlideupFromTop;\n  }\n\n  return ABKDisplayInAppMessageNow;\n}\n\n@end\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/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=\"13122.16\" systemVersion=\"17A277\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\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": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/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=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\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=\"13772\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\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                    <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                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Use Custom View Controller\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FXW-bt-aTt\">\n                                <rect key=\"frame\" x=\"20\" y=\"60\" width=\"216\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"sdJ-nD-HeS\">\n                                <rect key=\"frame\" x=\"306\" y=\"55\" width=\"51\" height=\"31\"/>\n                            </switch>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"249\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Xjq-c9-eQw\">\n                                <rect key=\"frame\" x=\"111.5\" y=\"106.5\" width=\"243.5\" height=\"30\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3mX-NO-gjG\">\n                                <rect key=\"frame\" x=\"142.5\" y=\"166.5\" width=\"90\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Change User\"/>\n                                <connections>\n                                    <action selector=\"changeUser:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"H5N-GX-gzz\"/>\n                                </connections>\n                            </button>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Custom Event:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"02J-CO-0Xw\">\n                                <rect key=\"frame\" x=\"20\" y=\"226.5\" width=\"111.5\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <textField opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ido-7V-380\">\n                                <rect key=\"frame\" x=\"161.5\" y=\"221.5\" width=\"193.5\" height=\"30\"/>\n                                <nil key=\"textColor\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                <textInputTraits key=\"textInputTraits\"/>\n                            </textField>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"AGd-pR-xU2\">\n                                <rect key=\"frame\" x=\"125\" y=\"281.5\" width=\"125\" height=\"30\"/>\n                                <state key=\"normal\" title=\"Log Custom Event\"/>\n                                <connections>\n                                    <action selector=\"logCustomEvent:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"EZp-J8-4d7\"/>\n                                </connections>\n                            </button>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"User ID:\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eZz-g2-llx\">\n                                <rect key=\"frame\" x=\"20\" y=\"111\" width=\"61.5\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"Xjq-c9-eQw\" firstAttribute=\"leading\" secondItem=\"eZz-g2-llx\" secondAttribute=\"trailing\" constant=\"30\" id=\"1Qw-eM-RyO\"/>\n                            <constraint firstItem=\"Ido-7V-380\" firstAttribute=\"trailing\" secondItem=\"Xjq-c9-eQw\" secondAttribute=\"trailing\" id=\"4CS-qP-Yh0\"/>\n                            <constraint firstItem=\"Xjq-c9-eQw\" firstAttribute=\"trailing\" secondItem=\"sdJ-nD-HeS\" secondAttribute=\"trailing\" id=\"4aJ-Wm-Ucr\"/>\n                            <constraint firstItem=\"3mX-NO-gjG\" firstAttribute=\"centerX\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"centerX\" id=\"Flj-nJ-fh3\"/>\n                            <constraint firstItem=\"02J-CO-0Xw\" firstAttribute=\"top\" secondItem=\"3mX-NO-gjG\" secondAttribute=\"bottom\" constant=\"30\" id=\"JAP-Em-vhA\"/>\n                            <constraint firstItem=\"Xjq-c9-eQw\" firstAttribute=\"centerY\" secondItem=\"eZz-g2-llx\" secondAttribute=\"centerY\" id=\"Lbw-nV-Ghp\"/>\n                            <constraint firstItem=\"eZz-g2-llx\" firstAttribute=\"top\" secondItem=\"FXW-bt-aTt\" secondAttribute=\"bottom\" constant=\"30\" id=\"PcH-3B-8FT\"/>\n                            <constraint firstItem=\"AGd-pR-xU2\" firstAttribute=\"centerX\" secondItem=\"3mX-NO-gjG\" secondAttribute=\"centerX\" id=\"R8s-Vv-kOh\"/>\n                            <constraint firstItem=\"Ido-7V-380\" firstAttribute=\"centerY\" secondItem=\"02J-CO-0Xw\" secondAttribute=\"centerY\" id=\"R9f-bJ-uWh\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"FXW-bt-aTt\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"V24-2G-1zo\"/>\n                            <constraint firstItem=\"AGd-pR-xU2\" firstAttribute=\"top\" secondItem=\"Ido-7V-380\" secondAttribute=\"bottom\" constant=\"30\" id=\"ZBV-s8-vG4\"/>\n                            <constraint firstItem=\"FXW-bt-aTt\" firstAttribute=\"leading\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"leading\" constant=\"20\" id=\"dOB-fn-nWu\"/>\n                            <constraint firstItem=\"eZz-g2-llx\" firstAttribute=\"leading\" secondItem=\"FXW-bt-aTt\" secondAttribute=\"leading\" id=\"gGx-Jj-ykd\"/>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"trailing\" secondItem=\"sdJ-nD-HeS\" secondAttribute=\"trailing\" constant=\"20\" id=\"hp2-Ew-4cA\"/>\n                            <constraint firstItem=\"02J-CO-0Xw\" firstAttribute=\"leading\" secondItem=\"eZz-g2-llx\" secondAttribute=\"leading\" id=\"mOx-ak-Eg4\"/>\n                            <constraint firstItem=\"FXW-bt-aTt\" firstAttribute=\"top\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"top\" constant=\"40\" id=\"uVt-y1-Re6\"/>\n                            <constraint firstItem=\"sdJ-nD-HeS\" firstAttribute=\"centerY\" secondItem=\"FXW-bt-aTt\" secondAttribute=\"centerY\" id=\"v3v-Cl-ebn\"/>\n                            <constraint firstItem=\"3mX-NO-gjG\" firstAttribute=\"top\" secondItem=\"Xjq-c9-eQw\" secondAttribute=\"bottom\" constant=\"30\" id=\"vCJ-RA-34f\"/>\n                            <constraint firstItem=\"Ido-7V-380\" firstAttribute=\"leading\" secondItem=\"02J-CO-0Xw\" secondAttribute=\"trailing\" constant=\"30\" id=\"wLi-6g-n5g\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"customEventTextField\" destination=\"Ido-7V-380\" id=\"tau-ts-el9\"/>\n                        <outlet property=\"useCustomViewControllerSwitch\" destination=\"sdJ-nD-HeS\" id=\"M8o-R6-iJv\"/>\n                        <outlet property=\"userIDTextField\" destination=\"Xjq-c9-eQw\" id=\"adO-a7-VZe\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/CustomInAppMessageViewController.h",
    "content": "#import <AppboyKit.h>\n#import \"AppboyInAppMessage.h\"\n\n@interface CustomInAppMessageViewController : ABKInAppMessageViewController\n\n@property IBOutlet UILabel *inAppMessageBodyTextLabel;\n\n- (IBAction)closeButtonTapped:(id)sender;\n\n@end\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/CustomInAppMessageViewController.m",
    "content": "#import \"CustomInAppMessageViewController.h\"\n\n@implementation CustomInAppMessageViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n\n  self.inAppMessageBodyTextLabel.text = self.inAppMessage.message;\n\n  // Displays the key/value pair if sent by the server.\n  if (self.inAppMessage.extras != nil && self.inAppMessage.extras.count > 0) {\n    for (NSString *key in [self.inAppMessage.extras allKeys]) {\n      NSString *value = self.inAppMessage.extras[key];\n      self.inAppMessageBodyTextLabel.text = [self.inAppMessageBodyTextLabel.text stringByAppendingFormat:@\"\\n%@ : %@\", key, value];\n    }\n  }\n}\n\n- (IBAction)closeButtonTapped:(id)sender {\n  [self hideInAppMessage:YES];\n}\n\n@end\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/CustomInAppMessageViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\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=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <customFonts key=\"customFonts\">\n        <array key=\"HelveticaNeue.ttc\">\n            <string>HelveticaNeue-Medium</string>\n        </array>\n    </customFonts>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"CustomInAppMessageViewController\">\n            <connections>\n                <outlet property=\"inAppMessageBodyTextLabel\" destination=\"wGN-3U-2If\" id=\"sWX-Zj-0IV\"/>\n                <outlet property=\"view\" destination=\"1\" id=\"3\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"1\" customClass=\"ABKInAppMessageView\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"220\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" id=\"fSR-kr-iyB\">\n                    <rect key=\"frame\" x=\"275\" y=\"0.0\" width=\"45\" height=\"39\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <color key=\"tintColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    <state key=\"normal\" image=\"com_appboy_inapp_close_icon.png\">\n                        <color key=\"titleShadowColor\" red=\"0.5\" green=\"0.5\" blue=\"0.5\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </state>\n                    <connections>\n                        <action selector=\"closeButtonTapped:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"Nsk-BN-5Nt\"/>\n                    </connections>\n                </button>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"SlideupArrow.png\" id=\"t8b-mt-k8f\">\n                    <rect key=\"frame\" x=\"103\" y=\"5\" width=\"114\" height=\"140\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Label\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"wGN-3U-2If\">\n                    <rect key=\"frame\" x=\"20\" y=\"153\" width=\"280\" height=\"31\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" widthSizable=\"YES\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" name=\"HelveticaNeue-Medium\" family=\"Helvetica Neue\" pointSize=\"15\"/>\n                    <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"0.13725490196078433\" green=\"0.73333333333333328\" blue=\"0.95686274509803915\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"SlideupArrow.png\" width=\"30\" height=\"43\"/>\n        <image name=\"com_appboy_inapp_close_icon.png\" width=\"20\" height=\"20\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/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\n\t\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</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>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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/ViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"AppboyInAppMessage.h\"\n#import \"Appboy-iOS-SDK/AppboyKit.h\"\n\n@interface ViewController : UIViewController <ABKInAppMessageUIControlling, ABKInAppMessageUIDelegate>\n\n@property (strong, nonatomic) IBOutlet UISwitch *useCustomViewControllerSwitch;\n@property (strong, nonatomic) IBOutlet UITextField *userIDTextField;\n@property (strong, nonatomic) IBOutlet UITextField *customEventTextField;\n\n@end\n\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/ViewController.m",
    "content": "#import \"ViewController.h\"\n#import \"CustomInAppMessageViewController.h\"\n\n@implementation ViewController\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  [[Appboy sharedInstance].inAppMessageController.inAppMessageUIController setInAppMessageUIDelegate:self];\n}\n\n- (ABKInAppMessageViewController *)inAppMessageViewControllerWithInAppMessage:(ABKInAppMessage *)inAppMessage {\n  if (self.useCustomViewControllerSwitch.isOn) {\n    return [[CustomInAppMessageViewController alloc] initWithInAppMessage:inAppMessage];\n  } else if ([inAppMessage isKindOfClass:[ABKInAppMessageSlideup class]]) {\n    return [[ABKInAppMessageSlideupViewController alloc] initWithInAppMessage:inAppMessage];\n  } else if ([inAppMessage isKindOfClass:[ABKInAppMessageModal class]]) {\n    return [[ABKInAppMessageModalViewController alloc] initWithInAppMessage:inAppMessage];\n  } else if ([inAppMessage isKindOfClass:[ABKInAppMessageFull class]]) {\n    return [[ABKInAppMessageFullViewController alloc] initWithInAppMessage:inAppMessage];\n  } else if ([inAppMessage isKindOfClass:[ABKInAppMessageHTMLFull class]]) {\n    return [[ABKInAppMessageHTMLFullViewController alloc] initWithInAppMessage:inAppMessage];\n  } else {\n    return [[CustomInAppMessageViewController alloc] initWithInAppMessage:inAppMessage];\n  }\n  return nil;\n}\n\n- (BOOL)onInAppMessageClicked:(ABKInAppMessage *)inAppMessage {\n  NSLog(@\"In-app message tapped!\");\n  return NO;\n}\n\n- (IBAction)changeUser:(id)sender {\n  if (self.userIDTextField.text.length > 0) {\n    NSString *userID = self.userIDTextField.text;\n    [[Appboy sharedInstance] changeUser:userID];\n  }\n}\n\n- (IBAction)logCustomEvent:(id)sender {\n  if (self.customEventTextField.text.length > 0) {\n    NSString *customEvent = self.customEventTextField.text;\n    [[Appboy sharedInstance] logCustomEvent:customEvent];\n  }\n}\n\n@end\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample/main.m",
    "content": "#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": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t37601192BA2B05267BE18A0E /* libPods-BrazeInAppMessageSample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 36B089D97602D0E2A2848A29 /* libPods-BrazeInAppMessageSample.a */; };\n\t\tC016884C1FE4480100C6B205 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C016884B1FE4480100C6B205 /* AppDelegate.m */; };\n\t\tC016884F1FE4480100C6B205 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C016884E1FE4480100C6B205 /* ViewController.m */; };\n\t\tC01688521FE4480100C6B205 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C01688501FE4480100C6B205 /* Main.storyboard */; };\n\t\tC01688541FE4480100C6B205 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C01688531FE4480100C6B205 /* Assets.xcassets */; };\n\t\tC01688571FE4480100C6B205 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C01688551FE4480100C6B205 /* LaunchScreen.storyboard */; };\n\t\tC016885A1FE4480100C6B205 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C01688591FE4480100C6B205 /* main.m */; };\n\t\tC01688611FE4480E00C6B205 /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = C01688601FE4480E00C6B205 /* Podfile */; };\n\t\tC023B14D1FEB25E30003A747 /* CustomInAppMessageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C023B14A1FEB25E30003A747 /* CustomInAppMessageViewController.xib */; };\n\t\tC023B14E1FEB25E30003A747 /* CustomInAppMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C023B14C1FEB25E30003A747 /* CustomInAppMessageViewController.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t36B089D97602D0E2A2848A29 /* libPods-BrazeInAppMessageSample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-BrazeInAppMessageSample.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t36CB63849B802DB410475277 /* Pods-BrazeInAppMessageSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-BrazeInAppMessageSample.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-BrazeInAppMessageSample/Pods-BrazeInAppMessageSample.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t4673C9AA679A11806B87D7AB /* Pods-BrazeInAppMessageSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-BrazeInAppMessageSample.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-BrazeInAppMessageSample/Pods-BrazeInAppMessageSample.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC01688471FE4480100C6B205 /* BrazeInAppMessageSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BrazeInAppMessageSample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC016884A1FE4480100C6B205 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tC016884B1FE4480100C6B205 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tC016884D1FE4480100C6B205 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\tC016884E1FE4480100C6B205 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\tC01688511FE4480100C6B205 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tC01688531FE4480100C6B205 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tC01688561FE4480100C6B205 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tC01688581FE4480100C6B205 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC01688591FE4480100C6B205 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tC01688601FE4480E00C6B205 /* Podfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Podfile; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tC023B14A1FEB25E30003A747 /* CustomInAppMessageViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CustomInAppMessageViewController.xib; sourceTree = \"<group>\"; };\n\t\tC023B14B1FEB25E30003A747 /* CustomInAppMessageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomInAppMessageViewController.h; sourceTree = \"<group>\"; };\n\t\tC023B14C1FEB25E30003A747 /* CustomInAppMessageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomInAppMessageViewController.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tC01688441FE4480100C6B205 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t37601192BA2B05267BE18A0E /* libPods-BrazeInAppMessageSample.a 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\t492B6A015D99C60535845751 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t36CB63849B802DB410475277 /* Pods-BrazeInAppMessageSample.debug.xcconfig */,\n\t\t\t\t4673C9AA679A11806B87D7AB /* Pods-BrazeInAppMessageSample.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC016883E1FE4480100C6B205 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC01688601FE4480E00C6B205 /* Podfile */,\n\t\t\t\tC01688491FE4480100C6B205 /* BrazeInAppMessageSample */,\n\t\t\t\tC01688481FE4480100C6B205 /* Products */,\n\t\t\t\t492B6A015D99C60535845751 /* Pods */,\n\t\t\t\tDDAB7F5627EB85B5D0713BF3 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC01688481FE4480100C6B205 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC01688471FE4480100C6B205 /* BrazeInAppMessageSample.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC01688491FE4480100C6B205 /* BrazeInAppMessageSample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC023B14B1FEB25E30003A747 /* CustomInAppMessageViewController.h */,\n\t\t\t\tC023B14C1FEB25E30003A747 /* CustomInAppMessageViewController.m */,\n\t\t\t\tC023B14A1FEB25E30003A747 /* CustomInAppMessageViewController.xib */,\n\t\t\t\tC016884A1FE4480100C6B205 /* AppDelegate.h */,\n\t\t\t\tC016884B1FE4480100C6B205 /* AppDelegate.m */,\n\t\t\t\tC016884D1FE4480100C6B205 /* ViewController.h */,\n\t\t\t\tC016884E1FE4480100C6B205 /* ViewController.m */,\n\t\t\t\tC01688501FE4480100C6B205 /* Main.storyboard */,\n\t\t\t\tC01688531FE4480100C6B205 /* Assets.xcassets */,\n\t\t\t\tC01688551FE4480100C6B205 /* LaunchScreen.storyboard */,\n\t\t\t\tC01688581FE4480100C6B205 /* Info.plist */,\n\t\t\t\tC01688591FE4480100C6B205 /* main.m */,\n\t\t\t);\n\t\t\tpath = BrazeInAppMessageSample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDDAB7F5627EB85B5D0713BF3 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t36B089D97602D0E2A2848A29 /* libPods-BrazeInAppMessageSample.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tC01688461FE4480100C6B205 /* BrazeInAppMessageSample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C016885D1FE4480100C6B205 /* Build configuration list for PBXNativeTarget \"BrazeInAppMessageSample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t74D46EAA5BE7324E6D318E8F /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tC01688431FE4480100C6B205 /* Sources */,\n\t\t\t\tC01688441FE4480100C6B205 /* Frameworks */,\n\t\t\t\tC01688451FE4480100C6B205 /* Resources */,\n\t\t\t\tA2A02606B0EFFE58F8414B21 /* [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 = BrazeInAppMessageSample;\n\t\t\tproductName = BrazeInAppMessageSample;\n\t\t\tproductReference = C01688471FE4480100C6B205 /* BrazeInAppMessageSample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tC016883F1FE4480100C6B205 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0920;\n\t\t\t\tORGANIZATIONNAME = Appboy;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tC01688461FE4480100C6B205 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = C01688421FE4480100C6B205 /* Build configuration list for PBXProject \"BrazeInAppMessageSample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\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 = C016883E1FE4480100C6B205;\n\t\t\tproductRefGroup = C01688481FE4480100C6B205 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tC01688461FE4480100C6B205 /* BrazeInAppMessageSample */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tC01688451FE4480100C6B205 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC01688571FE4480100C6B205 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tC01688541FE4480100C6B205 /* Assets.xcassets in Resources */,\n\t\t\t\tC01688611FE4480E00C6B205 /* Podfile in Resources */,\n\t\t\t\tC023B14D1FEB25E30003A747 /* CustomInAppMessageViewController.xib in Resources */,\n\t\t\t\tC01688521FE4480100C6B205 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t74D46EAA5BE7324E6D318E8F /* [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\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-BrazeInAppMessageSample-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tA2A02606B0EFFE58F8414B21 /* [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\t\"${SRCROOT}/Pods/Target Support Files/Pods-BrazeInAppMessageSample/Pods-BrazeInAppMessageSample-resources.sh\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyKit/Appboy.bundle\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/ABKInAppMessageFullViewController.xib\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/ABKInAppMessageHTMLFullViewController.xib\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/ABKInAppMessageModalViewController.xib\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/ABKInAppMessageSlideupViewController.xib\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/arrow.png\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/arrow@2x.png\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/com_appboy_inapp_close_icon.png\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/com_appboy_inapp_close_icon@2x.png\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/com_appboy_inapp_close_icon@3x.png\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/FontAwesome.otf\",\n\t\t\t\t\"${PODS_ROOT}/Appboy-iOS-SDK/AppboyUI/InAppMessage/Resources/SlideupArrow.png\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Appboy.bundle\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ABKInAppMessageFullViewController.nib\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ABKInAppMessageHTMLFullViewController.nib\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ABKInAppMessageModalViewController.nib\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ABKInAppMessageSlideupViewController.nib\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/arrow.png\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/arrow@2x.png\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/com_appboy_inapp_close_icon.png\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/com_appboy_inapp_close_icon@2x.png\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/com_appboy_inapp_close_icon@3x.png\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.otf\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SlideupArrow.png\",\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-BrazeInAppMessageSample/Pods-BrazeInAppMessageSample-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tC01688431FE4480100C6B205 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC023B14E1FEB25E30003A747 /* CustomInAppMessageViewController.m in Sources */,\n\t\t\t\tC016884F1FE4480100C6B205 /* ViewController.m in Sources */,\n\t\t\t\tC016885A1FE4480100C6B205 /* main.m in Sources */,\n\t\t\t\tC016884C1FE4480100C6B205 /* AppDelegate.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\tC01688501FE4480100C6B205 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tC01688511FE4480100C6B205 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC01688551FE4480100C6B205 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tC01688561FE4480100C6B205 /* 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\tC016885B1FE4480100C6B205 /* 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_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"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 = gnu11;\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 = 11.2;\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\tC016885C1FE4480100C6B205 /* 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_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"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 = gnu11;\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 = 11.2;\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\tC016885E1FE4480100C6B205 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 36CB63849B802DB410475277 /* Pods-BrazeInAppMessageSample.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = BrazeInAppMessageSample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.BrazeInAppMessageSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC016885F1FE4480100C6B205 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4673C9AA679A11806B87D7AB /* Pods-BrazeInAppMessageSample.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = BrazeInAppMessageSample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.appboy.BrazeInAppMessageSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tC01688421FE4480100C6B205 /* Build configuration list for PBXProject \"BrazeInAppMessageSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC016885B1FE4480100C6B205 /* Debug */,\n\t\t\t\tC016885C1FE4480100C6B205 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC016885D1FE4480100C6B205 /* Build configuration list for PBXNativeTarget \"BrazeInAppMessageSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC016885E1FE4480100C6B205 /* Debug */,\n\t\t\t\tC016885F1FE4480100C6B205 /* 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 = C016883F1FE4480100C6B205 /* Project object */;\n}\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/BrazeInAppMessageSample.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:BrazeInAppMessageSample.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/Podfile",
    "content": "platform :ios, '9.0'\n\nsource 'https://cdn.cocoapods.org/'\n\ntarget 'BrazeInAppMessageSample' do\n  pod 'Appboy-iOS-SDK/InAppMessage'\nend\n"
  },
  {
    "path": "Samples/InAppMessage/BrazeInAppMessageSample/Podfile.lock",
    "content": "PODS:\n  - Appboy-iOS-SDK/Core (3.10.0)\n  - Appboy-iOS-SDK/InAppMessage (3.10.0):\n    - Appboy-iOS-SDK/Core\n    - SDWebImage/GIF (~> 4.0)\n  - FLAnimatedImage (1.0.12)\n  - SDWebImage/Core (4.4.2)\n  - SDWebImage/GIF (4.4.2):\n    - FLAnimatedImage (~> 1.0)\n    - SDWebImage/Core\n\nDEPENDENCIES:\n  - Appboy-iOS-SDK/InAppMessage\n\nSPEC REPOS:\n  https://github.com/CocoaPods/Specs.git:\n    - Appboy-iOS-SDK\n    - FLAnimatedImage\n    - SDWebImage\n\nSPEC CHECKSUMS:\n  Appboy-iOS-SDK: 2c1135d321280dadbdc3f88ba68bbd87023cd03e\n  FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31\n  SDWebImage: 624d6e296c69b244bcede364c72ae0430ac14681\n\nPODFILE CHECKSUM: 1270860153820efa21e7e6a3b06560b243790ee6\n\nCOCOAPODS: 1.5.0\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n@end\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/AppDelegate.m",
    "content": "#import \"AppDelegate.h\"\n#import \"AppboyKit.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  // Override point for customization after application launch.\n  [Appboy startWithApiKey:@\"8aee5956-c5e3-49f2-9aab-b77b8e7348bd\"\n            inApplication:application\n        withLaunchOptions:launchOptions];\n  return YES;\n}\n\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n  // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n  // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.\n}\n\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n  // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n  // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n  // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.\n}\n\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n  // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n  // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n\n@end\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/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=\"13122.16\" systemVersion=\"17A277\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13104.12\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\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": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/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=\"17506\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"9Qp-Oy-HIX\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17505\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\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                    <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=\"left\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"WJR-WD-Ox6\">\n                                <rect key=\"frame\" x=\"21\" y=\"44\" width=\"123\" height=\"30\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"6dR-D3-M5r\"/>\n                                </constraints>\n                                <state key=\"normal\" title=\"Modal News Feed\"/>\n                                <connections>\n                                    <action selector=\"displayModalNewsFeed:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"9ME-8b-Kcq\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" buttonType=\"system\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ei5-sX-Ra5\">\n                                <rect key=\"frame\" x=\"21\" y=\"82\" width=\"153\" height=\"30\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"KHJ-w6-VP0\"/>\n                                </constraints>\n                                <state key=\"normal\" title=\"Navigation News Feed\"/>\n                                <connections>\n                                    <action selector=\"displayNavigationNewsFeed:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"F0i-6q-2Ca\"/>\n                                </connections>\n                            </button>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Enable Unread Indicator\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"A6N-1m-xbR\">\n                                <rect key=\"frame\" x=\"176.5\" y=\"52\" width=\"182.5\" height=\"21\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"21\" id=\"mCr-Vd-Aqp\"/>\n                                </constraints>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"QKf-m2-fSw\">\n                                <rect key=\"frame\" x=\"310\" y=\"81\" width=\"51\" height=\"31\"/>\n                            </switch>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"trailing\" secondItem=\"QKf-m2-fSw\" secondAttribute=\"trailing\" constant=\"16\" id=\"3wc-Ul-mTu\"/>\n                            <constraint firstItem=\"ei5-sX-Ra5\" firstAttribute=\"top\" secondItem=\"WJR-WD-Ox6\" secondAttribute=\"bottom\" constant=\"8\" id=\"7OQ-ZA-wdm\"/>\n                            <constraint firstItem=\"ei5-sX-Ra5\" firstAttribute=\"leading\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"leading\" constant=\"21\" id=\"8Ju-vh-JGQ\"/>\n                            <constraint firstItem=\"WJR-WD-Ox6\" firstAttribute=\"top\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"top\" id=\"ASL-tE-RRQ\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"ei5-sX-Ra5\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"BKL-XT-mMS\"/>\n                            <constraint firstItem=\"WJR-WD-Ox6\" firstAttribute=\"leading\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"leading\" constant=\"21\" id=\"W4J-EY-nPb\"/>\n                            <constraint firstItem=\"QKf-m2-fSw\" firstAttribute=\"top\" secondItem=\"A6N-1m-xbR\" secondAttribute=\"bottom\" constant=\"8\" id=\"Wbx-xr-3mX\"/>\n                            <constraint firstItem=\"A6N-1m-xbR\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"bbn-bi-wsx\"/>\n                            <constraint firstItem=\"A6N-1m-xbR\" firstAttribute=\"top\" secondItem=\"6Tk-OE-BBY\" secondAttribute=\"top\" constant=\"8\" id=\"bwn-I2-2co\"/>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"trailing\" secondItem=\"A6N-1m-xbR\" secondAttribute=\"trailing\" constant=\"16\" id=\"rOZ-YM-6S0\"/>\n                            <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"WJR-WD-Ox6\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"vs9-mm-Z8b\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" id=\"qEv-rt-mQX\"/>\n                    <connections>\n                        <outlet property=\"unreadIndicatorSwitch\" destination=\"QKf-m2-fSw\" id=\"mSu-AE-etN\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"598\" y=\"-225\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"bRD-ZD-MHq\">\n            <objects>\n                <navigationController id=\"9Qp-Oy-HIX\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" insetsLayoutMarginsFromSafeArea=\"NO\" id=\"F5b-Hn-PGJ\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"BYZ-38-t0r\" kind=\"relationship\" relationship=\"rootViewController\" id=\"PnR-BX-8hB\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"qLu-ee-fWw\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-313\" y=\"-233\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/CustomFeedTableViewController.h",
    "content": "#import \"AppboyNewsFeed.h\"\n\n@interface CustomFeedTableViewController : ABKNewsFeedTableViewController\n\n@end\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/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\n\t\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</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>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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/ViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UISwitch *unreadIndicatorSwitch;\n\n@end\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/ViewController.m",
    "content": "#import \"ViewController.h\"\n#import \"AppboyNewsFeed.h\"\n\n@implementation ViewController\n\n- (IBAction)displayModalNewsFeed:(id)sender {\n  ABKNewsFeedViewController *newsFeed = [[ABKNewsFeedViewController alloc] init];\n  newsFeed.newsFeed.disableUnreadIndicator = !self.unreadIndicatorSwitch.on;\n  [self presentViewController:newsFeed animated:YES completion:nil];\n}\n\n- (IBAction)displayNavigationNewsFeed:(id)sender {\n  ABKNewsFeedTableViewController *newsFeed = [[ABKNewsFeedTableViewController alloc] init];\n  newsFeed.disableUnreadIndicator = !self.unreadIndicatorSwitch.on;\n  [self.navigationController pushViewController:newsFeed animated:YES];\n}\n\n@end\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample/main.m",
    "content": "#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": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 48;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t66CB5EEACF6A5A3A4F42D0FC /* libPods-BrazeNewsFeedSample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9010644497F1B755453A1FEF /* libPods-BrazeNewsFeedSample.a */; };\n\t\tC1D55EEA1FFD935A00EEB5A1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D55EE91FFD935A00EEB5A1 /* AppDelegate.m */; };\n\t\tC1D55EED1FFD935A00EEB5A1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D55EEC1FFD935A00EEB5A1 /* ViewController.m */; };\n\t\tC1D55EF01FFD935A00EEB5A1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C1D55EEE1FFD935A00EEB5A1 /* Main.storyboard */; };\n\t\tC1D55EF21FFD935A00EEB5A1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C1D55EF11FFD935A00EEB5A1 /* Assets.xcassets */; };\n\t\tC1D55EF51FFD935A00EEB5A1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C1D55EF31FFD935A00EEB5A1 /* LaunchScreen.storyboard */; };\n\t\tC1D55EF81FFD935A00EEB5A1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D55EF71FFD935A00EEB5A1 /* main.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t4F7E07523F630C0FCE485D17 /* Pods-BrazeNewsFeedSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-BrazeNewsFeedSample.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-BrazeNewsFeedSample/Pods-BrazeNewsFeedSample.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t893120DC2EE88C18C356CF09 /* Pods-BrazeNewsFeedSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-BrazeNewsFeedSample.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-BrazeNewsFeedSample/Pods-BrazeNewsFeedSample.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t9010644497F1B755453A1FEF /* libPods-BrazeNewsFeedSample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-BrazeNewsFeedSample.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC1D55EE51FFD935900EEB5A1 /* BrazeNewsFeedSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BrazeNewsFeedSample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC1D55EE81FFD935A00EEB5A1 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tC1D55EE91FFD935A00EEB5A1 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tC1D55EEB1FFD935A00EEB5A1 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\tC1D55EEC1FFD935A00EEB5A1 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\tC1D55EEF1FFD935A00EEB5A1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tC1D55EF11FFD935A00EEB5A1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tC1D55EF41FFD935A00EEB5A1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tC1D55EF61FFD935A00EEB5A1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC1D55EF71FFD935A00EEB5A1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tC1D55EE21FFD935900EEB5A1 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t66CB5EEACF6A5A3A4F42D0FC /* libPods-BrazeNewsFeedSample.a 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\t988DD897C0A98141FDCD4530 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4F7E07523F630C0FCE485D17 /* Pods-BrazeNewsFeedSample.debug.xcconfig */,\n\t\t\t\t893120DC2EE88C18C356CF09 /* Pods-BrazeNewsFeedSample.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC1D55EDC1FFD935900EEB5A1 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC1D55EE71FFD935A00EEB5A1 /* BrazeNewsFeedSample */,\n\t\t\t\tC1D55EE61FFD935900EEB5A1 /* Products */,\n\t\t\t\t988DD897C0A98141FDCD4530 /* Pods */,\n\t\t\t\tFD4D981A005AAB0D3C623455 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC1D55EE61FFD935900EEB5A1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC1D55EE51FFD935900EEB5A1 /* BrazeNewsFeedSample.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC1D55EE71FFD935A00EEB5A1 /* BrazeNewsFeedSample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC1D55EE81FFD935A00EEB5A1 /* AppDelegate.h */,\n\t\t\t\tC1D55EE91FFD935A00EEB5A1 /* AppDelegate.m */,\n\t\t\t\tC1D55EEB1FFD935A00EEB5A1 /* ViewController.h */,\n\t\t\t\tC1D55EEC1FFD935A00EEB5A1 /* ViewController.m */,\n\t\t\t\tC1D55EEE1FFD935A00EEB5A1 /* Main.storyboard */,\n\t\t\t\tC1D55EF11FFD935A00EEB5A1 /* Assets.xcassets */,\n\t\t\t\tC1D55EF31FFD935A00EEB5A1 /* LaunchScreen.storyboard */,\n\t\t\t\tC1D55EF61FFD935A00EEB5A1 /* Info.plist */,\n\t\t\t\tC1D55EF71FFD935A00EEB5A1 /* main.m */,\n\t\t\t);\n\t\t\tpath = BrazeNewsFeedSample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFD4D981A005AAB0D3C623455 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9010644497F1B755453A1FEF /* libPods-BrazeNewsFeedSample.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tC1D55EE41FFD935900EEB5A1 /* BrazeNewsFeedSample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C1D55EFB1FFD935A00EEB5A1 /* Build configuration list for PBXNativeTarget \"BrazeNewsFeedSample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t090208D5C3B87C58F1748BD6 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tC1D55EE11FFD935900EEB5A1 /* Sources */,\n\t\t\t\tC1D55EE21FFD935900EEB5A1 /* Frameworks */,\n\t\t\t\tC1D55EE31FFD935900EEB5A1 /* Resources */,\n\t\t\t\tA26B5A017FDF8B96E271F515 /* [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 = BrazeNewsFeedSample;\n\t\t\tproductName = BrazeNewsFeedSample;\n\t\t\tproductReference = C1D55EE51FFD935900EEB5A1 /* BrazeNewsFeedSample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tC1D55EDD1FFD935900EEB5A1 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0920;\n\t\t\t\tORGANIZATIONNAME = Braze;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tC1D55EE41FFD935900EEB5A1 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = C1D55EE01FFD935900EEB5A1 /* Build configuration list for PBXProject \"BrazeNewsFeedSample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\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 = C1D55EDC1FFD935900EEB5A1;\n\t\t\tproductRefGroup = C1D55EE61FFD935900EEB5A1 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tC1D55EE41FFD935900EEB5A1 /* BrazeNewsFeedSample */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tC1D55EE31FFD935900EEB5A1 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC1D55EF51FFD935A00EEB5A1 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tC1D55EF21FFD935A00EEB5A1 /* Assets.xcassets in Resources */,\n\t\t\t\tC1D55EF01FFD935A00EEB5A1 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t090208D5C3B87C58F1748BD6 /* [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\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-BrazeNewsFeedSample-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tA26B5A017FDF8B96E271F515 /* [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\t\"${PODS_ROOT}/Target Support Files/Pods-BrazeNewsFeedSample/Pods-BrazeNewsFeedSample-resources.sh\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/Appboy.bundle\",\n\t\t\t\t\"${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.NewsFeed.bundle\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Appboy.bundle\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.NewsFeed.bundle\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-BrazeNewsFeedSample/Pods-BrazeNewsFeedSample-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tC1D55EE11FFD935900EEB5A1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC1D55EED1FFD935A00EEB5A1 /* ViewController.m in Sources */,\n\t\t\t\tC1D55EF81FFD935A00EEB5A1 /* main.m in Sources */,\n\t\t\t\tC1D55EEA1FFD935A00EEB5A1 /* AppDelegate.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\tC1D55EEE1FFD935A00EEB5A1 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tC1D55EEF1FFD935A00EEB5A1 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC1D55EF31FFD935A00EEB5A1 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tC1D55EF41FFD935A00EEB5A1 /* 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\tC1D55EF91FFD935A00EEB5A1 /* 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_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"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 = gnu11;\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 = 11.2;\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\tC1D55EFA1FFD935A00EEB5A1 /* 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_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = 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_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"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 = gnu11;\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 = 11.2;\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\tC1D55EFC1FFD935A00EEB5A1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4F7E07523F630C0FCE485D17 /* Pods-BrazeNewsFeedSample.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = BrazeNewsFeedSample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.braze.BrazeNewsFeedSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC1D55EFD1FFD935A00EEB5A1 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 893120DC2EE88C18C356CF09 /* Pods-BrazeNewsFeedSample.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5GLZKGNWQ3;\n\t\t\t\tINFOPLIST_FILE = BrazeNewsFeedSample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.braze.BrazeNewsFeedSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tC1D55EE01FFD935900EEB5A1 /* Build configuration list for PBXProject \"BrazeNewsFeedSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC1D55EF91FFD935A00EEB5A1 /* Debug */,\n\t\t\t\tC1D55EFA1FFD935A00EEB5A1 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC1D55EFB1FFD935A00EEB5A1 /* Build configuration list for PBXNativeTarget \"BrazeNewsFeedSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC1D55EFC1FFD935A00EEB5A1 /* Debug */,\n\t\t\t\tC1D55EFD1FFD935A00EEB5A1 /* 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 = C1D55EDD1FFD935900EEB5A1 /* Project object */;\n}\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/BrazeNewsFeedSample.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:BrazeNewsFeedSample.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/Podfile",
    "content": "platform :ios, '9.0'\n\nsource 'https://cdn.cocoapods.org/'\n\ntarget 'BrazeNewsFeedSample' do\n  pod 'Appboy-iOS-SDK/NewsFeed'\nend\n"
  },
  {
    "path": "Samples/NewsFeed/BrazeNewsFeedSample/Podfile.lock",
    "content": "PODS:\n  - Appboy-iOS-SDK/Core (3.32.0)\n  - Appboy-iOS-SDK/NewsFeed (3.32.0):\n    - Appboy-iOS-SDK/Core\n    - SDWebImage (< 6, >= 5.8.2)\n  - SDWebImage (5.10.4):\n    - SDWebImage/Core (= 5.10.4)\n  - SDWebImage/Core (5.10.4)\n\nDEPENDENCIES:\n  - Appboy-iOS-SDK/NewsFeed\n\nSPEC REPOS:\n  https://github.com/CocoaPods/Specs.git:\n    - Appboy-iOS-SDK\n    - SDWebImage\n\nSPEC CHECKSUMS:\n  Appboy-iOS-SDK: 6d3016581cb5306e26826ec7333f0c5ae59e2a2f\n  SDWebImage: c666b97e1fa9c64b4909816a903322018f0a9c84\n\nPODFILE CHECKSUM: 08939cdb7801e7cca33976fd67045892c2039b5e\n\nCOCOAPODS: 1.9.3\n"
  },
  {
    "path": "appboy_ios_sdk.json",
    "content": "{ \"4.7.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.7.0/Appboy_iOS_SDK.xcframework.zip\", \"4.6.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.6.0/Appboy_iOS_SDK.xcframework.zip\", \"4.5.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.4/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.4/Appboy_iOS_SDK.xcframework.zip\", \"4.5.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.3/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.3/Appboy_iOS_SDK.xcframework.zip\", \"4.5.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.2/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.2/Appboy_iOS_SDK.xcframework.zip\", \"4.5.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.1/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.1/Appboy_iOS_SDK.xcframework.zip\", \"4.5.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.0/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.0/Appboy_iOS_SDK.xcframework.zip\", \"4.4.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.4/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.4/Appboy_iOS_SDK.xcframework.zip\", \"4.4.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.3/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.3/Appboy_iOS_SDK.xcframework.zip\", \"4.4.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.2/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.2/Appboy_iOS_SDK.xcframework.zip\", \"4.4.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.1/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.1/Appboy_iOS_SDK.xcframework.zip\", \"4.4.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.0/Appboy_iOS_SDK_thin.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.0/Appboy_iOS_SDK.xcframework.zip\", \"4.3.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.4/Appboy_iOS_SDK_thin.framework.zip\", \"4.3.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.3/Appboy_iOS_SDK_thin.framework.zip\", \"4.3.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.2/Appboy_iOS_SDK_thin.framework.zip\", \"4.3.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.1/Appboy_iOS_SDK_thin.framework.zip\", \"4.3.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.0/Appboy_iOS_SDK_thin.framework.zip\", \"4.2.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.2.0/Appboy_iOS_SDK_thin.framework.zip\", \"4.1.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.1.0/Appboy_iOS_SDK_thin.framework.zip\", \"4.0.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.2/Appboy_iOS_SDK_thin.framework.zip\", \"4.0.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.1/Appboy_iOS_SDK_thin.framework.zip\", \"4.0.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.34.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.34.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.33.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.33.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.33.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.33.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.32.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.32.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.31.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.2/Appboy_iOS_SDK_thin.framework.zip\", \"3.31.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.31.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.30.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.30.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.29.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.29.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.29.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.29.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.28.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.28.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.27.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.27.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.26.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.26.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.26.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.26.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.25.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.25.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.24.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.2/Appboy_iOS_SDK_thin.framework.zip\", \"3.24.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.24.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.23.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.23.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.22.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.22.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.21.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.21.3/Appboy_iOS_SDK_thin.framework.zip\", \"3.21.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.21.2/Appboy_iOS_SDK_thin.framework.zip\", \"3.21.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.21.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.21.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.21.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.20.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.4/Appboy_iOS_SDK_thin.framework.zip\", \"3.20.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.3/Appboy_iOS_SDK_thin.framework.zip\", \"3.20.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.2/Appboy_iOS_SDK_thin.framework.zip\", \"3.20.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.20.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.19.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.19.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.18.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.18.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.17.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.17.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.16.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.16.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.15.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.15.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.14.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.14.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.14.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.14.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.13.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.13.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.12.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.12.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.11.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.11.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.10.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.10.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.9.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.9.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.8.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.8.4/Appboy_iOS_SDK_thin.framework.zip\", \"3.8.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.8.3/Appboy_iOS_SDK_thin.framework.zip\", \"3.8.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.8.2/Appboy_iOS_SDK_thin.framework.zip\", \"3.8.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.8.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.8.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.8.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.7.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.7.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.7.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.7.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.6.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.6.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.5.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.5.1/Appboy_iOS_SDK_thin.framework.zip\", \"3.5.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.5.0/Appboy_iOS_SDK_thin.framework.zip\", \"3.4.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.4.0/Appboy_iOS_SDK_thin.framework.zip\" }\n"
  },
  {
    "path": "appboy_ios_sdk_core.json",
    "content": "{ \"4.7.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.7.0/Appboy_iOS_SDK_core.xcframework.zip\", \"4.6.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.6.0/Appboy_iOS_SDK_core.xcframework.zip\", \"4.5.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.4/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.4/Appboy_iOS_SDK_core.xcframework.zip\", \"4.5.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.3/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.3/Appboy_iOS_SDK_core.xcframework.zip\", \"4.5.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.2/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.2/Appboy_iOS_SDK_core.xcframework.zip\", \"4.5.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.1/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.1/Appboy_iOS_SDK_core.xcframework.zip\", \"4.5.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.0/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.0/Appboy_iOS_SDK_core.xcframework.zip\", \"4.4.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.4/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.4/Appboy_iOS_SDK_core.xcframework.zip\", \"4.4.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.3/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.3/Appboy_iOS_SDK_core.xcframework.zip\", \"4.4.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.2/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.2/Appboy_iOS_SDK_core.xcframework.zip\", \"4.4.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.1/Appboy_iOS_SDK_core.framework.zip?alt=https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.1/Appboy_iOS_SDK_core.xcframework.zip\", \"4.4.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.0/Appboy_iOS_SDK_core.framework.zip\", \"4.3.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.4/Appboy_iOS_SDK_core.framework.zip\", \"4.3.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.3/Appboy_iOS_SDK_core.framework.zip\", \"4.3.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.2/Appboy_iOS_SDK_core.framework.zip\", \"4.3.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.1/Appboy_iOS_SDK_core.framework.zip\", \"4.3.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.0/Appboy_iOS_SDK_core.framework.zip\", \"4.2.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.2.0/Appboy_iOS_SDK_core.framework.zip\", \"4.1.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.1.0/Appboy_iOS_SDK_core.framework.zip\", \"4.0.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.2/Appboy_iOS_SDK_core.framework.zip\", \"4.0.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.1/Appboy_iOS_SDK_core.framework.zip\", \"4.0.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.0/Appboy_iOS_SDK_core.framework.zip\", \"3.34.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.34.0/Appboy_iOS_SDK_core.framework.zip\", \"3.33.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.33.1/Appboy_iOS_SDK_core.framework.zip\", \"3.33.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.33.0/Appboy_iOS_SDK_core.framework.zip\", \"3.32.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.32.0/Appboy_iOS_SDK_core.framework.zip\", \"3.31.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.2/Appboy_iOS_SDK_core.framework.zip\", \"3.31.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.1/Appboy_iOS_SDK_core.framework.zip\", \"3.31.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.0/Appboy_iOS_SDK_core.framework.zip\", \"3.30.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.30.0/Appboy_iOS_SDK_core.framework.zip\", \"3.29.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.29.1/Appboy_iOS_SDK_core.framework.zip\", \"3.29.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.29.0/Appboy_iOS_SDK_core.framework.zip\", \"3.28.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.28.0/Appboy_iOS_SDK_core.framework.zip\", \"3.27.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.27.0/Appboy_iOS_SDK_core.framework.zip\", \"3.26.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.26.1/Appboy_iOS_SDK_core.framework.zip\", \"3.26.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.26.0/Appboy_iOS_SDK_core.framework.zip\", \"3.25.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.25.0/Appboy_iOS_SDK_core.framework.zip\", \"3.24.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.2/Appboy_iOS_SDK_core.framework.zip\", \"3.24.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.1/Appboy_iOS_SDK_core.framework.zip\", \"3.24.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.0/Appboy_iOS_SDK_core.framework.zip\", \"3.23.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.23.0/Appboy_iOS_SDK_core.framework.zip\", \"3.22.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.22.0/Appboy_iOS_SDK_core.framework.zip\", \"3.21.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.21.3/Appboy_iOS_SDK_core.framework.zip\", \"3.21.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.21.2/Appboy_iOS_SDK_core.framework.zip\", \"3.21.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.21.1/Appboy_iOS_SDK_core.framework.zip\", \"3.21.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.21.0/Appboy_iOS_SDK_core.framework.zip\", \"3.20.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.4/Appboy_iOS_SDK_core.framework.zip\", \"3.20.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.3/Appboy_iOS_SDK_core.framework.zip\", \"3.20.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.2/Appboy_iOS_SDK_core.framework.zip\", \"3.20.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.1/Appboy_iOS_SDK_core.framework.zip\", \"3.20.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.20.0/Appboy_iOS_SDK_core.framework.zip\", \"3.19.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.19.0/Appboy_iOS_SDK_core.framework.zip\", \"3.18.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.18.0/Appboy_iOS_SDK_core.framework.zip\", \"3.17.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.17.0/Appboy_iOS_SDK_core.framework.zip\", \"3.16.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.16.0/Appboy_iOS_SDK_core.framework.zip\", \"3.15.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.15.0/Appboy_iOS_SDK_core.framework.zip\", \"3.14.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.14.1/Appboy_iOS_SDK_core.framework.zip\", \"3.14.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.14.0/Appboy_iOS_SDK_core.framework.zip\", \"3.13.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.13.0/Appboy_iOS_SDK_core.framework.zip\", \"3.12.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.12.0/Appboy_iOS_SDK_core.framework.zip\", \"3.11.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.11.0/Appboy_iOS_SDK_core.framework.zip\" }\n"
  },
  {
    "path": "appboy_ios_sdk_full.json",
    "content": "{ \"4.5.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.4/Appboy_iOS_SDK.framework.zip\", \"4.5.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.3/Appboy_iOS_SDK.framework.zip\", \"4.5.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.2/Appboy_iOS_SDK.framework.zip\", \"4.5.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.1/Appboy_iOS_SDK.framework.zip\", \"4.5.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.5.0/Appboy_iOS_SDK.framework.zip\", \"4.4.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.4/Appboy_iOS_SDK.framework.zip\", \"4.4.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.3/Appboy_iOS_SDK.framework.zip\", \"4.4.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.2/Appboy_iOS_SDK.framework.zip\", \"4.4.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.1/Appboy_iOS_SDK.framework.zip\", \"4.4.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.4.0/Appboy_iOS_SDK.framework.zip\", \"4.3.4\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.4/Appboy_iOS_SDK.framework.zip\", \"4.3.3\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.3/Appboy_iOS_SDK.framework.zip\", \"4.3.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.2/Appboy_iOS_SDK.framework.zip\", \"4.3.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.1/Appboy_iOS_SDK.framework.zip\", \"4.3.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.3.0/Appboy_iOS_SDK.framework.zip\", \"4.2.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.2.0/Appboy_iOS_SDK.framework.zip\", \"4.1.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.1.0/Appboy_iOS_SDK.framework.zip\", \"4.0.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.2/Appboy_iOS_SDK.framework.zip\", \"4.0.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.1/Appboy_iOS_SDK.framework.zip\", \"4.0.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/4.0.0/Appboy_iOS_SDK.framework.zip\", \"3.34.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.34.0/Appboy_iOS_SDK.framework.zip\", \"3.33.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.33.1/Appboy_iOS_SDK.framework.zip\", \"3.33.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.33.0/Appboy_iOS_SDK.framework.zip\", \"3.32.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.32.0/Appboy_iOS_SDK.framework.zip\", \"3.31.2\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.2/Appboy_iOS_SDK.framework.zip\", \"3.31.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.1/Appboy_iOS_SDK.framework.zip\", \"3.31.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.31.0/Appboy_iOS_SDK.framework.zip\", \"3.30.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.30.0/Appboy_iOS_SDK.framework.zip\", \"3.29.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.29.1/Appboy_iOS_SDK.framework.zip\", \"3.29.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.29.0/Appboy_iOS_SDK.framework.zip\", \"3.28.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.28.0/Appboy_iOS_SDK.framework.zip\", \"3.27.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.27.0/Appboy_iOS_SDK.framework.zip\", \"3.26.1\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.26.1/Appboy_iOS_SDK.framework.zip\", \"3.26.0\": \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.26.0/Appboy_iOS_SDK.framework.zip\", \"3.25.0\" : \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.25.0/Appboy_iOS_SDK.framework.zip\", \"3.24.2\" : \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.2/Appboy_iOS_SDK.framework.zip\", \"3.24.1\" : \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.1/Appboy_iOS_SDK.framework.zip\", \"3.24.0\" : \"https://github.com/Appboy/appboy-ios-sdk/releases/download/3.24.0/Appboy_iOS_SDK.framework.zip\"}\n"
  }
]