Skip to content

Commit

Permalink
Facebook iOS SDK 3.9
Browse files Browse the repository at this point in the history
Summary:
     see https://developers.facebook.com/ios/change-log-3.x/

Upgrading from 3.8
     https://developers.facebook.com/docs/ios/upgrading-from-3.8-to-3.9/

Reviewed By: jacl

Test Plan: Release Testing.

@update-submodule: vendor/OCMock
  • Loading branch information
chrisp-fb committed Oct 17, 2013
1 parent 6342e5f commit 5795d48
Show file tree
Hide file tree
Showing 217 changed files with 3,752 additions and 3,460 deletions.
5 changes: 3 additions & 2 deletions samples/FriendPickerSample/FriendPickerSample/FPAppDelegate.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -15,11 +15,12 @@
*/ */


#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>

#import <FacebookSDK/FacebookSDK.h> #import <FacebookSDK/FacebookSDK.h>


// Friend Picker sample application // Friend Picker sample application
// //
// The purpose of this sample application is to provide a very simple // The purpose of this sample application is to provide a very simple
// example of the FBFriendPickerViewController, without other bells and // example of the FBFriendPickerViewController, without other bells and
// whistles to destract from the widget. This is a single-view application // whistles to destract from the widget. This is a single-view application
// with simplistic authentication with Facebook. The view-controller for // with simplistic authentication with Facebook. The view-controller for
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -15,6 +15,7 @@
*/ */


#import "FPAppDelegate.h" #import "FPAppDelegate.h"

#import "FPViewController.h" #import "FPViewController.h"


@implementation FPAppDelegate @implementation FPAppDelegate
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -16,6 +16,8 @@


#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>


#import <FacebookSDK/FacebookSDK.h>

@interface FPViewController : UIViewController<FBFriendPickerDelegate> @interface FPViewController : UIViewController<FBFriendPickerDelegate>


- (IBAction)pickFriendsButtonClick:(id)sender; - (IBAction)pickFriendsButtonClick:(id)sender;
Expand Down
15 changes: 8 additions & 7 deletions samples/FriendPickerSample/FriendPickerSample/FPViewController.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,22 +6,23 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */


#import "FPAppDelegate.h"
#import "FPViewController.h" #import "FPViewController.h"


#import "FPAppDelegate.h"

// FBSample logic // FBSample logic
// We need to handle some of the UX events related to friend selection, and so we declare // We need to handle some of the UX events related to friend selection, and so we declare
// that we implement the FBFriendPickerDelegate here; the delegate lets us filter the view // that we implement the FBFriendPickerDelegate here; the delegate lets us filter the view
// as well as handle selection events // as well as handle selection events
@interface FPViewController () @interface FPViewController ()


@property (strong, nonatomic) IBOutlet UITextView *selectedFriendsView; @property (strong, nonatomic) IBOutlet UITextView *selectedFriendsView;
@property (retain, nonatomic) FBFriendPickerViewController *friendPickerController; @property (retain, nonatomic) FBFriendPickerViewController *friendPickerController;
Expand All @@ -44,7 +45,7 @@ - (void)viewDidLoad {
- (void)viewDidUnload { - (void)viewDidUnload {
self.selectedFriendsView = nil; self.selectedFriendsView = nil;
self.friendPickerController = nil; self.friendPickerController = nil;

[super viewDidUnload]; [super viewDidUnload];
} }


Expand Down Expand Up @@ -89,7 +90,7 @@ - (IBAction)pickFriendsButtonClick:(id)sender {


- (void)facebookViewControllerDoneWasPressed:(id)sender { - (void)facebookViewControllerDoneWasPressed:(id)sender {
NSMutableString *text = [[NSMutableString alloc] init]; NSMutableString *text = [[NSMutableString alloc] init];

// we pick up the users from the selection, and create a string that we use to update the text view // we pick up the users from the selection, and create a string that we use to update the text view
// at the bottom of the display; note that self.selection is a property inherited from our base class // at the bottom of the display; note that self.selection is a property inherited from our base class
for (id<FBGraphUser> user in self.friendPickerController.selection) { for (id<FBGraphUser> user in self.friendPickerController.selection) {
Expand All @@ -98,7 +99,7 @@ - (void)facebookViewControllerDoneWasPressed:(id)sender {
} }
[text appendString:user.name]; [text appendString:user.name];
} }

[self fillTextBoxAndDismiss:text.length > 0 ? text : @"<None>"]; [self fillTextBoxAndDismiss:text.length > 0 ? text : @"<None>"];
} }


Expand All @@ -108,7 +109,7 @@ - (void)facebookViewControllerCancelWasPressed:(id)sender {


- (void)fillTextBoxAndDismiss:(NSString *)text { - (void)fillTextBoxAndDismiss:(NSString *)text {
self.selectedFriendsView.text = text; self.selectedFriendsView.text = text;

[self dismissModalViewControllerAnimated:YES]; [self dismissModalViewControllerAnimated:YES];
} }


Expand Down
2 changes: 1 addition & 1 deletion samples/FriendPickerSample/FriendPickerSample/main.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand Down
10 changes: 5 additions & 5 deletions samples/GraphApiSample/GraphApiSample/GraphApiAppDelegate.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -18,9 +18,9 @@


// Just Request sample application // Just Request sample application
// //
// The purpose of this sample application is to provide an example of // The purpose of this sample application is to provide an example of
// how to request data and entities from Facebook. The goal of the sample // how to request data and entities from Facebook. The goal of the sample
// is to show how to use the FBRequest and FBSession classes for this purpose, // is to show how to use the FBRequest and FBSession classes for this purpose,
// with minimal additional sample functionality to distract from the core topic. // with minimal additional sample functionality to distract from the core topic.


@class GraphApiViewController; @class GraphApiViewController;
Expand Down
8 changes: 5 additions & 3 deletions samples/GraphApiSample/GraphApiSample/GraphApiAppDelegate.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -4,18 +4,20 @@
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */


#import <FacebookSDK/FacebookSDK.h>
#import "GraphApiAppDelegate.h" #import "GraphApiAppDelegate.h"

#import <FacebookSDK/FacebookSDK.h>

#import "GraphApiViewController.h" #import "GraphApiViewController.h"


@implementation GraphApiAppDelegate @implementation GraphApiAppDelegate
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand Down
34 changes: 18 additions & 16 deletions samples/GraphApiSample/GraphApiSample/GraphApiViewController.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -4,19 +4,21 @@
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */


#import "GraphApiViewController.h"

#import <FacebookSDK/FacebookSDK.h> #import <FacebookSDK/FacebookSDK.h>

#import "GraphApiAppDelegate.h" #import "GraphApiAppDelegate.h"
#import "GraphApiViewController.h"


static NSString *loadingText = @"Loading..."; static NSString *loadingText = @"Loading...";


Expand Down Expand Up @@ -111,40 +113,40 @@ - (void)sendRequests {
if ([self.textObjectID isFirstResponder]) { if ([self.textObjectID isFirstResponder]) {
[self.textObjectID resignFirstResponder]; [self.textObjectID resignFirstResponder];
} }

// create the connection object // create the connection object
FBRequestConnection *newConnection = [[FBRequestConnection alloc] init]; FBRequestConnection *newConnection = [[FBRequestConnection alloc] init];

// for each fbid in the array, we create a request object to fetch // for each fbid in the array, we create a request object to fetch
// the profile, along with a handler to respond to the results of the request // the profile, along with a handler to respond to the results of the request
for (NSString *fbid in fbids) { for (NSString *fbid in fbids) {

// create a handler block to handle the results of the request for fbid's profile // create a handler block to handle the results of the request for fbid's profile
FBRequestHandler handler = FBRequestHandler handler =
^(FBRequestConnection *connection, id result, NSError *error) { ^(FBRequestConnection *connection, id result, NSError *error) {
// output the results of the request // output the results of the request
[self requestCompleted:connection forFbID:fbid result:result error:error]; [self requestCompleted:connection forFbID:fbid result:result error:error];
}; };

// create the request object, using the fbid as the graph path // create the request object, using the fbid as the graph path
// as an alternative the request* static methods of the FBRequest class could // as an alternative the request* static methods of the FBRequest class could
// be used to fetch common requests, such as /me and /me/friends // be used to fetch common requests, such as /me and /me/friends
FBRequest *request = [[FBRequest alloc] initWithSession:FBSession.activeSession FBRequest *request = [[FBRequest alloc] initWithSession:FBSession.activeSession
graphPath:fbid]; graphPath:fbid];

// add the request to the connection object, if more than one request is added // add the request to the connection object, if more than one request is added
// the connection object will compose the requests as a batch request; whether or // the connection object will compose the requests as a batch request; whether or
// not the request is a batch or a singleton, the handler behavior is the same, // not the request is a batch or a singleton, the handler behavior is the same,
// allowing the application to be dynamic in regards to whether a single or multiple // allowing the application to be dynamic in regards to whether a single or multiple
// requests are occuring // requests are occuring
[newConnection addRequest:request completionHandler:handler]; [newConnection addRequest:request completionHandler:handler];
} }

// if there's an outstanding connection, just cancel // if there's an outstanding connection, just cancel
[self.requestConnection cancel]; [self.requestConnection cancel];

// keep track of our connection, and start it // keep track of our connection, and start it
self.requestConnection = newConnection; self.requestConnection = newConnection;
[newConnection start]; [newConnection start];
} }


Expand All @@ -159,7 +161,7 @@ - (void)requestCompleted:(FBRequestConnection *)connection
connection != self.requestConnection) { connection != self.requestConnection) {
return; return;
} }

// clean this up, for posterity // clean this up, for posterity
self.requestConnection = nil; self.requestConnection = nil;


Expand All @@ -177,11 +179,11 @@ - (void)requestCompleted:(FBRequestConnection *)connection
// we pull the name property out, if there is one, and display it // we pull the name property out, if there is one, and display it
text = (NSString *)[dictionary objectForKey:@"name"]; text = (NSString *)[dictionary objectForKey:@"name"];
} }

self.textOutput.text = [NSString stringWithFormat:@"%@%@: %@\r\n", self.textOutput.text = [NSString stringWithFormat:@"%@%@: %@\r\n",
self.textOutput.text, self.textOutput.text,
[fbID stringByTrimmingCharactersInSet: [fbID stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]], [NSCharacterSet whitespaceAndNewlineCharacterSet]],
text]; text];
} }


Expand Down
4 changes: 2 additions & 2 deletions samples/GraphApiSample/GraphApiSample/main.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -15,11 +15,12 @@
*/ */


#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>

#import <FacebookSDK/FacebookSDK.h> #import <FacebookSDK/FacebookSDK.h>


// Hello Facebook sample application // Hello Facebook sample application
// //
// The purpose of this sample application is show how to use Facebook to // The purpose of this sample application is show how to use Facebook to
// personalize an application experience and perform a set of typical actions. // personalize an application experience and perform a set of typical actions.
// These include: // These include:
// - managing login and logout using FBSession // - managing login and logout using FBSession
Expand Down
15 changes: 8 additions & 7 deletions samples/HelloFacebookSample/HelloFacebookSample/HFAppDelegate.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -16,9 +16,10 @@


#import "HFAppDelegate.h" #import "HFAppDelegate.h"


#import "HFViewController.h"
#import <FacebookSDK/FacebookSDK.h> #import <FacebookSDK/FacebookSDK.h>


#import "HFViewController.h"

@implementation HFAppDelegate @implementation HFAppDelegate


@synthesize window = _window; @synthesize window = _window;
Expand Down Expand Up @@ -51,25 +52,25 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
// Nib files require the type to have been loaded before they can do the wireup successfully. // Nib files require the type to have been loaded before they can do the wireup successfully.
// http://stackoverflow.com/questions/1725881/unknown-class-myclass-in-interface-builder-file-error-at-runtime // http://stackoverflow.com/questions/1725881/unknown-class-myclass-in-interface-builder-file-error-at-runtime
// [FBProfilePictureView class]; // [FBProfilePictureView class];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch. // Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.window.rootViewController = [[HFViewController alloc] initWithNibName:@"HFViewController_iPhone" bundle:nil]; self.window.rootViewController = [[HFViewController alloc] initWithNibName:@"HFViewController_iPhone" bundle:nil];
} else { } else {
self.window.rootViewController = [[HFViewController alloc] initWithNibName:@"HFViewController_iPad" bundle:nil]; self.window.rootViewController = [[HFViewController alloc] initWithNibName:@"HFViewController_iPad" bundle:nil];
} }

[self.window makeKeyAndVisible]; [self.window makeKeyAndVisible];

return YES; return YES;
} }


- (void)applicationDidBecomeActive:(UIApplication *)application { - (void)applicationDidBecomeActive:(UIApplication *)application {
// FBSample logic // FBSample logic
// Call the 'activateApp' method to log an app event for use in analytics and advertising reporting. // Call the 'activateApp' method to log an app event for use in analytics and advertising reporting.
[FBAppEvents activateApp]; [FBAppEvents activateApp];

// FBSample logic // FBSample logic
// We need to properly handle activation of the application with regards to SSO // We need to properly handle activation of the application with regards to SSO
// (e.g., returning from iOS 6.0 authorization dialog or from fast app switching). // (e.g., returning from iOS 6.0 authorization dialog or from fast app switching).
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -15,6 +15,7 @@
*/ */


#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>

#import <FacebookSDK/FacebookSDK.h> #import <FacebookSDK/FacebookSDK.h>


@interface HFViewController : UIViewController @interface HFViewController : UIViewController
Expand Down
Loading

0 comments on commit 5795d48

Please sign in to comment.