summaryrefslogtreecommitdiff
path: root/StoneIsland/platforms/ios/Pods/FirebaseABTesting
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/platforms/ios/Pods/FirebaseABTesting')
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConditionalUserPropertyController.h79
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConditionalUserPropertyController.m281
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConstants.h43
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTExperimentPayload.m151
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/FIRExperimentController.m337
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/FIRLifecycleEvents.m88
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Private/ABTExperimentPayload.h96
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Private/FirebaseABTestingInternal.h24
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FIRExperimentController.h103
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FIRLifecycleEvents.h63
-rwxr-xr-xStoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FirebaseABTesting.h16
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRAppInternal.h173
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponent.h91
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponentContainer.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponentType.h34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRDependency.h45
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRErrorCode.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRErrors.h24
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRLibrary.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRLogger.h156
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIROptionsInternal.h119
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FirebaseCoreInternal.h31
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRAnalyticsInterop.h66
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRAnalyticsInteropListener.h24
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRInteropEventNames.h28
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRInteropParameterNames.h73
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/LICENSE202
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseABTesting/README.md298
30 files changed, 2858 insertions, 0 deletions
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConditionalUserPropertyController.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConditionalUserPropertyController.h
new file mode 100644
index 00000000..54e10b0c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConditionalUserPropertyController.h
@@ -0,0 +1,79 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+#import "FirebaseABTesting/Sources/Private/ABTExperimentPayload.h"
+
+#import "Interop/Analytics/Public/FIRAnalyticsInterop.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class FIRLifecycleEvents;
+
+/// This class dynamically calls Firebase Analytics API to collect or update experiments
+/// information.
+/// The experiment in Firebase Analytics is named as conditional user property (CUP) object defined
+/// in FIRAConditionalUserProperty.h.
+@interface ABTConditionalUserPropertyController : NSObject
+
+/// Returns the ABTConditionalUserPropertyController singleton.
++ (instancetype)sharedInstanceWithAnalytics:(id<FIRAnalyticsInterop> _Nullable)analytics;
+
+/// Returns the list of currently set experiments from Firebase Analytics for the provided origin.
+- (NSArray *)experimentsWithOrigin:(NSString *)origin;
+
+/// Returns the experiment ID from Firebase Analytics given an experiment object. Returns empty
+/// string if can't find Firebase Analytics service.
+- (NSString *)experimentIDOfExperiment:(nullable id)experiment;
+
+/// Returns the variant ID from Firebase Analytics given an experiment object. Returns empty string
+/// if can't find Firebase Analytics service.
+- (NSString *)variantIDOfExperiment:(nullable id)experiment;
+
+/// Returns whether the experiment is the same as the one in the provided payload.
+- (BOOL)isExperiment:(id)experiment theSameAsPayload:(ABTExperimentPayload *)payload;
+
+/// Clears the experiment in Firebase Analytics.
+/// @param experimentID Experiment ID to clear.
+/// @param variantID Variant ID to clear.
+/// @param origin Impacted originating service, it is defined at Firebase Analytics
+/// FIREventOrigins.h.
+/// @param payload Payload to overwrite event name in events. DO NOT use payload's experiment
+/// ID and variant ID as the experiment to clear.
+/// @param events Events name for clearing the experiment.
+- (void)clearExperiment:(NSString *)experimentID
+ variantID:(NSString *)variantID
+ withOrigin:(NSString *)origin
+ payload:(nullable ABTExperimentPayload *)payload
+ events:(FIRLifecycleEvents *)events;
+
+/// Sets the experiment in Firebase Analytics.
+/// @param origin Impacted originating service, it is defined at Firebase Analytics
+/// FIREventOrigins.h.
+/// @param payload Payload to overwrite event name in events. DO NOT use payload's experiment
+/// ID and variant ID as the experiment to set.
+/// @param events Events name for setting the experiment.
+/// @param policy Overflow policy when the number of experiments is over the limit.
+- (void)setExperimentWithOrigin:(NSString *)origin
+ payload:(ABTExperimentPayload *)payload
+ events:(FIRLifecycleEvents *)events
+ policy:(ABTExperimentPayloadExperimentOverflowPolicy)policy;
+
+/**
+ * Unavailable. Use sharedInstanceWithAnalytics: instead.
+ */
+- (instancetype)init __attribute__((unavailable("Use +sharedInstanceWithAnalytics: instead.")));
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConditionalUserPropertyController.m b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConditionalUserPropertyController.m
new file mode 100644
index 00000000..d7601ee1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConditionalUserPropertyController.m
@@ -0,0 +1,281 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import "FirebaseABTesting/Sources/ABTConditionalUserPropertyController.h"
+
+#import "FirebaseABTesting/Sources/ABTConstants.h"
+#import "FirebaseABTesting/Sources/Public/FIRLifecycleEvents.h"
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+#import "Interop/Analytics/Public/FIRAnalyticsInterop.h"
+
+@implementation ABTConditionalUserPropertyController {
+ dispatch_queue_t _analyticOperationQueue;
+ id<FIRAnalyticsInterop> _Nullable _analytics;
+}
+
+/// Returns the ABTConditionalUserPropertyController singleton.
++ (instancetype)sharedInstanceWithAnalytics:(id<FIRAnalyticsInterop> _Nullable)analytics {
+ static ABTConditionalUserPropertyController *sharedInstance = nil;
+ static dispatch_once_t onceToken = 0;
+ dispatch_once(&onceToken, ^{
+ sharedInstance = [[ABTConditionalUserPropertyController alloc] initWithAnalytics:analytics];
+ });
+ return sharedInstance;
+}
+
+- (instancetype)initWithAnalytics:(id<FIRAnalyticsInterop> _Nullable)analytics {
+ self = [super init];
+ if (self) {
+ _analyticOperationQueue =
+ dispatch_queue_create("com.google.FirebaseABTesting.analytics", DISPATCH_QUEUE_SERIAL);
+ _analytics = analytics;
+ }
+ return self;
+}
+
+#pragma mark - experiments proxy methods on Firebase Analytics
+
+- (NSArray *)experimentsWithOrigin:(NSString *)origin {
+ return [_analytics conditionalUserProperties:origin propertyNamePrefix:@""];
+}
+
+- (void)clearExperiment:(NSString *)experimentID
+ variantID:(NSString *)variantID
+ withOrigin:(NSString *)origin
+ payload:(ABTExperimentPayload *)payload
+ events:(FIRLifecycleEvents *)events {
+ // Payload always overwrite event names.
+ NSString *clearExperimentEventName = events.clearExperimentEventName;
+ if (payload && payload.clearEventToLog && payload.clearEventToLog.length) {
+ clearExperimentEventName = payload.clearEventToLog;
+ }
+
+ [_analytics clearConditionalUserProperty:experimentID
+ forOrigin:origin
+ clearEventName:clearExperimentEventName
+ clearEventParameters:@{experimentID : variantID}];
+
+ FIRLogDebug(kFIRLoggerABTesting, @"I-ABT000015", @"Clear Experiment ID %@, variant ID %@.",
+ experimentID, variantID);
+}
+
+- (void)setExperimentWithOrigin:(NSString *)origin
+ payload:(ABTExperimentPayload *)payload
+ events:(FIRLifecycleEvents *)events
+ policy:(ABTExperimentPayloadExperimentOverflowPolicy)policy {
+ NSInteger maxNumOfExperiments = [self maxNumberOfExperimentsOfOrigin:origin];
+ if (maxNumOfExperiments < 0) {
+ return;
+ }
+
+ // Clear experiments if overflow
+ NSArray *experiments = [self experimentsWithOrigin:origin];
+ if (!experiments) {
+ FIRLogInfo(kFIRLoggerABTesting, @"I-ABT000003",
+ @"Failed to get conditional user properties from Firebase Analytics.");
+ return;
+ }
+
+ if (maxNumOfExperiments <= experiments.count) {
+ ABTExperimentPayloadExperimentOverflowPolicy overflowPolicy =
+ [self overflowPolicyWithPayload:payload originalPolicy:policy];
+ id experimentToClear = experiments.firstObject;
+ if (overflowPolicy == ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest &&
+ experimentToClear) {
+ NSString *expID = [self experimentIDOfExperiment:experimentToClear];
+ NSString *varID = [self variantIDOfExperiment:experimentToClear];
+
+ [self clearExperiment:expID variantID:varID withOrigin:origin payload:payload events:events];
+ FIRLogDebug(kFIRLoggerABTesting, @"I-ABT000016",
+ @"Clear experiment ID %@ variant ID %@ due to "
+ @"overflow policy.",
+ expID, varID);
+
+ } else {
+ FIRLogDebug(kFIRLoggerABTesting, @"I-ABT000017",
+ @"Experiment ID %@ variant ID %@ won't be set due to "
+ @"overflow policy.",
+ payload.experimentId, payload.variantId);
+
+ return;
+ }
+ }
+
+ // Clear experiment if other variant ID exists.
+ NSString *experimentID = payload.experimentId;
+ NSString *variantID = payload.variantId;
+ for (id experiment in experiments) {
+ NSString *expID = [self experimentIDOfExperiment:experiment];
+ NSString *varID = [self variantIDOfExperiment:experiment];
+ if ([expID isEqualToString:experimentID] && ![varID isEqualToString:variantID]) {
+ FIRLogDebug(kFIRLoggerABTesting, @"I-ABT000018",
+ @"Clear experiment ID %@ with variant ID %@ because "
+ @"only one variant ID can be existed "
+ @"at any time.",
+ expID, varID);
+ [self clearExperiment:expID variantID:varID withOrigin:origin payload:payload events:events];
+ }
+ }
+
+ // Set experiment
+ NSDictionary<NSString *, id> *experiment = [self createExperimentFromOrigin:origin
+ payload:payload
+ events:events];
+
+ [_analytics setConditionalUserProperty:experiment];
+
+ FIRLogDebug(kFIRLoggerABTesting, @"I-ABT000019",
+ @"Set conditional user property, experiment ID %@ with "
+ @"variant ID %@ triggered event %@.",
+ experimentID, variantID, payload.triggerEvent);
+
+ // Log setEvent (experiment lifecycle event to be set when an experiment is set)
+ [self logEventWithOrigin:origin payload:payload events:events];
+}
+
+- (NSMutableDictionary<NSString *, id> *)createExperimentFromOrigin:(NSString *)origin
+ payload:(ABTExperimentPayload *)payload
+ events:(FIRLifecycleEvents *)events {
+ NSMutableDictionary<NSString *, id> *experiment = [[NSMutableDictionary alloc] init];
+ NSString *experimentID = payload.experimentId;
+ NSString *variantID = payload.variantId;
+
+ NSDictionary *eventParams = @{experimentID : variantID};
+
+ [experiment setValue:origin forKey:kABTExperimentDictionaryOriginKey];
+
+ NSTimeInterval creationTimestamp = (double)(payload.experimentStartTimeMillis / ABT_MSEC_PER_SEC);
+ [experiment setValue:@(creationTimestamp) forKey:kABTExperimentDictionaryCreationTimestampKey];
+ [experiment setValue:experimentID forKey:kABTExperimentDictionaryExperimentIDKey];
+ [experiment setValue:variantID forKey:kABTExperimentDictionaryVariantIDKey];
+
+ // For the experiment to be immediately activated/triggered, its trigger event must be null.
+ // Double check if payload's trigger event is empty string, it must be set to null to trigger.
+ if (payload && payload.triggerEvent && payload.triggerEvent.length) {
+ [experiment setValue:payload.triggerEvent forKey:kABTExperimentDictionaryTriggeredEventNameKey];
+ } else {
+ [experiment setValue:nil forKey:kABTExperimentDictionaryTriggeredEventNameKey];
+ }
+
+ // Set timeout event name and params.
+ NSString *timeoutEventName = events.timeoutExperimentEventName;
+ if (payload && payload.timeoutEventToLog && payload.timeoutEventToLog.length) {
+ timeoutEventName = payload.timeoutEventToLog;
+ }
+ NSDictionary<NSString *, id> *timeoutEvent = [self eventDictionaryWithOrigin:origin
+ eventName:timeoutEventName
+ params:eventParams];
+ [experiment setValue:timeoutEvent forKey:kABTExperimentDictionaryTimedOutEventKey];
+
+ // Set trigger timeout information on how long to wait for trigger event.
+ NSTimeInterval triggerTimeout = (double)(payload.triggerTimeoutMillis / ABT_MSEC_PER_SEC);
+ [experiment setValue:@(triggerTimeout) forKey:kABTExperimentDictionaryTriggerTimeoutKey];
+
+ // Set activate event name and params.
+ NSString *activateEventName = events.activateExperimentEventName;
+ if (payload && payload.activateEventToLog && payload.activateEventToLog.length) {
+ activateEventName = payload.activateEventToLog;
+ }
+ NSDictionary<NSString *, id> *triggeredEvent = [self eventDictionaryWithOrigin:origin
+ eventName:activateEventName
+ params:eventParams];
+ [experiment setValue:triggeredEvent forKey:kABTExperimentDictionaryTriggeredEventKey];
+
+ // Set time to live information for how long the experiment lasts.
+ NSTimeInterval timeToLive = (double)(payload.timeToLiveMillis / ABT_MSEC_PER_SEC);
+ [experiment setValue:@(timeToLive) forKey:kABTExperimentDictionaryTimeToLiveKey];
+
+ // Set expired event name and params.
+ NSString *expiredEventName = events.expireExperimentEventName;
+ if (payload && payload.ttlExpiryEventToLog && payload.ttlExpiryEventToLog.length) {
+ expiredEventName = payload.ttlExpiryEventToLog;
+ }
+ NSDictionary<NSString *, id> *expiredEvent = [self eventDictionaryWithOrigin:origin
+ eventName:expiredEventName
+ params:eventParams];
+ [experiment setValue:expiredEvent forKey:kABTExperimentDictionaryExpiredEventKey];
+ return experiment;
+}
+
+- (NSDictionary<NSString *, id> *)
+ eventDictionaryWithOrigin:(nonnull NSString *)origin
+ eventName:(nonnull NSString *)eventName
+ params:(nonnull NSDictionary<NSString *, NSString *> *)params {
+ return @{
+ kABTEventDictionaryOriginKey : origin,
+ kABTEventDictionaryNameKey : eventName,
+ kABTEventDictionaryTimestampKey : @([NSDate date].timeIntervalSince1970),
+ kABTEventDictionaryParametersKey : params
+ };
+}
+
+#pragma mark - experiment properties
+- (NSString *)experimentIDOfExperiment:(id)experiment {
+ if (!experiment) {
+ return @"";
+ }
+ return [experiment valueForKey:kABTExperimentDictionaryExperimentIDKey];
+}
+
+- (NSString *)variantIDOfExperiment:(id)experiment {
+ if (!experiment) {
+ return @"";
+ }
+ return [experiment valueForKey:kABTExperimentDictionaryVariantIDKey];
+}
+
+- (NSInteger)maxNumberOfExperimentsOfOrigin:(NSString *)origin {
+ if (!_analytics) {
+ return 0;
+ }
+ return [_analytics maxUserProperties:origin];
+}
+
+#pragma mark - analytics internal methods
+
+- (void)logEventWithOrigin:(NSString *)origin
+ payload:(ABTExperimentPayload *)payload
+ events:(FIRLifecycleEvents *)events {
+ NSString *setExperimentEventName = events.setExperimentEventName;
+ if (payload && payload.setEventToLog && payload.setEventToLog.length) {
+ setExperimentEventName = payload.setEventToLog;
+ }
+ NSDictionary<NSString *, NSString *> *params;
+ params = payload.experimentId ? @{payload.experimentId : payload.variantId} : @{};
+ [_analytics logEventWithOrigin:origin name:setExperimentEventName parameters:params];
+}
+
+#pragma mark - helper
+
+- (BOOL)isExperiment:(id)experiment theSameAsPayload:(ABTExperimentPayload *)payload {
+ NSString *experimentID = [self experimentIDOfExperiment:experiment];
+ NSString *variantID = [self variantIDOfExperiment:experiment];
+ return [experimentID isEqualToString:payload.experimentId] &&
+ [variantID isEqualToString:payload.variantId];
+}
+
+- (ABTExperimentPayloadExperimentOverflowPolicy)
+ overflowPolicyWithPayload:(ABTExperimentPayload *)payload
+ originalPolicy:(ABTExperimentPayloadExperimentOverflowPolicy)originalPolicy {
+ if ([payload overflowPolicyIsValid]) {
+ return payload.overflowPolicy;
+ }
+ if (originalPolicy == ABTExperimentPayloadExperimentOverflowPolicyIgnoreNewest ||
+ originalPolicy == ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest) {
+ return originalPolicy;
+ }
+ return ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConstants.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConstants.h
new file mode 100644
index 00000000..36457fa8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTConstants.h
@@ -0,0 +1,43 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#define ABT_MSEC_PER_SEC 1000ull
+
+#pragma mark - Keys for experiment dictionaries.
+
+static NSString *const kABTExperimentDictionaryCreationTimestampKey = @"creationTimestamp";
+static NSString *const kABTExperimentDictionaryExperimentIDKey = @"name";
+static NSString *const kABTExperimentDictionaryExpiredEventKey = @"expiredEvent";
+static NSString *const kABTExperimentDictionaryOriginKey = @"origin";
+static NSString *const kABTExperimentDictionaryTimedOutEventKey = @"timedOutEvent";
+static NSString *const kABTExperimentDictionaryTimeToLiveKey = @"timeToLive";
+static NSString *const kABTExperimentDictionaryTriggeredEventKey = @"triggeredEvent";
+static NSString *const kABTExperimentDictionaryTriggeredEventNameKey = @"triggerEventName";
+static NSString *const kABTExperimentDictionaryTriggerTimeoutKey = @"triggerTimeout";
+static NSString *const kABTExperimentDictionaryVariantIDKey = @"value";
+
+#pragma mark - Keys for event dictionaries.
+
+static NSString *const kABTEventDictionaryNameKey = @"name";
+static NSString *const kABTEventDictionaryOriginKey = @"origin";
+static NSString *const kABTEventDictionaryParametersKey = @"parameters";
+static NSString *const kABTEventDictionaryTimestampKey = @"timestamp";
+
+#pragma mark - Errors
+
+static NSString *const kABTErrorDomain = @"com.google.abtesting";
+
+typedef NS_ENUM(NSUInteger, ABTInternalErrorCode) {
+ kABTInternalErrorFailedToFetchConditionalUserProperties = 1
+};
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTExperimentPayload.m b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTExperimentPayload.m
new file mode 100644
index 00000000..823193fe
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/ABTExperimentPayload.m
@@ -0,0 +1,151 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import "FirebaseABTesting/Sources/Private/ABTExperimentPayload.h"
+
+static NSString *const kExperimentPayloadKeyExperimentID = @"experimentId";
+static NSString *const kExperimentPayloadKeyVariantID = @"variantId";
+
+// Start time can either be a date string or integer (milliseconds since 1970).
+static NSString *const kExperimentPayloadKeyExperimentStartTime = @"experimentStartTime";
+static NSString *const kExperimentPayloadKeyExperimentStartTimeMillis =
+ @"experimentStartTimeMillis";
+static NSString *const kExperimentPayloadKeyTriggerEvent = @"triggerEvent";
+static NSString *const kExperimentPayloadKeyTriggerTimeoutMillis = @"triggerTimeoutMillis";
+static NSString *const kExperimentPayloadKeyTimeToLiveMillis = @"timeToLiveMillis";
+static NSString *const kExperimentPayloadKeySetEventToLog = @"setEventToLog";
+static NSString *const kExperimentPayloadKeyActivateEventToLog = @"activateEventToLog";
+static NSString *const kExperimentPayloadKeyClearEventToLog = @"clearEventToLog";
+static NSString *const kExperimentPayloadKeyTimeoutEventToLog = @"timeoutEventToLog";
+static NSString *const kExperimentPayloadKeyTTLExpiryEventToLog = @"ttlExpiryEventToLog";
+
+static NSString *const kExperimentPayloadKeyOverflowPolicy = @"overflowPolicy";
+static NSString *const kExperimentPayloadValueDiscardOldestOverflowPolicy = @"DISCARD_OLDEST";
+static NSString *const kExperimentPayloadValueIgnoreNewestOverflowPolicy = @"IGNORE_NEWEST";
+
+static NSString *const kExperimentPayloadKeyOngoingExperiments = @"ongoingExperiments";
+
+@implementation ABTExperimentLite
+
+- (instancetype)initWithExperimentId:(NSString *)experimentId {
+ if (self = [super init]) {
+ _experimentId = experimentId;
+ }
+ return self;
+}
+
+@end
+
+@implementation ABTExperimentPayload
+
++ (NSDateFormatter *)experimentStartTimeFormatter {
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
+ [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
+ // Locale needs to be hardcoded. See
+ // https://developer.apple.com/library/ios/#qa/qa1480/_index.html for more details.
+ [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
+ [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
+ return dateFormatter;
+}
+
++ (instancetype)parseFromData:(NSData *)data {
+ NSError *error;
+ NSDictionary *experimentDictionary =
+ [NSJSONSerialization JSONObjectWithData:data
+ options:NSJSONReadingAllowFragments
+ error:&error];
+ if (error != nil) {
+ return nil;
+ } else {
+ return [[ABTExperimentPayload alloc] initWithDictionary:experimentDictionary];
+ }
+}
+
+- (instancetype)initWithDictionary:(NSDictionary<NSString *, id> *)dictionary {
+ if (self = [super init]) {
+ _experimentId = dictionary[kExperimentPayloadKeyExperimentID];
+ _variantId = dictionary[kExperimentPayloadKeyVariantID];
+ _triggerEvent = dictionary[kExperimentPayloadKeyTriggerEvent];
+ _setEventToLog = dictionary[kExperimentPayloadKeySetEventToLog];
+ _activateEventToLog = dictionary[kExperimentPayloadKeyActivateEventToLog];
+ _clearEventToLog = dictionary[kExperimentPayloadKeyClearEventToLog];
+ _timeoutEventToLog = dictionary[kExperimentPayloadKeyTimeoutEventToLog];
+ _ttlExpiryEventToLog = dictionary[kExperimentPayloadKeyTTLExpiryEventToLog];
+
+ // Experiment start time can either be in the form of a date string or milliseconds since 1970.
+ if (dictionary[kExperimentPayloadKeyExperimentStartTime]) {
+ // Convert from date string.
+ NSDate *experimentStartTime = [[[self class] experimentStartTimeFormatter]
+ dateFromString:dictionary[kExperimentPayloadKeyExperimentStartTime]];
+ _experimentStartTimeMillis =
+ [@([experimentStartTime timeIntervalSince1970] * 1000) longLongValue];
+ } else if (dictionary[kExperimentPayloadKeyExperimentStartTimeMillis]) {
+ // Simply store milliseconds.
+ _experimentStartTimeMillis =
+ [dictionary[kExperimentPayloadKeyExperimentStartTimeMillis] longLongValue];
+ ;
+ }
+
+ _triggerTimeoutMillis = [dictionary[kExperimentPayloadKeyTriggerTimeoutMillis] longLongValue];
+ _timeToLiveMillis = [dictionary[kExperimentPayloadKeyTimeToLiveMillis] longLongValue];
+
+ // Overflow policy can be an integer, or string e.g. "DISCARD_OLDEST" or "IGNORE_NEWEST".
+ if ([dictionary[kExperimentPayloadKeyOverflowPolicy] isKindOfClass:[NSString class]]) {
+ // If it's a string, pick against the preset string values.
+ NSString *policy = dictionary[kExperimentPayloadKeyOverflowPolicy];
+ if ([policy isEqualToString:kExperimentPayloadValueDiscardOldestOverflowPolicy]) {
+ _overflowPolicy = ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest;
+ } else if ([policy isEqualToString:kExperimentPayloadValueIgnoreNewestOverflowPolicy]) {
+ _overflowPolicy = ABTExperimentPayloadExperimentOverflowPolicyIgnoreNewest;
+ } else {
+ _overflowPolicy = ABTExperimentPayloadExperimentOverflowPolicyUnrecognizedValue;
+ }
+ } else {
+ _overflowPolicy = [dictionary[kExperimentPayloadKeyOverflowPolicy] intValue];
+ }
+
+ NSMutableArray<ABTExperimentLite *> *ongoingExperiments = [[NSMutableArray alloc] init];
+
+ NSArray<NSDictionary<NSString *, NSString *> *> *ongoingExperimentsArray =
+ dictionary[kExperimentPayloadKeyOngoingExperiments];
+
+ for (NSDictionary<NSString *, NSString *> *experimentDictionary in ongoingExperimentsArray) {
+ NSString *experimentId = experimentDictionary[kExperimentPayloadKeyExperimentID];
+ if (experimentId) {
+ ABTExperimentLite *liteExperiment =
+ [[ABTExperimentLite alloc] initWithExperimentId:experimentId];
+ [ongoingExperiments addObject:liteExperiment];
+ }
+ }
+
+ _ongoingExperiments = [ongoingExperiments copy];
+ }
+ return self;
+}
+
+- (void)clearTriggerEvent {
+ _triggerEvent = nil;
+}
+
+- (BOOL)overflowPolicyIsValid {
+ return self.overflowPolicy == ABTExperimentPayloadExperimentOverflowPolicyIgnoreNewest ||
+ self.overflowPolicy == ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest;
+}
+
+- (void)setOverflowPolicy:(ABTExperimentPayloadExperimentOverflowPolicy)overflowPolicy {
+ _overflowPolicy = overflowPolicy;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/FIRExperimentController.m b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/FIRExperimentController.m
new file mode 100644
index 00000000..c2e47ea3
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/FIRExperimentController.m
@@ -0,0 +1,337 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import "FirebaseABTesting/Sources/Public/FIRExperimentController.h"
+
+#import "FirebaseABTesting/Sources/ABTConditionalUserPropertyController.h"
+#import "FirebaseABTesting/Sources/ABTConstants.h"
+#import "FirebaseABTesting/Sources/Private/ABTExperimentPayload.h"
+#import "FirebaseABTesting/Sources/Public/FIRLifecycleEvents.h"
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+
+#import "Interop/Analytics/Public/FIRAnalyticsInterop.h"
+
+#ifndef FIRABTesting_VERSION
+#error "FIRABTesting_VERSION is not defined: \
+add -DFIRABTesting_VERSION=... to the build invocation"
+#endif
+
+// The following two macros supply the incantation so that the C
+// preprocessor does not try to parse the version as a floating
+// point number. See
+// https://www.guyrutenberg.com/2008/12/20/expanding-macros-into-string-constants-in-c/
+#define STR(x) STR_EXPAND(x)
+#define STR_EXPAND(x) #x
+
+/// Default experiment overflow policy.
+const ABTExperimentPayloadExperimentOverflowPolicy FIRDefaultExperimentOverflowPolicy =
+ ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest;
+
+/// Deserialize the experiment payloads.
+ABTExperimentPayload *ABTDeserializeExperimentPayload(NSData *payload) {
+ // Verify that we have a JSON object.
+ NSError *error;
+ id JSONObject = [NSJSONSerialization JSONObjectWithData:payload options:kNilOptions error:&error];
+ if (JSONObject == nil) {
+ FIRLogError(kFIRLoggerABTesting, @"I-ABT000001", @"Failed to parse experiment payload: %@",
+ error.debugDescription);
+ }
+ return [ABTExperimentPayload parseFromData:payload];
+}
+
+/// Returns a list of experiments to be set given the payloads and current list of experiments from
+/// Firebase Analytics. If an experiment is in payloads but not in experiments, it should be set to
+/// Firebase Analytics.
+NSArray<ABTExperimentPayload *> *ABTExperimentsToSetFromPayloads(
+ NSArray<NSData *> *payloads,
+ NSArray<NSDictionary<NSString *, NSString *> *> *experiments,
+ id<FIRAnalyticsInterop> _Nullable analytics) {
+ NSArray<NSData *> *payloadsCopy = [payloads copy];
+ NSArray *experimentsCopy = [experiments copy];
+ NSMutableArray *experimentsToSet = [[NSMutableArray alloc] init];
+ ABTConditionalUserPropertyController *controller =
+ [ABTConditionalUserPropertyController sharedInstanceWithAnalytics:analytics];
+
+ // Check if the experiment is in payloads but not in experiments.
+ for (NSData *payload in payloadsCopy) {
+ ABTExperimentPayload *experimentPayload = ABTDeserializeExperimentPayload(payload);
+ if (!experimentPayload) {
+ FIRLogInfo(kFIRLoggerABTesting, @"I-ABT000002",
+ @"Either payload is not set or it cannot be deserialized.");
+ continue;
+ }
+
+ BOOL isExperimentSet = NO;
+ for (id experiment in experimentsCopy) {
+ if ([controller isExperiment:experiment theSameAsPayload:experimentPayload]) {
+ isExperimentSet = YES;
+ break;
+ }
+ }
+
+ if (!isExperimentSet) {
+ [experimentsToSet addObject:experimentPayload];
+ }
+ }
+ return [experimentsToSet copy];
+}
+
+/// Returns a list of experiments to be cleared given the payloads and current list of
+/// experiments from Firebase Analytics. If an experiment is in experiments but not in payloads, it
+/// should be cleared in Firebase Analytics.
+NSArray *ABTExperimentsToClearFromPayloads(
+ NSArray<NSData *> *payloads,
+ NSArray<NSDictionary<NSString *, NSString *> *> *experiments,
+ id<FIRAnalyticsInterop> _Nullable analytics) {
+ NSMutableArray *experimentsToClear = [[NSMutableArray alloc] init];
+ ABTConditionalUserPropertyController *controller =
+ [ABTConditionalUserPropertyController sharedInstanceWithAnalytics:analytics];
+
+ // Check if the experiment is in experiments but not payloads.
+ for (id experiment in experiments) {
+ BOOL doesExperimentNoLongerExist = YES;
+ for (NSData *payload in payloads) {
+ ABTExperimentPayload *experimentPayload = ABTDeserializeExperimentPayload(payload);
+ if (!experimentPayload) {
+ FIRLogInfo(kFIRLoggerABTesting, @"I-ABT000002",
+ @"Either payload is not set or it cannot be deserialized.");
+ continue;
+ }
+
+ if ([controller isExperiment:experiment theSameAsPayload:experimentPayload]) {
+ doesExperimentNoLongerExist = NO;
+ }
+ }
+ if (doesExperimentNoLongerExist) {
+ [experimentsToClear addObject:experiment];
+ }
+ }
+ return experimentsToClear;
+}
+
+// ABT doesn't provide any functionality to other components,
+// so it provides a private, empty protocol that it conforms to and use it for registration.
+
+@protocol FIRABTInstanceProvider
+@end
+
+@interface FIRExperimentController () <FIRABTInstanceProvider, FIRLibrary>
+@property(nonatomic, readwrite, strong) id<FIRAnalyticsInterop> _Nullable analytics;
+@end
+
+@implementation FIRExperimentController
+
++ (void)load {
+ [FIRApp registerInternalLibrary:(Class<FIRLibrary>)self
+ withName:@"fire-abt"
+ withVersion:[NSString stringWithUTF8String:STR(FIRABTesting_VERSION)]];
+}
+
++ (nonnull NSArray<FIRComponent *> *)componentsToRegister {
+ FIRDependency *analyticsDep = [FIRDependency dependencyWithProtocol:@protocol(FIRAnalyticsInterop)
+ isRequired:NO];
+ FIRComponentCreationBlock creationBlock =
+ ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) {
+ // Ensure it's cached so it returns the same instance every time ABTesting is called.
+ *isCacheable = YES;
+ id<FIRAnalyticsInterop> analytics = FIR_COMPONENT(FIRAnalyticsInterop, container);
+ return [[FIRExperimentController alloc] initWithAnalytics:analytics];
+ };
+ FIRComponent *abtProvider = [FIRComponent componentWithProtocol:@protocol(FIRABTInstanceProvider)
+ instantiationTiming:FIRInstantiationTimingLazy
+ dependencies:@[ analyticsDep ]
+ creationBlock:creationBlock];
+
+ return @[ abtProvider ];
+}
+
+- (instancetype)initWithAnalytics:(nullable id<FIRAnalyticsInterop>)analytics {
+ self = [super init];
+ if (self != nil) {
+ _analytics = analytics;
+ }
+ return self;
+}
+
++ (FIRExperimentController *)sharedInstance {
+ FIRApp *defaultApp = [FIRApp defaultApp]; // Missing configure will be logged here.
+ id<FIRABTInstanceProvider> instance = FIR_COMPONENT(FIRABTInstanceProvider, defaultApp.container);
+
+ // We know the instance coming from the container is a FIRExperimentController instance, cast it.
+ return (FIRExperimentController *)instance;
+}
+
+- (void)updateExperimentsWithServiceOrigin:(NSString *)origin
+ events:(FIRLifecycleEvents *)events
+ policy:(ABTExperimentPayloadExperimentOverflowPolicy)policy
+ lastStartTime:(NSTimeInterval)lastStartTime
+ payloads:(NSArray<NSData *> *)payloads
+ completionHandler:
+ (nullable void (^)(NSError *_Nullable error))completionHandler {
+ FIRExperimentController *__weak weakSelf = self;
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
+ FIRExperimentController *strongSelf = weakSelf;
+ [strongSelf updateExperimentConditionalUserPropertiesWithServiceOrigin:origin
+ events:events
+ policy:policy
+ lastStartTime:lastStartTime
+ payloads:payloads
+ completionHandler:completionHandler];
+ });
+}
+
+- (void)updateExperimentsWithServiceOrigin:(NSString *)origin
+ events:(FIRLifecycleEvents *)events
+ policy:(ABTExperimentPayloadExperimentOverflowPolicy)policy
+ lastStartTime:(NSTimeInterval)lastStartTime
+ payloads:(NSArray<NSData *> *)payloads {
+ [self updateExperimentsWithServiceOrigin:origin
+ events:events
+ policy:policy
+ lastStartTime:lastStartTime
+ payloads:payloads
+ completionHandler:nil];
+}
+
+- (void)
+ updateExperimentConditionalUserPropertiesWithServiceOrigin:(NSString *)origin
+ events:(FIRLifecycleEvents *)events
+ policy:
+ (ABTExperimentPayloadExperimentOverflowPolicy)
+ policy
+ lastStartTime:(NSTimeInterval)lastStartTime
+ payloads:(NSArray<NSData *> *)payloads
+ completionHandler:
+ (nullable void (^)(NSError *_Nullable error))
+ completionHandler {
+ ABTConditionalUserPropertyController *controller =
+ [ABTConditionalUserPropertyController sharedInstanceWithAnalytics:_analytics];
+
+ // Get the list of expriments from Firebase Analytics.
+ NSArray *experiments = [controller experimentsWithOrigin:origin];
+ if (!experiments) {
+ NSString *errorDescription =
+ @"Failed to get conditional user properties from Firebase Analytics.";
+ FIRLogInfo(kFIRLoggerABTesting, @"I-ABT000003", @"%@", errorDescription);
+
+ if (completionHandler) {
+ completionHandler([NSError
+ errorWithDomain:kABTErrorDomain
+ code:kABTInternalErrorFailedToFetchConditionalUserProperties
+ userInfo:@{NSLocalizedDescriptionKey : errorDescription}]);
+ }
+
+ return;
+ }
+ NSArray<ABTExperimentPayload *> *experimentsToSet =
+ ABTExperimentsToSetFromPayloads(payloads, experiments, _analytics);
+ NSArray<NSDictionary<NSString *, NSString *> *> *experimentsToClear =
+ ABTExperimentsToClearFromPayloads(payloads, experiments, _analytics);
+
+ for (id experiment in experimentsToClear) {
+ NSString *experimentID = [controller experimentIDOfExperiment:experiment];
+ NSString *variantID = [controller variantIDOfExperiment:experiment];
+ [controller clearExperiment:experimentID
+ variantID:variantID
+ withOrigin:origin
+ payload:nil
+ events:events];
+ }
+
+ for (ABTExperimentPayload *experimentPayload in experimentsToSet) {
+ if (experimentPayload.experimentStartTimeMillis > lastStartTime * ABT_MSEC_PER_SEC) {
+ [controller setExperimentWithOrigin:origin
+ payload:experimentPayload
+ events:events
+ policy:policy];
+ FIRLogInfo(kFIRLoggerABTesting, @"I-ABT000008",
+ @"Set Experiment ID %@, variant ID %@ to Firebase Analytics.",
+ experimentPayload.experimentId, experimentPayload.variantId);
+
+ } else {
+ FIRLogInfo(kFIRLoggerABTesting, @"I-ABT000009",
+ @"Not setting experiment ID %@, variant ID %@ due to the last update time %lld.",
+ experimentPayload.experimentId, experimentPayload.variantId,
+ (long)lastStartTime * ABT_MSEC_PER_SEC);
+ }
+ }
+
+ if (completionHandler) {
+ completionHandler(nil);
+ }
+}
+
+- (NSTimeInterval)latestExperimentStartTimestampBetweenTimestamp:(NSTimeInterval)timestamp
+ andPayloads:(NSArray<NSData *> *)payloads {
+ for (NSData *payload in [payloads copy]) {
+ ABTExperimentPayload *experimentPayload = ABTDeserializeExperimentPayload(payload);
+ if (!experimentPayload) {
+ FIRLogInfo(kFIRLoggerABTesting, @"I-ABT000002",
+ @"Either payload is not set or it cannot be deserialized.");
+ continue;
+ }
+ if (experimentPayload.experimentStartTimeMillis > timestamp * ABT_MSEC_PER_SEC) {
+ timestamp = (double)(experimentPayload.experimentStartTimeMillis / ABT_MSEC_PER_SEC);
+ }
+ }
+ return timestamp;
+}
+
+- (void)validateRunningExperimentsForServiceOrigin:(NSString *)origin
+ runningExperimentPayloads:(NSArray<ABTExperimentPayload *> *)payloads {
+ ABTConditionalUserPropertyController *controller =
+ [ABTConditionalUserPropertyController sharedInstanceWithAnalytics:_analytics];
+
+ FIRLifecycleEvents *lifecycleEvents = [[FIRLifecycleEvents alloc] init];
+
+ // Get the list of experiments from Firebase Analytics.
+ NSArray<NSDictionary<NSString *, NSString *> *> *activeExperiments =
+ [controller experimentsWithOrigin:origin];
+
+ NSMutableSet *runningExperimentIDs = [NSMutableSet setWithCapacity:payloads.count];
+ for (ABTExperimentPayload *payload in payloads) {
+ [runningExperimentIDs addObject:payload.experimentId];
+ }
+
+ for (NSDictionary<NSString *, NSString *> *activeExperimentDictionary in activeExperiments) {
+ NSString *experimentID = activeExperimentDictionary[@"name"];
+ if (![runningExperimentIDs containsObject:experimentID]) {
+ NSString *variantID = activeExperimentDictionary[@"value"];
+
+ [controller clearExperiment:experimentID
+ variantID:variantID
+ withOrigin:origin
+ payload:nil
+ events:lifecycleEvents];
+ }
+ }
+}
+
+- (void)activateExperiment:(ABTExperimentPayload *)experimentPayload
+ forServiceOrigin:(NSString *)origin {
+ ABTConditionalUserPropertyController *controller =
+ [ABTConditionalUserPropertyController sharedInstanceWithAnalytics:_analytics];
+
+ FIRLifecycleEvents *lifecycleEvents = [[FIRLifecycleEvents alloc] init];
+
+ // Ensure that trigger event is nil, which will immediately set the experiment to active.
+ [experimentPayload clearTriggerEvent];
+
+ [controller setExperimentWithOrigin:origin
+ payload:experimentPayload
+ events:lifecycleEvents
+ policy:experimentPayload.overflowPolicy];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/FIRLifecycleEvents.m b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/FIRLifecycleEvents.m
new file mode 100644
index 00000000..83dfc7e0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/FIRLifecycleEvents.m
@@ -0,0 +1,88 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import "FirebaseABTesting/Sources/Public/FIRLifecycleEvents.h"
+
+#import "FirebaseABTesting/Sources/Public/FIRExperimentController.h"
+
+/// Default name of the analytics event to be logged when an experiment is set.
+NSString *const FIRSetExperimentEventName = @"_exp_set";
+/// Default name of the analytics event to be logged when an experiment is activated.
+NSString *const FIRActivateExperimentEventName = @"_exp_activate";
+/// Default name of the analytics event to be logged when an experiment is cleared.
+NSString *const FIRClearExperimentEventName = @"_exp_clear";
+/// Default name of the analytics event to be logged when an experiment times out for being
+/// activated.
+NSString *const FIRTimeoutExperimentEventName = @"_exp_timeout";
+/// Default name of the analytics event to be logged when an experiment is expired as it reaches the
+/// end of TTL.
+NSString *const FIRExpireExperimentEventName = @"_exp_expire";
+/// Prefix for lifecycle event names.
+static NSString *const kLifecycleEventPrefix = @"_";
+
+@implementation FIRLifecycleEvents
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _setExperimentEventName = FIRSetExperimentEventName;
+ _activateExperimentEventName = FIRActivateExperimentEventName;
+ _clearExperimentEventName = FIRClearExperimentEventName;
+ _timeoutExperimentEventName = FIRTimeoutExperimentEventName;
+ _expireExperimentEventName = FIRExpireExperimentEventName;
+ }
+ return self;
+}
+
+- (void)setSetExperimentEventName:(NSString *)setExperimentEventName {
+ if (setExperimentEventName && [setExperimentEventName hasPrefix:kLifecycleEventPrefix]) {
+ _setExperimentEventName = setExperimentEventName;
+ } else {
+ _setExperimentEventName = FIRSetExperimentEventName;
+ }
+}
+
+- (void)setActivateExperimentEventName:(NSString *)activateExperimentEventName {
+ if (activateExperimentEventName &&
+ [activateExperimentEventName hasPrefix:kLifecycleEventPrefix]) {
+ _activateExperimentEventName = activateExperimentEventName;
+ } else {
+ _activateExperimentEventName = FIRActivateExperimentEventName;
+ }
+}
+
+- (void)setClearExperimentEventName:(NSString *)clearExperimentEventName {
+ if (clearExperimentEventName && [clearExperimentEventName hasPrefix:kLifecycleEventPrefix]) {
+ _clearExperimentEventName = clearExperimentEventName;
+ } else {
+ _clearExperimentEventName = FIRClearExperimentEventName;
+ }
+}
+
+- (void)setTimeoutExperimentEventName:(NSString *)timeoutExperimentEventName {
+ if (timeoutExperimentEventName && [timeoutExperimentEventName hasPrefix:kLifecycleEventPrefix]) {
+ _timeoutExperimentEventName = timeoutExperimentEventName;
+ } else {
+ _timeoutExperimentEventName = FIRTimeoutExperimentEventName;
+ }
+}
+
+- (void)setExpireExperimentEventName:(NSString *)expireExperimentEventName {
+ if (expireExperimentEventName && [_timeoutExperimentEventName hasPrefix:kLifecycleEventPrefix]) {
+ _expireExperimentEventName = expireExperimentEventName;
+ } else {
+ _expireExperimentEventName = FIRExpireExperimentEventName;
+ }
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Private/ABTExperimentPayload.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Private/ABTExperimentPayload.h
new file mode 100644
index 00000000..f550a0a0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Private/ABTExperimentPayload.h
@@ -0,0 +1,96 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Policy for handling the case where there's an overflow of experiments for an installation
+/// instance.
+typedef NS_ENUM(int32_t, ABTExperimentPayloadExperimentOverflowPolicy) {
+ ABTExperimentPayloadExperimentOverflowPolicyUnrecognizedValue = 999,
+ ABTExperimentPayloadExperimentOverflowPolicyUnspecified = 0,
+ ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest = 1,
+ ABTExperimentPayloadExperimentOverflowPolicyIgnoreNewest = 2,
+};
+
+@interface ABTExperimentLite : NSObject
+@property(nonatomic, readonly, copy) NSString *experimentId;
+
+- (instancetype)initWithExperimentId:(NSString *)experimentId NS_DESIGNATED_INITIALIZER;
+
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+@interface ABTExperimentPayload : NSObject
+
+/// Unique identifier for this experiment.
+@property(nonatomic, readonly, copy) NSString *experimentId;
+
+/// Unique identifier for the variant to which an installation instance has been assigned.
+@property(nonatomic, readonly, copy) NSString *variantId;
+
+/// Epoch time that represents when the experiment was started.
+@property(nonatomic, readonly) int64_t experimentStartTimeMillis;
+
+/// The event that triggers this experiment into ON state.
+@property(nonatomic, nullable, readonly, copy) NSString *triggerEvent;
+
+/// Duration in milliseconds for which the experiment can stay in STANDBY state (un-triggered).
+@property(nonatomic, readonly) int64_t triggerTimeoutMillis;
+
+/// Duration in milliseconds for which the experiment can stay in ON state (triggered).
+@property(nonatomic, readonly) int64_t timeToLiveMillis;
+
+/// The event logged when impact service sets the experiment.
+@property(nonatomic, readonly, copy) NSString *setEventToLog;
+
+/// The event logged when an experiment goes to the ON state.
+@property(nonatomic, readonly, copy) NSString *activateEventToLog;
+
+/// The event logged when an experiment is cleared.
+@property(nonatomic, readonly, copy) NSString *clearEventToLog;
+
+/// The event logged when an experiment times out after `triggerTimeoutMillis` milliseconds.
+@property(nonatomic, readonly, copy) NSString *timeoutEventToLog;
+
+/// The event logged when an experiment times out after `timeToLiveMillis` milliseconds.
+@property(nonatomic, readonly, copy) NSString *ttlExpiryEventToLog;
+
+@property(nonatomic, readonly) ABTExperimentPayloadExperimentOverflowPolicy overflowPolicy;
+
+/// A list of all other ongoing (started, and not yet stopped) experiments at the time this
+/// experiment was started. Does not include this experiment; only the others.
+@property(nonatomic, readonly) NSArray<ABTExperimentLite *> *ongoingExperiments;
+
+/// Parses an ABTExperimentPayload directly from JSON data.
+/// @param data JSON object as NSData. Must be reconstructible as an NSDictionary<NSString* , id>.
++ (instancetype)parseFromData:(NSData *)data;
+
+/// Initializes an ABTExperimentPayload from a dictionary with experiment metadata.
+- (instancetype)initWithDictionary:(NSDictionary<NSString *, id> *)dictionary
+ NS_DESIGNATED_INITIALIZER;
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/// Clears the trigger event associated with this payload.
+- (void)clearTriggerEvent;
+
+/// Checks if the overflow policy is a valid enum object.
+- (BOOL)overflowPolicyIsValid;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Private/FirebaseABTestingInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Private/FirebaseABTestingInternal.h
new file mode 100644
index 00000000..c132d86e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Private/FirebaseABTestingInternal.h
@@ -0,0 +1,24 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// An umbrella header, for any other libraries in this repo to access Firebase Public and Private
+// headers. Any package manager complexity should be handled here.
+
+#if SWIFT_PACKAGE
+@import FirebaseABTesting;
+#else
+#import <FirebaseABTesting/FirebaseABTesting.h>
+#endif
+
+#import "FirebaseABTesting/Sources/Private/ABTExperimentPayload.h"
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FIRExperimentController.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FIRExperimentController.h
new file mode 100644
index 00000000..acff7392
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FIRExperimentController.h
@@ -0,0 +1,103 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+@class ABTExperimentPayload;
+
+// Forward declaration to avoid importing into the module header
+typedef NS_ENUM(int32_t, ABTExperimentPayloadExperimentOverflowPolicy);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class FIRLifecycleEvents;
+
+/// The default experiment overflow policy, that is to discard the experiment with the oldest start
+/// time when users start the experiment on the web console.
+extern const ABTExperimentPayloadExperimentOverflowPolicy FIRDefaultExperimentOverflowPolicy;
+
+/// This class is for Firebase services to handle experiments updates to Firebase Analytics.
+/// Experiments can be set, cleared and updated through this controller.
+NS_SWIFT_NAME(ExperimentController)
+@interface FIRExperimentController : NSObject
+
+/// Returns the FIRExperimentController singleton.
++ (FIRExperimentController *)sharedInstance;
+
+/// Updates the list of experiments with an optional completion handler. Experiments already
+/// existing in payloads are not affected, whose state and payload is preserved. This method
+/// compares whether the experiments have changed or not by their variant ID. This runs in a
+/// background queue and calls the completion handler when finished executing.
+/// @param origin The originating service affected by the experiment.
+/// @param events A list of event names to be used for logging experiment lifecycle events,
+/// if they are not defined in the payload.
+/// @param policy The policy to handle new experiments when slots are full.
+/// @param lastStartTime The last known experiment start timestamp for this affected service.
+/// (Timestamps are specified by the number of seconds from 00:00:00 UTC on 1
+/// January 1970.).
+/// @param payloads List of experiment metadata.
+/// @param completionHandler Code to be executed after experiments are updated in the background
+/// thread.
+- (void)updateExperimentsWithServiceOrigin:(NSString *)origin
+ events:(FIRLifecycleEvents *)events
+ policy:(ABTExperimentPayloadExperimentOverflowPolicy)policy
+ lastStartTime:(NSTimeInterval)lastStartTime
+ payloads:(NSArray<NSData *> *)payloads
+ completionHandler:
+ (nullable void (^)(NSError *_Nullable error))completionHandler;
+
+/// Updates the list of experiments. Experiments already
+/// existing in payloads are not affected, whose state and payload is preserved. This method
+/// compares whether the experiments have changed or not by their variant ID. This runs in a
+/// background queue..
+/// @param origin The originating service affected by the experiment.
+/// @param events A list of event names to be used for logging experiment lifecycle events,
+/// if they are not defined in the payload.
+/// @param policy The policy to handle new experiments when slots are full.
+/// @param lastStartTime The last known experiment start timestamp for this affected service.
+/// (Timestamps are specified by the number of seconds from 00:00:00 UTC on 1
+/// January 1970.).
+/// @param payloads List of experiment metadata.
+- (void)updateExperimentsWithServiceOrigin:(NSString *)origin
+ events:(FIRLifecycleEvents *)events
+ policy:(ABTExperimentPayloadExperimentOverflowPolicy)policy
+ lastStartTime:(NSTimeInterval)lastStartTime
+ payloads:(NSArray<NSData *> *)payloads
+ DEPRECATED_MSG_ATTRIBUTE("Please use updateExperimentsWithServiceOrigin:events:policy:"
+ "lastStartTime:payloads:completionHandler: instead.");
+
+/// Returns the latest experiment start timestamp given a current latest timestamp and a list of
+/// experiment payloads. Timestamps are specified by the number of seconds from 00:00:00 UTC on 1
+/// January 1970.
+/// @param timestamp Current latest experiment start timestamp. If not known, affected service
+/// should specify -1;
+/// @param payloads List of experiment metadata.
+- (NSTimeInterval)latestExperimentStartTimestampBetweenTimestamp:(NSTimeInterval)timestamp
+ andPayloads:(NSArray<NSData *> *)payloads;
+
+/// Expires experiments that aren't in the list of running experiment payloads.
+/// @param origin The originating service affected by the experiment.
+/// @param payloads The list of valid, running experiments.
+- (void)validateRunningExperimentsForServiceOrigin:(NSString *)origin
+ runningExperimentPayloads:(NSArray<ABTExperimentPayload *> *)payloads;
+
+/// Directly sets a given experiment to be active.
+/// @param experimentPayload The payload for the experiment that should be activated.
+/// @param origin The originating service affected by the experiment.
+- (void)activateExperiment:(ABTExperimentPayload *)experimentPayload
+ forServiceOrigin:(NSString *)origin;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FIRLifecycleEvents.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FIRLifecycleEvents.h
new file mode 100644
index 00000000..889d0331
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FIRLifecycleEvents.h
@@ -0,0 +1,63 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Default event name for when an experiment is set.
+extern NSString *const FIRSetExperimentEventName NS_SWIFT_NAME(DefaultSetExperimentEventName);
+/// Default event name for when an experiment is activated.
+extern NSString *const FIRActivateExperimentEventName
+ NS_SWIFT_NAME(DefaultActivateExperimentEventName);
+/// Default event name for when an experiment is cleared.
+extern NSString *const FIRClearExperimentEventName NS_SWIFT_NAME(DefaultClearExperimentEventName);
+/// Default event name for when an experiment times out for being activated.
+extern NSString *const FIRTimeoutExperimentEventName
+ NS_SWIFT_NAME(DefaultTimeoutExperimentEventName);
+/// Default event name for when an experiment is expired as it reaches the end of TTL.
+extern NSString *const FIRExpireExperimentEventName NS_SWIFT_NAME(DefaultExpireExperimentEventName);
+
+/// An Experiment Lifecycle Event Object that specifies the name of the experiment event to be
+/// logged by Firebase Analytics.
+NS_SWIFT_NAME(LifecycleEvents)
+@interface FIRLifecycleEvents : NSObject
+
+/// Event name for when an experiment is set. It is default to FIRSetExperimentEventName and can be
+/// overridden. If experiment payload has a valid string of this field, always use experiment
+/// payload.
+@property(nonatomic, copy) NSString *setExperimentEventName;
+
+/// Event name for when an experiment is activated. It is default to FIRActivateExperimentEventName
+/// and can be overridden. If experiment payload has a valid string of this field, always use
+/// experiment payload.
+@property(nonatomic, copy) NSString *activateExperimentEventName;
+
+/// Event name for when an experiment is cleared. It is default to FIRClearExperimentEventName and
+/// can be overridden. If experiment payload has a valid string of this field, always use experiment
+/// payload.
+@property(nonatomic, copy) NSString *clearExperimentEventName;
+/// Event name for when an experiment is timeout from being STANDBY. It is default to
+/// FIRTimeoutExperimentEventName and can be overridden. If experiment payload has a valid string
+/// of this field, always use experiment payload.
+@property(nonatomic, copy) NSString *timeoutExperimentEventName;
+
+/// Event name when an experiment is expired when it reaches the end of its TTL.
+/// It is default to FIRExpireExperimentEventName and can be overridden. If experiment payload has a
+/// valid string of this field, always use experiment payload.
+@property(nonatomic, copy) NSString *expireExperimentEventName;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FirebaseABTesting.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FirebaseABTesting.h
new file mode 100755
index 00000000..cfa99b4a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseABTesting/Sources/Public/FirebaseABTesting.h
@@ -0,0 +1,16 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import "FIRExperimentController.h"
+#import "FIRLifecycleEvents.h"
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRAppInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRAppInternal.h
new file mode 100644
index 00000000..9a0c943d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRAppInternal.h
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIRApp.h"
+#else
+#import <FirebaseCore/FIRApp.h>
+#endif
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find FIRErrors.h
+#if __has_include("FirebaseCore/Sources/Private/FIRErrors.h")
+#import "FirebaseCore/Sources/Private/FIRErrors.h"
+#else
+#import <FirebaseCore/FIRErrors.h>
+#endif
+
+@class FIRComponentContainer;
+@protocol FIRLibrary;
+
+/**
+ * The internal interface to FIRApp. This is meant for first-party integrators, who need to receive
+ * FIRApp notifications, log info about the success or failure of their configuration, and access
+ * other internal functionality of FIRApp.
+ *
+ * TODO(b/28296561): Restructure this header.
+ */
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, FIRConfigType) {
+ FIRConfigTypeCore = 1,
+ FIRConfigTypeSDK = 2,
+};
+
+extern NSString *const kFIRDefaultAppName;
+extern NSString *const kFIRAppReadyToConfigureSDKNotification;
+extern NSString *const kFIRAppDeleteNotification;
+extern NSString *const kFIRAppIsDefaultAppKey;
+extern NSString *const kFIRAppNameKey;
+extern NSString *const kFIRGoogleAppIDKey;
+
+/**
+ * The format string for the User Defaults key used for storing the data collection enabled flag.
+ * This includes formatting to append the Firebase App's name.
+ */
+extern NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat;
+
+/**
+ * The plist key used for storing the data collection enabled flag.
+ */
+extern NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey;
+
+/**
+ * A notification fired containing diagnostic information when SDK errors occur.
+ */
+extern NSString *const kFIRAppDiagnosticsNotification;
+
+/** @var FIRAuthStateDidChangeInternalNotification
+ @brief The name of the @c NSNotificationCenter notification which is posted when the auth state
+ changes (e.g. a new token has been produced, a user logs in or out). The object parameter of
+ the notification is a dictionary possibly containing the key:
+ @c FIRAuthStateDidChangeInternalNotificationTokenKey (the new access token.) If it does not
+ contain this key it indicates a sign-out event took place.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotification;
+
+/** @var FIRAuthStateDidChangeInternalNotificationTokenKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the new access token.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey;
+
+/** @var FIRAuthStateDidChangeInternalNotificationAppKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the FIRApp associated with the auth instance.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationAppKey;
+
+/** @var FIRAuthStateDidChangeInternalNotificationUIDKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the new user's UID (or nil if there is no longer a user signed in).
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey;
+
+@interface FIRApp ()
+
+/**
+ * A flag indicating if this is the default app (has the default app name).
+ */
+@property(nonatomic, readonly) BOOL isDefaultApp;
+
+/*
+ * The container of interop SDKs for this app.
+ */
+@property(nonatomic) FIRComponentContainer *container;
+
+/**
+ * Creates an error for failing to configure a subspec service. This method is called by each
+ * FIRApp notification listener.
+ */
++ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain
+ errorCode:(FIRErrorCode)code
+ service:(NSString *)service
+ reason:(NSString *)reason;
+/**
+ * Checks if the default app is configured without trying to configure it.
+ */
++ (BOOL)isDefaultAppConfigured;
+
+/**
+ * Registers a given third-party library with the given version number to be reported for
+ * analytics.
+ *
+ * @param name Name of the library.
+ * @param version Version of the library.
+ */
++ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version;
+
+/**
+ * Registers a given internal library with the given version number to be reported for
+ * analytics.
+ *
+ * @param library Optional parameter for component registration.
+ * @param name Name of the library.
+ * @param version Version of the library.
+ */
++ (void)registerInternalLibrary:(nonnull Class<FIRLibrary>)library
+ withName:(nonnull NSString *)name
+ withVersion:(nonnull NSString *)version;
+
+/**
+ * A concatenated string representing all the third-party libraries and version numbers.
+ */
++ (NSString *)firebaseUserAgent;
+
+/**
+ * Used by each SDK to send logs about SDK configuration status to Clearcut.
+ *
+ * @note This API is a no-op, please remove calls to it.
+ */
+- (void)sendLogsWithServiceName:(NSString *)serviceName
+ version:(NSString *)version
+ error:(NSError *)error;
+
+/**
+ * Can be used by the unit tests in eack SDK to reset FIRApp. This method is thread unsafe.
+ */
++ (void)resetApps;
+
+/**
+ * Can be used by the unit tests in each SDK to set customized options.
+ */
+- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponent.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponent.h
new file mode 100644
index 00000000..cb51ee70
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponent.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRApp;
+@class FIRComponentContainer;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Provides a system to clean up cached instances returned from the component system.
+NS_SWIFT_NAME(ComponentLifecycleMaintainer)
+@protocol FIRComponentLifecycleMaintainer
+/// The associated app will be deleted, clean up any resources as they are about to be deallocated.
+- (void)appWillBeDeleted:(FIRApp *)app;
+@end
+
+typedef _Nullable id (^FIRComponentCreationBlock)(FIRComponentContainer *container,
+ BOOL *isCacheable)
+ NS_SWIFT_NAME(ComponentCreationBlock);
+
+@class FIRDependency;
+
+/// Describes the timing of instantiation. Note: new components should default to lazy unless there
+/// is a strong reason to be eager.
+typedef NS_ENUM(NSInteger, FIRInstantiationTiming) {
+ FIRInstantiationTimingLazy,
+ FIRInstantiationTimingAlwaysEager,
+ FIRInstantiationTimingEagerInDefaultApp
+} NS_SWIFT_NAME(InstantiationTiming);
+
+/// A component that can be used from other Firebase SDKs.
+NS_SWIFT_NAME(Component)
+@interface FIRComponent : NSObject
+
+/// The protocol describing functionality provided from the Component.
+@property(nonatomic, strong, readonly) Protocol *protocol;
+
+/// The timing of instantiation.
+@property(nonatomic, readonly) FIRInstantiationTiming instantiationTiming;
+
+/// An array of dependencies for the component.
+@property(nonatomic, copy, readonly) NSArray<FIRDependency *> *dependencies;
+
+/// A block to instantiate an instance of the component with the appropriate dependencies.
+@property(nonatomic, copy, readonly) FIRComponentCreationBlock creationBlock;
+
+// There's an issue with long NS_SWIFT_NAMES that causes compilation to fail, disable clang-format
+// for the next two methods.
+// clang-format off
+
+/// Creates a component with no dependencies that will be lazily initialized.
++ (instancetype)componentWithProtocol:(Protocol *)protocol
+ creationBlock:(FIRComponentCreationBlock)creationBlock
+NS_SWIFT_NAME(init(_:creationBlock:));
+
+/// Creates a component to be registered with the component container.
+///
+/// @param protocol - The protocol describing functionality provided by the component.
+/// @param instantiationTiming - When the component should be initialized. Use .lazy unless there's
+/// a good reason to be instantiated earlier.
+/// @param dependencies - Any dependencies the `implementingClass` has, optional or required.
+/// @param creationBlock - A block to instantiate the component with a container, and if
+/// @return A component that can be registered with the component container.
++ (instancetype)componentWithProtocol:(Protocol *)protocol
+ instantiationTiming:(FIRInstantiationTiming)instantiationTiming
+ dependencies:(NSArray<FIRDependency *> *)dependencies
+ creationBlock:(FIRComponentCreationBlock)creationBlock
+NS_SWIFT_NAME(init(_:instantiationTiming:dependencies:creationBlock:));
+
+// clang-format on
+
+/// Unavailable.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponentContainer.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponentContainer.h
new file mode 100644
index 00000000..db2bafef
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponentContainer.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <Foundation/Foundation.h>
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find the headers.
+#if __has_include("FirebaseCore/Sources/Private/FIRComponentType.h")
+#import "FirebaseCore/Sources/Private/FIRComponentType.h"
+#import "FirebaseCore/Sources/Private/FIRLibrary.h"
+#else
+#import <FirebaseCore/FIRComponentType.h>
+#import <FirebaseCore/FIRLibrary.h>
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A type-safe macro to retrieve a component from a container. This should be used to retrieve
+/// components instead of using the container directly.
+#define FIR_COMPONENT(type, container) \
+ [FIRComponentType<id<type>> instanceForProtocol:@protocol(type) inContainer:container]
+
+@class FIRApp;
+
+/// A container that holds different components that are registered via the
+/// `registerAsComponentRegistrant:` call. These classes should conform to `FIRComponentRegistrant`
+/// in order to properly register components for Core.
+NS_SWIFT_NAME(FirebaseComponentContainer)
+@interface FIRComponentContainer : NSObject
+
+/// A weak reference to the app that an instance of the container belongs to.
+@property(nonatomic, weak, readonly) FIRApp *app;
+
+/// Unavailable. Use the `container` property on `FIRApp`.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponentType.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponentType.h
new file mode 100644
index 00000000..6f2aca7b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRComponentType.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRComponentContainer;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Do not use directly. A placeholder type in order to provide a macro that will warn users of
+/// mis-matched protocols.
+NS_SWIFT_NAME(ComponentType)
+@interface FIRComponentType<__covariant T> : NSObject
+
+/// Do not use directly. A factory method to retrieve an instance that provides a specific
+/// functionality.
++ (T)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
new file mode 100644
index 00000000..76c0c05f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRDiagnosticsData;
+@class FIROptions;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** Connects FIRCore with the CoreDiagnostics library. */
+@interface FIRCoreDiagnosticsConnector : NSObject
+
+/** Logs FirebaseCore related data.
+ *
+ * @param options The options object containing data to log.
+ */
++ (void)logCoreTelemetryWithOptions:(FIROptions *)options;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRDependency.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRDependency.h
new file mode 100644
index 00000000..46e9b7ea
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRDependency.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A dependency on a specific protocol's functionality.
+NS_SWIFT_NAME(Dependency)
+@interface FIRDependency : NSObject
+
+/// The protocol describing functionality being depended on.
+@property(nonatomic, strong, readonly) Protocol *protocol;
+
+/// A flag to specify if the dependency is required or not.
+@property(nonatomic, readonly) BOOL isRequired;
+
+/// Initializes a dependency that is required. Calls `initWithProtocol:isRequired` with `YES` for
+/// the required parameter.
+/// Creates a required dependency on the specified protocol's functionality.
++ (instancetype)dependencyWithProtocol:(Protocol *)protocol;
+
+/// Creates a dependency on the specified protocol's functionality and specify if it's required for
+/// the class's functionality.
++ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required;
+
+/// Use `dependencyWithProtocol:isRequired:` instead.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRErrorCode.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRErrorCode.h
new file mode 100644
index 00000000..c90d9eec
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRErrorCode.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** Error codes in Firebase error domain. */
+typedef NS_ENUM(NSInteger, FIRErrorCode) {
+ /**
+ * Unknown error.
+ */
+ FIRErrorCodeUnknown = 0,
+ /**
+ * Loading data from the GoogleService-Info.plist file failed. This is a fatal error and should
+ * not be ignored. Further calls to the API will fail and/or possibly cause crashes.
+ */
+ FIRErrorCodeInvalidPlistFile = -100,
+
+ /**
+ * Validating the Google App ID format failed.
+ */
+ FIRErrorCodeInvalidAppID = -101,
+
+ /**
+ * Error code for failing to configure a specific service. It's deprecated, but
+ * still used after copybara.
+ */
+ FIRErrorCodeConfigFailed = -114,
+};
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRErrors.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRErrors.h
new file mode 100644
index 00000000..19e47328
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRErrors.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#include "FIRErrorCode.h"
+
+extern NSString *const kFirebaseErrorDomain;
+extern NSString *const kFirebaseConfigErrorDomain;
+extern NSString *const kFirebaseCoreErrorDomain;
+extern NSString *const kFirebasePerfErrorDomain;
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
new file mode 100644
index 00000000..bfff73e5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
@@ -0,0 +1,39 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRHeartbeatInfo : NSObject
+
+// Enum representing the different heartbeat codes.
+typedef NS_ENUM(NSInteger, FIRHeartbeatInfoCode) {
+ FIRHeartbeatInfoCodeNone = 0,
+ FIRHeartbeatInfoCodeSDK = 1,
+ FIRHeartbeatInfoCodeGlobal = 2,
+ FIRHeartbeatInfoCodeCombined = 3,
+};
+
+/**
+ * Get heartbeat code requred for the sdk.
+ * @param heartbeatTag String representing the sdk heartbeat tag.
+ * @return Heartbeat code indicating whether or not an sdk/global heartbeat
+ * needs to be sent
+ */
++ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRLibrary.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRLibrary.h
new file mode 100644
index 00000000..e7a9e077
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRLibrary.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FIRLibrary_h
+#define FIRLibrary_h
+
+#import <Foundation/Foundation.h>
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find the headers.
+#if __has_include("FirebaseCore/Sources/Private/FIRComponent.h")
+#import "FirebaseCore/Sources/Private/FIRComponent.h"
+#else
+#import <FirebaseCore/FIRComponent.h>
+#endif
+
+@class FIRApp;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Provide an interface to register a library for userAgent logging and availability to others.
+NS_SWIFT_NAME(Library)
+@protocol FIRLibrary
+
+/// Returns one or more FIRComponents that will be registered in
+/// FIRApp and participate in dependency resolution and injection.
++ (NSArray<FIRComponent *> *)componentsToRegister;
+
+@optional
+/// Implement this method if the library needs notifications for lifecycle events. This method is
+/// called when the developer calls `FirebaseApp.configure()`.
++ (void)configureWithApp:(FIRApp *)app;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* FIRLibrary_h */
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRLogger.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRLogger.h
new file mode 100644
index 00000000..6fd77844
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIRLogger.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIRLoggerLevel.h"
+#else
+#import <FirebaseCore/FIRLoggerLevel.h>
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The Firebase services used in Firebase logger.
+ */
+typedef NSString *const FIRLoggerService;
+
+extern FIRLoggerService kFIRLoggerABTesting;
+extern FIRLoggerService kFIRLoggerAdMob;
+extern FIRLoggerService kFIRLoggerAnalytics;
+extern FIRLoggerService kFIRLoggerAuth;
+extern FIRLoggerService kFIRLoggerCrash;
+extern FIRLoggerService kFIRLoggerCore;
+extern FIRLoggerService kFIRLoggerMLKit;
+extern FIRLoggerService kFIRLoggerPerf;
+extern FIRLoggerService kFIRLoggerRemoteConfig;
+
+/**
+ * The key used to store the logger's error count.
+ */
+extern NSString *const kFIRLoggerErrorCountKey;
+
+/**
+ * The key used to store the logger's warning count.
+ */
+extern NSString *const kFIRLoggerWarningCountKey;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * Enables or disables Analytics debug mode.
+ * If set to YES, the logging level for Analytics will be set to FIRLoggerLevelDebug.
+ * Enabling the debug mode has no effect if the app is running from App Store.
+ * (required) analytics debug mode flag.
+ */
+void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode);
+
+/**
+ * Changes the default logging level of FIRLoggerLevelNotice to a user-specified level.
+ * The default level cannot be set above FIRLoggerLevelNotice if the app is running from App Store.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ */
+void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel);
+
+/**
+ * Checks if the specified logger level is loggable given the current settings.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) whether or not this function is called from the Analytics component.
+ */
+BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel, BOOL analyticsComponent);
+
+/**
+ * Logs a message to the Xcode console and the device log. If running from AppStore, will
+ * not log any messages with a level higher than FIRLoggerLevelNotice to avoid log spamming.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting with "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * (required) message string which can be a format string.
+ * (optional) variable arguments list obtained from calling va_start, used when message is a format
+ * string.
+ */
+extern void FIRLogBasic(FIRLoggerLevel level,
+ FIRLoggerService service,
+ NSString *messageCode,
+ NSString *message,
+// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable
+// See: http://stackoverflow.com/q/29095469
+#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX
+ va_list args_ptr
+#else
+ va_list _Nullable args_ptr
+#endif
+);
+
+/**
+ * The following functions accept the following parameters in order:
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting from "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * See go/firebase-log-proposal for details.
+ * (required) message string which can be a format string.
+ * (optional) the list of arguments to substitute into the format string.
+ * Example usage:
+ * FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name);
+ */
+extern void FIRLogError(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogWarning(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogNotice(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogInfo(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogDebug(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+@interface FIRLoggerWrapper : NSObject
+
+/**
+ * Objective-C wrapper for FIRLogBasic to allow weak linking to FIRLogger
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting with "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * (required) message string which can be a format string.
+ * (optional) variable arguments list obtained from calling va_start, used when message is a format
+ * string.
+ */
+
++ (void)logWithLevel:(FIRLoggerLevel)level
+ withService:(FIRLoggerService)service
+ withCode:(NSString *)messageCode
+ withMessage:(NSString *)message
+ withArgs:(va_list)args;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIROptionsInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIROptionsInternal.h
new file mode 100644
index 00000000..acaf4586
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FIROptionsInternal.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIROptions.h"
+#else
+#import <FirebaseCore/FIROptions.h>
+#endif
+
+/**
+ * Keys for the strings in the plist file.
+ */
+extern NSString *const kFIRAPIKey;
+extern NSString *const kFIRTrackingID;
+extern NSString *const kFIRGoogleAppID;
+extern NSString *const kFIRClientID;
+extern NSString *const kFIRGCMSenderID;
+extern NSString *const kFIRAndroidClientID;
+extern NSString *const kFIRDatabaseURL;
+extern NSString *const kFIRStorageBucket;
+extern NSString *const kFIRBundleID;
+extern NSString *const kFIRProjectID;
+
+/**
+ * Keys for the plist file name
+ */
+extern NSString *const kServiceInfoFileName;
+
+extern NSString *const kServiceInfoFileType;
+
+/**
+ * This header file exposes the initialization of FIROptions to internal use.
+ */
+@interface FIROptions ()
+
+/**
+ * resetDefaultOptions and initInternalWithOptionsDictionary: are exposed only for unit tests.
+ */
++ (void)resetDefaultOptions;
+
+/**
+ * Initializes the options with dictionary. The above strings are the keys of the dictionary.
+ * This is the designated initializer.
+ */
+- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)serviceInfoDictionary;
+
+/**
+ * defaultOptions and defaultOptionsDictionary are exposed in order to be used in FIRApp and
+ * other first party services.
+ */
++ (FIROptions *)defaultOptions;
+
++ (NSDictionary *)defaultOptionsDictionary;
+
+/**
+ * Indicates whether or not Analytics collection was explicitly enabled via a plist flag or at
+ * runtime.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionExplicitlySet;
+
+/**
+ * Whether or not Analytics Collection was enabled. Analytics Collection is enabled unless
+ * explicitly disabled in GoogleService-Info.plist.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionEnabled;
+
+/**
+ * Whether or not Analytics Collection was completely disabled. If YES, then
+ * isAnalyticsCollectionEnabled will be NO.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionDeactivated;
+
+/**
+ * The version ID of the client library, e.g. @"1100000".
+ */
+@property(nonatomic, readonly, copy) NSString *libraryVersionID;
+
+/**
+ * The flag indicating whether this object was constructed with the values in the default plist
+ * file.
+ */
+@property(nonatomic) BOOL usingOptionsFromDefaultPlist;
+
+/**
+ * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in
+ * GoogleService-Info.plist.
+ */
+@property(nonatomic, readonly) BOOL isMeasurementEnabled;
+
+/**
+ * Whether or not Analytics was enabled in the developer console.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsEnabled;
+
+/**
+ * Whether or not SignIn was enabled in the developer console.
+ */
+@property(nonatomic, readonly) BOOL isSignInEnabled;
+
+/**
+ * Whether or not editing is locked. This should occur after FIROptions has been set on a FIRApp.
+ */
+@property(nonatomic, getter=isEditingLocked) BOOL editingLocked;
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FirebaseCoreInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FirebaseCoreInternal.h
new file mode 100644
index 00000000..93af6cb8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/FirebaseCore/Sources/Private/FirebaseCoreInternal.h
@@ -0,0 +1,31 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// An umbrella header, for any other libraries in this repo to access Firebase Public and Private
+// headers. Any package manager complexity should be handled here.
+
+#if SWIFT_PACKAGE
+@import FirebaseCore;
+#else
+#import <FirebaseCore/FirebaseCore.h>
+#endif
+
+#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
+#import "FirebaseCore/Sources/Private/FIRComponent.h"
+#import "FirebaseCore/Sources/Private/FIRComponentContainer.h"
+#import "FirebaseCore/Sources/Private/FIRDependency.h"
+#import "FirebaseCore/Sources/Private/FIRHeartbeatInfo.h"
+#import "FirebaseCore/Sources/Private/FIRLibrary.h"
+#import "FirebaseCore/Sources/Private/FIRLogger.h"
+#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRAnalyticsInterop.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRAnalyticsInterop.h
new file mode 100644
index 00000000..6581b536
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRAnalyticsInterop.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@protocol FIRAnalyticsInteropListener;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Block typedef callback parameter to getUserPropertiesWithCallback:.
+typedef void (^FIRAInteropUserPropertiesCallback)(NSDictionary<NSString *, id> *userProperties);
+
+/// Connector for bridging communication between Firebase SDKs and FirebaseAnalytics API.
+@protocol FIRAnalyticsInterop
+
+/// Sets user property when trigger event is logged. This API is only available in the SDK.
+- (void)setConditionalUserProperty:(NSDictionary<NSString *, id> *)conditionalUserProperty;
+
+/// Clears user property if set.
+- (void)clearConditionalUserProperty:(NSString *)userPropertyName
+ forOrigin:(NSString *)origin
+ clearEventName:(NSString *)clearEventName
+ clearEventParameters:(NSDictionary<NSString *, NSString *> *)clearEventParameters;
+
+/// Returns currently set user properties.
+- (NSArray<NSDictionary<NSString *, NSString *> *> *)conditionalUserProperties:(NSString *)origin
+ propertyNamePrefix:
+ (NSString *)propertyNamePrefix;
+
+/// Returns the maximum number of user properties.
+- (NSInteger)maxUserProperties:(NSString *)origin;
+
+/// Returns the user properties to a callback function.
+- (void)getUserPropertiesWithCallback:(FIRAInteropUserPropertiesCallback)callback;
+
+/// Logs events.
+- (void)logEventWithOrigin:(NSString *)origin
+ name:(NSString *)name
+ parameters:(nullable NSDictionary<NSString *, id> *)parameters;
+
+/// Sets user property.
+- (void)setUserPropertyWithOrigin:(NSString *)origin name:(NSString *)name value:(id)value;
+
+/// Registers an Analytics listener for the given origin.
+- (void)registerAnalyticsListener:(id<FIRAnalyticsInteropListener>)listener
+ withOrigin:(NSString *)origin;
+
+/// Unregisters an Analytics listener for the given origin.
+- (void)unregisterAnalyticsListenerWithOrigin:(NSString *)origin;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRAnalyticsInteropListener.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRAnalyticsInteropListener.h
new file mode 100644
index 00000000..45cde550
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRAnalyticsInteropListener.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/// Handles events and messages from Analytics.
+@protocol FIRAnalyticsInteropListener <NSObject>
+
+/// Triggers when an Analytics event happens for the registered origin with
+/// `FIRAnalyticsInterop`s `registerAnalyticsListener:withOrigin:`.
+- (void)messageTriggered:(NSString *)name parameters:(NSDictionary *)parameters;
+
+@end \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRInteropEventNames.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRInteropEventNames.h
new file mode 100644
index 00000000..efc54ab2
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRInteropEventNames.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/// @file FIRInteropEventNames.h
+
+#import <Foundation/Foundation.h>
+
+/// Notification open event name.
+static NSString *const kFIRIEventNotificationOpen = @"_no";
+
+/// Notification foreground event name.
+static NSString *const kFIRIEventNotificationForeground = @"_nf";
+
+/// Campaign event name.
+static NSString *const kFIRIEventFirebaseCampaign = @"_cmp";
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRInteropParameterNames.h b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRInteropParameterNames.h
new file mode 100644
index 00000000..ae440bec
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/Interop/Analytics/Public/FIRInteropParameterNames.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+/// @file FIRInteropParameterNames.h
+///
+/// Predefined event parameter names used by Firebase. This file is a subset of the
+/// FirebaseAnalytics FIRParameterNames.h public header.
+///
+/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban
+/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your
+/// property. Highly recommended (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterSource : @"InMobi",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRIParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source";
+
+/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended
+/// (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterMedium : @"email",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRIParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium";
+
+/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to
+/// capture campaign information, otherwise can be populated by developer. Highly Recommended
+/// (NSString).
+/// <pre>
+/// NSDictionary *params = @{
+/// kFIRParameterCampaign : @"winter_promotion",
+/// // ...
+/// };
+/// </pre>
+static NSString *const kFIRIParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) =
+ @"campaign";
+
+/// Message identifier.
+static NSString *const kFIRIParameterMessageIdentifier = @"_nmid";
+
+/// Message name.
+static NSString *const kFIRIParameterMessageName = @"_nmn";
+
+/// Message send time.
+static NSString *const kFIRIParameterMessageTime = @"_nmt";
+
+/// Message device time.
+static NSString *const kFIRIParameterMessageDeviceTime = @"_ndt";
+
+/// Topic message.
+static NSString *const kFIRIParameterTopic = @"_nt";
+
+/// Stores the message_id of the last notification opened by the app.
+static NSString *const kFIRIUserPropertyLastNotification = @"_ln";
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/LICENSE b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/LICENSE
new file mode 100644
index 00000000..fcce5066
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2020 Firebase, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseABTesting/README.md b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/README.md
new file mode 100644
index 00000000..1d9f0f67
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseABTesting/README.md
@@ -0,0 +1,298 @@
+[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+
+[![Actions Status][gh-abtesting-badge]][gh-actions]
+[![Actions Status][gh-auth-badge]][gh-actions]
+[![Actions Status][gh-core-badge]][gh-actions]
+[![Actions Status][gh-crashlytics-badge]][gh-actions]
+[![Actions Status][gh-database-badge]][gh-actions]
+[![Actions Status][gh-datatransport-badge]][gh-actions]
+[![Actions Status][gh-dynamiclinks-badge]][gh-actions]
+[![Actions Status][gh-firebasepod-badge]][gh-actions]
+[![Actions Status][gh-firestore-badge]][gh-actions]
+[![Actions Status][gh-functions-badge]][gh-actions]
+[![Actions Status][gh-inappmessaging-badge]][gh-actions]
+[![Actions Status][gh-interop-badge]][gh-actions]
+[![Actions Status][gh-messaging-badge]][gh-actions]
+[![Actions Status][gh-remoteconfig-badge]][gh-actions]
+[![Actions Status][gh-storage-badge]][gh-actions]
+[![Actions Status][gh-symbolcollision-badge]][gh-actions]
+[![Actions Status][gh-zip-badge]][gh-actions]
+[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
+
+# Firebase Apple Open Source Development
+
+This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics,
+FirebasePerformance, and FirebaseML.
+
+The repository also includes GoogleUtilities source. The
+[GoogleUtilities](GoogleUtilities/README.md) pod is
+a set of utilities used by Firebase and other Google products.
+
+Firebase is an app development platform with tools to help you build, grow and
+monetize your app. More information about Firebase can be found at
+[https://firebase.google.com](https://firebase.google.com).
+
+## Installation
+
+See the three subsections for details about three different installation methods.
+1. [Standard pod install](README.md#standard-pod-install)
+1. [Installing from the GitHub repo](README.md#installing-from-github)
+1. [Experimental Carthage](README.md#carthage-ios-only)
+
+### Standard pod install
+
+Go to
+[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
+
+### Installing from GitHub
+
+For releases starting with 5.0.0, the source for each release is also deployed
+to CocoaPods master and available via standard
+[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
+
+These instructions can be used to access the Firebase repo at other branches,
+tags, or commits.
+
+#### Background
+
+See
+[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
+for instructions and options about overriding pod source locations.
+
+#### Accessing Firebase Source Snapshots
+
+All of the official releases are tagged in this repo and available via CocoaPods. To access a local
+source snapshot or unreleased branch, use Podfile directives like the following:
+
+To access FirebaseFirestore via a branch:
+```
+pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
+pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
+```
+
+To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
+
+```
+pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
+pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
+```
+
+### Carthage (iOS only)
+
+Instructions for the experimental Carthage distribution are at
+[Carthage](Carthage.md).
+
+### Rome
+
+Instructions for installing binary frameworks via
+[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
+
+### Using Firebase from a Framework or a library
+
+[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
+
+## Development
+
+To develop Firebase software in this repository, ensure that you have at least
+the following software:
+
+ * Xcode 10.3 (or later)
+ * CocoaPods 1.7.2 (or later)
+ * [CocoaPods generate](https://github.com/square/cocoapods-generate)
+
+For the pod that you want to develop:
+
+`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
+
+Note: If the CocoaPods cache is out of date, you may need to run
+`pod repo update` before the `pod gen` command.
+
+Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
+those platforms. Since 10.2, Xcode does not properly handle multi-platform
+CocoaPods workspaces.
+
+Firestore has a self contained Xcode project. See
+[Firestore/README.md](Firestore/README.md).
+
+### Development for Catalyst
+* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
+* Check the Mac box in the App-iOS Build Settings
+* Sign the App in the Settings Signing & Capabilities tab
+* Click Pods in the Project Manager
+* Add Signing to the iOS host app and unit test targets
+* Select the Unit-unit scheme
+* Run it to build and test
+
+### Adding a New Firebase Pod
+
+See [AddNewPod.md](AddNewPod.md).
+
+### Managing Headers and Imports
+
+See [HeadersImports.md](HeadersImports.md).
+
+### Code Formatting
+
+To ensure that the code is formatted consistently, run the script
+[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
+before creating a PR.
+
+Travis will verify that any code changes are done in a style compliant way. Install
+`clang-format` and `swiftformat`:
+
+```
+brew install clang-format
+brew install swiftformat
+```
+
+### Running Unit Tests
+
+Select a scheme and press Command-u to build a component and run its unit tests.
+
+#### Viewing Code Coverage (Deprecated)
+
+First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
+
+After running the `AllUnitTests_iOS` scheme in Xcode, execute
+`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
+at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
+
+### Running Sample Apps
+In order to run the sample apps and integration tests, you'll need valid
+`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
+files without real values, but can be replaced with real plist files. To get your own
+`GoogleService-Info.plist` files:
+
+1. Go to the [Firebase Console](https://console.firebase.google.com/)
+2. Create a new Firebase project, if you don't already have one
+3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
+identifier (e.g. `com.google.Database-Example`)
+4. Download the resulting `GoogleService-Info.plist` and add it to the Xcode project.
+
+## Specific Component Instructions
+See the sections below for any special instructions for those components.
+
+### Firebase Auth
+
+If you're doing specific Firebase Auth development, see
+[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
+building and running the FirebaseAuth pod along with various samples and tests.
+
+### Firebase Database
+
+The Firebase Database Integration tests can be run against a locally running Database Emulator
+or against a production instance.
+
+To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before
+running the integration test.
+
+To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to
+`FirebaseDatabase/Tests/Resources/GoogleService-Info.plist`. Your Security Rule must be set to
+[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are
+running.
+
+### Firebase Storage
+
+To run the Storage Integration tests, follow the instructions in
+[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
+
+#### Push Notifications
+
+Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
+In order to actually test receiving push notifications, you will need to:
+
+1. Change the bundle identifier of the sample app to something you own in your Apple Developer
+account, and enable that App ID for push notifications.
+2. You'll also need to
+[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
+at **Project Settings > Cloud Messaging > [Your Firebase App]**.
+3. Ensure your iOS device is added to your Apple Developer portal as a test device.
+
+#### iOS Simulator
+
+The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
+In order to receive push notifications, you'll have to follow the steps above and run the app on a
+physical device.
+
+## Community Supported Efforts
+
+We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
+very grateful! We'd like to empower as many developers as we can to be able to use Firebase and
+participate in the Firebase community.
+
+### tvOS, macOS, watchOS and Catalyst
+Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
+tvOS, macOS, watchOS and Catalyst.
+
+For tvOS, checkout the [Sample](Example/tvOSSample).
+For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
+[Independent Watch App Sample](Example/watchOSSample).
+
+Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
+repository is actively developed primarily for iOS. While we can catch basic unit test issues with
+Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
+encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
+
+During app setup in the console, you may get to a step that mentions something like "Checking if the app
+has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
+**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
+
+To install, add a subset of the following to the Podfile:
+
+```
+pod 'Firebase/ABTesting' # No watchOS support yet
+pod 'Firebase/Auth' # No watchOS support yet
+pod 'Firebase/Crashlytics' # No watchOS support yet
+pod 'Firebase/Database' # No watchOS support yet
+pod 'Firebase/Firestore' # No watchOS support yet
+pod 'Firebase/Functions' # No watchOS support yet
+pod 'Firebase/Messaging'
+pod 'Firebase/RemoteConfig' # No watchOS support yet
+pod 'Firebase/Storage'
+```
+
+#### Additional Catalyst Notes
+
+* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
+to Build Settings.
+* FirebaseFirestore requires signing the
+[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
+
+## Roadmap
+
+See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
+plans and directions.
+
+## Contributing
+
+See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
+iOS SDK.
+
+## License
+
+The contents of this repository is licensed under the
+[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
+
+Your use of Firebase is governed by the
+[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
+
+[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
+[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg
+[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
+[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
+[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg
+[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg
+[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
+[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
+[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
+[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
+[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg
+[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg
+[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
+[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
+[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg
+[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
+[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
+[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg