[
  {
    "path": ".gitignore",
    "content": "# App\nPods/\nvendor/bundle\n.bundle/config\n\n# Xcode\nbuild/*\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\n!default.xcworkspace\nxcuserdata\nprofile\n*.moved-aside\n*.xcworkspacedata\n\n# OSX\n.DS_Store\n._*\n.Spotlight-V100\n.Trashes\n\n# Linux\n*~\n.directory\n\n# Windows\nThumbs.db\nDesktop.ini\n\n# RubyMine\n.idea/\n\n# TextMate\n*.tmproj\n*.tmproject\ntmtags\n\n# Vim\n.*.sw[a-z]\n*.un~\nSession.vim\n\n# Emacs\n\\#*\\#\n/.emacs.desktop\n/.emacs.desktop.lock\n.elc\nauto-save-list\ntramp\n.\\#*\n"
  },
  {
    "path": "Journey/Controllers/PFMMainWindowController.h",
    "content": "#import <Cocoa/Cocoa.h>\n#import <WebKit/WebKit.h>\n\n@class\n  PFMToolbarViewController\n, PFMMomentListViewController\n, PFMView\n;\n\n@interface PFMMainWindowController : NSWindowController <\n  NSWindowDelegate\n> {\n  NSView *_toolbarViewWrapper;\n  PFMView *_momentListViewWrapper;\n  PFMView *_titleBarView;\n  PFMToolbarViewController *_toolbarViewController;\n  PFMMomentListViewController *_momentListViewController;\n}\n\n@property (nonatomic, retain) IBOutlet NSView *toolbarViewWrapper;\n@property (nonatomic, retain) IBOutlet PFMView *momentListViewWrapper;\n@property (nonatomic, retain) IBOutlet PFMView *titleBarView;\n@property (nonatomic, retain) PFMToolbarViewController *toolbarViewController;\n@property (nonatomic, retain) PFMMomentListViewController *momentListViewController;\n\n- (void)hideWindow;\n\n@end\n"
  },
  {
    "path": "Journey/Controllers/PFMMainWindowController.m",
    "content": "#import \"PFMMainWindowController.h\"\n#import \"Application.h\"\n#import \"PFMMomentListViewController.h\"\n#import \"PFMToolbarViewController.h\"\n#import \"PFMView.h\"\n#import \"PathAppDelegate.h\"\n\n@interface PFMMainWindowController ()\n@end\n\n@implementation PFMMainWindowController\n\n@synthesize\n  toolbarViewWrapper=_toolbarViewWrapper\n, momentListViewWrapper=_momentListViewWrapper\n, titleBarView=_titleBarView\n, toolbarViewController=_toolbarViewController\n, momentListViewController=_momentListViewController\n;\n\n- (id)init {\n  self = [super initWithWindowNibName:@\"MainWindow\"];\n  return self;\n}\n\n- (void)awakeFromNib {\n  if(![[NSUserDefaults standardUserDefaults] objectForKey:@\"NSWindow Frame MainWindow\"]) {\n    // if frame autosave is not found\n    NSSize initialWindowSize = [[self window] frame].size;\n    NSRect screenFrame = [[NSScreen mainScreen] frame];\n    CGFloat newHeight = floorf(screenFrame.size.height * 0.8);\n    [self.window setFrame:NSMakeRect((screenFrame.size.width - initialWindowSize.width) / 2.0\n                                   , (screenFrame.size.height - newHeight) / 2.0\n                                   , initialWindowSize.width, newHeight) display:NO];\n  }\n  [self.window setFrameAutosaveName:@\"MainWindow\"];\n}\n\n- (void)loadWindow {\n  [super loadWindow];\n\n  NSWindow *window = [self window];\n\n  // set up titlebar view\n  __block PFMView *titleBarView = self.titleBarView;\n  NSView *contentView = [window contentView];\n  NSView *themeFrame = [contentView superview];\n  [themeFrame addSubview:titleBarView positioned:NSWindowBelow relativeTo:contentView];\n  NSRect windowFrame = [window frame];\n  NSRect titleBarFrame = [titleBarView frame];\n  [titleBarView setFrame:NSMakeRect(0, windowFrame.size.height - titleBarFrame.size.height,\n                                    windowFrame.size.width, titleBarFrame.size.height)];\n  titleBarView.drawRectBlock = ^(NSRect rect) {\n    NSRect bounds = [titleBarView bounds];\n    [[NSColor colorWithCalibratedWhite:0.0 alpha:0.5] set];\n    NSBezierPath *path = [NSBezierPath bezierPath];\n    [path moveToPoint:NSMakePoint(0, 0.5)];\n    [path lineToPoint:NSMakePoint(bounds.size.width, 0.5)];\n    [path stroke];\n    [[NSColor colorWithCalibratedWhite:0.0 alpha:0.2] set];\n    path = [NSBezierPath bezierPath];\n    [path moveToPoint:NSMakePoint(0, 1.5)];\n    [path lineToPoint:NSMakePoint(bounds.size.width, 1.5)];\n    [path stroke];\n    [[NSColor colorWithCalibratedWhite:1.0 alpha:0.5] set];\n    CGFloat lineDash[] = { 4.0, 2.0 };\n    path = [NSBezierPath bezierPath];\n    [path setLineDash:lineDash count:2 phase:1.0];\n    [path moveToPoint:NSMakePoint(0.0, 3.5)];\n    [path lineToPoint:NSMakePoint(bounds.size.width, 3.5)];\n    [path stroke];\n    [[NSColor colorWithCalibratedWhite:0.0 alpha:0.2] set];\n    path = [NSBezierPath bezierPath];\n    [path setLineDash:lineDash count:2 phase:1.0];\n    [path moveToPoint:NSMakePoint(0.0, 2.5)];\n    [path lineToPoint:NSMakePoint(bounds.size.width, 2.5)];\n    [path stroke];\n  };\n\n  // load subviews\n  self.momentListViewWrapper.backgroundColor = [NSColor whiteColor];\n\n  self.momentListViewController = [PFMMomentListViewController new];\n  NSView *momentListView = [self.momentListViewController view];\n  [self.momentListViewWrapper addSubview:momentListView];\n  [momentListView setFrame:[self.momentListViewWrapper bounds]];\n\n  self.toolbarViewController = [PFMToolbarViewController new];\n  NSView *toolbarView = [self.toolbarViewController view];\n  [self.toolbarViewWrapper addSubview:toolbarView];\n  [toolbarView setFrame:[self.toolbarViewWrapper bounds]];\n}\n\n- (void)hideWindow {\n  [self.window orderOut:self];\n}\n\n#pragma mark - NSWindowDelegate\n\n- (BOOL)windowShouldClose:(id)sender {\n  [self hideWindow];\n  return NO;\n}\n\n- (void)windowDidBecomeKey:(NSNotification *)notification {\n  if([self.momentListViewController webViewScrollTop] <= 243) {\n    [(PathAppDelegate *)[NSApp delegate] highlightStatusItem:NO];\n  }\n}\n\n@end\n"
  },
  {
    "path": "Journey/Controllers/PFMMomentListViewController.h",
    "content": "#import <Cocoa/Cocoa.h>\n#import <WebKit/WebKit.h>\n#import \"PFMUser.h\"\n\n@interface PFMMomentListViewController : NSViewController <\n  PFMUserMomentsDelegate\n> {\n  WebView *_webView;\n}\n\n@property (nonatomic, retain) IBOutlet WebView *webView;\n\n- (void)refreshFeed;\n- (void)loadOldMoments;\n- (NSInteger)webViewScrollTop;\n- (NSString *)makeTemplateJSON:(NSArray *)moments;\n\n@end\n"
  },
  {
    "path": "Journey/Controllers/PFMMomentListViewController.m",
    "content": "#import \"PFMMomentListViewController.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n#import \"PFMMoment.h\"\n#import \"PFMUser.h\"\n#import \"PFMPhoto.h\"\n#import \"PathAppDelegate.h\"\n\n@implementation PFMMomentListViewController\n\n@synthesize\n  webView=_webView\n;\n\n- (id)init {\n  self = [super initWithNibName:@\"MomentListView\" bundle:nil];\n  return self;\n}\n\n- (void)loadView {\n  [super loadView];\n\n  NSString *webViewPath = [[$ resourcePath] $append:@\"/WebView/\"];\n  NSString *html = [NSString stringWithContentsOfFile:[webViewPath $append:@\"index.html\"] encoding:NSUTF8StringEncoding error:NULL];\n  [[self.webView mainFrame] loadHTMLString:html baseURL:[NSURL fileURLWithPath:webViewPath]];\n\n  PFMUser *user = [NSApp sharedUser];\n  user.momentsDelegate = self;\n\n  [[NSApp sharedUser] fetchMomentsNewerThan:0.0];\n}\n\n- (void)refreshFeed {\n  PFMUser *user = [NSApp sharedUser];\n  PFMMoment *firstMoment = nil;\n  NSArray *fetchedMoments = user.allMoments;\n  if(fetchedMoments && [fetchedMoments count] > 0) {\n    firstMoment = [fetchedMoments objectAtIndex:0];\n  }\n  [user fetchMomentsNewerThan:firstMoment.createdAt];\n}\n\n- (void)loadOldMoments {\n  PFMUser *user = [NSApp sharedUser];\n  PFMMoment *lastMoment = nil;\n  NSArray *fetchedMoments = user.allMoments;\n  if(fetchedMoments && [fetchedMoments count] > 0) {\n    lastMoment = [fetchedMoments $at:([fetchedMoments count] - 1)];\n  }\n\n  [user fetchMomentsOlderThan:lastMoment.createdAt];\n}\n\n- (NSString *)makeTemplateJSON:(NSArray *)moments {\n  PFMUser *user = [NSApp sharedUser];\n  NSDictionary *dict = $dict([moments $map:^id (id moment) {\n    return [(PFMMoment *)moment toHash];\n  }], @\"moments\",\n                             [user.coverPhoto iOSHighResURL], @\"coverPhoto\",\n                             [user.profilePhoto iOSHighResURL], @\"profilePhoto\");\n  return [dict JSONRepresentation];\n}\n\n#pragma mark - PFMUserMomentsDelegate\n\n- (void)didFetchMoments:(NSArray *)moments atTop:(BOOL)atTop {\n  NSString *javascriptToExecute = nil;\n  NSString *json = [self makeTemplateJSON:moments];\n  //  NSLog(@\">> %@\", json);\n  if([moments count] > 0) {\n    if (atTop) {\n      javascriptToExecute = $str(@\"Path.renderTemplate('feed', %@, true)\", json);\n      NSInteger scrollTop = [self webViewScrollTop];\n      if(scrollTop > 0 || ![self.view.window isKeyWindow]) {\n        [(PathAppDelegate *)[NSApp delegate] highlightStatusItem:YES];\n      }\n    } else {\n      javascriptToExecute = $str(@\"Path.renderTemplate('feed', %@, false)\", json);\n    }\n  } else {\n    javascriptToExecute = @\"Path.didCompleteRefresh()\";\n  }\n\n  [self.webView stringByEvaluatingJavaScriptFromString:javascriptToExecute];\n}\n\n- (void)didFailToFetchMoments {\n  [self.webView stringByEvaluatingJavaScriptFromString:@\"Path.didCompleteRefresh()\"];\n}\n\n- (NSInteger)webViewScrollTop {\n  return [[self.webView stringByEvaluatingJavaScriptFromString:@\"$(document).scrollTop()\"] integerValue];\n}\n\n#pragma mark - WebUIDelegate\n\n- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems {\n  return nil;\n}\n\n#pragma mark - WebFrameLoadDelegate\n\n- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener {\n  if([actionInformation objectForKey:WebActionNavigationTypeKey]) {\n    NSURL *url = [actionInformation objectForKey:WebActionOriginalURLKey];\n    if(url) {\n      NSString *urlString = [url absoluteString];\n      if([urlString hasSuffix:@\"#refresh_feed\"]) {\n        [self refreshFeed];\n        return;\n      } else if([urlString hasSuffix:@\"#load_old_moments\"]) {\n        [self loadOldMoments];\n        return;\n      } else if([urlString hasSuffix:@\"#clear_status_item_highlight\"]) {\n        [(PathAppDelegate *)[NSApp delegate] highlightStatusItem:NO];\n        [self.webView stringByEvaluatingJavaScriptFromString:@\"Path.removeHashFragment()\"];\n        return;\n      }\n    }\n  }\n  [listener use];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Controllers/PFMSignInWindowController.h",
    "content": "#import <Cocoa/Cocoa.h>\n#import \"PFMUser.h\"\n\n@interface PFMSignInWindowController : NSWindowController <\n  PFMUserSignInDelegate\n> {\n  NSButton *_signInButton;\n  NSTextField *_emailField;\n  NSTextField *_passwordField;\n  NSProgressIndicator *_spinner;\n  NSTextField *_emailLabel;\n  NSTextField *_passwordLabel;\n  NSObjectController *_sharedUserController;\n}\n\n- (IBAction)didClickOnSignInButton:(id)sender;\n\n@property (nonatomic, retain) IBOutlet NSButton *signInButton;\n@property (nonatomic, retain) IBOutlet NSTextField *emailField;\n@property (nonatomic, retain) IBOutlet NSTextField *passwordField;\n@property (nonatomic, retain) IBOutlet NSProgressIndicator *spinner;\n@property (nonatomic, retain) IBOutlet NSTextField *emailLabel;\n@property (nonatomic, retain) IBOutlet NSTextField *passwordLabel;\n@property (nonatomic, retain) IBOutlet NSObjectController *sharedUserController;\n\n@end\n"
  },
  {
    "path": "Journey/Controllers/PFMSignInWindowController.m",
    "content": "#import \"Application.h\"\n#import \"PFMSignInWindowController.h\"\n#import \"PFMMainWindowController.h\"\n#import \"PFMHelper.h\"\n#import \"PFMRedLinenView.h\"\n#import \"PathAppDelegate.h\"\n\n@implementation PFMSignInWindowController\n\n@synthesize\n  signInButton=_signInButton\n, emailField=_emailField\n, passwordField=_passwordField\n, spinner=_spinner\n, emailLabel=_emailLabel\n, passwordLabel=_passwordLabel\n, sharedUserController=_sharedUserController\n;\n\n- (id)init {\n  self = [super initWithWindowNibName:@\"SignInWindow\"];\n  return self;\n}\n\n- (void)awakeFromNib {\n  NSSize initialWindowSize = [[self window] frame].size;\n  NSRect screenFrame = [[NSScreen mainScreen] frame];\n  [self.window setFrame:NSMakeRect((screenFrame.size.width - initialWindowSize.width) / 2.0\n                                 , (screenFrame.size.height - initialWindowSize.height) / 2.0\n                                 , initialWindowSize.width, initialWindowSize.height) display:NO];\n}\n\n- (void)windowDidLoad {\n  [super windowDidLoad];\n\n  PFMUser *user = [NSApp sharedUser];\n  user.signInDelegate = self;\n  [user loadCredentials];\n  if(user.email && user.password) {\n    [user signIn];\n  }\n}\n\n- (IBAction)didClickOnSignInButton:(id)sender {\n  [[NSApp sharedUser] signIn];\n}\n\n#pragma mark - PFMUserSignInDelegate\n\n- (void)didSignIn {\n  [self close];\n  PathAppDelegate *appDelegate = [NSApp delegate];\n  appDelegate.mainWindowController = [PFMMainWindowController new];\n  NSWindow *window = [appDelegate.mainWindowController window];\n  [window focus];\n}\n\n- (void)didFailSignInDueToInvalidCredentials {\n  [[PFMHelper helper] showAlertSheetWithTitle:@\"Failed to sign in!\" message:@\"You have entered invalid email and/or password.\" window:[self window]];\n  [[self window] makeFirstResponder:self.emailField];\n}\n\n- (void)didFailSignInDueToRequestError {\n  [[PFMHelper helper] showAlertSheetWithTitle:@\"Failed to sign in!\" message:@\"An error occured while trying to connect to the server. Please check your Internet connection and try again.\" window:[self window]];\n}\n\n- (void)didFailSignInDueToPathError {\n  [[PFMHelper helper] showAlertSheetWithTitle:@\"Failed to sign in!\" message:@\"Unable to login at this time. Please try again later.\" window:[self window]];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Controllers/PFMToolbarViewController.h",
    "content": "#import <Cocoa/Cocoa.h>\n\n@interface PFMToolbarViewController : NSViewController\n@end\n"
  },
  {
    "path": "Journey/Controllers/PFMToolbarViewController.m",
    "content": "#import \"PFMToolbarViewController.h\"\n\n@implementation PFMToolbarViewController\n\n- (id)init {\n  self = [super initWithNibName:@\"ToolbarView\" bundle:nil];\n  return self;\n}\n\n@end\n"
  },
  {
    "path": "Journey/Controllers/PathAppDelegate.h",
    "content": "#import <Cocoa/Cocoa.h>\n\n@class\n  PFMSignInWindowController\n, PFMMainWindowController\n;\n\n@interface PathAppDelegate : NSObject <\n  NSApplicationDelegate\n> {\n  PFMSignInWindowController *_signInWindowController;\n  PFMMainWindowController   *_mainWindowController;\n  NSMenu       *_mainMenu;\n  NSMenu       *_statusMenu;\n  NSStatusItem *_statusItem;\n  NSObjectController *_sharedUserController;\n}\n\n@property (nonatomic, retain) PFMSignInWindowController *signInWindowController;\n@property (nonatomic, retain) PFMMainWindowController   *mainWindowController;\n@property (nonatomic, retain) IBOutlet NSMenu *mainMenu;\n@property (nonatomic, retain) IBOutlet NSMenu *statusMenu;\n@property (nonatomic, retain) NSStatusItem    *statusItem;\n@property (nonatomic, retain) IBOutlet NSObjectController *sharedUserController;\n\n- (IBAction)signOut:(id)sender;\n- (IBAction)showMainWindow:(id)sender;\n- (IBAction)quitApp:(id)sender;\n- (void)highlightStatusItem:(BOOL)highlighted;\n\n@end\n"
  },
  {
    "path": "Journey/Controllers/PathAppDelegate.m",
    "content": "#import \"PathAppDelegate.h\"\n#import \"PFMSignInWindowController.h\"\n#import \"PFMMainWindowController.h\"\n#import \"PFMMomentListViewController.h\"\n#import \"Application.h\"\n\n@implementation PathAppDelegate\n\n@synthesize\n  signInWindowController=_signInWindowController\n, mainWindowController=_mainWindowController\n, mainMenu=_mainMenu\n, statusMenu=_statusMenu\n, statusItem=_statusItem\n, sharedUserController=_sharedUserController\n;\n\n- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {\n  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n  if(![defaults objectForKey:@\"ApplePersistenceIgnoreState\"]) {\n    [defaults setBool:YES forKey:@\"ApplePersistenceIgnoreState\"];\n    [defaults synchronize];\n  }\n  self.signInWindowController = [PFMSignInWindowController new];\n  NSWindow *window = [self.signInWindowController window];\n  [window focus];\n}\n\n- (IBAction)signOut:(id)sender {\n  [self.mainWindowController close];\n  self.mainWindowController = nil;\n  [[NSApp sharedUser] deleteCredentials];\n  [[self.signInWindowController window] focus];\n}\n\n- (IBAction)showMainWindow:(id)sender {\n  [[self.mainWindowController window] focus];\n  NSScrollView *scrollView = [[[[self.mainWindowController.momentListViewController.webView mainFrame] frameView] documentView] enclosingScrollView];\n  [[scrollView documentView] scrollPoint:NSMakePoint(0, 0)];\n}\n\n- (IBAction)quitApp:(id)sender {\n  [(NSApplication *)NSApp terminate:nil];\n}\n\n-(void)awakeFromNib{\n  NSStatusItem *statusItem = self.statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];\n  [statusItem setMenu:self.statusMenu];\n  [statusItem setHighlightMode:YES];\n  [statusItem setAlternateImage:[NSImage imageNamed:@\"StatusItemIconSelected.png\"]];\n  [self highlightStatusItem:NO];\n}\n\n- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag {\n  if (![NSApp keyWindow]) {\n    if (self.mainWindowController) {\n      [self.mainWindowController showWindow:self];\n    } else if (self.signInWindowController) {\n      [self.signInWindowController showWindow:self];\n    }\n  }\n  return YES;\n}\n\n- (void)highlightStatusItem:(BOOL)highlighted {\n  if(highlighted) {\n    [self.statusItem setImage:[NSImage imageNamed:@\"StatusItemIconHighlighted.png\"]];\n  } else {\n    [self.statusItem setImage:[NSImage imageNamed:@\"StatusItemIcon.png\"]];\n  }\n}\n\n@end\n"
  },
  {
    "path": "Journey/Helpers/PFMHelper.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface PFMHelper : NSObject\n\n- (id)initSingleton;\n+ (PFMHelper *)sharedPFMHelper;\n+ (PFMHelper *)helper;\n\n- (void)showAlertSheetWithTitle:(NSString *)title message:(NSString *)message window:(NSWindow *)window;\n\n@end\n"
  },
  {
    "path": "Journey/Helpers/PFMHelper.m",
    "content": "#import \"Application.h\"\n#import \"PFMHelper.h\"\n\n@implementation PFMHelper\n\n$singleton(PFMHelper);\n\n- (id)initSingleton {\n  return self;\n}\n\n+ (PFMHelper *)helper {\n  return [self sharedPFMHelper];\n}\n\n#pragma mark -\n\n- (void)showAlertSheetWithTitle:(NSString *)title message:(NSString *)message window:(NSWindow *)window {\n  NSBeginAlertSheet(title, nil, nil, nil, window, nil, nil, nil, nil, message);\n}\n\n@end\n"
  },
  {
    "path": "Journey/Helpers/PFMUtility.m",
    "content": "#import \"Application.h\"\n#import \"PFMUtility.h\"\n\n@implementation PFMUtility\n\n$singleton(PFMUtility);\n\n- (id)initSingleton {\n  return self;\n}\n\n+ (PFMUtility *)utility {\n  return [self sharedPFMUtility];\n}\n\n- (void)showAlertSheetWithTitle:(NSString *)title message:(NSString *)message {\n  \n}\n\n@end\n"
  },
  {
    "path": "Journey/Lib/NSDate+SCAdditions.h",
    "content": "@interface NSDate (SCAdditions)\n\n- (NSString *)descriptionInISO8601;\n\n@end\n"
  },
  {
    "path": "Journey/Lib/NSDate+SCAdditions.m",
    "content": "#import \"NSDate+SCAdditions.h\"\n\n@implementation NSDate (SCAdditions)\n\n- (NSString *)descriptionInISO8601 {\n  return [self descriptionWithCalendarFormat:@\"%Y-%m-%dT%H:%M:%SZ\" timeZone:[NSTimeZone timeZoneForSecondsFromGMT:0] locale:nil];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Lib/NSDictionary+PFMAdditions.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface NSDictionary (PFMAdditions)\n\n- (id)objectOrNilForKey:(id)key;\n\n@end\n"
  },
  {
    "path": "Journey/Lib/NSDictionary+PFMAdditions.m",
    "content": "#import \"NSDictionary+PFMAdditions.h\"\n\n@implementation NSDictionary (PFMAdditions)\n\n- (id)objectOrNilForKey:(id)key {\n  id object = [self objectForKey:key];\n  if(object == [NSNull null]) {\n    return nil;\n  }\n  return object;\n}\n\n@end\n"
  },
  {
    "path": "Journey/Lib/NSMutableDictionary+PFMAdditions.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface NSMutableDictionary (PFMAdditions)\n\n- (void)setObjectOrNil:(id)object forKey:(id)key;\n\n@end\n"
  },
  {
    "path": "Journey/Lib/NSMutableDictionary+PFMAdditions.m",
    "content": "#import \"NSMutableDictionary+PFMAdditions.h\"\n\n@implementation NSMutableDictionary (PFMAdditions)\n\n- (void)setObjectOrNil:(id)object forKey:(id)key {\n  if(!object) {\n    [self removeObjectForKey:key];\n    return;\n  }\n  [self setObject:object forKey:key];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Lib/NSWindow+PFMAdditions.h",
    "content": "#import <Cocoa/Cocoa.h>\n\n@interface NSWindow (PFMAdditions)\n\n- (void)focus;\n\n@end\n"
  },
  {
    "path": "Journey/Lib/NSWindow+PFMAdditions.m",
    "content": "#import \"NSWindow+PFMAdditions.h\"\n\n@implementation NSWindow (PFMAdditions)\n\n- (void)focus {\n  [self makeKeyAndOrderFront:nil];\n  [NSApp activateIgnoringOtherApps:YES];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Models/NSApplication+SharedObjects.h",
    "content": "#import <Cocoa/Cocoa.h>\n\n@class PFMUser;\n\n@interface NSApplication (SharedObjects)\n\n- (PFMUser *)sharedUser;\n- (NSMutableDictionary *)sharedLocations;\n- (NSMutableDictionary *)sharedPlaces;\n- (NSMutableDictionary *)sharedUsers;\n\n- (PFMUser *)resetSharedUser;\n- (NSMutableDictionary *)resetSharedLocations;\n- (NSMutableDictionary *)resetSharedPlaces;\n- (NSMutableDictionary *)resetSharedUsers;\n\n@end\n"
  },
  {
    "path": "Journey/Models/NSApplication+SharedObjects.m",
    "content": "#import \"NSApplication+SharedObjects.h\"\n#import \"PFMUser.h\"\n#import \"Application.h\"\n\nstatic PFMUser *_sharedUser = nil;\nstatic NSMutableDictionary *_sharedLocations = nil;\nstatic NSMutableDictionary *_sharedPlaces = nil;\nstatic NSMutableDictionary *_sharedUsers = nil;\n@implementation NSApplication (SharedObjects)\n\n- (PFMUser *)sharedUser {\n  @synchronized(self) {\n    if(!_sharedUser) {\n      _sharedUser = [PFMUser new];\n    }\n  }\n  return _sharedUser;\n}\n\n- (NSMutableDictionary *)sharedLocations {\n  @synchronized(self) {\n    if(!_sharedLocations) {\n      _sharedLocations = $mdict(nil);\n    }\n  }\n  return _sharedLocations;\n}\n\n- (NSMutableDictionary *)sharedUsers {\n  @synchronized(self) {\n    if(!_sharedUsers) {\n      _sharedUsers = $mdict(nil);\n    }\n\n    return _sharedUsers;\n  }\n}\n\n- (NSMutableDictionary *)sharedPlaces {\n  @synchronized(self) {\n    if(!_sharedPlaces) {\n      _sharedPlaces = $mdict(nil);\n    }\n  }\n  return _sharedPlaces;\n}\n\n- (PFMUser *)resetSharedUser {\n  _sharedUser = nil;\n  return [self sharedUser];\n}\n\n- (NSMutableDictionary *)resetSharedLocations {\n  _sharedLocations = nil;\n  return [self sharedLocations];\n}\n\n- (NSMutableDictionary *)resetSharedPlaces {\n  _sharedPlaces = nil;\n  return [self sharedPlaces];\n}\n\n- (NSMutableDictionary *)resetSharedUsers {\n  _sharedUsers = nil;\n  return [self sharedUsers];\n}\n\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMComment.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface PFMComment : NSObject {\n  NSString *_oid;\n  NSString *_locationId;\n  NSString *_momentId;\n  NSString *_userId;\n  NSString *_state;\n  NSString *_body;\n  NSDate *_createdAt;\n}\n\n@property (nonatomic, copy) NSString *oid;\n@property (nonatomic, copy) NSString *locationId;\n@property (nonatomic, copy) NSString *momentId;\n@property (nonatomic, copy) NSString *userId;\n@property (nonatomic, copy) NSString *state;\n@property (nonatomic, copy) NSString *body;\n@property (nonatomic, retain) NSDate *createdAt;\n\n+ (PFMComment *)commentFrom:(NSDictionary *)commentDict;\n\n- (NSString *)JSONRepresentation;\n- (NSDictionary *)toHash;\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMComment.m",
    "content": "#import \"PFMComment.h\"\n#import \"Application.h\"\n#import \"PFMLocation.h\"\n#import \"SBJson.h\"\n\n@implementation PFMComment\n\n@synthesize\n  oid=_oid\n, userId=_userId\n, locationId=_locationId\n, momentId=_momentId\n, body=_body\n, state=_state\n, createdAt=_createdAt;\n\n+ (PFMComment *)commentFrom:(NSDictionary *)commentDict {\n  PFMComment * comment = [PFMComment new];\n\n  comment.oid        = [commentDict objectOrNilForKey:@\"id\"];\n  comment.userId     = [commentDict objectOrNilForKey:@\"user_id\"];\n  comment.locationId = [commentDict objectOrNilForKey:@\"location_id\"];\n  comment.body       = [commentDict objectOrNilForKey:@\"body\"];\n  comment.momentId   = [commentDict objectOrNilForKey:@\"moment_id\"];\n  comment.userId     = [commentDict objectOrNilForKey:@\"user_id\"];\n  comment.state      = [commentDict objectOrNilForKey:@\"state\"];\n  comment.createdAt  = [NSDate dateWithTimeIntervalSince1970:floor([[commentDict objectOrNilForKey:@\"created\"] doubleValue])];\n\n  return comment;\n}\n\n- (NSDictionary *) toHash {\n  NSMutableDictionary *commentDict =  $mdict(self.oid, @\"id\",\n                                            self.body, @\"body\",\n                                           self.state, @\"state\");\n\n  if(self.locationId != nil) {\n    PFMLocation * location = [[NSApp sharedLocations] objectForKey:self.locationId];\n    if(location != nil) {\n      [commentDict setObject:[location toHash] forKey:@\"location\"];\n    }\n  }\n\n  if(self.userId != nil) {\n    PFMUser * user = [[NSApp sharedUsers] objectForKey:self.userId];\n    if(user != nil) {\n      [commentDict setObject:[user toHash] forKey:@\"user\"];\n    }\n  }\n\n  [commentDict setObjectOrNil:[self.createdAt descriptionInISO8601] forKey:@\"createdAt\"];\n\n  return commentDict;\n}\n\n- (NSString *) JSONRepresentation {\n  return [[self toHash] JSONRepresentation];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMLocation.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface PFMLocation : NSObject {\n  NSString *_oid;\n  NSString *_weatherConditions;\n  NSString *_cloudCover;\n  NSString *_windSpeed;\n  NSString *_dewPoint;\n  NSString *_temperature;\n  NSString *_windDirection;\n\n  double _elevation;\n  double _longitude;\n  double _latitude;\n  double _accuracy;\n\n  NSString *_countryName;\n  NSString *_country;\n  NSString *_city;\n}\n\n@property(nonatomic, copy) NSString *oid;\n@property(nonatomic, copy) NSString *weatherConditions;\n@property(nonatomic, copy) NSString *cloudCover;\n@property(nonatomic, copy) NSString *windSpeed;\n@property(nonatomic, copy) NSString *dewPoint;\n@property(nonatomic, copy) NSString *temperature;\n@property(nonatomic, copy) NSString *windDirection;\n\n@property(nonatomic) double elevation;\n@property(nonatomic) double longitude;\n@property(nonatomic) double latitude;\n@property(nonatomic) double accuracy;\n\n@property(nonatomic, copy) NSString *countryName;\n@property(nonatomic, copy) NSString *country;\n@property(nonatomic, copy) NSString *city;\n\n+ (PFMLocation *)locationFrom:(NSDictionary *)locationDict;\n\n- (NSDictionary *)toHash;\n- (NSString *)JSONRepresentation;\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMLocation.m",
    "content": "#import \"PFMLocation.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n\n@implementation PFMLocation\n\n@synthesize\n  oid=_oid\n, weatherConditions=_weatherConditions\n, cloudCover=_cloudCover\n, windSpeed=_windSpeed\n, dewPoint=_dewPoint\n, temperature=_temperature\n, windDirection=_windDirection\n, elevation=_elevation\n, longitude=_longitude\n, latitude=_latitude\n, accuracy=_accuracy\n, countryName=_countryName\n, country=_country\n, city=_city;\n\n+ (PFMLocation *)locationFrom:(NSDictionary *)locationDict {\n  PFMLocation * location = [PFMLocation new];\n\n  NSDictionary * weatherDict         = (NSDictionary *)[locationDict objectOrNilForKey:@\"weather\"];\n  NSDictionary * locationDetailsDict = (NSDictionary *)[locationDict objectOrNilForKey:@\"location\"];\n\n  location.oid = [locationDict objectOrNilForKey:@\"id\"];\n\n  if (weatherDict != nil) {\n    location.weatherConditions = [weatherDict objectOrNilForKey:@\"conditions\"];\n    location.cloudCover        = [weatherDict objectOrNilForKey:@\"cloud_cover\"];\n    location.windSpeed         = [weatherDict objectOrNilForKey:@\"wind_speed\"];\n    location.windDirection     = [weatherDict objectOrNilForKey:@\"wind_direction\"];\n    location.dewPoint          = [weatherDict objectOrNilForKey:@\"dewpoint\"];\n    location.temperature       = [weatherDict objectOrNilForKey:@\"temperature\"];\n  }\n\n  if (location != nil) {\n    location.elevation   = [(NSNumber *)[locationDetailsDict objectOrNilForKey:@\"elevation\"] doubleValue];\n    location.accuracy    = [(NSNumber *)[locationDetailsDict objectOrNilForKey:@\"accuracy\"] doubleValue];\n    location.countryName = [locationDetailsDict objectOrNilForKey:@\"country_name\"];\n    location.country     = [locationDetailsDict objectOrNilForKey:@\"country\"];\n    location.city        = [locationDetailsDict objectOrNilForKey:@\"city\"];\n  }\n\n  location.latitude  = [(NSNumber *)[locationDict objectOrNilForKey:@\"lat\"] doubleValue];\n  location.longitude = [(NSNumber *)[locationDict objectOrNilForKey:@\"lng\"] doubleValue];\n\n  return location;\n}\n\n- (NSDictionary *) toHash {\n  NSMutableDictionary * locationDict = $mdict(self.oid, @\"id\",\n                               $double(self.elevation), @\"elevation\",\n                                $double(self.latitude), @\"latitude\",\n                               $double(self.longitude), @\"longitude\",\n                                $double(self.accuracy), @\"accuracy\");\n\n  [locationDict setObjectOrNil:self.weatherConditions forKey:@\"weatherConditions\"];\n  [locationDict setObjectOrNil:self.cloudCover        forKey:@\"cloudCover\"];\n  [locationDict setObjectOrNil:self.windSpeed         forKey:@\"windSpeed\"];\n  [locationDict setObjectOrNil:self.dewPoint          forKey:@\"dewPoint\"];\n  [locationDict setObjectOrNil:self.temperature       forKey:@\"temperature\"];\n  [locationDict setObjectOrNil:self.windDirection     forKey:@\"windDirection\"];\n  [locationDict setObjectOrNil:self.countryName       forKey:@\"countryName\"];\n  [locationDict setObjectOrNil:self.country           forKey:@\"country\"];\n  [locationDict setObjectOrNil:self.city              forKey:@\"city\"];\n\n  return (NSDictionary *)locationDict;\n}\n\n- (NSString *) JSONRepresentation {\n  return [[self toHash] JSONRepresentation];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMModel.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ASIHTTPRequest.h\"\n\n@interface PFMModel : NSObject {\n  NSString *_url;\n}\n\n@property (nonatomic, copy) NSString *url;\n\n- (ASIHTTPRequest *)requestWithPath:(NSString *)path;\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMModel.m",
    "content": "\n#import \"Application.h\"\n#import \"PFMModel.h\"\n\n@implementation PFMModel\n\n@synthesize\n  url=_url\n;\n\n- (ASIHTTPRequest *)requestWithPath:(NSString *)path {\n  NSURL *url = [NSURL URLWithString:$str(@\"%@%@\", kPathAPIHost, path)];\n  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];\n  return request;\n}\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMMoment.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"PFMModel.h\"\n\n@class PFMPhoto;\n\n@interface PFMMoment : PFMModel {\n  NSString *_oid;\n  NSString *_userId;\n  NSString *_locationId;\n  NSString *_placeId;\n\n  NSString *_type;\n  NSString *_subType;\n\n  NSString *_headline;\n  NSString *_subHeadline;\n  NSString *_thought;\n  NSString *_state;\n  double _createdAt;\n  PFMPhoto *_photo;\n\n  NSMutableArray *_comments;\n  NSMutableArray *_people;\n\n  BOOL _shared;\n  BOOL _private;\n}\n\n@property (nonatomic, copy) NSString *oid;\n@property (nonatomic, copy) NSString *userId;\n@property (nonatomic, copy) NSString *locationId;\n@property (nonatomic, copy) NSString *placeId;\n\n@property (nonatomic, copy) NSString *type;\n@property (nonatomic, copy) NSString *subType;\n\n@property (nonatomic, copy) NSString *headline;\n@property (nonatomic, copy) NSString *subHeadline;\n@property (nonatomic, copy) NSString *thought;\n@property (nonatomic, copy) NSString *state;\n@property (nonatomic, assign) double createdAt;\n@property (nonatomic, retain) PFMPhoto *photo;\n\n@property (nonatomic, retain) NSMutableArray *comments;\n@property (nonatomic, retain) NSMutableArray *people;\n\n@property (nonatomic, getter=isShared) BOOL shared;\n@property (nonatomic, getter=isPrivate) BOOL private;\n\n// There are other components (which may or may not be self-standing objects)\n// emotions\n// origin_location\n// destination_location\n\n+ (PFMMoment *)momentFrom:(NSDictionary *)rawMoment;\n\n- (NSDictionary *)toHash;\n- (NSString *)JSONRepresentation;\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMMoment.m",
    "content": "#import \"PFMMoment.h\"\n#import \"PFMPhoto.h\"\n#import \"PFMComment.h\"\n#import \"PFMLocation.h\"\n#import \"Application.h\"\n#import \"PFMPlace.h\"\n#import \"SBJson.h\"\n\n@implementation PFMMoment\n\n@synthesize\n  oid = _oid\n, userId = _userId\n, placeId=_placeId\n, locationId = _locationId\n, type = _type\n, subType = _subType\n, headline = _headline\n, subHeadline = _subHeadline\n, thought = _thought\n, state = _state\n, createdAt = _createdAt\n, shared = _shared\n, private = _private\n, photo=_photo\n, comments=_comments\n, people=_people\n;\n\n+ (PFMMoment *)momentFrom:(NSDictionary *)rawMoment {\n  PFMMoment * moment = [PFMMoment new];\n\n  moment.oid         = [rawMoment objectOrNilForKey:@\"id\"];\n  moment.locationId  = [rawMoment objectOrNilForKey:@\"location_id\"];\n  moment.userId      = [rawMoment objectOrNilForKey:@\"user_id\"];\n\n  moment.type        = [rawMoment objectOrNilForKey:@\"type\"];\n  moment.headline    = [rawMoment objectOrNilForKey:@\"headline\"];\n  moment.subHeadline = [rawMoment objectOrNilForKey:@\"subheadline\"];\n  moment.thought     = [rawMoment objectOrNilForKey:@\"thought\"];\n  moment.state       = [rawMoment objectOrNilForKey:@\"state\"];\n  moment.createdAt   = [[rawMoment objectOrNilForKey:@\"created\"] doubleValue];\n  moment.private     = [(NSNumber *)[rawMoment objectOrNilForKey:@\"private\"] boolValue];\n  moment.shared      = [(NSNumber *)[rawMoment objectOrNilForKey:@\"shared\"] boolValue];\n\n  NSDictionary * place = [rawMoment objectOrNilForKey:@\"place\"];\n  moment.placeId       = [place objectOrNilForKey:@\"id\"];\n\n  if($eql(moment.type, @\"photo\")) {\n    NSDictionary * photoDictionary = (NSDictionary *)[(NSDictionary *)[rawMoment objectOrNilForKey:@\"photo\"] objectOrNilForKey:@\"photo\"];\n    moment.photo = [PFMPhoto photoFrom:photoDictionary];\n  }\n\n  moment.people = $marr(nil);\n\n  if($eql(moment.type, @\"ambient\")) {\n    NSDictionary * ambientDict = (NSDictionary *)[rawMoment objectOrNilForKey:@\"ambient\"];\n    moment.subType = [ambientDict objectOrNilForKey:@\"subtype\"];\n    if ($eql(moment.subType, @\"friend\")) {\n      NSArray * peopleList = (NSArray *)[ambientDict objectOrNilForKey:@\"people\"];\n      if (peopleList) {\n        for (id obj in peopleList) {\n          NSDictionary * dict = (NSDictionary *)obj;\n          NSString * userId = [dict $for:@\"id\"];\n          [moment.people addObject:userId];\n        }\n      }\n    }\n  }\n\n  moment.comments = $marr(nil);\n\n  for(NSDictionary * commentDict in (NSArray *)[rawMoment objectOrNilForKey:@\"comments\"]) {\n    PFMComment * comment = [PFMComment commentFrom:commentDict];\n    [moment.comments addObject:comment];\n  }\n\n  return moment;\n}\n\n- (NSDictionary *) toHash {\n  NSMutableDictionary * momentDict = $mdict(self.oid, @\"id\",\n                                           self.type, @\"type\");\n\n  [momentDict setObjectOrNil:self.headline       forKey:@\"headline\"];\n  [momentDict setObjectOrNil:self.subHeadline    forKey:@\"subHeadline\"];\n  [momentDict setObjectOrNil:self.thought        forKey:@\"thought\"];\n  [momentDict setObjectOrNil:self.state          forKey:@\"state\"];\n  [momentDict setObjectOrNil:self.subType        forKey:@\"subType\"];\n  [momentDict setObjectOrNil:[self.photo toHash] forKey:@\"photo\"];\n  [momentDict setObjectOrNil:$bool(self.shared)  forKey:@\"shared\"];\n  [momentDict setObjectOrNil:$bool(self.private) forKey:@\"private\"];\n\n  if(self.locationId != nil) {\n    PFMLocation * location = [[NSApp sharedLocations] objectForKey:self.locationId];\n    [momentDict setObjectOrNil:[location toHash] forKey:@\"location\"];\n  }\n\n  if(self.placeId != nil) {\n    PFMPlace * place = [[NSApp sharedPlaces] objectForKey:self.placeId];\n    [momentDict setObjectOrNil:[place toHash] forKey:@\"place\"];\n  }\n\n  if(self.userId != nil) {\n    PFMUser * user = [[NSApp sharedUsers] objectForKey:self.userId];\n    [momentDict setObjectOrNil:[user toHash] forKey:@\"user\"];\n  }\n\n  [momentDict setObjectOrNil:[[NSDate dateWithTimeIntervalSince1970:self.createdAt] descriptionInISO8601] forKey:@\"createdAt\"];\n\n  NSArray * commentsDictionaryArray = [self.comments $map:^(id obj) {\n                                        return [(PFMComment *)obj toHash];\n                                      }];\n  [momentDict setObject:commentsDictionaryArray forKey:@\"comments\"];\n\n  NSArray * peopleDictionaryArray = [self.people $map:^(id obj) {\n    PFMUser * user = [[NSApp sharedUsers] objectForKey:(NSString *)obj];\n    if (user) {\n      return [user toHash];\n    } else {\n      return nil;\n    }\n  }];\n\n  [momentDict setObject:peopleDictionaryArray forKey:@\"people\"];\n\n  return momentDict;\n}\n\n- (NSString *) JSONRepresentation {\n  return [[self toHash] JSONRepresentation];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMPhoto.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface PFMPhoto : NSObject {\n  NSString *_iOSLowResFileName;\n  NSString *_iOSHighResFileName;\n  NSString *_webFileName;\n  NSString *_originalFileName;\n  NSString *_baseURL;\n}\n\n// Low-Res version 320x320\n@property (nonatomic, copy) NSString *iOSLowResFileName;\n// High-Res version 640x640\n@property (nonatomic, copy) NSString *iOSHighResFileName;\n// Web version (which will be kinda blurred)\n@property (nonatomic, copy) NSString *webFileName;\n// Original version (super high-res)\n@property (nonatomic, copy) NSString *originalFileName;\n// Base URL\n@property (nonatomic, copy) NSString *baseURL;\n\n+ (PFMPhoto *)photoFrom:(NSDictionary *)photoDict;\n\n- (NSString *)iOSLowResURL;\n- (NSString *)iOSHighResURL;\n- (NSString *)webURL;\n- (NSString *)originalURL;\n\n- (NSString *)JSONRepresentation;\n- (NSDictionary *)toHash;\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMPhoto.m",
    "content": "#import \"PFMPhoto.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n\n@implementation PFMPhoto\n\n@synthesize\n  iOSLowResFileName = _iOSLowResFileName\n, iOSHighResFileName = _iOSHighResFileName\n, webFileName = _webFileName\n, originalFileName = _originalFileName\n, baseURL = _baseURL;\n\n+ (PFMPhoto *)photoFrom:(NSDictionary *)photoDict {\n  PFMPhoto * photo = [PFMPhoto new];\n  photo.baseURL             = [photoDict objectOrNilForKey:@\"url\"];\n  NSDictionary * iOSDetails = (NSDictionary *)[photoDict objectOrNilForKey:@\"ios\"];\n\n  photo.iOSHighResFileName  = [(NSDictionary *)[iOSDetails objectOrNilForKey:@\"2x\"] objectOrNilForKey:@\"file\"];\n  photo.iOSLowResFileName   = [(NSDictionary *)[iOSDetails objectOrNilForKey:@\"1x\"] objectOrNilForKey:@\"file\"];\n  photo.webFileName         = [(NSDictionary *)[photoDict objectOrNilForKey:@\"web\"] objectOrNilForKey:@\"file\"];\n  photo.originalFileName    = [(NSDictionary *)[photoDict objectOrNilForKey:@\"original\"] objectOrNilForKey:@\"file\"];\n\n  return photo;\n}\n\n- (NSString *) iOSLowResURL {\n  if(!self.iOSLowResFileName) {\n    return nil;\n  }\n  return [NSString stringWithFormat:@\"%@/%@\", self.baseURL, self.iOSLowResFileName];\n}\n\n- (NSString *) iOSHighResURL {\n  if(!self.iOSHighResFileName) {\n    return nil;\n  }\n  return [NSString stringWithFormat:@\"%@/%@\", self.baseURL, self.iOSHighResFileName];\n}\n\n- (NSString *) webURL {\n  if(!self.webFileName) {\n    return nil;\n  }\n  return [NSString stringWithFormat:@\"%@/%@\", self.baseURL, self.webFileName];\n}\n\n- (NSString *) originalURL {\n  if(!self.originalFileName) {\n    return nil;\n  }\n  return [NSString stringWithFormat:@\"%@/%@\", self.baseURL, self.originalFileName];\n}\n\n- (NSDictionary *) toHash {\n  NSMutableDictionary *dict = $mdict(nil);\n\n  [dict setObjectOrNil:[self iOSLowResURL]  forKey:@\"iOSLowResURL\"];\n  [dict setObjectOrNil:[self iOSHighResURL] forKey:@\"iOSHighResURL\"];\n  [dict setObjectOrNil:[self webURL]        forKey:@\"webURL\"];\n  [dict setObjectOrNil:[self originalURL]   forKey:@\"originalURL\"];\n\n  return dict;\n}\n\n- (NSString *) JSONRepresentation {\n  return [[self toHash] JSONRepresentation];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMPlace.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface PFMPlace : NSObject {\n  NSString *_oid;\n  NSString *_name;\n  NSString *_address;\n  NSString *_city;\n  NSString *_country;\n  NSString *_state;\n  NSString *_postalCode;\n\n  double _latitude;\n  double _longitude;\n\n  NSUInteger _totalCheckins;\n\n  NSString *_phone;\n  NSString *_formattedPhone;\n}\n\n@property(nonatomic, copy) NSString *oid;\n@property(nonatomic, copy) NSString *name;\n@property(nonatomic, copy) NSString *address;\n@property(nonatomic, copy) NSString *city;\n@property(nonatomic, copy) NSString *country;\n@property(nonatomic, copy) NSString *state;\n@property(nonatomic, copy) NSString *postalCode;\n\n@property(nonatomic) double latitude;\n@property(nonatomic) double longitude;\n\n@property(nonatomic) NSUInteger totalCheckins;\n\n@property(nonatomic, copy) NSString *phone;\n@property(nonatomic, copy) NSString *formattedPhone;\n\n+ (PFMPlace *)placeFrom:(NSDictionary *)placeDict;\n\n- (NSDictionary *)toHash;\n- (NSString *)JSONRepresentation;\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMPlace.m",
    "content": "#import \"PFMPlace.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n\n@implementation PFMPlace\n\n@synthesize\n  oid=_oid\n, name=_name\n, city=_city\n, country=_country\n, state=_state\n, postalCode=_postalCode\n, address=_address\n, latitude=_latitude\n, longitude=_longitude\n, totalCheckins=_totalCheckins\n, phone=_phone\n, formattedPhone=_formattedPhone;\n\n+ (PFMPlace *)placeFrom:(NSDictionary *)placeDict {\n  PFMPlace * place = [PFMPlace new];\n\n  place.oid  = [placeDict objectOrNilForKey:@\"id\"];\n  place.name = [placeDict objectOrNilForKey:@\"name\"];\n\n  NSDictionary * locationDict = [placeDict objectOrNilForKey:@\"location\"];\n  NSDictionary * contactDict  = [placeDict objectOrNilForKey:@\"contact\"];\n\n  if(locationDict != nil) {\n    place.city       = [locationDict objectOrNilForKey:@\"city\"];\n    place.country    = [locationDict objectOrNilForKey:@\"country\"];\n    place.address    = [locationDict objectOrNilForKey:@\"address\"];\n    place.postalCode = [locationDict objectOrNilForKey:@\"postalCode\"];\n    place.state      = [locationDict objectOrNilForKey:@\"state\"];\n\n    place.latitude   = [(NSNumber *)[locationDict objectOrNilForKey:@\"lat\"] doubleValue];\n    place.longitude  = [(NSNumber *)[locationDict objectOrNilForKey:@\"lng\"] doubleValue];\n  }\n\n  if(contactDict != nil) {\n    place.phone          = [contactDict objectOrNilForKey:@\"phone\"];\n    place.formattedPhone = [contactDict objectOrNilForKey:@\"formattedPhone\"];\n  }\n\n  place.totalCheckins = [(NSNumber *)[placeDict objectOrNilForKey:@\"total_checkins\"] intValue];\n\n  return place;\n}\n\n- (NSDictionary *) toHash {\n  NSMutableDictionary * placeDict = $mdict(self.oid, @\"id\",\n                             $double(self.latitude), @\"latitude\",\n                            $double(self.longitude), @\"longitude\",\n                       $integer(self.totalCheckins), @\"totalCheckins\");\n\n  [placeDict setObjectOrNil:self.name           forKey:@\"name\"];\n  [placeDict setObjectOrNil:self.address        forKey:@\"address\"];\n  [placeDict setObjectOrNil:self.city           forKey:@\"city\"];\n  [placeDict setObjectOrNil:self.country        forKey:@\"country\"];\n  [placeDict setObjectOrNil:self.state          forKey:@\"state\"];\n  [placeDict setObjectOrNil:self.postalCode     forKey:@\"postalCode\"];\n  [placeDict setObjectOrNil:self.phone          forKey:@\"phone\"];\n  [placeDict setObjectOrNil:self.formattedPhone forKey:@\"formattedPhone\"];\n\n  return (NSDictionary *)placeDict;\n}\n\n- (NSString *) JSONRepresentation {\n  return [[self toHash] JSONRepresentation];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMUser.h",
    "content": "#import \"PFMModel.h\"\n\n@protocol PFMUserSignInDelegate;\n@protocol PFMUserMomentsDelegate;\n\n@class PFMPhoto;\n\n@interface PFMUser : PFMModel {\n  NSString *_oid;\n\n  NSString *_email;\n  NSString *_password;\n\n  BOOL _signingIn;\n  BOOL _signedIn;\n  BOOL _fetchingMoments;\n\n  NSString *_firstName;\n  NSString *_lastName;\n  NSMutableArray  *_fetchedMoments;\n\n  PFMPhoto *_coverPhoto;\n  PFMPhoto *_profilePhoto;\n\n  NSMutableDictionary *_allMomentIds;\n  NSMutableArray      *_allMoments;\n\n  __weak id<PFMUserSignInDelegate> _signInDelegate;\n  __weak id<PFMUserMomentsDelegate> _momentsDelegate;\n}\n\n@property(nonatomic, copy) NSString *oid;\n\n@property(nonatomic, copy) NSString *email;\n@property(nonatomic, copy) NSString *password;\n\n@property(nonatomic, getter=isSigningIn) BOOL signingIn;\n@property(nonatomic, getter=isSignedIn)  BOOL signedIn;\n@property(nonatomic, getter=isFetchingMoments) BOOL fetchingMoments;\n\n@property(nonatomic, copy) NSString *firstName;\n@property(nonatomic, copy) NSString *lastName;\n@property(nonatomic, retain) NSMutableArray  *fetchedMoments;\n\n@property(nonatomic, retain) PFMPhoto *coverPhoto;\n@property(nonatomic, retain) PFMPhoto *profilePhoto;\n\n@property(nonatomic, retain) NSMutableDictionary *allMomentIds;\n@property(nonatomic, retain) NSMutableArray      *allMoments;\n\n@property(nonatomic) __weak id<PFMUserSignInDelegate> signInDelegate;\n@property(nonatomic) __weak id<PFMUserMomentsDelegate> momentsDelegate;\n\n- (ASIHTTPRequest *)signIn;\n- (ASIHTTPRequest *)fetchMomentsNewerThan:(double)date;\n- (ASIHTTPRequest *)fetchMomentsOlderThan:(double)date;\n- (void)parseMomentsJSON:(NSString *)json\n             insertAtTop:(BOOL)atTop;\n\n- (void)saveCredentials;\n- (void)loadCredentials;\n- (void)deleteCredentials;\n\n- (NSDictionary *)toHash;\n- (NSString *)JSONRepresentation;\n\n@end\n\n@protocol PFMUserSignInDelegate <NSObject>\n\n- (void)didSignIn;\n- (void)didFailSignInDueToInvalidCredentials;\n- (void)didFailSignInDueToPathError;\n- (void)didFailSignInDueToRequestError;\n\n@end\n\n@protocol PFMUserMomentsDelegate <NSObject>\n\n- (void)didFetchMoments:(NSArray *)moments\n                  atTop:(BOOL)atTop;\n\n- (void)didFailToFetchMoments;\n\n@end\n"
  },
  {
    "path": "Journey/Models/PFMUser.m",
    "content": "#import \"PFMUser.h\"\n#import \"PFMMoment.h\"\n#import \"PFMComment.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n#import \"SSKeychain.h\"\n#import \"PFMPhoto.h\"\n#import \"PFMLocation.h\"\n#import \"PFMPlace.h\"\n\n@interface PFMUser ()\n\n- (void)reset;\n- (ASIHTTPRequest *)fetchMomentsWithPath:(NSString *)path\n                                   atTop:(BOOL)atTop;\n\n@end\n\n@implementation PFMUser\n\n@synthesize\n  oid=_oid\n, email=_email\n, password=_password\n, signingIn=_signingIn\n, signedIn=_signedIn\n, fetchingMoments=_fetchingMoments\n, firstName=_firstName\n, lastName=_lastName\n, signInDelegate=_signInDelegate\n, momentsDelegate=_momentsDelegate\n, fetchedMoments=_fetchedMoments\n, coverPhoto=_coverPhoto\n, profilePhoto=_profilePhoto\n, allMomentIds=_allMomentIds\n, allMoments=_allMoments\n;\n\n- (id) init {\n  if (self = [super init]) {\n    [self reset];\n  }\n  return self;\n}\n\n- (void)reset {\n  self.oid = nil;\n  self.email = nil;\n  self.password = nil;\n  self.signingIn = NO;\n  self.signedIn = NO;\n  self.fetchingMoments = NO;\n  self.firstName = nil;\n  self.lastName = nil;\n  self.fetchedMoments = nil;\n  self.coverPhoto = nil;\n  self.profilePhoto = nil;\n  self.allMomentIds = $mdict(nil);\n  self.allMoments = $marr(nil);\n}\n\n- (ASIHTTPRequest *)signIn {\n  self.signingIn = YES;\n  __block ASIHTTPRequest *request = [self requestWithPath:@\"/3/user/settings\"];\n  [request addBasicAuthenticationHeaderWithUsername:self.email andPassword:self.password];\n\n  [request setCompletionBlock:^{\n    if(request.responseStatusCode == 200) {\n      NSDictionary *dict = [[request responseString] JSONValue];\n      self.firstName = [[dict objectOrNilForKey:@\"settings\"] objectOrNilForKey:@\"user_first_name\"];\n      self.lastName  = [[dict objectOrNilForKey:@\"settings\"] objectOrNilForKey:@\"user_last_name\"];\n      [self saveCredentials];\n      self.signedIn = YES;\n      [self.signInDelegate didSignIn];\n    } else if (request.responseStatusCode == 500) {\n      [self.signInDelegate didFailSignInDueToPathError];\n    } else {\n      [self.signInDelegate didFailSignInDueToInvalidCredentials];\n    }\n    self.signingIn = NO;\n  }];\n\n  [request setFailedBlock:^{\n    [self.signInDelegate didFailSignInDueToRequestError];\n    self.signingIn = NO;\n  }];\n\n  [request startAsynchronous];\n  return request;\n}\n\n- (ASIHTTPRequest *)fetchMomentsNewerThan:(double)date {\n  NSString * path = nil;\n\n  if (date != 0.0) {\n    path = $str(@\"%@?newer_than=%f\", kMomentsAPIPath, date);\n  } else {\n    path = kMomentsAPIPath;\n  }\n\n  return [self fetchMomentsWithPath:path atTop:YES];\n}\n\n- (ASIHTTPRequest *)fetchMomentsOlderThan:(double)date {\n  NSString * path = nil;\n\n  if (date != 0.0) {\n    path = $str(@\"%@?older_than=%f\", kMomentsAPIPath, date);\n  } else {\n    path = kMomentsAPIPath;\n  }\n\n  return [self fetchMomentsWithPath:path atTop:NO];\n}\n\n\n- (ASIHTTPRequest *)fetchMomentsWithPath:(NSString *)path\n                                   atTop:(BOOL)atTop {\n  self.fetchingMoments = YES;\n\n  __block ASIHTTPRequest * request = [self requestWithPath:path];\n\n  [request addBasicAuthenticationHeaderWithUsername:self.email andPassword:self.password];\n\n  [request setCompletionBlock:^{\n    if(request.responseStatusCode == 200) {\n      [self parseMomentsJSON:[request responseString] insertAtTop:atTop];\n\n      [self.momentsDelegate didFetchMoments:[self fetchedMoments] atTop:atTop];\n    } else {\n      [self.momentsDelegate didFailToFetchMoments];\n    }\n    self.fetchingMoments = NO;\n  }];\n\n  [request setFailedBlock:^{\n    [self.momentsDelegate didFailToFetchMoments];\n  }];\n\n  [request startAsynchronous];\n  return request;\n}\n\n- (void)parseMomentsJSON:(NSString *)json\n             insertAtTop:(BOOL)atTop {\n  self.fetchedMoments = $marr(nil);\n  NSDictionary *dict = [json JSONValue];\n  for(NSDictionary * rawMoment in [dict objectOrNilForKey:@\"moments\"]) {\n    PFMMoment * moment = [PFMMoment momentFrom:rawMoment];\n    if (![self.allMomentIds objectForKey:moment.oid]) {\n      [self.fetchedMoments addObject:moment];\n      [self.allMomentIds setObject:moment forKey:moment.oid];\n    }\n  }\n\n  // Don't do anything if the API hasn't returned anything\n  if([self.fetchedMoments count] == 0) {\n    return;\n  } else {\n    // Otherwise insert elements either at the top/bottom depending on atTop\n    NSUInteger insertAt = 0;\n    if (!atTop) { insertAt = [self.allMoments count]; }\n\n    NSRange range = NSMakeRange(insertAt, [self.fetchedMoments count]);\n    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range];\n    [self.allMoments insertObjects:self.fetchedMoments atIndexes:indexSet];\n  }\n\n  // Set the ID\n  self.oid = [(NSDictionary *)[(NSDictionary *)[dict objectOrNilForKey:@\"cover\"] objectOrNilForKey:@\"user\"] objectOrNilForKey:@\"id\"];\n  // Get the Cover Photo\n  NSDictionary * coverPhotoDictionary = [(NSDictionary *)[dict objectOrNilForKey:@\"cover\"] objectOrNilForKey:@\"photo\"];\n  self.coverPhoto = [PFMPhoto photoFrom:coverPhotoDictionary];\n  // Get the Profile Photo dictionary from the users dictionary and set the profile photo\n  NSDictionary * profilePhotoDictionary = [(NSDictionary *)[(NSDictionary *)[dict objectOrNilForKey:@\"users\"] objectOrNilForKey:self.oid] objectOrNilForKey:@\"photo\"];\n  self.profilePhoto = [PFMPhoto photoFrom:profilePhotoDictionary];\n  // Get the locations map\n  NSDictionary * locationsDict = (NSDictionary *)[dict objectOrNilForKey:@\"locations\"];\n\n  [locationsDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {\n    PFMLocation * location = [PFMLocation locationFrom:(NSDictionary *)obj];\n    [[NSApp sharedLocations] setObject:location forKey:key];\n  }];\n\n  // Get the places map\n  NSDictionary * placesDict = (NSDictionary *)[dict objectOrNilForKey:@\"places\"];\n\n  [placesDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {\n    PFMPlace * place = [PFMPlace placeFrom:(NSDictionary *)obj];\n    [[NSApp sharedPlaces] setObject:place forKey:key];\n  }];\n\n  // Get the global users map\n  NSDictionary * usersDict = (NSDictionary *)[dict objectOrNilForKey:@\"users\"];\n  [usersDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {\n    NSDictionary * userDict = (NSDictionary *)obj;\n    NSString * userId = (NSString *)key;\n\n    PFMUser * user = [PFMUser new];\n    user.oid = userId;\n    user.firstName    = [userDict objectOrNilForKey:@\"first_name\"];\n    user.lastName     = [userDict objectOrNilForKey:@\"last_name\"];\n    user.profilePhoto = [PFMPhoto photoFrom:[userDict objectOrNilForKey:@\"photo\"]];\n\n    [[NSApp sharedUsers] setObject:user forKey:userId];\n  }];\n}\n\n- (void)saveCredentials {\n  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n  [defaults setObject:self.email forKey:kPathDefaultsEmailKey];\n  [defaults synchronize];\n  [SSKeychain setPassword:self.password forService:kPathKeychainServiceName account:self.email];\n}\n\n- (void)loadCredentials {\n  self.email = [[NSUserDefaults standardUserDefaults] objectForKey:kPathDefaultsEmailKey];\n  self.password = [SSKeychain passwordForService:kPathKeychainServiceName account:self.email];\n}\n\n- (void)deleteCredentials {\n  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n  [defaults removeObjectForKey:kPathDefaultsEmailKey];\n  [defaults synchronize];\n  [SSKeychain deletePasswordForService:kPathKeychainServiceName account:self.email];\n  [self reset];\n}\n\n- (NSDictionary *) toHash {\n  NSMutableDictionary * userDict = $mdict(self.oid, @\"id\");\n\n  [userDict setObjectOrNil:self.email                 forKey:@\"email\"];\n  [userDict setObjectOrNil:self.firstName             forKey:@\"firstName\"];\n  [userDict setObjectOrNil:self.lastName              forKey:@\"lastName\"];\n  [userDict setObjectOrNil:[self.coverPhoto toHash]   forKey:@\"coverPhoto\"];\n  [userDict setObjectOrNil:[self.profilePhoto toHash] forKey:@\"profilePhoto\"];\n\n  return userDict;\n}\n\n- (NSString *) JSONRepresentation {\n  return [[self toHash] JSONRepresentation];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Resources/Credits.rtf",
    "content": "{\\rtf1\\ansi\\ansicpg1252\\cocoartf1138\\cocoasubrtf320\n{\\fonttbl\\f0\\fswiss\\fcharset0 Helvetica;}\n{\\colortbl;\\red255\\green255\\blue255;}\n\\paperw11900\\paperh16840\\vieww9600\\viewh8400\\viewkind0\n\\pard\\tx560\\tx1120\\tx1680\\tx2240\\tx2800\\tx3360\\tx3920\\tx4480\\tx5040\\tx5600\\tx6160\\tx6720\\pardirnatural\\qc\n\n\\f0\\fs24 \\cf0 The developers of this app are\\\nnot affiliated with Path, Inc.\\\n\\\n\\pard\\tx560\\tx1120\\tx1680\\tx2240\\tx2800\\tx3360\\tx3920\\tx4480\\tx5040\\tx5600\\tx6160\\tx6720\\pardirnatural\\qc\n\n\\b \\cf0 Developed purely for\\\n\\ul educational purposes\\ulnone  only by\\\n{\\field{\\*\\fldinst{HYPERLINK \"http://www.raingrove.com/\"}}{\\fldrslt @raingrove}} and {\\field{\\*\\fldinst{HYPERLINK \"http://getdenso.com/\"}}{\\fldrslt @getdenso}}\\\nat the 2nd Anideo hackathon.\n\\b0 \\\n\\\n\\pard\\tx560\\tx1120\\tx1680\\tx2240\\tx2800\\tx3360\\tx3920\\tx4480\\tx5040\\tx5600\\tx6160\\tx6720\\pardirnatural\\qc\n{\\field{\\*\\fldinst{HYPERLINK \"http://github.com/JourneyForMac/Journey\"}}{\\fldrslt \\cf0 http://github.com/JourneyForMac/Journey}}}"
  },
  {
    "path": "Journey/Resources/WebView/css/app.css",
    "content": "body {\n  background: #f3eeea url(../images/bg.png);\n  margin: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n\n#content, #cover_photo {\n  width: 390px;\n}\n\n#cover_photo {\n  position: relative;\n  height: 244px;\n  background-color: #333;\n  background-size: cover;\n}\n\n#cover_photo .gradient {\n  position: absolute;\n  width: 390px;\n  height: 100px;\n  bottom: 0;\n  background-image: -webkit-linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.5));\n}\n\n#user_profile_photo {\n  width: 50px;\n  height: 50px;\n  position: relative;\n  display: block;\n  top: 150px;\n  left: 40px;\n  background-color: black;\n  background-size: cover;\n  background-position: center center;\n  -webkit-border-radius: 25px;\n  -webkit-box-shadow: 0 0 5px rgba(0,0,0,0.9),\n                      inset 0 0 6px rgba(255,255,255,0.9);\n}\n\n#loading {\n  position: relative;\n  margin: 0 auto;\n  background: black;\n  opacity: 0.6;\n  width: 100px;\n  -webkit-border-radius: 8px;\n  margin-top: 35%;\n  -webkit-font-smoothing: antialiased;\n  text-align: center;\n  -webkit-box-shadow: 0 2px 6px rgba(0,0,0,0.5);\n}\n\n#loading p {\n  padding: 13px 0 15px 0;\n  margin: 0;\n  font-size: 13px;\n  font-weight: bold;\n  color: white;\n}\n\n#loading .icon {\n  padding: 25px 0 0 0;\n}\n\n#path_start {\n  width: 8px;\n  height: 8px;\n  position: relative;\n  top: 165px;\n  left: 61px;\n  background-color: #fff;\n  -webkit-border-radius: 10px;\n  -webkit-box-shadow: 0 0 6px rgba(0,0,0,0.8);\n  z-index: 999;\n}\n\n#path_journey {\n  position: absolute;\n  background-color: rgba(204,204,204,0.4);\n  left: 64px;\n  bottom: 0px;\n  width: 2px;\n  height: 20px;\n  z-index: 100;\n}\n\nul.moments {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  background: url(../images/line.png) repeat-y 64px 0;\n}\n\nli.moment {\n  position: relative;\n  margin: 0;\n  padding: 10px 0 0 0;\n  border-top: 1px solid rgba(255,255,255,0.55);\n  border-bottom: 1px solid rgba(204,204,204,0.55);\n  text-align: right;\n  min-height: 45px;\n}\n\nli.moment:first-child {\n  border-top: none;\n}\n\nli.moment:last-child {\n  border-bottom: none;\n}\n\n.moment_photo {\n  position: relative;\n  z-index: 110;\n  margin-bottom: 10px;\n}\n\n.moment_photo img {\n  padding: 5px;\n  min-height: 240px;\n  width: 320px;\n  margin-right: 5px;\n  background: white;\n  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.35);\n}\n\n.user_photo {\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  -webkit-border-radius: 5px;\n  -webkit-box-shadow: inset 0 1px 4px rgba(0,0,0,0.5),\n                      0 1px 0 white;\n  overflow: hidden;\n}\n\n.user_photo img {\n  display: block;\n  position: relative;\n  z-index: -1;\n  width: 33px;\n  height: 33px;\n  -webkit-border-radius: 4px;\n}\n\n.text p {\n  margin: 0;\n  font-size: 12px;\n  line-height: 1.4;\n}\n\n.text p.sub_headline, .text p.created_at {\n  color: #aaa;\n}\n\n.dot {\n  position: absolute;\n  border: 2px solid white;\n  z-index: 99;\n  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.35);\n  text-align: center;\n  width: 22px;\n  height: 22px;\n  left: 52px;\n  top: 12px;\n  -webkit-border-radius: 14px;\n  background-repeat: no-repeat;\n  background-position: center center;\n  overflow: hidden;\n}\n\n.null.dot {\n  width: 8px;\n  height: 8px;\n  left: 59px;\n  top: 19px;\n  -webkit-border-radius: 6px;\n  background: #CDC5A1;\n}\n\n.place.dot {\n  background-color: #2974d0;\n  background-image: url(../images/place.png);\n}\n\n.awake.dot {\n  background-color: #f2d11b;\n  background-image: url(../images/awake.png);\n}\n\n.asleep.dot {\n  background-color: #480a87;\n  background-image: url(../images/asleep.png);\n}\n\n.music.dot {\n  background-color: #FF8C00;\n  background-image: url(../images/music.png);\n}\n\n.plane.dot {\n  background-color: #555555;\n  background-image: url(../images/plane.png);\n}\n\n.friend.dot > div {\n  width: 22px;\n  height: 22px;\n  background-size: cover;\n  position: absolute;\n  -webkit-border-radius: 13px;\n}\n\n.ambient.text {\n  margin-left: 90px;\n  margin-bottom: 10px;\n  width: 290px;\n  text-align: left;\n  text-shadow: 0 1px 0 white;\n}\n\n.ambient.text p.headline.without_sub_headline {\n  margin-top: 8px;\n}\n\n.comments-tip {\n  position: absolute;\n  margin-top: -5px;\n  left: 104px;\n  width: 8px;\n  height: 8px;\n  background: #fbfbfb;\n  z-index: 10;\n  -webkit-transform: rotate(45deg);\n  border-top: 1px solid rgba(0,0,0,0.1);\n  border-left: 1px solid rgba(0,0,0,0.1);\n}\n\nli.moment.thought .dot {\n  top: 21px;\n}\n\nli.moment.thought .comments-tip {\n  left: 79px;\n  top: 27px;\n  border-top: none;\n  border-bottom: 2px solid rgba(0,0,0,0.15);\n}\n\nli.moment.thought ul.comments li:first-child .created_at {\n  display: none;\n}\n\nli.moment.fetching {\n  background: url(../images/loading-black.gif) 60% 50% no-repeat;\n}\n\nul.comments {\n  list-style: none;\n  margin: 0 0 12px 85px;\n  padding: 0;\n  background: #fbfbfb;\n  width: 295px;\n  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.35);\n  -webkit-border-radius: 4px;\n}\n\nul.comments li.text {\n  position: relative;\n  padding: 8px;\n  text-align: left;\n  border-bottom: 1px solid #e0e0e0;\n}\n\nul.comments li.text.with_photo p {\n  margin-left: 40px;\n}\n\nul.comments li.text:last-child {\n  border-bottom: 0;\n}\n\nul.comments .profile_photo {\n  position: absolute;\n  width: 32px;\n  height: 32px;\n  margin-right: 8px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.35);\n  -webkit-border-radius: 4px;\n  background-color: #ccc;\n  background-size: cover;\n}\n\n#refresh_button{\n  display: block;\n  position: absolute;\n  top: 200px;\n  left: 10px;\n  width: 33px;\n  height: 33px;\n}\n\n#refresh_button > div {\n  position: relative;\n}\n\n#refresh_button img {\n  position: absolute;\n  top: 1px;\n}\n\n#refresh_button img.shadow {\n  top: 0;\n}\n\n.loading {\n  -webkit-animation: infinite-spinning 1.2s infinite linear;\n}\n\n@-webkit-keyframes infinite-spinning {\n  from {\n    -webkit-transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "Journey/Resources/WebView/example.json",
    "content": "[\n  {\n    \"id\": \"4f338c49f6b766128d011178\"\n  , \"userId\": \"4f338c49f6b766128d011175\"\n  , \"locationId\": \"4f34078be7cf662b9d09e2d2\"\n  , \"type\": \"ambient\"\n  , \"headline\": \"Joined Path\"\n  , \"subHeadline\": \"On February 9th, 2012\"\n  , \"thought\": \"this is cool\"\n  , \"state\": \"live\"\n  , \"shared\": false\n  , \"private\": false\n  , \"createdAt\": 1328778313\n  , \"photo\": {\n      \"iOSLowResURL\": \"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/1x.jpg\"\n    , \"iOSHighResURL\": \"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/2x.jpg\"\n    , \"originalURL\": \"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/original.jpg\"\n    }\n  , \"comments\": [\n      {\n        \"id\": \"4f34078de7cf662b9d09e2d8\"\n      , \"body\": \"Hello\"\n      , \"userId\": \"4f338c49f6b766128d011175\"\n      , \"locationId\": \"4f34078be7cf662b9d09e2d2\"\n      , \"momentId\": \"4f338c49f6b766128d011178\"\n      , \"state\": \"live\"\n      , \"createdAt\": 1328809735\n      }\n    , {\n        \"id\": \"4f343a20d2bfa87b380074de\"\n      , \"body\": \"Lorem Ipsum Dolor Sit Amet Consecteteur Adipscing Elit\"\n      , \"userId\": \"4f338c49f6b766128d011175\"\n      , \"locationId\": \"4f34078be7cf662b9d09e2d2\"\n      , \"state\": \"live\"\n      , \"createdAt\": 1328822815\n      }\n    ]\n  }\n,\n  {\n    \"id\": \"4f338c49f6b766128d011178\"\n  , \"userId\": \"4f338c49f6b766128d011175\"\n  , \"locationId\": \"4f34078be7cf662b9d09e2d2\"\n  , \"type\": \"ambient\"\n  , \"headline\": \"Joined Path\"\n  , \"subHeadline\": \"On February 9th, 2012\"\n  , \"thought\": \"this is cool\"\n  , \"state\": \"live\"\n  , \"shared\": false\n  , \"private\": false\n  , \"createdAt\": 1328778313\n  , \"photo\": {\n      \"iOSLowResURL\": \"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/1x.jpg\"\n    , \"iOSHighResURL\": \"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/2x.jpg\"\n    , \"originalURL\": \"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/original.jpg\"\n    }\n  , \"comments\": [\n      {\n        \"id\": \"4f34078de7cf662b9d09e2d8\"\n      , \"body\": \"Hello\"\n      , \"userId\": \"4f338c49f6b766128d011175\"\n      , \"locationId\": \"4f34078be7cf662b9d09e2d2\"\n      , \"momentId\": \"4f338c49f6b766128d011178\"\n      , \"state\": \"live\"\n      , \"createdAt\": 1328809735\n      }\n    , {\n        \"id\": \"4f343a20d2bfa87b380074de\"\n      , \"body\": \"Lorem Ipsum Dolor Sit Amet Consecteteur Adipscing Elit\"\n      , \"userId\": \"4f338c49f6b766128d011175\"\n      , \"locationId\": \"4f34078be7cf662b9d09e2d2\"\n      , \"state\": \"live\"\n      , \"createdAt\": 1328822815\n      }\n    ]\n  }\n]\n"
  },
  {
    "path": "Journey/Resources/WebView/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" />\n  <title>Path for Mac</title>\n  <link rel='stylesheet' type='text/css' media='screen' href='css/app.css' />\n</head>\n<body>\n  <div id=\"content\">\n    <div id=\"loading\">\n      <img class=\"icon\" src=\"images/loading.gif\" />\n      <p>Loading...</p>\n    </div>\n  </div>\n\n  <script id='moment_template' type='application/jst'>\n    <% if(['ambient', 'thought', 'photo', 'place', 'music'].indexOf(m.type) !== -1) { %>\n      <li class='moment <%- m.type %>' id='<%- m.id %>'>\n        <div class='user_photo'>\n          <% if(m.user && m.user.profilePhoto && m.user.profilePhoto.iOSLowResURL) { %>\n            <img src='<%= m.user.profilePhoto.iOSLowResURL %>' alt='' />\n          <% } %>\n        </div>\n        <% if(m.photo && m.photo.iOSLowResURL) { %>\n          <div class='moment_photo'>\n            <img src='<%= m.photo.iOSLowResURL %>' alt='' />\n          </div>\n        <% } %>\n        <% var ambientMoment = (m.type == 'ambient' || m.type == 'place' || m.type == 'music') && (m.headline || m.subHeadline); %>\n        <% if(ambientMoment) { %>\n          <div class='ambient text'>\n            <% if(m.subHeadline && m.subHeadline.length > 0) { %>\n              <p class='headline'><%= m.headline %></p>\n              <p class='sub_headline'><%= m.subHeadline %></p>\n            <% } else { %>\n              <p class='headline without_sub_headline'><%= m.headline %></p>\n            <% } %>\n          </div>\n        <% } %>\n\n        <% if (m.type == 'place') { %>\n          <div class='place dot'></div>\n        <% } else if (m.type == 'music') { %>\n          <div class='music dot'></div>\n        <% } else if(m.type == 'ambient' && m.subType == 'awake') { %>\n          <div class='awake dot'></div>\n        <% } else if(m.type == 'ambient' && m.subType == 'asleep') { %>\n          <div class='asleep dot'></div>\n        <% } else if(m.type == 'ambient' && m.subType == 'distance') { %>\n          <div class='plane dot'></div>\n        <% } else if(m.type == 'ambient' && m.subType == 'friend') { %>\n          <div class='friend dot'>\n            <% _.each(m.people, function(p) { %>\n              <% var displayProfilePhoto = p && p.profilePhoto && p.profilePhoto.iOSLowResURL; %>\n              <% if(displayProfilePhoto) { %>\n                <div style='background-image: url(<%= displayProfilePhoto %>)'></div>\n              <% } else { %>\n                <div style='background-image: url(images/user.png)'></div>\n              <% } %>\n            <% }); %>\n          </div>\n        <% } else { %>\n          <div class='null dot'></div>\n        <% } %>\n\n        <% var hasComments = m.comments && m.comments.length > 0; %>\n        <% if((!ambientMoment && m.headline) || hasComments) { %>\n          <div class='comments-tip'></div>\n          <ul class='comments'>\n            <% if(!ambientMoment && m.headline) { %>\n              <li class='text'>\n                <p class='body'><%= m.headline %></p>\n                <p class='created_at'>\n                  <abbr class=\"timeago\" title=\"<%= m.createdAt %>\"></abbr>\n                  <% if(m.location && m.location.city) { %>\n                    from <%- m.location.city %>\n                  <% } %>\n                </p>\n              </li>\n            <% } %>\n            <% if(hasComments) { %>\n              <% _.each(m.comments, function(c) { %>\n                <% var displayProfilePhoto = c.user && c.user.profilePhoto && c.user.profilePhoto.iOSLowResURL; %>\n                <li class='text<% if(displayProfilePhoto) { %> with_photo<% } %>'>\n                  <% if(displayProfilePhoto) { %>\n                    <div class='profile_photo' style='background-image: url(<%= c.user.profilePhoto.iOSLowResURL %>)'></div>\n                  <% } %>\n                  <p class='body'>\n                    <% if(c.user && c.user.firstName) { %>\n                      <strong><%- c.user.firstName %>:</strong>\n                    <% } %>\n                    <%= c.body %>\n                  </p>\n                  <p class='created_at'>\n                    <abbr class=\"timeago\" title=\"<%= c.createdAt %>\"></abbr>\n                    <% if(c.location && c.location.city) { %>\n                      from <%- c.location.city %>\n                    <% } %>\n                  </p>\n                </li>\n              <% }); %>\n            <% } %>\n          </ul>\n        <% } %>\n      </li>\n    <% } %>\n  </script>\n\n  <script id='feed_template' type='application/jst'>\n    <% if(coverPhoto) { %>\n      <div id=\"cover_photo\" style='background-image: url(<%= coverPhoto %>)'>\n        <div class='gradient'></div>\n        <% if(profilePhoto) { %>\n          <div id='user_profile_photo' style='background-image: url(<%= profilePhoto %>)'></div>\n        <% } %>\n        <div id=\"path_start\"></div>\n        <div id=\"path_journey\"></div>\n      </div>\n    <% } %>\n    <a href=\"#\" id=\"refresh_button\">\n      <div>\n        <img src=\"images/reload_shadow.png\" class=\"shadow\">\n        <img src=\"images/reload.png\" class=\"\">\n      </div>\n    </a>\n    <ul class='moments'>\n      <% _.each(moments, function(m) { %>\n        <%= _.template(Path.templates.moment, { m: m }) %>\n      <% }); %>\n    </ul>\n  </script>\n\n  <script id='example_json' type='application/json'>\n  </script>\n\n  <script src=\"vendor/jquery-1.7.1.js\"></script>\n  <script src=\"vendor/jquery.timeago.js\"></script>\n  <script src=\"vendor/underscore.js\"></script>\n  <script src=\"vendor/jquery.cycle.js\"></script>\n  <script src=\"js/app.js\"></script>\n  <script>\n    Path.init();\n    // Path.renderTemplate('feed', JSON.parse($('#example_json').text()));\n  </script>\n</body>\n</html>\n\n"
  },
  {
    "path": "Journey/Resources/WebView/js/app.js",
    "content": "(function() {\n  var self = window.Path = {\n    templates: {\n      feed: $('#feed_template').text()\n    , moment: $('#moment_template').text()\n    }\n\n  , refreshing: false\n\n  , init: function() {\n      Path.initialized = true;\n      Path.killScroll = false;\n      Path.loadOldMomentsComplete = false;\n\n      Path.handleWindowScroll();\n      window.setInterval(self.didClickRefreshButton, 15000);\n      $('.friend.dot').cycle({fx: 'fade'});\n    }\n\n  , renderTemplate: function(name, object, atTop) {\n      var $content = $('#content');\n      if($content.children('.moments').length == 0) {\n        $content.html(_.template(self.templates[name], object));\n        $('abbr.timeago').timeago();\n        $('.friend.dot').cycle({fx: 'fade'});\n        $('#refresh_button').click(self.didClickRefreshButton);\n      } else {\n        // just prepend moments\n        var $newMomentHTML = $(_.map(object.moments, function(m) {\n          return _.template(self.templates.moment, {m: m});\n        }).join(''));\n        $newMomentHTML.find('abbr.timeago').timeago();\n        $newMomentHTML.find('.friend.dot').cycle({fx: 'fade'});\n        if(atTop) {\n          $content.find('.moments').prepend($newMomentHTML);\n        } else {\n          Path.removeLoadingMessage();\n          $content.find('.moments').append($newMomentHTML);\n          Path.killScroll = false;\n        }\n      }\n      self.didCompleteRefresh();\n    }\n\n  , didClickRefreshButton: function() {\n      if(!self.refreshing) {\n        document.location.replace('#refresh_feed');\n        self.refreshing = true;\n        self.animateRefreshButton(true);\n      }\n      return false;\n    }\n\n  , didCompleteRefresh: function() {\n      self.removeHashFragment();\n      self.refreshing = false;\n      self.animateRefreshButton(false);\n    }\n\n  , animateRefreshButton: function(animate) {\n      var $imgs = $('#refresh_button img');\n      if(animate) {\n        $imgs.addClass('loading');\n      } else {\n        $imgs.removeClass('loading');\n      }\n    }\n\n  , handleWindowScroll: function() {\n      $(window).scroll(function() {\n        var scrollTop = $(window).scrollTop();\n        if(scrollTop + 200 >= ($(document).height() - $(window).height())) {\n          if(Path.killScroll === false && Path.loadOldMomentsComplete === false) {\n            Path.killScroll = true;\n            Path.showLoadingMessage();\n            document.location.replace('#load_old_moments');\n          }\n        } else if(scrollTop <= 243) {\n          document.location.replace('#clear_status_item_highlight');\n        }\n      });\n    }\n\n  , showLoadingMessage: function() {\n      $('ul.moments').append('<li class=\"moment fetching\"></li>');\n    }\n\n  , removeLoadingMessage: function() {\n      $('.moments .fetching').remove();\n    }\n\n  , removeHashFragment: function() {\n      document.location.replace('#_');\n    }\n\n  };\n}());\n\n"
  },
  {
    "path": "Journey/Resources/WebView/vendor/jquery-1.7.1.js",
    "content": "/*!\n * jQuery JavaScript Library v1.7.1\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n * Copyright 2011, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n *\n * Date: Mon Nov 21 21:11:03 2011 -0500\n */\n(function( window, undefined ) {\n\n// Use the correct document accordingly with window argument (sandbox)\nvar document = window.document,\n\tnavigator = window.navigator,\n\tlocation = window.location;\nvar jQuery = (function() {\n\n// Define a local copy of jQuery\nvar jQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// A simple way to check for HTML strings or ID strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\tquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,\n\n\t// Check if a string has a non-whitespace character in it\n\trnotwhite = /\\S/,\n\n\t// Used for trimming whitespace\n\ttrimLeft = /^\\s+/,\n\ttrimRight = /\\s+$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\n\t// Useragent RegExp\n\trwebkit = /(webkit)[ \\/]([\\w.]+)/,\n\tropera = /(opera)(?:.*version)?[ \\/]([\\w.]+)/,\n\trmsie = /(msie) ([\\w.]+)/,\n\trmozilla = /(mozilla)(?:.*? rv:([\\w.]+))?/,\n\n\t// Matches dashed string for camelizing\n\trdashAlpha = /-([a-z]|[0-9])/ig,\n\trmsPrefix = /^-ms-/,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn ( letter + \"\" ).toUpperCase();\n\t},\n\n\t// Keep a UserAgent string for use with jQuery.browser\n\tuserAgent = navigator.userAgent,\n\n\t// For matching the engine and version of the browser\n\tbrowserMatch,\n\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// The ready event handler\n\tDOMContentLoaded,\n\n\t// Save a reference to some core methods\n\ttoString = Object.prototype.toString,\n\thasOwn = Object.prototype.hasOwnProperty,\n\tpush = Array.prototype.push,\n\tslice = Array.prototype.slice,\n\ttrim = String.prototype.trim,\n\tindexOf = Array.prototype.indexOf,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {};\n\njQuery.fn = jQuery.prototype = {\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem, ret, doc;\n\n\t\t// Handle $(\"\"), $(null), or $(undefined)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\t\t}\n\n\t\t// The body element only exists once, optimize finding it\n\t\tif ( selector === \"body\" && !context && document.body ) {\n\t\t\tthis.context = document;\n\t\t\tthis[0] = document.body;\n\t\t\tthis.selector = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\t// Are we dealing with HTML string or an ID?\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = quickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Verify a match, and that no context was specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\t\t\t\t\tdoc = ( context ? context.ownerDocument || context : document );\n\n\t\t\t\t\t// If a single string is passed in and it's a single tag\n\t\t\t\t\t// just do a createElement and skip the rest\n\t\t\t\t\tret = rsingleTag.exec( selector );\n\n\t\t\t\t\tif ( ret ) {\n\t\t\t\t\t\tif ( jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\t\tselector = [ document.createElement( ret[1] ) ];\n\t\t\t\t\t\t\tjQuery.fn.attr.call( selector, context, true );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tselector = [ doc.createElement( ret[1] ) ];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = jQuery.buildFragment( [ match[1] ], [ doc ] );\n\t\t\t\t\t\tselector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.merge( this, selector );\n\n\t\t\t\t// HANDLE: $(\"#id\")\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The current version of jQuery being used\n\tjquery: \"1.7.1\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\t// The number of elements contained in the matched element set\n\tsize: function() {\n\t\treturn this.length;\n\t},\n\n\ttoArray: function() {\n\t\treturn slice.call( this, 0 );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems, name, selector ) {\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = this.constructor();\n\n\t\tif ( jQuery.isArray( elems ) ) {\n\t\t\tpush.apply( ret, elems );\n\n\t\t} else {\n\t\t\tjQuery.merge( ret, elems );\n\t\t}\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\tret.context = this.context;\n\n\t\tif ( name === \"find\" ) {\n\t\t\tret.selector = this.selector + ( this.selector ? \" \" : \"\" ) + selector;\n\t\t} else if ( name ) {\n\t\t\tret.selector = this.selector + \".\" + name + \"(\" + selector + \")\";\n\t\t}\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Attach the listeners\n\t\tjQuery.bindReady();\n\n\t\t// Add the callback\n\t\treadyList.add( fn );\n\n\t\treturn this;\n\t},\n\n\teq: function( i ) {\n\t\ti = +i;\n\t\treturn i === -1 ?\n\t\t\tthis.slice( i ) :\n\t\t\tthis.slice( i, i + 1 );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ),\n\t\t\t\"slice\", slice.call(arguments).join(\",\") );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\t\t// Either a released hold or an DOMready/load event and not yet ready\n\t\tif ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {\n\t\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\t\tif ( !document.body ) {\n\t\t\t\treturn setTimeout( jQuery.ready, 1 );\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.fireWith( document, [ jQuery ] );\n\n\t\t\t// Trigger any bound ready events\n\t\t\tif ( jQuery.fn.trigger ) {\n\t\t\t\tjQuery( document ).trigger( \"ready\" ).off( \"ready\" );\n\t\t\t}\n\t\t}\n\t},\n\n\tbindReady: function() {\n\t\tif ( readyList ) {\n\t\t\treturn;\n\t\t}\n\n\t\treadyList = jQuery.Callbacks( \"once memory\" );\n\n\t\t// Catch cases where $(document).ready() is called after the\n\t\t// browser event has already occurred.\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\treturn setTimeout( jQuery.ready, 1 );\n\t\t}\n\n\t\t// Mozilla, Opera and webkit nightlies currently support this event\n\t\tif ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", jQuery.ready, false );\n\n\t\t// If IE event model is used\n\t\t} else if ( document.attachEvent ) {\n\t\t\t// ensure firing before onload,\n\t\t\t// maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", DOMContentLoaded );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", jQuery.ready );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar toplevel = false;\n\n\t\t\ttry {\n\t\t\t\ttoplevel = window.frameElement == null;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( document.documentElement.doScroll && toplevel ) {\n\t\t\t\tdoScrollCheck();\n\t\t\t}\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\t// A crude way of determining if an object is a window\n\tisWindow: function( obj ) {\n\t\treturn obj && typeof obj === \"object\" && \"setInterval\" in obj;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\treturn obj == null ?\n\t\t\tString( obj ) :\n\t\t\tclass2type[ toString.call(obj) ] || \"object\";\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\n\t\tvar key;\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tfor ( var name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tparseJSON: function( data ) {\n\t\tif ( typeof data !== \"string\" || !data ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\tdata = jQuery.trim( data );\n\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\t// Make sure the incoming data is actual JSON\n\t\t// Logic borrowed from http://json.org/json2.js\n\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\treturn ( new Function( \"return \" + data ) )();\n\n\t\t}\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && rnotwhite.test( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( object, callback, args ) {\n\t\tvar name, i = 0,\n\t\t\tlength = object.length,\n\t\t\tisObj = length === undefined || jQuery.isFunction( object );\n\n\t\tif ( args ) {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in object ) {\n\t\t\t\t\tif ( callback.apply( object[ name ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.apply( object[ i++ ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in object ) {\n\t\t\t\t\tif ( callback.call( object[ name ], name, object[ name ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn object;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: trim ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\ttrim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\ttext.toString().replace( trimLeft, \"\" ).replace( trimRight, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( array, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( array != null ) {\n\t\t\t// The window, strings (and functions) also have 'length'\n\t\t\t// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930\n\t\t\tvar type = jQuery.type( array );\n\n\t\t\tif ( array.length == null || type === \"string\" || type === \"function\" || type === \"regexp\" || jQuery.isWindow( array ) ) {\n\t\t\t\tpush.call( ret, array );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( ret, array );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, array, i ) {\n\t\tvar len;\n\n\t\tif ( array ) {\n\t\t\tif ( indexOf ) {\n\t\t\t\treturn indexOf.call( array, elem, i );\n\t\t\t}\n\n\t\t\tlen = array.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in array && array[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar i = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof second.length === \"number\" ) {\n\t\t\tfor ( var l = second.length; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar ret = [], retVal;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( var i = 0, length = elems.length; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value, key, ret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\t// jquery objects are treated as arrays\n\t\t\tisArray = elems instanceof jQuery || length !== undefined && typeof length === \"number\" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( key in elems ) {\n\t\t\t\tvalue = callback( elems[ key ], key, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn ret.concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tif ( typeof context === \"string\" ) {\n\t\t\tvar tmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\tvar args = slice.call( arguments, 2 ),\n\t\t\tproxy = function() {\n\t\t\t\treturn fn.apply( context, args.concat( slice.call( arguments ) ) );\n\t\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Mutifunctional method to get and set values to a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, key, value, exec, fn, pass ) {\n\t\tvar length = elems.length;\n\n\t\t// Setting many attributes\n\t\tif ( typeof key === \"object\" ) {\n\t\t\tfor ( var k in key ) {\n\t\t\t\tjQuery.access( elems, k, key[k], exec, fn, value );\n\t\t\t}\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Setting one attribute\n\t\tif ( value !== undefined ) {\n\t\t\t// Optionally, function values get executed if exec is true\n\t\t\texec = !pass && exec && jQuery.isFunction(value);\n\n\t\t\tfor ( var i = 0; i < length; i++ ) {\n\t\t\t\tfn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );\n\t\t\t}\n\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Getting an attribute\n\t\treturn length ? fn( elems[0], key ) : undefined;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// Use of jQuery.browser is frowned upon.\n\t// More details: http://docs.jquery.com/Utilities/jQuery.browser\n\tuaMatch: function( ua ) {\n\t\tua = ua.toLowerCase();\n\n\t\tvar match = rwebkit.exec( ua ) ||\n\t\t\tropera.exec( ua ) ||\n\t\t\trmsie.exec( ua ) ||\n\t\t\tua.indexOf(\"compatible\") < 0 && rmozilla.exec( ua ) ||\n\t\t\t[];\n\n\t\treturn { browser: match[1] || \"\", version: match[2] || \"0\" };\n\t},\n\n\tsub: function() {\n\t\tfunction jQuerySub( selector, context ) {\n\t\t\treturn new jQuerySub.fn.init( selector, context );\n\t\t}\n\t\tjQuery.extend( true, jQuerySub, this );\n\t\tjQuerySub.superclass = this;\n\t\tjQuerySub.fn = jQuerySub.prototype = this();\n\t\tjQuerySub.fn.constructor = jQuerySub;\n\t\tjQuerySub.sub = this.sub;\n\t\tjQuerySub.fn.init = function init( selector, context ) {\n\t\t\tif ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n\t\t\t\tcontext = jQuerySub( context );\n\t\t\t}\n\n\t\t\treturn jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n\t\t};\n\t\tjQuerySub.fn.init.prototype = jQuerySub.fn;\n\t\tvar rootjQuerySub = jQuerySub(document);\n\t\treturn jQuerySub;\n\t},\n\n\tbrowser: {}\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nbrowserMatch = jQuery.uaMatch( userAgent );\nif ( browserMatch.browser ) {\n\tjQuery.browser[ browserMatch.browser ] = true;\n\tjQuery.browser.version = browserMatch.version;\n}\n\n// Deprecated, use jQuery.browser.webkit instead\nif ( jQuery.browser.webkit ) {\n\tjQuery.browser.safari = true;\n}\n\n// IE doesn't match non-breaking spaces with \\s\nif ( rnotwhite.test( \"\\xA0\" ) ) {\n\ttrimLeft = /^[\\s\\xA0]+/;\n\ttrimRight = /[\\s\\xA0]+$/;\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n\n// Cleanup functions for the document ready method\nif ( document.addEventListener ) {\n\tDOMContentLoaded = function() {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\t\tjQuery.ready();\n\t};\n\n} else if ( document.attachEvent ) {\n\tDOMContentLoaded = function() {\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", DOMContentLoaded );\n\t\t\tjQuery.ready();\n\t\t}\n\t};\n}\n\n// The DOM ready check for Internet Explorer\nfunction doScrollCheck() {\n\tif ( jQuery.isReady ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\t// If IE is used, use the trick by Diego Perini\n\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\tdocument.documentElement.doScroll(\"left\");\n\t} catch(e) {\n\t\tsetTimeout( doScrollCheck, 1 );\n\t\treturn;\n\t}\n\n\t// and execute any waiting functions\n\tjQuery.ready();\n}\n\nreturn jQuery;\n\n})();\n\n\n// String to Object flags format cache\nvar flagsCache = {};\n\n// Convert String-formatted flags into Object-formatted ones and store in cache\nfunction createFlags( flags ) {\n\tvar object = flagsCache[ flags ] = {},\n\t\ti, length;\n\tflags = flags.split( /\\s+/ );\n\tfor ( i = 0, length = flags.length; i < length; i++ ) {\n\t\tobject[ flags[i] ] = true;\n\t}\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\tflags:\tan optional list of space-separated flags that will change how\n *\t\t\tthe callback list behaves\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible flags:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( flags ) {\n\n\t// Convert flags from String-formatted to Object-formatted\n\t// (we check in cache first)\n\tflags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};\n\n\tvar // Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = [],\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Add one or several callbacks to the list\n\t\tadd = function( args ) {\n\t\t\tvar i,\n\t\t\t\tlength,\n\t\t\t\telem,\n\t\t\t\ttype,\n\t\t\t\tactual;\n\t\t\tfor ( i = 0, length = args.length; i < length; i++ ) {\n\t\t\t\telem = args[ i ];\n\t\t\t\ttype = jQuery.type( elem );\n\t\t\t\tif ( type === \"array\" ) {\n\t\t\t\t\t// Inspect recursively\n\t\t\t\t\tadd( elem );\n\t\t\t\t} else if ( type === \"function\" ) {\n\t\t\t\t\t// Add if not in unique mode and callback is not in\n\t\t\t\t\tif ( !flags.unique || !self.has( elem ) ) {\n\t\t\t\t\t\tlist.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Fire callbacks\n\t\tfire = function( context, args ) {\n\t\t\targs = args || [];\n\t\t\tmemory = !flags.memory || [ context, args ];\n\t\t\tfiring = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {\n\t\t\t\t\tmemory = true; // Mark as halted\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( !flags.once ) {\n\t\t\t\t\tif ( stack && stack.length ) {\n\t\t\t\t\t\tmemory = stack.shift();\n\t\t\t\t\t\tself.fireWith( memory[ 0 ], memory[ 1 ] );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory === true ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t} else {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tvar length = list.length;\n\t\t\t\t\tadd( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away, unless previous\n\t\t\t\t\t// firing was halted (stopOnFalse)\n\t\t\t\t\t} else if ( memory && memory !== true ) {\n\t\t\t\t\t\tfiringStart = length;\n\t\t\t\t\t\tfire( memory[ 0 ], memory[ 1 ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tvar args = arguments,\n\t\t\t\t\t\targIndex = 0,\n\t\t\t\t\t\targLength = args.length;\n\t\t\t\t\tfor ( ; argIndex < argLength ; argIndex++ ) {\n\t\t\t\t\t\tfor ( var i = 0; i < list.length; i++ ) {\n\t\t\t\t\t\t\tif ( args[ argIndex ] === list[ i ] ) {\n\t\t\t\t\t\t\t\t// Handle firingIndex and firingLength\n\t\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\t\tif ( i <= firingLength ) {\n\t\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t\t\tif ( i <= firingIndex ) {\n\t\t\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Remove the element\n\t\t\t\t\t\t\t\tlist.splice( i--, 1 );\n\t\t\t\t\t\t\t\t// If we have some unicity property then\n\t\t\t\t\t\t\t\t// we only need to do this once\n\t\t\t\t\t\t\t\tif ( flags.unique ) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Control if a given callback is in the list\n\t\t\thas: function( fn ) {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tvar i = 0,\n\t\t\t\t\t\tlength = list.length;\n\t\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\t\tif ( fn === list[ i ] ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory || memory === true ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tif ( !flags.once ) {\n\t\t\t\t\t\t\tstack.push( [ context, args ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( !( flags.once && memory ) ) {\n\t\t\t\t\t\tfire( context, args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!memory;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\n\n\nvar // Static reference to slice\n\tsliceDeferred = [].slice;\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar doneList = jQuery.Callbacks( \"once memory\" ),\n\t\t\tfailList = jQuery.Callbacks( \"once memory\" ),\n\t\t\tprogressList = jQuery.Callbacks( \"memory\" ),\n\t\t\tstate = \"pending\",\n\t\t\tlists = {\n\t\t\t\tresolve: doneList,\n\t\t\t\treject: failList,\n\t\t\t\tnotify: progressList\n\t\t\t},\n\t\t\tpromise = {\n\t\t\t\tdone: doneList.add,\n\t\t\t\tfail: failList.add,\n\t\t\t\tprogress: progressList.add,\n\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\n\t\t\t\t// Deprecated\n\t\t\t\tisResolved: doneList.fired,\n\t\t\t\tisRejected: failList.fired,\n\n\t\t\t\tthen: function( doneCallbacks, failCallbacks, progressCallbacks ) {\n\t\t\t\t\tdeferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tpipe: function( fnDone, fnFail, fnProgress ) {\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( {\n\t\t\t\t\t\t\tdone: [ fnDone, \"resolve\" ],\n\t\t\t\t\t\t\tfail: [ fnFail, \"reject\" ],\n\t\t\t\t\t\t\tprogress: [ fnProgress, \"notify\" ]\n\t\t\t\t\t\t}, function( handler, data ) {\n\t\t\t\t\t\t\tvar fn = data[ 0 ],\n\t\t\t\t\t\t\t\taction = data[ 1 ],\n\t\t\t\t\t\t\t\treturned;\n\t\t\t\t\t\t\tif ( jQuery.isFunction( fn ) ) {\n\t\t\t\t\t\t\t\tdeferred[ handler ](function() {\n\t\t\t\t\t\t\t\t\treturned = fn.apply( this, arguments );\n\t\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\t\treturned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === deferred ? newDefer : this, [ returned ] );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdeferred[ handler ]( newDefer[ action ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\tif ( obj == null ) {\n\t\t\t\t\t\tobj = promise;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor ( var key in promise ) {\n\t\t\t\t\t\t\tobj[ key ] = promise[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn obj;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = promise.promise({}),\n\t\t\tkey;\n\n\t\tfor ( key in lists ) {\n\t\t\tdeferred[ key ] = lists[ key ].fire;\n\t\t\tdeferred[ key + \"With\" ] = lists[ key ].fireWith;\n\t\t}\n\n\t\t// Handle state\n\t\tdeferred.done( function() {\n\t\t\tstate = \"resolved\";\n\t\t}, failList.disable, progressList.lock ).fail( function() {\n\t\t\tstate = \"rejected\";\n\t\t}, doneList.disable, progressList.lock );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( firstParam ) {\n\t\tvar args = sliceDeferred.call( arguments, 0 ),\n\t\t\ti = 0,\n\t\t\tlength = args.length,\n\t\t\tpValues = new Array( length ),\n\t\t\tcount = length,\n\t\t\tpCount = length,\n\t\t\tdeferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?\n\t\t\t\tfirstParam :\n\t\t\t\tjQuery.Deferred(),\n\t\t\tpromise = deferred.promise();\n\t\tfunction resolveFunc( i ) {\n\t\t\treturn function( value ) {\n\t\t\t\targs[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdeferred.resolveWith( deferred, args );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tfunction progressFunc( i ) {\n\t\t\treturn function( value ) {\n\t\t\t\tpValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;\n\t\t\t\tdeferred.notifyWith( promise, pValues );\n\t\t\t};\n\t\t}\n\t\tif ( length > 1 ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {\n\t\t\t\t\targs[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );\n\t\t\t\t} else {\n\t\t\t\t\t--count;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !count ) {\n\t\t\t\tdeferred.resolveWith( deferred, args );\n\t\t\t}\n\t\t} else if ( deferred !== firstParam ) {\n\t\t\tdeferred.resolveWith( deferred, length ? [ firstParam ] : [] );\n\t\t}\n\t\treturn promise;\n\t}\n});\n\n\n\n\njQuery.support = (function() {\n\n\tvar support,\n\t\tall,\n\t\ta,\n\t\tselect,\n\t\topt,\n\t\tinput,\n\t\tmarginDiv,\n\t\tfragment,\n\t\ttds,\n\t\tevents,\n\t\teventName,\n\t\ti,\n\t\tisSupported,\n\t\tdiv = document.createElement( \"div\" ),\n\t\tdocumentElement = document.documentElement;\n\n\t// Preliminary tests\n\tdiv.setAttribute(\"className\", \"t\");\n\tdiv.innerHTML = \"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";\n\n\tall = div.getElementsByTagName( \"*\" );\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// Can't get basic test support\n\tif ( !all || !all.length || !a ) {\n\t\treturn {};\n\t}\n\n\t// First batch of supports tests\n\tselect = document.createElement( \"select\" );\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName( \"input\" )[ 0 ];\n\n\tsupport = {\n\t\t// IE strips leading whitespace when .innerHTML is used\n\t\tleadingWhitespace: ( div.firstChild.nodeType === 3 ),\n\n\t\t// Make sure that tbody elements aren't automatically inserted\n\t\t// IE will insert them into empty tables\n\t\ttbody: !div.getElementsByTagName(\"tbody\").length,\n\n\t\t// Make sure that link elements get serialized correctly by innerHTML\n\t\t// This requires a wrapper element in IE\n\t\thtmlSerialize: !!div.getElementsByTagName(\"link\").length,\n\n\t\t// Get the style information from getAttribute\n\t\t// (IE uses .cssText instead)\n\t\tstyle: /top/.test( a.getAttribute(\"style\") ),\n\n\t\t// Make sure that URLs aren't manipulated\n\t\t// (IE normalizes it by default)\n\t\threfNormalized: ( a.getAttribute(\"href\") === \"/a\" ),\n\n\t\t// Make sure that element opacity exists\n\t\t// (IE uses filter instead)\n\t\t// Use a regex to work around a WebKit issue. See #5145\n\t\topacity: /^0.55/.test( a.style.opacity ),\n\n\t\t// Verify style float existence\n\t\t// (IE uses styleFloat instead of cssFloat)\n\t\tcssFloat: !!a.style.cssFloat,\n\n\t\t// Make sure that if no value is specified for a checkbox\n\t\t// that it defaults to \"on\".\n\t\t// (WebKit defaults to \"\" instead)\n\t\tcheckOn: ( input.value === \"on\" ),\n\n\t\t// Make sure that a selected-by-default option has a working selected property.\n\t\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\t\toptSelected: opt.selected,\n\n\t\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\t\tgetSetAttribute: div.className !== \"t\",\n\n\t\t// Tests for enctype support on a form(#6743)\n\t\tenctype: !!document.createElement(\"form\").enctype,\n\n\t\t// Makes sure cloning an html5 element does not cause problems\n\t\t// Where outerHTML is undefined, this still works\n\t\thtml5Clone: document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\",\n\n\t\t// Will be defined later\n\t\tsubmitBubbles: true,\n\t\tchangeBubbles: true,\n\t\tfocusinBubbles: false,\n\t\tdeleteExpando: true,\n\t\tnoCloneEvent: true,\n\t\tinlineBlockNeedsLayout: false,\n\t\tshrinkWrapBlocks: false,\n\t\treliableMarginRight: true\n\t};\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Test to see if it's possible to delete an expando from an element\n\t// Fails in Internet Explorer\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\tif ( !div.addEventListener && div.attachEvent && div.fireEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\t// Cloning a node shouldn't copy over any\n\t\t\t// bound event handlers (IE does this)\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\t\tdiv.cloneNode( true ).fireEvent( \"onclick\" );\n\t}\n\n\t// Check if a radio maintains its value\n\t// after being appended to the DOM\n\tinput = document.createElement(\"input\");\n\tinput.value = \"t\";\n\tinput.setAttribute(\"type\", \"radio\");\n\tsupport.radioValue = input.value === \"t\";\n\n\tinput.setAttribute(\"checked\", \"checked\");\n\tdiv.appendChild( input );\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( div.lastChild );\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\tfragment.removeChild( input );\n\tfragment.appendChild( div );\n\n\tdiv.innerHTML = \"\";\n\n\t// Check if div with explicit width and no margin-right incorrectly\n\t// gets computed margin-right based on width of container. For more\n\t// info see bug #3333\n\t// Fails in WebKit before Feb 2011 nightlies\n\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\tif ( window.getComputedStyle ) {\n\t\tmarginDiv = document.createElement( \"div\" );\n\t\tmarginDiv.style.width = \"0\";\n\t\tmarginDiv.style.marginRight = \"0\";\n\t\tdiv.style.width = \"2px\";\n\t\tdiv.appendChild( marginDiv );\n\t\tsupport.reliableMarginRight =\n\t\t\t( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;\n\t}\n\n\t// Technique from Juriy Zaytsev\n\t// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/\n\t// We only care about the case where non-standard event systems\n\t// are used, namely in IE. Short-circuiting here helps us to\n\t// avoid an eval call (in setAttribute) which can cause CSP\n\t// to go haywire. See: https://developer.mozilla.org/en/Security/CSP\n\tif ( div.attachEvent ) {\n\t\tfor( i in {\n\t\t\tsubmit: 1,\n\t\t\tchange: 1,\n\t\t\tfocusin: 1\n\t\t}) {\n\t\t\teventName = \"on\" + i;\n\t\t\tisSupported = ( eventName in div );\n\t\t\tif ( !isSupported ) {\n\t\t\t\tdiv.setAttribute( eventName, \"return;\" );\n\t\t\t\tisSupported = ( typeof div[ eventName ] === \"function\" );\n\t\t\t}\n\t\t\tsupport[ i + \"Bubbles\" ] = isSupported;\n\t\t}\n\t}\n\n\tfragment.removeChild( div );\n\n\t// Null elements to avoid leaks in IE\n\tfragment = select = opt = marginDiv = div = input = null;\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, outer, inner, table, td, offsetSupport,\n\t\t\tconMarginTop, ptlm, vb, style, html,\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tconMarginTop = 1;\n\t\tptlm = \"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\";\n\t\tvb = \"visibility:hidden;border:0;\";\n\t\tstyle = \"style='\" + ptlm + \"border:5px solid #000;padding:0;'\";\n\t\thtml = \"<div \" + style + \"><div></div></div>\" +\n\t\t\t\"<table \" + style + \" cellpadding='0' cellspacing='0'>\" +\n\t\t\t\"<tr><td></td></tr></table>\";\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = vb + \"width:0;height:0;position:static;top:0;margin-top:\" + conMarginTop + \"px\";\n\t\tbody.insertBefore( container, body.firstChild );\n\n\t\t// Construct the test element\n\t\tdiv = document.createElement(\"div\");\n\t\tcontainer.appendChild( div );\n\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\t// (only IE 8 fails this test)\n\t\tdiv.innerHTML = \"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName( \"td\" );\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\t// (IE <= 8 fail this test)\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Figure out if the W3C box model works as expected\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.width = div.style.paddingLeft = \"1px\";\n\t\tjQuery.boxModel = support.boxModel = div.offsetWidth === 2;\n\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\t// (IE < 8 does this)\n\t\t\tdiv.style.display = \"inline\";\n\t\t\tdiv.style.zoom = 1;\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );\n\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\t// (IE 6 does this)\n\t\t\tdiv.style.display = \"\";\n\t\t\tdiv.innerHTML = \"<div style='width:4px;'></div>\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 2 );\n\t\t}\n\n\t\tdiv.style.cssText = ptlm + vb;\n\t\tdiv.innerHTML = html;\n\n\t\touter = div.firstChild;\n\t\tinner = outer.firstChild;\n\t\ttd = outer.nextSibling.firstChild.firstChild;\n\n\t\toffsetSupport = {\n\t\t\tdoesNotAddBorder: ( inner.offsetTop !== 5 ),\n\t\t\tdoesAddBorderForTableAndCells: ( td.offsetTop === 5 )\n\t\t};\n\n\t\tinner.style.position = \"fixed\";\n\t\tinner.style.top = \"20px\";\n\n\t\t// safari subtracts parent border width here which is 5px\n\t\toffsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );\n\t\tinner.style.position = inner.style.top = \"\";\n\n\t\touter.style.overflow = \"hidden\";\n\t\touter.style.position = \"relative\";\n\n\t\toffsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );\n\t\toffsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );\n\n\t\tbody.removeChild( container );\n\t\tdiv  = container = null;\n\n\t\tjQuery.extend( support, offsetSupport );\n\t});\n\n\treturn support;\n})();\n\n\n\n\nvar rbrace = /^(?:\\{.*\\}|\\[.*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\njQuery.extend({\n\tcache: {},\n\n\t// Please use with caution\n\tuuid: 0,\n\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( jQuery.fn.jquery + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n\t\t\"applet\": true\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar privateCache, thisCache, ret,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tgetByName = typeof name === \"string\",\n\n\t\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t\t// can't GC object references properly across the DOM-JS boundary\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t\t// attached directly to the object so GC can occur automatically\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,\n\t\t\tisEvents = name === \"events\";\n\n\t\t// Avoid doing any more work than we need to when trying to get data on an\n\t\t// object that has no data at all\n\t\tif ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !id ) {\n\t\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t\t// ends up in the global cache\n\t\t\tif ( isNode ) {\n\t\t\t\telem[ internalKey ] = id = ++jQuery.uuid;\n\t\t\t} else {\n\t\t\t\tid = internalKey;\n\t\t\t}\n\t\t}\n\n\t\tif ( !cache[ id ] ) {\n\t\t\tcache[ id ] = {};\n\n\t\t\t// Avoids exposing jQuery metadata on plain JS objects when the object\n\t\t\t// is serialized using JSON.stringify\n\t\t\tif ( !isNode ) {\n\t\t\t\tcache[ id ].toJSON = jQuery.noop;\n\t\t\t}\n\t\t}\n\n\t\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t\t// shallow copied over onto the existing cache\n\t\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\t\tif ( pvt ) {\n\t\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t\t} else {\n\t\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t\t}\n\t\t}\n\n\t\tprivateCache = thisCache = cache[ id ];\n\n\t\t// jQuery data() is stored in a separate object inside the object's internal data\n\t\t// cache in order to avoid key collisions between internal data and user-defined\n\t\t// data.\n\t\tif ( !pvt ) {\n\t\t\tif ( !thisCache.data ) {\n\t\t\t\tthisCache.data = {};\n\t\t\t}\n\n\t\t\tthisCache = thisCache.data;\n\t\t}\n\n\t\tif ( data !== undefined ) {\n\t\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t\t}\n\n\t\t// Users should not attempt to inspect the internal events object using jQuery.data,\n\t\t// it is undocumented and subject to change. But does anyone listen? No.\n\t\tif ( isEvents && !thisCache[ name ] ) {\n\t\t\treturn privateCache.events;\n\t\t}\n\n\t\t// Check for both converted-to-camel and non-converted data property names\n\t\t// If a data property was specified\n\t\tif ( getByName ) {\n\n\t\t\t// First Try to find as-is property data\n\t\t\tret = thisCache[ name ];\n\n\t\t\t// Test for null|undefined property data\n\t\t\tif ( ret == null ) {\n\n\t\t\t\t// Try to find the camelCased property\n\t\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t\t}\n\t\t} else {\n\t\t\tret = thisCache;\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tremoveData: function( elem, name, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar thisCache, i, l,\n\n\t\t\t// Reference to internal data cache key\n\t\t\tinternalKey = jQuery.expando,\n\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// See jQuery.data for more information\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t\t// See jQuery.data for more information\n\t\t\tid = isNode ? elem[ internalKey ] : internalKey;\n\n\t\t// If there is already no cache entry for this object, there is no\n\t\t// purpose in continuing\n\t\tif ( !cache[ id ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( name ) {\n\n\t\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\t\tif ( thisCache ) {\n\n\t\t\t\t// Support array or space separated string names for data keys\n\t\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tname = name.split( \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0, l = name.length; i < l; i++ ) {\n\t\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t\t}\n\n\t\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t\t// and let the cache object itself get destroyed\n\t\t\t\tif ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// See jQuery.data for more information\n\t\tif ( !pvt ) {\n\t\t\tdelete cache[ id ].data;\n\n\t\t\t// Don't destroy the parent cache unless the internal data object\n\t\t\t// had been the only thing left in it\n\t\t\tif ( !isEmptyDataObject(cache[ id ]) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Browsers that fail expando deletion also refuse to delete expandos on\n\t\t// the window, but it will allow it on all other JS objects; other browsers\n\t\t// don't care\n\t\t// Ensure that `cache` is not a window object #10080\n\t\tif ( jQuery.support.deleteExpando || !cache.setInterval ) {\n\t\t\tdelete cache[ id ];\n\t\t} else {\n\t\t\tcache[ id ] = null;\n\t\t}\n\n\t\t// We destroyed the cache and need to eliminate the expando on the node to avoid\n\t\t// false lookups in the cache for entries that no longer exist\n\t\tif ( isNode ) {\n\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t// we must handle all of these cases\n\t\t\tif ( jQuery.support.deleteExpando ) {\n\t\t\t\tdelete elem[ internalKey ];\n\t\t\t} else if ( elem.removeAttribute ) {\n\t\t\t\telem.removeAttribute( internalKey );\n\t\t\t} else {\n\t\t\t\telem[ internalKey ] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn jQuery.data( elem, name, data, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\tif ( elem.nodeName ) {\n\t\t\tvar match = jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t\tif ( match ) {\n\t\t\t\treturn !(match === true || elem.getAttribute(\"classid\") !== match);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar parts, attr, name,\n\t\t\tdata = null;\n\n\t\tif ( typeof key === \"undefined\" ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( this[0] );\n\n\t\t\t\tif ( this[0].nodeType === 1 && !jQuery._data( this[0], \"parsedAttrs\" ) ) {\n\t\t\t\t\tattr = this[0].attributes;\n\t\t\t\t\tfor ( var i = 0, l = attr.length; i < l; i++ ) {\n\t\t\t\t\t\tname = attr[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.substring(5) );\n\n\t\t\t\t\t\t\tdataAttr( this[0], name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( this[0], \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t} else if ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\tparts = key.split(\".\");\n\t\tparts[1] = parts[1] ? \".\" + parts[1] : \"\";\n\n\t\tif ( value === undefined ) {\n\t\t\tdata = this.triggerHandler(\"getData\" + parts[1] + \"!\", [parts[0]]);\n\n\t\t\t// Try to fetch any internally stored data first\n\t\t\tif ( data === undefined && this.length ) {\n\t\t\t\tdata = jQuery.data( this[0], key );\n\t\t\t\tdata = dataAttr( this[0], key, data );\n\t\t\t}\n\n\t\t\treturn data === undefined && parts[1] ?\n\t\t\t\tthis.data( parts[0] ) :\n\t\t\t\tdata;\n\n\t\t} else {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar self = jQuery( this ),\n\t\t\t\t\targs = [ parts[0], value ];\n\n\t\t\t\tself.triggerHandler( \"setData\" + parts[1] + \"!\", args );\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t\tself.triggerHandler( \"changeData\" + parts[1] + \"!\", args );\n\t\t\t});\n\t\t}\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\tdata === \"false\" ? false :\n\t\t\t\tdata === \"null\" ? null :\n\t\t\t\tjQuery.isNumeric( data ) ? parseFloat( data ) :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tfor ( var name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n\n\n\nfunction handleQueueMarkDefer( elem, type, src ) {\n\tvar deferDataKey = type + \"defer\",\n\t\tqueueDataKey = type + \"queue\",\n\t\tmarkDataKey = type + \"mark\",\n\t\tdefer = jQuery._data( elem, deferDataKey );\n\tif ( defer &&\n\t\t( src === \"queue\" || !jQuery._data(elem, queueDataKey) ) &&\n\t\t( src === \"mark\" || !jQuery._data(elem, markDataKey) ) ) {\n\t\t// Give room for hard-coded callbacks to fire first\n\t\t// and eventually mark/queue something else on the element\n\t\tsetTimeout( function() {\n\t\t\tif ( !jQuery._data( elem, queueDataKey ) &&\n\t\t\t\t!jQuery._data( elem, markDataKey ) ) {\n\t\t\t\tjQuery.removeData( elem, deferDataKey, true );\n\t\t\t\tdefer.fire();\n\t\t\t}\n\t\t}, 0 );\n\t}\n}\n\njQuery.extend({\n\n\t_mark: function( elem, type ) {\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"mark\";\n\t\t\tjQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );\n\t\t}\n\t},\n\n\t_unmark: function( force, elem, type ) {\n\t\tif ( force !== true ) {\n\t\t\ttype = elem;\n\t\t\telem = force;\n\t\t\tforce = false;\n\t\t}\n\t\tif ( elem ) {\n\t\t\ttype = type || \"fx\";\n\t\t\tvar key = type + \"mark\",\n\t\t\t\tcount = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );\n\t\t\tif ( count ) {\n\t\t\t\tjQuery._data( elem, key, count );\n\t\t\t} else {\n\t\t\t\tjQuery.removeData( elem, key, true );\n\t\t\t\thandleQueueMarkDefer( elem, type, \"mark\" );\n\t\t\t}\n\t\t}\n\t},\n\n\tqueue: function( elem, type, data ) {\n\t\tvar q;\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tq = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !q || jQuery.isArray(data) ) {\n\t\t\t\t\tq = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tq.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn q || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tfn = queue.shift(),\n\t\t\thooks = {};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\tjQuery._data( elem, type + \".run\", hooks );\n\t\t\tfn.call( elem, function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t}, hooks );\n\t\t}\n\n\t\tif ( !queue.length ) {\n\t\t\tjQuery.removeData( elem, type + \"queue \" + type + \".run\", true );\n\t\t\thandleQueueMarkDefer( elem, type, \"queue\" );\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t}\n\n\t\tif ( data === undefined ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, object ) {\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobject = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\t\tvar defer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = elements.length,\n\t\t\tcount = 1,\n\t\t\tdeferDataKey = type + \"defer\",\n\t\t\tqueueDataKey = type + \"queue\",\n\t\t\tmarkDataKey = type + \"mark\",\n\t\t\ttmp;\n\t\tfunction resolve() {\n\t\t\tif ( !( --count ) ) {\n\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t}\n\t\t}\n\t\twhile( i-- ) {\n\t\t\tif (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||\n\t\t\t\t\t( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||\n\t\t\t\t\t\tjQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&\n\t\t\t\t\tjQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( \"once memory\" ), true ) )) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise();\n\t}\n});\n\n\n\n\nvar rclass = /[\\n\\t\\r]/g,\n\trspace = /\\s+/,\n\trreturn = /\\r/g,\n\trtype = /^(?:button|input)$/i,\n\trfocusable = /^(?:button|input|object|select|textarea)$/i,\n\trclickable = /^a(?:rea)?$/i,\n\trboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tnodeHook, boolHook, fixSpecified;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, name, value, true, jQuery.attr );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, name, value, true, jQuery.prop );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classNames, i, l, elem,\n\t\t\tsetClass, c, cl;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\n\t\tif ( value && typeof value === \"string\" ) {\n\t\t\tclassNames = value.split( rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !elem.className && classNames.length === 1 ) {\n\t\t\t\t\t\telem.className = value;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetClass = \" \" + elem.className + \" \";\n\n\t\t\t\t\t\tfor ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\t\t\t\t\t\t\tif ( !~setClass.indexOf( \" \" + classNames[ c ] + \" \" ) ) {\n\t\t\t\t\t\t\t\tsetClass += classNames[ c ] + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telem.className = jQuery.trim( setClass );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, i, l, elem, className, c, cl;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\n\t\tif ( (value && typeof value === \"string\") || value === undefined ) {\n\t\t\tclassNames = ( value || \"\" ).split( rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.nodeType === 1 && elem.className ) {\n\t\t\t\t\tif ( value ) {\n\t\t\t\t\t\tclassName = (\" \" + elem.className + \" \").replace( rclass, \" \" );\n\t\t\t\t\t\tfor ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\t\t\t\t\t\t\tclassName = className.replace(\" \" + classNames[ c ] + \" \", \" \");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telem.className = jQuery.trim( className );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.className = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisBool = typeof stateVal === \"boolean\";\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tstate = stateVal,\n\t\t\t\t\tclassNames = value.split( rspace );\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space seperated list\n\t\t\t\t\tstate = isBool ? state : !self.hasClass( className );\n\t\t\t\t\tself[ state ? \"addClass\" : \"removeClass\" ]( className );\n\t\t\t\t}\n\n\t\t\t} else if ( type === \"undefined\" || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// toggle whole className\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar self = jQuery(this), val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, self.val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// attributes.value is undefined in Blackberry 4.7 but\n\t\t\t\t// uses .value. See #6932\n\t\t\t\tvar val = elem.attributes.value;\n\t\t\t\treturn !val || val.specified ? elem.value : elem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, i, max, option,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tvalues = [],\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tone = elem.type === \"select-one\";\n\n\t\t\t\t// Nothing was selected\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\ti = one ? index : 0;\n\t\t\t\tmax = one ? index + 1 : options.length;\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\tif ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null) &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" )) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fixes Bug #2551 -- select.val() broken in IE after form.reset()\n\t\t\t\tif ( one && !values.length && options.length ) {\n\t\t\t\t\treturn jQuery( options[ index ] ).val();\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar values = jQuery.makeArray( value );\n\n\t\t\t\tjQuery(elem).find(\"option\").each(function() {\n\t\t\t\t\tthis.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n\t\t\t\t});\n\n\t\t\t\tif ( !values.length ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattrFn: {\n\t\tval: true,\n\t\tcss: true,\n\t\thtml: true,\n\t\ttext: true,\n\t\tdata: true,\n\t\twidth: true,\n\t\theight: true,\n\t\toffset: true\n\t},\n\n\tattr: function( elem, name, value, pass ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( pass && name in jQuery.attrFn ) {\n\t\t\treturn jQuery( elem )[ name ]( value );\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( notxml ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\n\t\t\t} else if ( hooks && \"set\" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, \"\" + value );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\n\t\t\tret = elem.getAttribute( name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret === null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar propName, attrNames, name, l,\n\t\t\ti = 0;\n\n\t\tif ( value && elem.nodeType === 1 ) {\n\t\t\tattrNames = value.toLowerCase().split( rspace );\n\t\t\tl = attrNames.length;\n\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tname = attrNames[ i ];\n\n\t\t\t\tif ( name ) {\n\t\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\n\t\t\t\t\t// Set corresponding property to false for boolean attributes\n\t\t\t\t\tif ( rboolean.test( name ) && propName in elem ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\t// We can't allow the type property to be changed (since it causes problems in IE)\n\t\t\t\tif ( rtype.test( elem.nodeName ) && elem.parentNode ) {\n\t\t\t\t\tjQuery.error( \"type property can't be changed\" );\n\t\t\t\t} else if ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to it's default in case type is set after value\n\t\t\t\t\t// This is for element creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Use the value property for back compat\n\t\t// Use the nodeHook for button elements in IE6/7 (#1954)\n\t\tvalue: {\n\t\t\tget: function( elem, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.get( elem, name );\n\t\t\t\t}\n\t\t\t\treturn name in elem ?\n\t\t\t\t\telem.value :\n\t\t\t\t\tnull;\n\t\t\t},\n\t\t\tset: function( elem, value, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.set( elem, value, name );\n\t\t\t\t}\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.value = value;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\ttabindex: \"tabIndex\",\n\t\treadonly: \"readOnly\",\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\",\n\t\tmaxlength: \"maxLength\",\n\t\tcellspacing: \"cellSpacing\",\n\t\tcellpadding: \"cellPadding\",\n\t\trowspan: \"rowSpan\",\n\t\tcolspan: \"colSpan\",\n\t\tusemap: \"useMap\",\n\t\tframeborder: \"frameBorder\",\n\t\tcontenteditable: \"contentEditable\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn ( elem[ name ] = value );\n\t\t\t}\n\n\t\t} else {\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn elem[ name ];\n\t\t\t}\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\tvar attributeNode = elem.getAttributeNode(\"tabindex\");\n\n\t\t\t\treturn attributeNode && attributeNode.specified ?\n\t\t\t\t\tparseInt( attributeNode.value, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tundefined;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)\njQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;\n\n// Hook for boolean attributes\nboolHook = {\n\tget: function( elem, name ) {\n\t\t// Align boolean attributes with corresponding properties\n\t\t// Fall back to attribute presence where some booleans are not supported\n\t\tvar attrNode,\n\t\t\tproperty = jQuery.prop( elem, name );\n\t\treturn property === true || typeof property !== \"boolean\" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?\n\t\t\tname.toLowerCase() :\n\t\t\tundefined;\n\t},\n\tset: function( elem, value, name ) {\n\t\tvar propName;\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\t// value is true since we know at this point it's type boolean and not false\n\t\t\t// Set boolean attributes to the same name and set the DOM property\n\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\tif ( propName in elem ) {\n\t\t\t\t// Only set the IDL specifically if it already exists on the element\n\t\t\t\telem[ propName ] = true;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, name.toLowerCase() );\n\t\t}\n\t\treturn name;\n\t}\n};\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\tfixSpecified = {\n\t\tname: true,\n\t\tid: true\n\t};\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = jQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret;\n\t\t\tret = elem.getAttributeNode( name );\n\t\t\treturn ret && ( fixSpecified[ name ] ? ret.nodeValue !== \"\" : ret.specified ) ?\n\t\t\t\tret.nodeValue :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\tret = document.createAttribute( name );\n\t\t\t\telem.setAttributeNode( ret );\n\t\t\t}\n\t\t\treturn ( ret.nodeValue = value + \"\" );\n\t\t}\n\t};\n\n\t// Apply the nodeHook to tabindex\n\tjQuery.attrHooks.tabindex.set = nodeHook.set;\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tget: nodeHook.get,\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = \"false\";\n\t\t\t}\n\t\t\tnodeHook.set( elem, value, name );\n\t\t}\n\t};\n}\n\n\n// Some attributes require a special call on IE\nif ( !jQuery.support.hrefNormalized ) {\n\tjQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar ret = elem.getAttribute( name, 2 );\n\t\t\t\treturn ret === null ? undefined : ret;\n\t\t\t}\n\t\t});\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Normalize to lowercase since IE uppercases css property names\n\t\t\treturn elem.style.cssText.toLowerCase() || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = \"\" + value );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t});\n}\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\nif ( !jQuery.support.checkOn ) {\n\tjQuery.each([ \"radio\", \"checkbox\" ], function() {\n\t\tjQuery.valHooks[ this ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t}\n\t\t};\n\t});\n}\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t});\n});\n\n\n\n\nvar rformElems = /^(?:textarea|input|select)$/i,\n\trtypenamespace = /^([^\\.]*)?(?:\\.(.+))?$/,\n\trhoverHack = /\\bhover(\\.\\S+)?\\b/,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trquickIs = /^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,\n\tquickParse = function( selector ) {\n\t\tvar quick = rquickIs.exec( selector );\n\t\tif ( quick ) {\n\t\t\t//   0  1    2   3\n\t\t\t// [ _, tag, id, class ]\n\t\t\tquick[1] = ( quick[1] || \"\" ).toLowerCase();\n\t\t\tquick[3] = quick[3] && new RegExp( \"(?:^|\\\\s)\" + quick[3] + \"(?:\\\\s|$)\" );\n\t\t}\n\t\treturn quick;\n\t},\n\tquickIs = function( elem, m ) {\n\t\tvar attrs = elem.attributes || {};\n\t\treturn (\n\t\t\t(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&\n\t\t\t(!m[2] || (attrs.id || {}).value === m[2]) &&\n\t\t\t(!m[3] || m[3].test( (attrs[ \"class\" ] || {}).value ))\n\t\t);\n\t},\n\thoverHack = function( events ) {\n\t\treturn jQuery.event.special.hover ? events : events.replace( rhoverHack, \"mouseenter$1 mouseleave$1\" );\n\t};\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar elemData, eventHandle, events,\n\t\t\tt, tns, type, namespaces, handleObj,\n\t\t\thandleObjIn, quick, handlers, special;\n\n\t\t// Don't attach events to noData or text/comment nodes (allow plain objects tho)\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tevents = elemData.events;\n\t\tif ( !events ) {\n\t\t\telemData.events = events = {};\n\t\t}\n\t\teventHandle = elemData.handle;\n\t\tif ( !eventHandle ) {\n\t\t\telemData.handle = eventHandle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\t// jQuery(...).bind(\"mouseover mouseout\", fn);\n\t\ttypes = jQuery.trim( hoverHack(types) ).split( \" \" );\n\t\tfor ( t = 0; t < types.length; t++ ) {\n\n\t\t\ttns = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = tns[1];\n\t\t\tnamespaces = ( tns[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: tns[1],\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tquick: quickParse( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\thandlers = events[ type ];\n\t\t\tif ( !handlers ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\tglobal: {},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar elemData = jQuery.hasData( elem ) && jQuery._data( elem ),\n\t\t\tt, tns, type, origType, namespaces, origCount,\n\t\t\tj, events, special, handle, eventType, handleObj;\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = jQuery.trim( hoverHack( types || \"\" ) ).split(\" \");\n\t\tfor ( t = 0; t < types.length; t++ ) {\n\t\t\ttns = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tns[1];\n\t\t\tnamespaces = tns[2];\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector? special.delegateType : special.bindType ) || type;\n\t\t\teventType = events[ type ] || [];\n\t\t\torigCount = eventType.length;\n\t\t\tnamespaces = namespaces ? new RegExp(\"(^|\\\\.)\" + namespaces.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\") : null;\n\n\t\t\t// Remove matching events\n\t\t\tfor ( j = 0; j < eventType.length; j++ ) {\n\t\t\t\thandleObj = eventType[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t ( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t ( !namespaces || namespaces.test( handleObj.namespace ) ) &&\n\t\t\t\t\t ( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\teventType.splice( j--, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\teventType.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( eventType.length === 0 && origCount !== eventType.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\thandle = elemData.handle;\n\t\t\tif ( handle ) {\n\t\t\t\thandle.elem = null;\n\t\t\t}\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery.removeData( elem, [ \"events\", \"handle\" ], true );\n\t\t}\n\t},\n\n\t// Events that are safe to short-circuit if no handlers are attached.\n\t// Native DOM events should not be added, they may have inline handlers.\n\tcustomEvent: {\n\t\t\"getData\": true,\n\t\t\"setData\": true,\n\t\t\"changeData\": true\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Event object or event type\n\t\tvar type = event.type || event,\n\t\t\tnamespaces = [],\n\t\t\tcache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \"!\" ) >= 0 ) {\n\t\t\t// Exclusive events trigger only for the exact event (no namespaces)\n\t\t\ttype = type.slice(0, -1);\n\t\t\texclusive = true;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\n\t\tif ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {\n\t\t\t// No jQuery handlers for this event type, and it can't have inline handlers\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an Event, Object, or just an event type string\n\t\tevent = typeof event === \"object\" ?\n\t\t\t// jQuery.Event object\n\t\t\tevent[ jQuery.expando ] ? event :\n\t\t\t// Object literal\n\t\t\tnew jQuery.Event( type, event ) :\n\t\t\t// Just the event type (string)\n\t\t\tnew jQuery.Event( type );\n\n\t\tevent.type = type;\n\t\tevent.isTrigger = true;\n\t\tevent.exclusive = exclusive;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.namespace_re = event.namespace? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\") : null;\n\t\tontype = type.indexOf( \":\" ) < 0 ? \"on\" + type : \"\";\n\n\t\t// Handle a global trigger\n\t\tif ( !elem ) {\n\n\t\t\t// TODO: Stop taunting the data cache; remove global events and always attach to document\n\t\t\tcache = jQuery.cache;\n\t\t\tfor ( i in cache ) {\n\t\t\t\tif ( cache[ i ].events && cache[ i ].events[ type ] ) {\n\t\t\t\t\tjQuery.event.trigger( event, data, cache[ i ].handle.elem, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data != null ? jQuery.makeArray( data ) : [];\n\t\tdata.unshift( event );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\teventPath = [[ elem, special.bindType || type ]];\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tcur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;\n\t\t\told = null;\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push([ cur, bubbleType ]);\n\t\t\t\told = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( old && old === elem.ownerDocument ) {\n\t\t\t\teventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\tfor ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {\n\n\t\t\tcur = eventPath[i][0];\n\t\t\tevent.type = eventPath[i][1];\n\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\t\t\t// Note that this is a bare JS function and not a jQuery handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&\n\t\t\t\t!(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486)\n\t\t\t\tif ( ontype && elem[ type ] && ((type !== \"focus\" && type !== \"blur\") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\told = elem[ ontype ];\n\n\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\telem[ ontype ] = old;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event || window.event );\n\n\t\tvar handlers = ( (jQuery._data( this, \"events\" ) || {} )[ event.type ] || []),\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\targs = [].slice.call( arguments, 0 ),\n\t\t\trun_all = !event.exclusive && !event.namespace,\n\t\t\thandlerQueue = [],\n\t\t\ti, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Determine handlers that should run if there are delegated events\n\t\t// Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && !event.target.disabled && !(event.button && event.type === \"click\") ) {\n\n\t\t\t// Pregenerate a single jQuery object for reuse with .is()\n\t\t\tjqcur = jQuery(this);\n\t\t\tjqcur.context = this.ownerDocument || this;\n\n\t\t\tfor ( cur = event.target; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\tselMatch = {};\n\t\t\t\tmatches = [];\n\t\t\t\tjqcur[0] = cur;\n\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\thandleObj = handlers[ i ];\n\t\t\t\t\tsel = handleObj.selector;\n\n\t\t\t\t\tif ( selMatch[ sel ] === undefined ) {\n\t\t\t\t\t\tselMatch[ sel ] = (\n\t\t\t\t\t\t\thandleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif ( selMatch[ sel ] ) {\n\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( matches.length ) {\n\t\t\t\t\thandlerQueue.push({ elem: cur, matches: matches });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( handlers.length > delegateCount ) {\n\t\t\thandlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\tfor ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {\n\t\t\tmatched = handlerQueue[ i ];\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tfor ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {\n\t\t\t\thandleObj = matched.matches[ j ];\n\n\t\t\t\t// Triggered event must either 1) be non-exclusive and have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.data = handleObj.data;\n\t\t\t\t\tevent.handleObj = handleObj;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tevent.result = ret;\n\t\t\t\t\t\tif ( ret === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\t// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***\n\tprops: \"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = jQuery.event.fixHooks[ event.type ] || {},\n\t\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = jQuery.Event( originalEvent );\n\n\t\tfor ( i = copy.length; i; ) {\n\t\t\tprop = copy[ --i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Target should not be a text node (#504, Safari)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)\n\t\tif ( event.metaKey === undefined ) {\n\t\t\tevent.metaKey = event.ctrlKey;\n\t\t}\n\n\t\treturn fixHook.filter? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tready: {\n\t\t\t// Make sure the ready event is setup\n\t\t\tsetup: jQuery.bindReady\n\t\t},\n\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\n\t\tfocus: {\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tsetup: function( data, namespaces, eventHandle ) {\n\t\t\t\t// We only want to do this special case on windows\n\t\t\t\tif ( jQuery.isWindow( this ) ) {\n\t\t\t\t\tthis.onbeforeunload = eventHandle;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tteardown: function( namespaces, eventHandle ) {\n\t\t\t\tif ( this.onbeforeunload === eventHandle ) {\n\t\t\t\t\tthis.onbeforeunload = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{ type: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\n// Some plugins are using, but it's undocumented/deprecated and will be removed.\n// The 1.7 special event interface should provide all the hooks needed now.\njQuery.event.handle = jQuery.event.dispatch;\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.detachEvent ) {\n\t\t\telem.detachEvent( \"on\" + type, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\nfunction returnFalse() {\n\treturn false;\n}\nfunction returnTrue() {\n\treturn true;\n}\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tpreventDefault: function() {\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if preventDefault exists run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// otherwise set the returnValue property of the original event to false (IE)\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// if stopPropagation exists run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t\t// otherwise set the cancelBubble property of the original event to true (IE)\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t},\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar target = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj,\n\t\t\t\tselector = handleObj.selector,\n\t\t\t\tret;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !form._submit_attached ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tform._submit_attached = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\telem._change_attached = true;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on.call( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\tvar handleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace? handleObj.type + \".\" + handleObj.namespace : handleObj.type,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( var type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tlive: function( types, data, fn ) {\n\t\tjQuery( this.context ).on( types, this.selector, data, fn );\n\t\treturn this;\n\t},\n\tdie: function( types, fn ) {\n\t\tjQuery( this.context ).off( types, this.selector || \"**\", fn );\n\t\treturn this;\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length == 1? this.off( selector, \"**\" ) : this.off( types, selector, fn );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tif ( this[0] ) {\n\t\t\treturn jQuery.event.trigger( type, data, this[0], true );\n\t\t}\n\t},\n\n\ttoggle: function( fn ) {\n\t\t// Save reference to arguments for access in closure\n\t\tvar args = arguments,\n\t\t\tguid = fn.guid || jQuery.guid++,\n\t\t\ti = 0,\n\t\t\ttoggler = function( event ) {\n\t\t\t\t// Figure out which function to execute\n\t\t\t\tvar lastToggle = ( jQuery._data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n\t\t\t\tjQuery._data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\n\t\t\t\t// Make sure that clicks stop\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// and execute the function\n\t\t\t\treturn args[ lastToggle ].apply( this, arguments ) || false;\n\t\t\t};\n\n\t\t// link all the functions, so any of them can unbind this click handler\n\t\ttoggler.guid = guid;\n\t\twhile ( i < args.length ) {\n\t\t\targs[ i++ ].guid = guid;\n\t\t}\n\n\t\treturn this.click( toggler );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n});\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\tif ( fn == null ) {\n\t\t\tfn = data;\n\t\t\tdata = null;\n\t\t}\n\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n\n\tif ( jQuery.attrFn ) {\n\t\tjQuery.attrFn[ name ] = true;\n\t}\n\n\tif ( rkeyEvent.test( name ) ) {\n\t\tjQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;\n\t}\n\n\tif ( rmouseEvent.test( name ) ) {\n\t\tjQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;\n\t}\n});\n\n\n\n/*!\n * Sizzle CSS Selector Engine\n *  Copyright 2011, The Dojo Foundation\n *  Released under the MIT, BSD, and GPL Licenses.\n *  More information: http://sizzlejs.com/\n */\n(function(){\n\nvar chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,\n\texpando = \"sizcache\" + (Math.random() + '').replace('.', ''),\n\tdone = 0,\n\ttoString = Object.prototype.toString,\n\thasDuplicate = false,\n\tbaseHasDuplicate = true,\n\trBackslash = /\\\\/g,\n\trReturn = /\\r\\n/g,\n\trNonWord = /\\W/;\n\n// Here we check if the JavaScript engine is using some sort of\n// optimization where it does not always call our comparision\n// function. If that is the case, discard the hasDuplicate value.\n//   Thus far that includes Google Chrome.\n[0, 0].sort(function() {\n\tbaseHasDuplicate = false;\n\treturn 0;\n});\n\nvar Sizzle = function( selector, context, results, seed ) {\n\tresults = results || [];\n\tcontext = context || document;\n\n\tvar origContext = context;\n\n\tif ( context.nodeType !== 1 && context.nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tvar m, set, checkSet, extra, ret, cur, pop, i,\n\t\tprune = true,\n\t\tcontextXML = Sizzle.isXML( context ),\n\t\tparts = [],\n\t\tsoFar = selector;\n\n\t// Reset the position of the chunker regexp (start from head)\n\tdo {\n\t\tchunker.exec( \"\" );\n\t\tm = chunker.exec( soFar );\n\n\t\tif ( m ) {\n\t\t\tsoFar = m[3];\n\n\t\t\tparts.push( m[1] );\n\n\t\t\tif ( m[2] ) {\n\t\t\t\textra = m[3];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} while ( m );\n\n\tif ( parts.length > 1 && origPOS.exec( selector ) ) {\n\n\t\tif ( parts.length === 2 && Expr.relative[ parts[0] ] ) {\n\t\t\tset = posProcess( parts[0] + parts[1], context, seed );\n\n\t\t} else {\n\t\t\tset = Expr.relative[ parts[0] ] ?\n\t\t\t\t[ context ] :\n\t\t\t\tSizzle( parts.shift(), context );\n\n\t\t\twhile ( parts.length ) {\n\t\t\t\tselector = parts.shift();\n\n\t\t\t\tif ( Expr.relative[ selector ] ) {\n\t\t\t\t\tselector += parts.shift();\n\t\t\t\t}\n\n\t\t\t\tset = posProcess( selector, set, seed );\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t// (but not if it'll be faster if the inner selector is an ID)\n\t\tif ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&\n\t\t\t\tExpr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {\n\n\t\t\tret = Sizzle.find( parts.shift(), context, contextXML );\n\t\t\tcontext = ret.expr ?\n\t\t\t\tSizzle.filter( ret.expr, ret.set )[0] :\n\t\t\t\tret.set[0];\n\t\t}\n\n\t\tif ( context ) {\n\t\t\tret = seed ?\n\t\t\t\t{ expr: parts.pop(), set: makeArray(seed) } :\n\t\t\t\tSizzle.find( parts.pop(), parts.length === 1 && (parts[0] === \"~\" || parts[0] === \"+\") && context.parentNode ? context.parentNode : context, contextXML );\n\n\t\t\tset = ret.expr ?\n\t\t\t\tSizzle.filter( ret.expr, ret.set ) :\n\t\t\t\tret.set;\n\n\t\t\tif ( parts.length > 0 ) {\n\t\t\t\tcheckSet = makeArray( set );\n\n\t\t\t} else {\n\t\t\t\tprune = false;\n\t\t\t}\n\n\t\t\twhile ( parts.length ) {\n\t\t\t\tcur = parts.pop();\n\t\t\t\tpop = cur;\n\n\t\t\t\tif ( !Expr.relative[ cur ] ) {\n\t\t\t\t\tcur = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tpop = parts.pop();\n\t\t\t\t}\n\n\t\t\t\tif ( pop == null ) {\n\t\t\t\t\tpop = context;\n\t\t\t\t}\n\n\t\t\t\tExpr.relative[ cur ]( checkSet, pop, contextXML );\n\t\t\t}\n\n\t\t} else {\n\t\t\tcheckSet = parts = [];\n\t\t}\n\t}\n\n\tif ( !checkSet ) {\n\t\tcheckSet = set;\n\t}\n\n\tif ( !checkSet ) {\n\t\tSizzle.error( cur || selector );\n\t}\n\n\tif ( toString.call(checkSet) === \"[object Array]\" ) {\n\t\tif ( !prune ) {\n\t\t\tresults.push.apply( results, checkSet );\n\n\t\t} else if ( context && context.nodeType === 1 ) {\n\t\t\tfor ( i = 0; checkSet[i] != null; i++ ) {\n\t\t\t\tif ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {\n\t\t\t\t\tresults.push( set[i] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\tfor ( i = 0; checkSet[i] != null; i++ ) {\n\t\t\t\tif ( checkSet[i] && checkSet[i].nodeType === 1 ) {\n\t\t\t\t\tresults.push( set[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\tmakeArray( checkSet, results );\n\t}\n\n\tif ( extra ) {\n\t\tSizzle( extra, origContext, results, seed );\n\t\tSizzle.uniqueSort( results );\n\t}\n\n\treturn results;\n};\n\nSizzle.uniqueSort = function( results ) {\n\tif ( sortOrder ) {\n\t\thasDuplicate = baseHasDuplicate;\n\t\tresults.sort( sortOrder );\n\n\t\tif ( hasDuplicate ) {\n\t\t\tfor ( var i = 1; i < results.length; i++ ) {\n\t\t\t\tif ( results[i] === results[ i - 1 ] ) {\n\t\t\t\t\tresults.splice( i--, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n};\n\nSizzle.matches = function( expr, set ) {\n\treturn Sizzle( expr, null, null, set );\n};\n\nSizzle.matchesSelector = function( node, expr ) {\n\treturn Sizzle( expr, null, null, [node] ).length > 0;\n};\n\nSizzle.find = function( expr, context, isXML ) {\n\tvar set, i, len, match, type, left;\n\n\tif ( !expr ) {\n\t\treturn [];\n\t}\n\n\tfor ( i = 0, len = Expr.order.length; i < len; i++ ) {\n\t\ttype = Expr.order[i];\n\n\t\tif ( (match = Expr.leftMatch[ type ].exec( expr )) ) {\n\t\t\tleft = match[1];\n\t\t\tmatch.splice( 1, 1 );\n\n\t\t\tif ( left.substr( left.length - 1 ) !== \"\\\\\" ) {\n\t\t\t\tmatch[1] = (match[1] || \"\").replace( rBackslash, \"\" );\n\t\t\t\tset = Expr.find[ type ]( match, context, isXML );\n\n\t\t\t\tif ( set != null ) {\n\t\t\t\t\texpr = expr.replace( Expr.match[ type ], \"\" );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( !set ) {\n\t\tset = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( \"*\" ) :\n\t\t\t[];\n\t}\n\n\treturn { set: set, expr: expr };\n};\n\nSizzle.filter = function( expr, set, inplace, not ) {\n\tvar match, anyFound,\n\t\ttype, found, item, filter, left,\n\t\ti, pass,\n\t\told = expr,\n\t\tresult = [],\n\t\tcurLoop = set,\n\t\tisXMLFilter = set && set[0] && Sizzle.isXML( set[0] );\n\n\twhile ( expr && set.length ) {\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {\n\t\t\t\tfilter = Expr.filter[ type ];\n\t\t\t\tleft = match[1];\n\n\t\t\t\tanyFound = false;\n\n\t\t\t\tmatch.splice(1,1);\n\n\t\t\t\tif ( left.substr( left.length - 1 ) === \"\\\\\" ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( curLoop === result ) {\n\t\t\t\t\tresult = [];\n\t\t\t\t}\n\n\t\t\t\tif ( Expr.preFilter[ type ] ) {\n\t\t\t\t\tmatch = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );\n\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\tanyFound = found = true;\n\n\t\t\t\t\t} else if ( match === true ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( match ) {\n\t\t\t\t\tfor ( i = 0; (item = curLoop[i]) != null; i++ ) {\n\t\t\t\t\t\tif ( item ) {\n\t\t\t\t\t\t\tfound = filter( item, match, i, curLoop );\n\t\t\t\t\t\t\tpass = not ^ found;\n\n\t\t\t\t\t\t\tif ( inplace && found != null ) {\n\t\t\t\t\t\t\t\tif ( pass ) {\n\t\t\t\t\t\t\t\t\tanyFound = true;\n\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcurLoop[i] = false;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else if ( pass ) {\n\t\t\t\t\t\t\t\tresult.push( item );\n\t\t\t\t\t\t\t\tanyFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( found !== undefined ) {\n\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\tcurLoop = result;\n\t\t\t\t\t}\n\n\t\t\t\t\texpr = expr.replace( Expr.match[ type ], \"\" );\n\n\t\t\t\t\tif ( !anyFound ) {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Improper expression\n\t\tif ( expr === old ) {\n\t\t\tif ( anyFound == null ) {\n\t\t\t\tSizzle.error( expr );\n\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\told = expr;\n\t}\n\n\treturn curLoop;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Utility function for retreiving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\nvar getText = Sizzle.getText = function( elem ) {\n    var i, node,\n\t\tnodeType = elem.nodeType,\n\t\tret = \"\";\n\n\tif ( nodeType ) {\n\t\tif ( nodeType === 1 || nodeType === 9 ) {\n\t\t\t// Use textContent || innerText for elements\n\t\t\tif ( typeof elem.textContent === 'string' ) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if ( typeof elem.innerText === 'string' ) {\n\t\t\t\t// Replace IE's carriage returns\n\t\t\t\treturn elem.innerText.replace( rReturn, '' );\n\t\t\t} else {\n\t\t\t\t// Traverse it's children\n\t\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\tret += getText( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\t} else {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( i = 0; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tif ( node.nodeType !== 8 ) {\n\t\t\t\tret += getText( node );\n\t\t\t}\n\t\t}\n\t}\n\treturn ret;\n};\n\nvar Expr = Sizzle.selectors = {\n\torder: [ \"ID\", \"NAME\", \"TAG\" ],\n\n\tmatch: {\n\t\tID: /#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,\n\t\tCLASS: /\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,\n\t\tNAME: /\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,\n\t\tATTR: /\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,\n\t\tTAG: /^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,\n\t\tCHILD: /:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,\n\t\tPOS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,\n\t\tPSEUDO: /:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/\n\t},\n\n\tleftMatch: {},\n\n\tattrMap: {\n\t\t\"class\": \"className\",\n\t\t\"for\": \"htmlFor\"\n\t},\n\n\tattrHandle: {\n\t\thref: function( elem ) {\n\t\t\treturn elem.getAttribute( \"href\" );\n\t\t},\n\t\ttype: function( elem ) {\n\t\t\treturn elem.getAttribute( \"type\" );\n\t\t}\n\t},\n\n\trelative: {\n\t\t\"+\": function(checkSet, part){\n\t\t\tvar isPartStr = typeof part === \"string\",\n\t\t\t\tisTag = isPartStr && !rNonWord.test( part ),\n\t\t\t\tisPartStrNotTag = isPartStr && !isTag;\n\n\t\t\tif ( isTag ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t}\n\n\t\t\tfor ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {\n\t\t\t\tif ( (elem = checkSet[i]) ) {\n\t\t\t\t\twhile ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}\n\n\t\t\t\t\tcheckSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?\n\t\t\t\t\t\telem || false :\n\t\t\t\t\t\telem === part;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( isPartStrNotTag ) {\n\t\t\t\tSizzle.filter( part, checkSet, true );\n\t\t\t}\n\t\t},\n\n\t\t\">\": function( checkSet, part ) {\n\t\t\tvar elem,\n\t\t\t\tisPartStr = typeof part === \"string\",\n\t\t\t\ti = 0,\n\t\t\t\tl = checkSet.length;\n\n\t\t\tif ( isPartStr && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\telem = checkSet[i];\n\n\t\t\t\t\tif ( elem ) {\n\t\t\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\t\t\tcheckSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\telem = checkSet[i];\n\n\t\t\t\t\tif ( elem ) {\n\t\t\t\t\t\tcheckSet[i] = isPartStr ?\n\t\t\t\t\t\t\telem.parentNode :\n\t\t\t\t\t\t\telem.parentNode === part;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( isPartStr ) {\n\t\t\t\t\tSizzle.filter( part, checkSet, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t\"\": function(checkSet, part, isXML){\n\t\t\tvar nodeCheck,\n\t\t\t\tdoneName = done++,\n\t\t\t\tcheckFn = dirCheck;\n\n\t\t\tif ( typeof part === \"string\" && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t\tnodeCheck = part;\n\t\t\t\tcheckFn = dirNodeCheck;\n\t\t\t}\n\n\t\t\tcheckFn( \"parentNode\", part, doneName, checkSet, nodeCheck, isXML );\n\t\t},\n\n\t\t\"~\": function( checkSet, part, isXML ) {\n\t\t\tvar nodeCheck,\n\t\t\t\tdoneName = done++,\n\t\t\t\tcheckFn = dirCheck;\n\n\t\t\tif ( typeof part === \"string\" && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t\tnodeCheck = part;\n\t\t\t\tcheckFn = dirNodeCheck;\n\t\t\t}\n\n\t\t\tcheckFn( \"previousSibling\", part, doneName, checkSet, nodeCheck, isXML );\n\t\t}\n\t},\n\n\tfind: {\n\t\tID: function( match, context, isXML ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\t\t\t\tvar m = context.getElementById(match[1]);\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t},\n\n\t\tNAME: function( match, context ) {\n\t\t\tif ( typeof context.getElementsByName !== \"undefined\" ) {\n\t\t\t\tvar ret = [],\n\t\t\t\t\tresults = context.getElementsByName( match[1] );\n\n\t\t\t\tfor ( var i = 0, l = results.length; i < l; i++ ) {\n\t\t\t\t\tif ( results[i].getAttribute(\"name\") === match[1] ) {\n\t\t\t\t\t\tret.push( results[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn ret.length === 0 ? null : ret;\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( match, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( match[1] );\n\t\t\t}\n\t\t}\n\t},\n\tpreFilter: {\n\t\tCLASS: function( match, curLoop, inplace, result, not, isXML ) {\n\t\t\tmatch = \" \" + match[1].replace( rBackslash, \"\" ) + \" \";\n\n\t\t\tif ( isXML ) {\n\t\t\t\treturn match;\n\t\t\t}\n\n\t\t\tfor ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {\n\t\t\t\tif ( elem ) {\n\t\t\t\t\tif ( not ^ (elem.className && (\" \" + elem.className + \" \").replace(/[\\t\\n\\r]/g, \" \").indexOf(match) >= 0) ) {\n\t\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\t\tresult.push( elem );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( inplace ) {\n\t\t\t\t\t\tcurLoop[i] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\tID: function( match ) {\n\t\t\treturn match[1].replace( rBackslash, \"\" );\n\t\t},\n\n\t\tTAG: function( match, curLoop ) {\n\t\t\treturn match[1].replace( rBackslash, \"\" ).toLowerCase();\n\t\t},\n\n\t\tCHILD: function( match ) {\n\t\t\tif ( match[1] === \"nth\" ) {\n\t\t\t\tif ( !match[2] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\tmatch[2] = match[2].replace(/^\\+|\\s*/g, '');\n\n\t\t\t\t// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'\n\t\t\t\tvar test = /(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(\n\t\t\t\t\tmatch[2] === \"even\" && \"2n\" || match[2] === \"odd\" && \"2n+1\" ||\n\t\t\t\t\t!/\\D/.test( match[2] ) && \"0n+\" + match[2] || match[2]);\n\n\t\t\t\t// calculate the numbers (first)n+(last) including if they are negative\n\t\t\t\tmatch[2] = (test[1] + (test[2] || 1)) - 0;\n\t\t\t\tmatch[3] = test[3] - 0;\n\t\t\t}\n\t\t\telse if ( match[2] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\t// TODO: Move to normal caching system\n\t\t\tmatch[0] = done++;\n\n\t\t\treturn match;\n\t\t},\n\n\t\tATTR: function( match, curLoop, inplace, result, not, isXML ) {\n\t\t\tvar name = match[1] = match[1].replace( rBackslash, \"\" );\n\n\t\t\tif ( !isXML && Expr.attrMap[name] ) {\n\t\t\t\tmatch[1] = Expr.attrMap[name];\n\t\t\t}\n\n\t\t\t// Handle if an un-quoted value was used\n\t\t\tmatch[4] = ( match[4] || match[5] || \"\" ).replace( rBackslash, \"\" );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[4] = \" \" + match[4] + \" \";\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match, curLoop, inplace, result, not ) {\n\t\t\tif ( match[1] === \"not\" ) {\n\t\t\t\t// If we're dealing with a complex expression, or a simple one\n\t\t\t\tif ( ( chunker.exec(match[3]) || \"\" ).length > 1 || /^\\w/.test(match[3]) ) {\n\t\t\t\t\tmatch[3] = Sizzle(match[3], null, null, curLoop);\n\n\t\t\t\t} else {\n\t\t\t\t\tvar ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);\n\n\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\tresult.push.apply( result, ret );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPOS: function( match ) {\n\t\t\tmatch.unshift( true );\n\n\t\t\treturn match;\n\t\t}\n\t},\n\n\tfilters: {\n\t\tenabled: function( elem ) {\n\t\t\treturn elem.disabled === false && elem.type !== \"hidden\";\n\t\t},\n\n\t\tdisabled: function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\tchecked: function( elem ) {\n\t\t\treturn elem.checked === true;\n\t\t},\n\n\t\tselected: function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !!elem.firstChild;\n\t\t},\n\n\t\tempty: function( elem ) {\n\t\t\treturn !elem.firstChild;\n\t\t},\n\n\t\thas: function( elem, i, match ) {\n\t\t\treturn !!Sizzle( match[3], elem ).length;\n\t\t},\n\n\t\theader: function( elem ) {\n\t\t\treturn (/h\\d/i).test( elem.nodeName );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr = elem.getAttribute( \"type\" ), type = elem.type;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"text\" === type && ( attr === type || attr === null );\n\t\t},\n\n\t\tradio: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"radio\" === elem.type;\n\t\t},\n\n\t\tcheckbox: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"checkbox\" === elem.type;\n\t\t},\n\n\t\tfile: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"file\" === elem.type;\n\t\t},\n\n\t\tpassword: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"password\" === elem.type;\n\t\t},\n\n\t\tsubmit: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn (name === \"input\" || name === \"button\") && \"submit\" === elem.type;\n\t\t},\n\n\t\timage: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"image\" === elem.type;\n\t\t},\n\n\t\treset: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn (name === \"input\" || name === \"button\") && \"reset\" === elem.type;\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && \"button\" === elem.type || name === \"button\";\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn (/input|select|textarea|button/i).test( elem.nodeName );\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === elem.ownerDocument.activeElement;\n\t\t}\n\t},\n\tsetFilters: {\n\t\tfirst: function( elem, i ) {\n\t\t\treturn i === 0;\n\t\t},\n\n\t\tlast: function( elem, i, match, array ) {\n\t\t\treturn i === array.length - 1;\n\t\t},\n\n\t\teven: function( elem, i ) {\n\t\t\treturn i % 2 === 0;\n\t\t},\n\n\t\todd: function( elem, i ) {\n\t\t\treturn i % 2 === 1;\n\t\t},\n\n\t\tlt: function( elem, i, match ) {\n\t\t\treturn i < match[3] - 0;\n\t\t},\n\n\t\tgt: function( elem, i, match ) {\n\t\t\treturn i > match[3] - 0;\n\t\t},\n\n\t\tnth: function( elem, i, match ) {\n\t\t\treturn match[3] - 0 === i;\n\t\t},\n\n\t\teq: function( elem, i, match ) {\n\t\t\treturn match[3] - 0 === i;\n\t\t}\n\t},\n\tfilter: {\n\t\tPSEUDO: function( elem, match, i, array ) {\n\t\t\tvar name = match[1],\n\t\t\t\tfilter = Expr.filters[ name ];\n\n\t\t\tif ( filter ) {\n\t\t\t\treturn filter( elem, i, match, array );\n\n\t\t\t} else if ( name === \"contains\" ) {\n\t\t\t\treturn (elem.textContent || elem.innerText || getText([ elem ]) || \"\").indexOf(match[3]) >= 0;\n\n\t\t\t} else if ( name === \"not\" ) {\n\t\t\t\tvar not = match[3];\n\n\t\t\t\tfor ( var j = 0, l = not.length; j < l; j++ ) {\n\t\t\t\t\tif ( not[j] === elem ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\t\t\t\tSizzle.error( name );\n\t\t\t}\n\t\t},\n\n\t\tCHILD: function( elem, match ) {\n\t\t\tvar first, last,\n\t\t\t\tdoneName, parent, cache,\n\t\t\t\tcount, diff,\n\t\t\t\ttype = match[1],\n\t\t\t\tnode = elem;\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase \"only\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\twhile ( (node = node.previousSibling) )\t {\n\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( type === \"first\" ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode = elem;\n\n\t\t\t\tcase \"last\":\n\t\t\t\t\twhile ( (node = node.nextSibling) )\t {\n\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"nth\":\n\t\t\t\t\tfirst = match[2];\n\t\t\t\t\tlast = match[3];\n\n\t\t\t\t\tif ( first === 1 && last === 0 ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tdoneName = match[0];\n\t\t\t\t\tparent = elem.parentNode;\n\n\t\t\t\t\tif ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {\n\t\t\t\t\t\tcount = 0;\n\n\t\t\t\t\t\tfor ( node = parent.firstChild; node; node = node.nextSibling ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\tnode.nodeIndex = ++count;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparent[ expando ] = doneName;\n\t\t\t\t\t}\n\n\t\t\t\t\tdiff = elem.nodeIndex - last;\n\n\t\t\t\t\tif ( first === 0 ) {\n\t\t\t\t\t\treturn diff === 0;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tID: function( elem, match ) {\n\t\t\treturn elem.nodeType === 1 && elem.getAttribute(\"id\") === match;\n\t\t},\n\n\t\tTAG: function( elem, match ) {\n\t\t\treturn (match === \"*\" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;\n\t\t},\n\n\t\tCLASS: function( elem, match ) {\n\t\t\treturn (\" \" + (elem.className || elem.getAttribute(\"class\")) + \" \")\n\t\t\t\t.indexOf( match ) > -1;\n\t\t},\n\n\t\tATTR: function( elem, match ) {\n\t\t\tvar name = match[1],\n\t\t\t\tresult = Sizzle.attr ?\n\t\t\t\t\tSizzle.attr( elem, name ) :\n\t\t\t\t\tExpr.attrHandle[ name ] ?\n\t\t\t\t\tExpr.attrHandle[ name ]( elem ) :\n\t\t\t\t\telem[ name ] != null ?\n\t\t\t\t\t\telem[ name ] :\n\t\t\t\t\t\telem.getAttribute( name ),\n\t\t\t\tvalue = result + \"\",\n\t\t\t\ttype = match[2],\n\t\t\t\tcheck = match[4];\n\n\t\t\treturn result == null ?\n\t\t\t\ttype === \"!=\" :\n\t\t\t\t!type && Sizzle.attr ?\n\t\t\t\tresult != null :\n\t\t\t\ttype === \"=\" ?\n\t\t\t\tvalue === check :\n\t\t\t\ttype === \"*=\" ?\n\t\t\t\tvalue.indexOf(check) >= 0 :\n\t\t\t\ttype === \"~=\" ?\n\t\t\t\t(\" \" + value + \" \").indexOf(check) >= 0 :\n\t\t\t\t!check ?\n\t\t\t\tvalue && result !== false :\n\t\t\t\ttype === \"!=\" ?\n\t\t\t\tvalue !== check :\n\t\t\t\ttype === \"^=\" ?\n\t\t\t\tvalue.indexOf(check) === 0 :\n\t\t\t\ttype === \"$=\" ?\n\t\t\t\tvalue.substr(value.length - check.length) === check :\n\t\t\t\ttype === \"|=\" ?\n\t\t\t\tvalue === check || value.substr(0, check.length + 1) === check + \"-\" :\n\t\t\t\tfalse;\n\t\t},\n\n\t\tPOS: function( elem, match, i, array ) {\n\t\t\tvar name = match[2],\n\t\t\t\tfilter = Expr.setFilters[ name ];\n\n\t\t\tif ( filter ) {\n\t\t\t\treturn filter( elem, i, match, array );\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar origPOS = Expr.match.POS,\n\tfescape = function(all, num){\n\t\treturn \"\\\\\" + (num - 0 + 1);\n\t};\n\nfor ( var type in Expr.match ) {\n\tExpr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\\[]*\\])(?![^\\(]*\\))/.source) );\n\tExpr.leftMatch[ type ] = new RegExp( /(^(?:.|\\r|\\n)*?)/.source + Expr.match[ type ].source.replace(/\\\\(\\d+)/g, fescape) );\n}\n\nvar makeArray = function( array, results ) {\n\tarray = Array.prototype.slice.call( array, 0 );\n\n\tif ( results ) {\n\t\tresults.push.apply( results, array );\n\t\treturn results;\n\t}\n\n\treturn array;\n};\n\n// Perform a simple check to determine if the browser is capable of\n// converting a NodeList to an array using builtin methods.\n// Also verifies that the returned array holds DOM nodes\n// (which is not the case in the Blackberry browser)\ntry {\n\tArray.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;\n\n// Provide a fallback method if it does not work\n} catch( e ) {\n\tmakeArray = function( array, results ) {\n\t\tvar i = 0,\n\t\t\tret = results || [];\n\n\t\tif ( toString.call(array) === \"[object Array]\" ) {\n\t\t\tArray.prototype.push.apply( ret, array );\n\n\t\t} else {\n\t\t\tif ( typeof array.length === \"number\" ) {\n\t\t\t\tfor ( var l = array.length; i < l; i++ ) {\n\t\t\t\t\tret.push( array[i] );\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tfor ( ; array[i]; i++ ) {\n\t\t\t\t\tret.push( array[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nvar sortOrder, siblingCheck;\n\nif ( document.documentElement.compareDocumentPosition ) {\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tif ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {\n\t\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t\t}\n\n\t\treturn a.compareDocumentPosition(b) & 4 ? -1 : 1;\n\t};\n\n} else {\n\tsortOrder = function( a, b ) {\n\t\t// The nodes are identical, we can exit early\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Fallback to using sourceIndex (in IE) if it's available on both nodes\n\t\t} else if ( a.sourceIndex && b.sourceIndex ) {\n\t\t\treturn a.sourceIndex - b.sourceIndex;\n\t\t}\n\n\t\tvar al, bl,\n\t\t\tap = [],\n\t\t\tbp = [],\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tcur = aup;\n\n\t\t// If the nodes are siblings (or identical) we can do a quick check\n\t\tif ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\n\t\t// If no parents were found then the nodes are disconnected\n\t\t} else if ( !aup ) {\n\t\t\treturn -1;\n\n\t\t} else if ( !bup ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Otherwise they're somewhere else in the tree so we need\n\t\t// to build up a full list of the parentNodes for comparison\n\t\twhile ( cur ) {\n\t\t\tap.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tcur = bup;\n\n\t\twhile ( cur ) {\n\t\t\tbp.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tal = ap.length;\n\t\tbl = bp.length;\n\n\t\t// Start walking down the tree looking for a discrepancy\n\t\tfor ( var i = 0; i < al && i < bl; i++ ) {\n\t\t\tif ( ap[i] !== bp[i] ) {\n\t\t\t\treturn siblingCheck( ap[i], bp[i] );\n\t\t\t}\n\t\t}\n\n\t\t// We ended someplace up the tree so do a sibling check\n\t\treturn i === al ?\n\t\t\tsiblingCheck( a, bp[i], -1 ) :\n\t\t\tsiblingCheck( ap[i], b, 1 );\n\t};\n\n\tsiblingCheck = function( a, b, ret ) {\n\t\tif ( a === b ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tvar cur = a.nextSibling;\n\n\t\twhile ( cur ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tcur = cur.nextSibling;\n\t\t}\n\n\t\treturn 1;\n\t};\n}\n\n// Check to see if the browser returns elements by name when\n// querying by getElementById (and provide a workaround)\n(function(){\n\t// We're going to inject a fake input element with a specified name\n\tvar form = document.createElement(\"div\"),\n\t\tid = \"script\" + (new Date()).getTime(),\n\t\troot = document.documentElement;\n\n\tform.innerHTML = \"<a name='\" + id + \"'/>\";\n\n\t// Inject it into the root element, check its status, and remove it quickly\n\troot.insertBefore( form, root.firstChild );\n\n\t// The workaround has to do additional checks after a getElementById\n\t// Which slows things down for other browsers (hence the branching)\n\tif ( document.getElementById( id ) ) {\n\t\tExpr.find.ID = function( match, context, isXML ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\t\t\t\tvar m = context.getElementById(match[1]);\n\n\t\t\t\treturn m ?\n\t\t\t\t\tm.id === match[1] || typeof m.getAttributeNode !== \"undefined\" && m.getAttributeNode(\"id\").nodeValue === match[1] ?\n\t\t\t\t\t\t[m] :\n\t\t\t\t\t\tundefined :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t};\n\n\t\tExpr.filter.ID = function( elem, match ) {\n\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\n\t\t\treturn elem.nodeType === 1 && node && node.nodeValue === match;\n\t\t};\n\t}\n\n\troot.removeChild( form );\n\n\t// release memory in IE\n\troot = form = null;\n})();\n\n(function(){\n\t// Check to see if the browser returns only elements\n\t// when doing getElementsByTagName(\"*\")\n\n\t// Create a fake element\n\tvar div = document.createElement(\"div\");\n\tdiv.appendChild( document.createComment(\"\") );\n\n\t// Make sure no comments are found\n\tif ( div.getElementsByTagName(\"*\").length > 0 ) {\n\t\tExpr.find.TAG = function( match, context ) {\n\t\t\tvar results = context.getElementsByTagName( match[1] );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( match[1] === \"*\" ) {\n\t\t\t\tvar tmp = [];\n\n\t\t\t\tfor ( var i = 0; results[i]; i++ ) {\n\t\t\t\t\tif ( results[i].nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( results[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresults = tmp;\n\t\t\t}\n\n\t\t\treturn results;\n\t\t};\n\t}\n\n\t// Check to see if an attribute returns normalized href attributes\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\n\tif ( div.firstChild && typeof div.firstChild.getAttribute !== \"undefined\" &&\n\t\t\tdiv.firstChild.getAttribute(\"href\") !== \"#\" ) {\n\n\t\tExpr.attrHandle.href = function( elem ) {\n\t\t\treturn elem.getAttribute( \"href\", 2 );\n\t\t};\n\t}\n\n\t// release memory in IE\n\tdiv = null;\n})();\n\nif ( document.querySelectorAll ) {\n\t(function(){\n\t\tvar oldSizzle = Sizzle,\n\t\t\tdiv = document.createElement(\"div\"),\n\t\t\tid = \"__sizzle__\";\n\n\t\tdiv.innerHTML = \"<p class='TEST'></p>\";\n\n\t\t// Safari can't handle uppercase or unicode characters when\n\t\t// in quirks mode.\n\t\tif ( div.querySelectorAll && div.querySelectorAll(\".TEST\").length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tSizzle = function( query, context, extra, seed ) {\n\t\t\tcontext = context || document;\n\n\t\t\t// Only use querySelectorAll on non-XML documents\n\t\t\t// (ID selectors don't work in non-HTML documents)\n\t\t\tif ( !seed && !Sizzle.isXML(context) ) {\n\t\t\t\t// See if we find a selector to speed up\n\t\t\t\tvar match = /^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec( query );\n\n\t\t\t\tif ( match && (context.nodeType === 1 || context.nodeType === 9) ) {\n\t\t\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t\t\tif ( match[1] ) {\n\t\t\t\t\t\treturn makeArray( context.getElementsByTagName( query ), extra );\n\n\t\t\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t\t\t} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {\n\t\t\t\t\t\treturn makeArray( context.getElementsByClassName( match[2] ), extra );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( context.nodeType === 9 ) {\n\t\t\t\t\t// Speed-up: Sizzle(\"body\")\n\t\t\t\t\t// The body element only exists once, optimize finding it\n\t\t\t\t\tif ( query === \"body\" && context.body ) {\n\t\t\t\t\t\treturn makeArray( [ context.body ], extra );\n\n\t\t\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\t\t\t} else if ( match && match[3] ) {\n\t\t\t\t\t\tvar elem = context.getElementById( match[3] );\n\n\t\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === match[3] ) {\n\t\t\t\t\t\t\t\treturn makeArray( [ elem ], extra );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn makeArray( [], extra );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn makeArray( context.querySelectorAll(query), extra );\n\t\t\t\t\t} catch(qsaError) {}\n\n\t\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t\t// IE 8 doesn't work on object elements\n\t\t\t\t} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\t\tvar oldContext = context,\n\t\t\t\t\t\told = context.getAttribute( \"id\" ),\n\t\t\t\t\t\tnid = old || id,\n\t\t\t\t\t\thasParent = context.parentNode,\n\t\t\t\t\t\trelativeHierarchySelector = /^\\s*[+~]/.test( query );\n\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnid = nid.replace( /'/g, \"\\\\$&\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( relativeHierarchySelector && hasParent ) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif ( !relativeHierarchySelector || hasParent ) {\n\t\t\t\t\t\t\treturn makeArray( context.querySelectorAll( \"[id='\" + nid + \"'] \" + query ), extra );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} catch(pseudoError) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\t\toldContext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn oldSizzle(query, context, extra, seed);\n\t\t};\n\n\t\tfor ( var prop in oldSizzle ) {\n\t\t\tSizzle[ prop ] = oldSizzle[ prop ];\n\t\t}\n\n\t\t// release memory in IE\n\t\tdiv = null;\n\t})();\n}\n\n(function(){\n\tvar html = document.documentElement,\n\t\tmatches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;\n\n\tif ( matches ) {\n\t\t// Check to see if it's possible to do matchesSelector\n\t\t// on a disconnected node (IE 9 fails this)\n\t\tvar disconnectedMatch = !matches.call( document.createElement( \"div\" ), \"div\" ),\n\t\t\tpseudoWorks = false;\n\n\t\ttry {\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( document.documentElement, \"[test!='']:sizzle\" );\n\n\t\t} catch( pseudoError ) {\n\t\t\tpseudoWorks = true;\n\t\t}\n\n\t\tSizzle.matchesSelector = function( node, expr ) {\n\t\t\t// Make sure that attribute selectors are quoted\n\t\t\texpr = expr.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g, \"='$1']\");\n\n\t\t\tif ( !Sizzle.isXML( node ) ) {\n\t\t\t\ttry {\n\t\t\t\t\tif ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {\n\t\t\t\t\t\tvar ret = matches.call( node, expr );\n\n\t\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\t\tif ( ret || !disconnectedMatch ||\n\t\t\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t\t\t// fragment in IE 9, so check for that\n\t\t\t\t\t\t\t\tnode.document && node.document.nodeType !== 11 ) {\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\treturn Sizzle(expr, null, null, [node]).length > 0;\n\t\t};\n\t}\n})();\n\n(function(){\n\tvar div = document.createElement(\"div\");\n\n\tdiv.innerHTML = \"<div class='test e'></div><div class='test'></div>\";\n\n\t// Opera can't find a second classname (in 9.6)\n\t// Also, make sure that getElementsByClassName actually exists\n\tif ( !div.getElementsByClassName || div.getElementsByClassName(\"e\").length === 0 ) {\n\t\treturn;\n\t}\n\n\t// Safari caches class attributes, doesn't catch changes (in 3.2)\n\tdiv.lastChild.className = \"e\";\n\n\tif ( div.getElementsByClassName(\"e\").length === 1 ) {\n\t\treturn;\n\t}\n\n\tExpr.order.splice(1, 0, \"CLASS\");\n\tExpr.find.CLASS = function( match, context, isXML ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && !isXML ) {\n\t\t\treturn context.getElementsByClassName(match[1]);\n\t\t}\n\t};\n\n\t// release memory in IE\n\tdiv = null;\n})();\n\nfunction dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\tvar elem = checkSet[i];\n\n\t\tif ( elem ) {\n\t\t\tvar match = false;\n\n\t\t\telem = elem[dir];\n\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem[ expando ] === doneName ) {\n\t\t\t\t\tmatch = checkSet[elem.sizset];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeType === 1 && !isXML ){\n\t\t\t\t\telem[ expando ] = doneName;\n\t\t\t\t\telem.sizset = i;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeName.toLowerCase() === cur ) {\n\t\t\t\t\tmatch = elem;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telem = elem[dir];\n\t\t\t}\n\n\t\t\tcheckSet[i] = match;\n\t\t}\n\t}\n}\n\nfunction dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\tvar elem = checkSet[i];\n\n\t\tif ( elem ) {\n\t\t\tvar match = false;\n\n\t\t\telem = elem[dir];\n\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem[ expando ] === doneName ) {\n\t\t\t\t\tmatch = checkSet[elem.sizset];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !isXML ) {\n\t\t\t\t\t\telem[ expando ] = doneName;\n\t\t\t\t\t\telem.sizset = i;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof cur !== \"string\" ) {\n\t\t\t\t\t\tif ( elem === cur ) {\n\t\t\t\t\t\t\tmatch = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {\n\t\t\t\t\t\tmatch = elem;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telem = elem[dir];\n\t\t\t}\n\n\t\t\tcheckSet[i] = match;\n\t\t}\n\t}\n}\n\nif ( document.documentElement.contains ) {\n\tSizzle.contains = function( a, b ) {\n\t\treturn a !== b && (a.contains ? a.contains(b) : true);\n\t};\n\n} else if ( document.documentElement.compareDocumentPosition ) {\n\tSizzle.contains = function( a, b ) {\n\t\treturn !!(a.compareDocumentPosition(b) & 16);\n\t};\n\n} else {\n\tSizzle.contains = function() {\n\t\treturn false;\n\t};\n}\n\nSizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;\n\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\nvar posProcess = function( selector, context, seed ) {\n\tvar match,\n\t\ttmpSet = [],\n\t\tlater = \"\",\n\t\troot = context.nodeType ? [context] : context;\n\n\t// Position selectors must be done after the filter\n\t// And so must :not(positional) so we move all PSEUDOs to the end\n\twhile ( (match = Expr.match.PSEUDO.exec( selector )) ) {\n\t\tlater += match[0];\n\t\tselector = selector.replace( Expr.match.PSEUDO, \"\" );\n\t}\n\n\tselector = Expr.relative[selector] ? selector + \"*\" : selector;\n\n\tfor ( var i = 0, l = root.length; i < l; i++ ) {\n\t\tSizzle( selector, root[i], tmpSet, seed );\n\t}\n\n\treturn Sizzle.filter( later, tmpSet );\n};\n\n// EXPOSE\n// Override sizzle attribute retrieval\nSizzle.attr = jQuery.attr;\nSizzle.selectors.attrMap = {};\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.filters;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})();\n\n\nvar runtil = /Until$/,\n\trparentsprev = /^(?:parents|prevUntil|prevAll)/,\n\t// Note: This RegExp should be improved, or likely pulled from Sizzle\n\trmultiselector = /,/,\n\tisSimple = /^.[^:#\\[\\.,]*$/,\n\tslice = Array.prototype.slice,\n\tPOS = jQuery.expr.match.POS,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar self = this,\n\t\t\ti, l;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0, l = self.length; i < l; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar ret = this.pushStack( \"\", \"find\", selector ),\n\t\t\tlength, n, r;\n\n\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\tlength = ret.length;\n\t\t\tjQuery.find( selector, this[i], ret );\n\n\t\t\tif ( i > 0 ) {\n\t\t\t\t// Make sure that the results are unique\n\t\t\t\tfor ( n = length; n < ret.length; n++ ) {\n\t\t\t\t\tfor ( r = 0; r < length; r++ ) {\n\t\t\t\t\t\tif ( ret[r] === ret[n] ) {\n\t\t\t\t\t\t\tret.splice(n--, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar targets = jQuery( target );\n\t\treturn this.filter(function() {\n\t\t\tfor ( var i = 0, l = targets.length; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, false), \"not\", selector);\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, true), \"filter\", selector );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!selector && (\n\t\t\ttypeof selector === \"string\" ?\n\t\t\t\t// If this is a positional selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\tPOS.test( selector ) ?\n\t\t\t\t\tjQuery( selector, this.context ).index( this[0] ) >= 0 :\n\t\t\t\t\tjQuery.filter( selector, this ).length > 0 :\n\t\t\t\tthis.filter( selector ).length > 0 );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar ret = [], i, l, cur = this[0];\n\n\t\t// Array (deprecated as of jQuery 1.7)\n\t\tif ( jQuery.isArray( selectors ) ) {\n\t\t\tvar level = 1;\n\n\t\t\twhile ( cur && cur.ownerDocument && cur !== context ) {\n\t\t\t\tfor ( i = 0; i < selectors.length; i++ ) {\n\n\t\t\t\t\tif ( jQuery( cur ).is( selectors[ i ] ) ) {\n\t\t\t\t\t\tret.push({ selector: selectors[ i ], elem: cur, level: level });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcur = cur.parentNode;\n\t\t\t\tlevel++;\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\t// String\n\t\tvar pos = POS.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\tcur = this[i];\n\n\t\t\twhile ( cur ) {\n\t\t\t\tif ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n\t\t\t\t\tret.push( cur );\n\t\t\t\t\tbreak;\n\n\t\t\t\t} else {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t\tif ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tret = ret.length > 1 ? jQuery.unique( ret ) : ret;\n\n\t\treturn this.pushStack( ret, \"closest\", selectors );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?\n\t\t\tall :\n\t\t\tjQuery.unique( all ) );\n\t},\n\n\tandSelf: function() {\n\t\treturn this.add( this.prevObject );\n\t}\n});\n\n// A painfully simple check to see if an element is disconnected\n// from a document (should be improved, where feasible).\nfunction isDisconnected( node ) {\n\treturn !node || !node.parentNode || node.parentNode.nodeType === 11;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn jQuery.nth( elem, 2, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn jQuery.nth( elem, 2, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( elem.parentNode.firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.makeArray( elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( !runtil.test( name ) ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\n\t\tif ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {\n\t\t\tret = ret.reverse();\n\t\t}\n\n\t\treturn this.pushStack( ret, name, slice.call( arguments ).join(\",\") );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 ?\n\t\t\tjQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n\t\t\tjQuery.find.matches(expr, elems);\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tnth: function( cur, result, dir, elem ) {\n\t\tresult = result || 1;\n\t\tvar num = 0;\n\n\t\tfor ( ; cur; cur = cur[dir] ) {\n\t\t\tif ( cur.nodeType === 1 && ++num === result ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn cur;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, keep ) {\n\n\t// Can't pass null or undefined to indexOf in Firefox 4\n\t// Set to 0 to skip string check\n\tqualifier = qualifier || 0;\n\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\tvar retVal = !!qualifier.call( elem, i, elem );\n\t\t\treturn retVal === keep;\n\t\t});\n\n\t} else if ( qualifier.nodeType ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\treturn ( elem === qualifier ) === keep;\n\t\t});\n\n\t} else if ( typeof qualifier === \"string\" ) {\n\t\tvar filtered = jQuery.grep(elements, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t});\n\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter(qualifier, filtered, !keep);\n\t\t} else {\n\t\t\tqualifier = jQuery.filter( qualifier, filtered );\n\t\t}\n\t}\n\n\treturn jQuery.grep(elements, function( elem, i ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;\n\t});\n}\n\n\n\n\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:\\d+|null)\"/g,\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style)/i,\n\trnocache = /<(?:script|object|embed|option|style)/i,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")\", \"i\"),\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /\\/(java|ecma)script/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\t_default: [ 0, \"\", \"\" ]\n\t},\n\tsafeFragment = createSafeFragment( document );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// IE can't serialize <link> and <script> tags normally\nif ( !jQuery.support.htmlSerialize ) {\n\twrapMap._default = [ 1, \"div<div>\", \"</div>\" ];\n}\n\njQuery.fn.extend({\n\ttext: function( text ) {\n\t\tif ( jQuery.isFunction(text) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tvar self = jQuery( this );\n\n\t\t\t\tself.text( text.call(this, i, self.text()) );\n\t\t\t});\n\t\t}\n\n\t\tif ( typeof text !== \"object\" && text !== undefined ) {\n\t\t\treturn this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );\n\t\t}\n\n\t\treturn jQuery.text( this );\n\t},\n\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 ) {\n\t\t\t\tthis.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 ) {\n\t\t\t\tthis.insertBefore( elem, this.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t});\n\t\t} else if ( arguments.length ) {\n\t\t\tvar set = jQuery.clean( arguments );\n\t\t\tset.push.apply( set, this.toArray() );\n\t\t\treturn this.pushStack( set, \"before\", arguments );\n\t\t}\n\t},\n\n\tafter: function() {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t});\n\t\t} else if ( arguments.length ) {\n\t\t\tvar set = this.pushStack( this, \"after\", arguments );\n\t\t\tset.push.apply( set, jQuery.clean(arguments) );\n\t\t\treturn set;\n\t\t}\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tfor ( var i = 0, elem; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( !selector || jQuery.filter( selector, [ elem ] ).length ) {\n\t\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t\t\tjQuery.cleanData( [ elem ] );\n\t\t\t\t}\n\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tfor ( var i = 0, elem; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\tif ( value === undefined ) {\n\t\t\treturn this[0] && this[0].nodeType === 1 ?\n\t\t\t\tthis[0].innerHTML.replace(rinlinejQuery, \"\") :\n\t\t\t\tnull;\n\n\t\t// See if we can take a shortcut and just use innerHTML\n\t\t} else if ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&\n\t\t\t!wrapMap[ (rtagName.exec( value ) || [\"\", \"\"])[1].toLowerCase() ] ) {\n\n\t\t\tvalue = value.replace(rxhtmlTag, \"<$1></$2>\");\n\n\t\t\ttry {\n\t\t\t\tfor ( var i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\tif ( this[i].nodeType === 1 ) {\n\t\t\t\t\t\tjQuery.cleanData( this[i].getElementsByTagName(\"*\") );\n\t\t\t\t\t\tthis[i].innerHTML = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t} catch(e) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\n\t\t} else if ( jQuery.isFunction( value ) ) {\n\t\t\tthis.each(function(i){\n\t\t\t\tvar self = jQuery( this );\n\n\t\t\t\tself.html( value.call(this, i, self.html()) );\n\t\t\t});\n\n\t\t} else {\n\t\t\tthis.empty().append( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\treplaceWith: function( value ) {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\t// Make sure that the elements are removed from the DOM before they are inserted\n\t\t\t// this can help fix replacing a parent with child elements\n\t\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\t\treturn this.each(function(i) {\n\t\t\t\t\tvar self = jQuery(this), old = self.html();\n\t\t\t\t\tself.replaceWith( value.call( this, i, old ) );\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( typeof value !== \"string\" ) {\n\t\t\t\tvalue = jQuery( value ).detach();\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\tvar next = this.nextSibling,\n\t\t\t\t\tparent = this.parentNode;\n\n\t\t\t\tjQuery( this ).remove();\n\n\t\t\t\tif ( next ) {\n\t\t\t\t\tjQuery(next).before( value );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(parent).append( value );\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\treturn this.length ?\n\t\t\t\tthis.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), \"replaceWith\", value ) :\n\t\t\t\tthis;\n\t\t}\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, table, callback ) {\n\t\tvar results, first, fragment, parent,\n\t\t\tvalue = args[0],\n\t\t\tscripts = [];\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === \"string\" && rchecked.test( value ) ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery(this).domManip( args, table, callback, true );\n\t\t\t});\n\t\t}\n\n\t\tif ( jQuery.isFunction(value) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tvar self = jQuery(this);\n\t\t\t\targs[0] = value.call(this, i, table ? self.html() : undefined);\n\t\t\t\tself.domManip( args, table, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\tparent = value && value.parentNode;\n\n\t\t\t// If we're in a fragment, just use that instead of building a new one\n\t\t\tif ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {\n\t\t\t\tresults = { fragment: parent };\n\n\t\t\t} else {\n\t\t\t\tresults = jQuery.buildFragment( args, this, scripts );\n\t\t\t}\n\n\t\t\tfragment = results.fragment;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfirst = fragment = fragment.firstChild;\n\t\t\t} else {\n\t\t\t\tfirst = fragment.firstChild;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\ttable = table && jQuery.nodeName( first, \"tr\" );\n\n\t\t\t\tfor ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {\n\t\t\t\t\tcallback.call(\n\t\t\t\t\t\ttable ?\n\t\t\t\t\t\t\troot(this[i], first) :\n\t\t\t\t\t\t\tthis[i],\n\t\t\t\t\t\t// Make sure that we do not leak memory by inadvertently discarding\n\t\t\t\t\t\t// the original fragment (which might have attached data) instead of\n\t\t\t\t\t\t// using it; in addition, use the original fragment object for the last\n\t\t\t\t\t\t// item instead of first because it can end up being emptied incorrectly\n\t\t\t\t\t\t// in certain situations (Bug #8070).\n\t\t\t\t\t\t// Fragments from the fragment cache must always be cloned and never used\n\t\t\t\t\t\t// in place.\n\t\t\t\t\t\tresults.cacheable || ( l > 1 && i < lastIndex ) ?\n\t\t\t\t\t\t\tjQuery.clone( fragment, true, true ) :\n\t\t\t\t\t\t\tfragment\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( scripts.length ) {\n\t\t\t\tjQuery.each( scripts, evalScript );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\nfunction root( elem, cur ) {\n\treturn jQuery.nodeName(elem, \"table\") ?\n\t\t(elem.getElementsByTagName(\"tbody\")[0] ||\n\t\telem.appendChild(elem.ownerDocument.createElement(\"tbody\"))) :\n\t\telem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? \".\" : \"\" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction cloneFixAttributes( src, dest ) {\n\tvar nodeName;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// clearAttributes removes the attributes, which we don't want,\n\t// but also removes the attachEvent events, which we *do* want\n\tif ( dest.clearAttributes ) {\n\t\tdest.clearAttributes();\n\t}\n\n\t// mergeAttributes, in contrast, only merges back on the\n\t// original attributes, not the events\n\tif ( dest.mergeAttributes ) {\n\t\tdest.mergeAttributes( src );\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 fail to clone children inside object elements that use\n\t// the proprietary classid attribute value (rather than the type\n\t// attribute) to identify the type of content to display\n\tif ( nodeName === \"object\" ) {\n\t\tdest.outerHTML = src.outerHTML;\n\n\t} else if ( nodeName === \"input\" && (src.type === \"checkbox\" || src.type === \"radio\") ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\t\tif ( src.checked ) {\n\t\t\tdest.defaultChecked = dest.checked = src.checked;\n\t\t}\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n\n\t// Event data gets referenced instead of copied if the expando\n\t// gets copied too\n\tdest.removeAttribute( jQuery.expando );\n}\n\njQuery.buildFragment = function( args, nodes, scripts ) {\n\tvar fragment, cacheable, cacheresults, doc,\n\tfirst = args[ 0 ];\n\n\t// nodes may contain either an explicit document object,\n\t// a jQuery collection or context object.\n\t// If nodes[0] contains a valid object to assign to doc\n\tif ( nodes && nodes[0] ) {\n\t\tdoc = nodes[0].ownerDocument || nodes[0];\n\t}\n\n\t// Ensure that an attr object doesn't incorrectly stand in as a document object\n\t// Chrome and Firefox seem to allow this to occur and will throw exception\n\t// Fixes #8950\n\tif ( !doc.createDocumentFragment ) {\n\t\tdoc = document;\n\t}\n\n\t// Only cache \"small\" (1/2 KB) HTML strings that are associated with the main document\n\t// Cloning options loses the selected state, so don't cache them\n\t// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment\n\t// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache\n\t// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501\n\tif ( args.length === 1 && typeof first === \"string\" && first.length < 512 && doc === document &&\n\t\tfirst.charAt(0) === \"<\" && !rnocache.test( first ) &&\n\t\t(jQuery.support.checkClone || !rchecked.test( first )) &&\n\t\t(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {\n\n\t\tcacheable = true;\n\n\t\tcacheresults = jQuery.fragments[ first ];\n\t\tif ( cacheresults && cacheresults !== 1 ) {\n\t\t\tfragment = cacheresults;\n\t\t}\n\t}\n\n\tif ( !fragment ) {\n\t\tfragment = doc.createDocumentFragment();\n\t\tjQuery.clean( args, doc, fragment, scripts );\n\t}\n\n\tif ( cacheable ) {\n\t\tjQuery.fragments[ first ] = cacheresults ? fragment : 1;\n\t}\n\n\treturn { fragment: fragment, cacheable: cacheable };\n};\n\njQuery.fragments = {};\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar ret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tparent = this.length === 1 && this[0].parentNode;\n\n\t\tif ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {\n\t\t\tinsert[ original ]( this[0] );\n\t\t\treturn this;\n\n\t\t} else {\n\t\t\tfor ( var i = 0, l = insert.length; i < l; i++ ) {\n\t\t\t\tvar elems = ( i > 0 ? this.clone(true) : this ).get();\n\t\t\t\tjQuery( insert[i] )[ original ]( elems );\n\t\t\t\tret = ret.concat( elems );\n\t\t\t}\n\n\t\t\treturn this.pushStack( ret, name, insert.selector );\n\t\t}\n\t};\n});\n\nfunction getAll( elem ) {\n\tif ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\treturn elem.getElementsByTagName( \"*\" );\n\n\t} else if ( typeof elem.querySelectorAll !== \"undefined\" ) {\n\t\treturn elem.querySelectorAll( \"*\" );\n\n\t} else {\n\t\treturn [];\n\t}\n}\n\n// Used in clean, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( elem.type === \"checkbox\" || elem.type === \"radio\" ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n// Finds all inputs and passes them to fixDefaultChecked\nfunction findInputs( elem ) {\n\tvar nodeName = ( elem.nodeName || \"\" ).toLowerCase();\n\tif ( nodeName === \"input\" ) {\n\t\tfixDefaultChecked( elem );\n\t// Skip scripts, get other children\n\t} else if ( nodeName !== \"script\" && typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\tjQuery.grep( elem.getElementsByTagName(\"input\"), fixDefaultChecked );\n\t}\n}\n\n// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js\nfunction shimCloneNode( elem ) {\n\tvar div = document.createElement( \"div\" );\n\tsafeFragment.appendChild( div );\n\n\tdiv.innerHTML = elem.outerHTML;\n\treturn div.firstChild;\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar srcElements,\n\t\t\tdestElements,\n\t\t\ti,\n\t\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t\tclone = jQuery.support.html5Clone || !rnoshimcache.test( \"<\" + elem.nodeName ) ?\n\t\t\t\telem.cloneNode( true ) :\n\t\t\t\tshimCloneNode( elem );\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\t\t\t// IE copies events bound via attachEvent when using cloneNode.\n\t\t\t// Calling detachEvent on the clone will also remove the events\n\t\t\t// from the original. In order to get around this, we use some\n\t\t\t// proprietary methods to clear the events. Thanks to MooTools\n\t\t\t// guys for this hotness.\n\n\t\t\tcloneFixAttributes( elem, clone );\n\n\t\t\t// Using Sizzle here is crazy slow, so we use getElementsByTagName instead\n\t\t\tsrcElements = getAll( elem );\n\t\t\tdestElements = getAll( clone );\n\n\t\t\t// Weird iteration because IE will replace the length property\n\t\t\t// with an element if you are cloning the body and one of the\n\t\t\t// elements on the page has a name or id of \"length\"\n\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tcloneFixAttributes( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tcloneCopyEvent( elem, clone );\n\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = getAll( elem );\n\t\t\t\tdestElements = getAll( clone );\n\n\t\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsrcElements = destElements = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tclean: function( elems, context, fragment, scripts ) {\n\t\tvar checkScriptType;\n\n\t\tcontext = context || document;\n\n\t\t// !context.createElement fails in IE with an error but returns typeof 'object'\n\t\tif ( typeof context.createElement === \"undefined\" ) {\n\t\t\tcontext = context.ownerDocument || context[0] && context[0].ownerDocument || document;\n\t\t}\n\n\t\tvar ret = [], j;\n\n\t\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( typeof elem === \"number\" ) {\n\t\t\t\telem += \"\";\n\t\t\t}\n\n\t\t\tif ( !elem ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Convert html string into DOM nodes\n\t\t\tif ( typeof elem === \"string\" ) {\n\t\t\t\tif ( !rhtml.test( elem ) ) {\n\t\t\t\t\telem = context.createTextNode( elem );\n\t\t\t\t} else {\n\t\t\t\t\t// Fix \"XHTML\"-style tags in all browsers\n\t\t\t\t\telem = elem.replace(rxhtmlTag, \"<$1></$2>\");\n\n\t\t\t\t\t// Trim whitespace, otherwise indexOf won't work as expected\n\t\t\t\t\tvar tag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase(),\n\t\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default,\n\t\t\t\t\t\tdepth = wrap[0],\n\t\t\t\t\t\tdiv = context.createElement(\"div\");\n\n\t\t\t\t\t// Append wrapper element to unknown element safe doc fragment\n\t\t\t\t\tif ( context === document ) {\n\t\t\t\t\t\t// Use the fragment we've already created for this document\n\t\t\t\t\t\tsafeFragment.appendChild( div );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Use a fragment created with the owner document\n\t\t\t\t\t\tcreateSafeFragment( context ).appendChild( div );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Go to html and back, then peel off extra wrappers\n\t\t\t\t\tdiv.innerHTML = wrap[1] + elem + wrap[2];\n\n\t\t\t\t\t// Move to the right depth\n\t\t\t\t\twhile ( depth-- ) {\n\t\t\t\t\t\tdiv = div.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\tvar hasBody = rtbody.test(elem),\n\t\t\t\t\t\t\ttbody = tag === \"table\" && !hasBody ?\n\t\t\t\t\t\t\t\tdiv.firstChild && div.firstChild.childNodes :\n\n\t\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\t\twrap[1] === \"<table>\" && !hasBody ?\n\t\t\t\t\t\t\t\t\tdiv.childNodes :\n\t\t\t\t\t\t\t\t\t[];\n\n\t\t\t\t\t\tfor ( j = tbody.length - 1; j >= 0 ; --j ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( tbody[ j ], \"tbody\" ) && !tbody[ j ].childNodes.length ) {\n\t\t\t\t\t\t\t\ttbody[ j ].parentNode.removeChild( tbody[ j ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// IE completely kills leading whitespace when innerHTML is used\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tdiv.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\telem = div.childNodes;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Resets defaultChecked for any radios and checkboxes\n\t\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\t\tvar len;\n\t\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\t\tif ( elem[0] && typeof (len = elem.length) === \"number\" ) {\n\t\t\t\t\tfor ( j = 0; j < len; j++ ) {\n\t\t\t\t\t\tfindInputs( elem[j] );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfindInputs( elem );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( elem.nodeType ) {\n\t\t\t\tret.push( elem );\n\t\t\t} else {\n\t\t\t\tret = jQuery.merge( ret, elem );\n\t\t\t}\n\t\t}\n\n\t\tif ( fragment ) {\n\t\t\tcheckScriptType = function( elem ) {\n\t\t\t\treturn !elem.type || rscriptType.test( elem.type );\n\t\t\t};\n\t\t\tfor ( i = 0; ret[i]; i++ ) {\n\t\t\t\tif ( scripts && jQuery.nodeName( ret[i], \"script\" ) && (!ret[i].type || ret[i].type.toLowerCase() === \"text/javascript\") ) {\n\t\t\t\t\tscripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );\n\n\t\t\t\t} else {\n\t\t\t\t\tif ( ret[i].nodeType === 1 ) {\n\t\t\t\t\t\tvar jsTags = jQuery.grep( ret[i].getElementsByTagName( \"script\" ), checkScriptType );\n\n\t\t\t\t\t\tret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n\t\t\t\t\t}\n\t\t\t\t\tfragment.appendChild( ret[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, id,\n\t\t\tcache = jQuery.cache,\n\t\t\tspecial = jQuery.event.special,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando;\n\n\t\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tid = elem[ jQuery.expando ];\n\n\t\t\tif ( id ) {\n\t\t\t\tdata = cache[ id ];\n\n\t\t\t\tif ( data && data.events ) {\n\t\t\t\t\tfor ( var type in data.events ) {\n\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Null the DOM reference to avoid IE6/7/8 leak (#7054)\n\t\t\t\t\tif ( data.handle ) {\n\t\t\t\t\t\tdata.handle.elem = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\tdelete elem[ jQuery.expando ];\n\n\t\t\t\t} else if ( elem.removeAttribute ) {\n\t\t\t\t\telem.removeAttribute( jQuery.expando );\n\t\t\t\t}\n\n\t\t\t\tdelete cache[ id ];\n\t\t\t}\n\t\t}\n\t}\n});\n\nfunction evalScript( i, elem ) {\n\tif ( elem.src ) {\n\t\tjQuery.ajax({\n\t\t\turl: elem.src,\n\t\t\tasync: false,\n\t\t\tdataType: \"script\"\n\t\t});\n\t} else {\n\t\tjQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || \"\" ).replace( rcleanScript, \"/*$0*/\" ) );\n\t}\n\n\tif ( elem.parentNode ) {\n\t\telem.parentNode.removeChild( elem );\n\t}\n}\n\n\n\n\nvar ralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity=([^)]*)/,\n\t// fixed for IE9, see #8346\n\trupper = /([A-Z]|^ms)/g,\n\trnumpx = /^-?\\d+(?:px)?$/i,\n\trnum = /^-?\\d/,\n\trrelNum = /^([\\-+])=([\\-+.\\de]+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssWidth = [ \"Left\", \"Right\" ],\n\tcssHeight = [ \"Top\", \"Bottom\" ],\n\tcurCSS,\n\n\tgetComputedStyle,\n\tcurrentStyle;\n\njQuery.fn.css = function( name, value ) {\n\t// Setting 'undefined' is a no-op\n\tif ( arguments.length === 2 && value === undefined ) {\n\t\treturn this;\n\t}\n\n\treturn jQuery.access( this, name, value, true, function( elem, name, value ) {\n\t\treturn value !== undefined ?\n\t\t\tjQuery.style( elem, name, value ) :\n\t\t\tjQuery.css( elem, name );\n\t});\n};\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\", \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\n\t\t\t\t} else {\n\t\t\t\t\treturn elem.style.opacity;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Exclude the following css properties to add px\n\tcssNumber: {\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, origName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style, hooks = jQuery.cssHooks[ origName ];\n\n\t\tname = jQuery.cssProps[ origName ] || origName;\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra ) {\n\t\tvar ret, hooks;\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.camelCase( name );\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tname = jQuery.cssProps[ name ] || name;\n\n\t\t// cssFloat needs a special treatment\n\t\tif ( name === \"cssFloat\" ) {\n\t\t\tname = \"float\";\n\t\t}\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {\n\t\t\treturn ret;\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t} else if ( curCSS ) {\n\t\t\treturn curCSS( elem, name );\n\t\t}\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations\n\tswap: function( elem, options, callback ) {\n\t\tvar old = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( var name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tcallback.call( elem );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\t}\n});\n\n// DEPRECATED, Use jQuery.css() instead\njQuery.curCSS = jQuery.css;\n\njQuery.each([\"height\", \"width\"], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tvar val;\n\n\t\t\tif ( computed ) {\n\t\t\t\tif ( elem.offsetWidth !== 0 ) {\n\t\t\t\t\treturn getWH( elem, name, extra );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\tval = getWH( elem, name, extra );\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn val;\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tif ( rnumpx.test( value ) ) {\n\t\t\t\t// ignore negative width and height values #1599\n\t\t\t\tvalue = parseFloat( value );\n\n\t\t\t\tif ( value >= 0 ) {\n\t\t\t\t\treturn value + \"px\";\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( parseFloat( RegExp.$1 ) / 100 ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\tif ( value >= 1 && jQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there there is no filter style applied in a css rule, we are done\n\t\t\t\tif ( currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\njQuery(function() {\n\t// This hook cannot be added until DOM ready because the support test\n\t// for it is not run until after DOM ready\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\tvar ret;\n\t\t\t\tjQuery.swap( elem, { \"display\": \"inline-block\" }, function() {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tret = curCSS( elem, \"margin-right\", \"marginRight\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = elem.style.marginRight;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t}\n});\n\nif ( document.defaultView && document.defaultView.getComputedStyle ) {\n\tgetComputedStyle = function( elem, name ) {\n\t\tvar ret, defaultView, computedStyle;\n\n\t\tname = name.replace( rupper, \"-$1\" ).toLowerCase();\n\n\t\tif ( (defaultView = elem.ownerDocument.defaultView) &&\n\t\t\t\t(computedStyle = defaultView.getComputedStyle( elem, null )) ) {\n\t\t\tret = computedStyle.getPropertyValue( name );\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nif ( document.documentElement.currentStyle ) {\n\tcurrentStyle = function( elem, name ) {\n\t\tvar left, rsLeft, uncomputed,\n\t\t\tret = elem.currentStyle && elem.currentStyle[ name ],\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret === null && style && (uncomputed = style[ name ]) ) {\n\t\t\tret = uncomputed;\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\tif ( !rnumpx.test( ret ) && rnum.test( ret ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trsLeft = elem.runtimeStyle && elem.runtimeStyle.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ( ret || 0 );\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\ncurCSS = getComputedStyle || currentStyle;\n\nfunction getWH( elem, name, extra ) {\n\n\t// Start with offset property\n\tvar val = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\twhich = name === \"width\" ? cssWidth : cssHeight,\n\t\ti = 0,\n\t\tlen = which.length;\n\n\tif ( val > 0 ) {\n\t\tif ( extra !== \"border\" ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tif ( !extra ) {\n\t\t\t\t\tval -= parseFloat( jQuery.css( elem, \"padding\" + which[ i ] ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( extra === \"margin\" ) {\n\t\t\t\t\tval += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;\n\t\t\t\t} else {\n\t\t\t\t\tval -= parseFloat( jQuery.css( elem, \"border\" + which[ i ] + \"Width\" ) ) || 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn val + \"px\";\n\t}\n\n\t// Fall back to computed then uncomputed css if necessary\n\tval = curCSS( elem, name, name );\n\tif ( val < 0 || val == null ) {\n\t\tval = elem.style[ name ] || 0;\n\t}\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Add padding, border, margin\n\tif ( extra ) {\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tval += parseFloat( jQuery.css( elem, \"padding\" + which[ i ] ) ) || 0;\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += parseFloat( jQuery.css( elem, \"border\" + which[ i ] + \"Width\" ) ) || 0;\n\t\t\t}\n\t\t\tif ( extra === \"margin\" ) {\n\t\t\t\tval += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val + \"px\";\n}\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\tvar width = elem.offsetWidth,\n\t\t\theight = elem.offsetHeight;\n\n\t\treturn ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trhash = /#.*$/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\trinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trquery = /\\?/,\n\trscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n\trselectTextarea = /^(?:select|textarea)/i,\n\trspacesAjax = /\\s+/,\n\trts = /([?&])_=[^&]*/,\n\trurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Document location\n\tajaxLocation,\n\n\t// Document location segments\n\tajaxLocParts,\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = [\"*/\"] + [\"*\"];\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\tvar dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),\n\t\t\t\ti = 0,\n\t\t\t\tlength = dataTypes.length,\n\t\t\t\tdataType,\n\t\t\t\tlist,\n\t\t\t\tplaceBefore;\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tdataType = dataTypes[ i ];\n\t\t\t\t// We control if we're asked to add before\n\t\t\t\t// any existing element\n\t\t\t\tplaceBefore = /^\\+/.test( dataType );\n\t\t\t\tif ( placeBefore ) {\n\t\t\t\t\tdataType = dataType.substr( 1 ) || \"*\";\n\t\t\t\t}\n\t\t\t\tlist = structure[ dataType ] = structure[ dataType ] || [];\n\t\t\t\t// then we add to the structure accordingly\n\t\t\t\tlist[ placeBefore ? \"unshift\" : \"push\" ]( func );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,\n\t\tdataType /* internal */, inspected /* internal */ ) {\n\n\tdataType = dataType || options.dataTypes[ 0 ];\n\tinspected = inspected || {};\n\n\tinspected[ dataType ] = true;\n\n\tvar list = structure[ dataType ],\n\t\ti = 0,\n\t\tlength = list ? list.length : 0,\n\t\texecuteOnly = ( structure === prefilters ),\n\t\tselection;\n\n\tfor ( ; i < length && ( executeOnly || !selection ); i++ ) {\n\t\tselection = list[ i ]( options, originalOptions, jqXHR );\n\t\t// If we got redirected to another dataType\n\t\t// we try there if executing only and not done already\n\t\tif ( typeof selection === \"string\" ) {\n\t\t\tif ( !executeOnly || inspected[ selection ] ) {\n\t\t\t\tselection = undefined;\n\t\t\t} else {\n\t\t\t\toptions.dataTypes.unshift( selection );\n\t\t\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\t\t\tstructure, options, originalOptions, jqXHR, selection, inspected );\n\t\t\t}\n\t\t}\n\t}\n\t// If we're only executing or nothing was selected\n\t// we try the catchall dataType if not done already\n\tif ( ( executeOnly || !selection ) && !inspected[ \"*\" ] ) {\n\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\tstructure, options, originalOptions, jqXHR, \"*\", inspected );\n\t}\n\t// unnecessary when only executing (prefilters)\n\t// but it'll be ignored by the caller in that case\n\treturn selection;\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n}\n\njQuery.fn.extend({\n\tload: function( url, params, callback ) {\n\t\tif ( typeof url !== \"string\" && _load ) {\n\t\t\treturn _load.apply( this, arguments );\n\n\t\t// Don't do a request if no elements are being requested\n\t\t} else if ( !this.length ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar off = url.indexOf( \" \" );\n\t\tif ( off >= 0 ) {\n\t\t\tvar selector = url.slice( off, url.length );\n\t\t\turl = url.slice( 0, off );\n\t\t}\n\n\t\t// Default to a GET request\n\t\tvar type = \"GET\";\n\n\t\t// If the second parameter was provided\n\t\tif ( params ) {\n\t\t\t// If it's a function\n\t\t\tif ( jQuery.isFunction( params ) ) {\n\t\t\t\t// We assume that it's the callback\n\t\t\t\tcallback = params;\n\t\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t\t} else if ( typeof params === \"object\" ) {\n\t\t\t\tparams = jQuery.param( params, jQuery.ajaxSettings.traditional );\n\t\t\t\ttype = \"POST\";\n\t\t\t}\n\t\t}\n\n\t\tvar self = this;\n\n\t\t// Request the remote document\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params,\n\t\t\t// Complete callback (responseText is used internally)\n\t\t\tcomplete: function( jqXHR, status, responseText ) {\n\t\t\t\t// Store the response as specified by the jqXHR object\n\t\t\t\tresponseText = jqXHR.responseText;\n\t\t\t\t// If successful, inject the HTML into all the matched elements\n\t\t\t\tif ( jqXHR.isResolved() ) {\n\t\t\t\t\t// #4825: Get the actual response in case\n\t\t\t\t\t// a dataFilter is present in ajaxSettings\n\t\t\t\t\tjqXHR.done(function( r ) {\n\t\t\t\t\t\tresponseText = r;\n\t\t\t\t\t});\n\t\t\t\t\t// See if a selector was specified\n\t\t\t\t\tself.html( selector ?\n\t\t\t\t\t\t// Create a dummy div to hold the results\n\t\t\t\t\t\tjQuery(\"<div>\")\n\t\t\t\t\t\t\t// inject the contents of the document in, removing the scripts\n\t\t\t\t\t\t\t// to avoid any 'Permission Denied' errors in IE\n\t\t\t\t\t\t\t.append(responseText.replace(rscript, \"\"))\n\n\t\t\t\t\t\t\t// Locate the specified elements\n\t\t\t\t\t\t\t.find(selector) :\n\n\t\t\t\t\t\t// If not, just inject the full result\n\t\t\t\t\t\tresponseText );\n\t\t\t\t}\n\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tself.each( callback, [ responseText, status, jqXHR ] );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t},\n\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\treturn this.elements ? jQuery.makeArray( this.elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\treturn this.name && !this.disabled &&\n\t\t\t\t( this.checked || rselectTextarea.test( this.nodeName ) ||\n\t\t\t\t\trinput.test( this.type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val, i ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( \"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split( \" \" ), function( i, o ){\n\tjQuery.fn[ o ] = function( f ){\n\t\treturn this.on( o, f );\n\t};\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\ttype: method,\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: callback,\n\t\t\tdataType: type\n\t\t});\n\t};\n});\n\njQuery.extend({\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\tif ( settings ) {\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( target, jQuery.ajaxSettings );\n\t\t} else {\n\t\t\t// Extending ajaxSettings\n\t\t\tsettings = target;\n\t\t\ttarget = jQuery.ajaxSettings;\n\t\t}\n\t\tajaxExtend( target, settings );\n\t\treturn target;\n\t},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\ttype: \"GET\",\n\t\tcontentType: \"application/x-www-form-urlencoded\",\n\t\tprocessData: true,\n\t\tasync: true,\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\thtml: \"text/html\",\n\t\t\ttext: \"text/plain\",\n\t\t\tjson: \"application/json, text/javascript\",\n\t\t\t\"*\": allTypes\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\"\n\t\t},\n\n\t\t// List of data converters\n\t\t// 1) key format is \"source_type destination_type\" (a single space in-between)\n\t\t// 2) the catchall symbol \"*\" can be used for source_type\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": window.String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\tcontext: true,\n\t\t\turl: true\n\t\t}\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events\n\t\t\t// It's the callbackContext if one was provided in the options\n\t\t\t// and if it's a DOM node or a jQuery collection\n\t\t\tglobalEventContext = callbackContext !== s &&\n\t\t\t\t( callbackContext.nodeType || callbackContext instanceof jQuery ) ?\n\t\t\t\t\t\tjQuery( callbackContext ) : jQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// ifModified key\n\t\t\tifModifiedKey,\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// transport\n\t\t\ttransport,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match === undefined ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tstatusText = statusText || \"abort\";\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( statusText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, statusText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Callback for when everything is done\n\t\t// It is defined here because jslint complains if it is declared\n\t\t// at the end of the function (which would be more logical and readable)\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\tvar isSuccess,\n\t\t\t\tsuccess,\n\t\t\t\terror,\n\t\t\t\tstatusText = nativeStatusText,\n\t\t\t\tresponse = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,\n\t\t\t\tlastModified,\n\t\t\t\tetag;\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( status >= 200 && status < 300 || status === 304 ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\n\t\t\t\t\tif ( ( lastModified = jqXHR.getResponseHeader( \"Last-Modified\" ) ) ) {\n\t\t\t\t\t\tjQuery.lastModified[ ifModifiedKey ] = lastModified;\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( etag = jqXHR.getResponseHeader( \"Etag\" ) ) ) {\n\t\t\t\t\t\tjQuery.etag[ ifModifiedKey ] = etag;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If not modified\n\t\t\t\tif ( status === 304 ) {\n\n\t\t\t\t\tstatusText = \"notmodified\";\n\t\t\t\t\tisSuccess = true;\n\n\t\t\t\t// If we have data\n\t\t\t\t} else {\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tsuccess = ajaxConvert( s, response );\n\t\t\t\t\t\tstatusText = \"success\";\n\t\t\t\t\t\tisSuccess = true;\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t// We have a parsererror\n\t\t\t\t\t\tstatusText = \"parsererror\";\n\t\t\t\t\t\terror = e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( !statusText || status ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = \"\" + ( nativeStatusText || statusText );\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajax\" + ( isSuccess ? \"Success\" : \"Error\" ),\n\t\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\t\tjqXHR.complete = completeDeferred.add;\n\n\t\t// Status-dependent callbacks\n\t\tjqXHR.statusCode = function( map ) {\n\t\t\tif ( map ) {\n\t\t\t\tvar tmp;\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tfor ( tmp in map ) {\n\t\t\t\t\t\tstatusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttmp = map[ jqXHR.status ];\n\t\t\t\t\tjqXHR.then( tmp, tmp );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().split( rspacesAjax );\n\n\t\t// Determine if a cross-domain request is in order\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? 80 : 443 ) ) !=\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? 80 : 443 ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefiler, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.data;\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Get ifModifiedKey before adding the anti-cache parameter\n\t\t\tifModifiedKey = s.url;\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\n\t\t\t\tvar ts = jQuery.now(),\n\t\t\t\t\t// try replacing _= if it is there\n\t\t\t\t\tret = s.url.replace( rts, \"$1_=\" + ts );\n\n\t\t\t\t// if nothing was replaced, add timestamp to the end\n\t\t\t\ts.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? \"&\" : \"?\" ) + \"_=\" + ts : \"\" );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tifModifiedKey = ifModifiedKey || s.url;\n\t\t\tif ( jQuery.lastModified[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ ifModifiedKey ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ ifModifiedKey ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t\t// Abort if not done already\n\t\t\t\tjqXHR.abort();\n\t\t\t\treturn false;\n\n\t\t}\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout( function(){\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch (e) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tparam: function( a, traditional ) {\n\t\tvar s = [],\n\t\t\tadd = function( key, value ) {\n\t\t\t\t// If value is a function, invoke it and return its value\n\t\t\t\tvalue = jQuery.isFunction( value ) ? value() : value;\n\t\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t\t};\n\n\t\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\t\tif ( traditional === undefined ) {\n\t\t\ttraditional = jQuery.ajaxSettings.traditional;\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each( a, function() {\n\t\t\t\tadd( this.name, this.value );\n\t\t\t});\n\n\t\t} else {\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor ( var prefix in a ) {\n\t\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join( \"&\" ).replace( r20, \"+\" );\n\t}\n});\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// If array item is non-scalar (array or object), encode its\n\t\t\t\t// numeric index to resolve deserialization ambiguity issues.\n\t\t\t\t// Note that rack (as of 1.0.0) can't currently deserialize\n\t\t\t\t// nested arrays properly, and attempting to do so may cause\n\t\t\t\t// a server error. Possible fixes are to modify rack's\n\t\t\t\t// deserialization algorithm or to provide an option or flag\n\t\t\t\t// to force array serialization to be shallow.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" || jQuery.isArray(v) ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && obj != null && typeof obj === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( var name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// This is still on the jQuery object... for now\n// Want to move this to jQuery.ajax some day\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {}\n\n});\n\n/* Handles responses to an ajax request:\n * - sets all responseXXX fields accordingly\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar contents = s.contents,\n\t\tdataTypes = s.dataTypes,\n\t\tresponseFields = s.responseFields,\n\t\tct,\n\t\ttype,\n\t\tfinalDataType,\n\t\tfirstDataType;\n\n\t// Fill responseXXX fields\n\tfor ( type in responseFields ) {\n\t\tif ( type in responses ) {\n\t\t\tjqXHR[ responseFields[type] ] = responses[ type ];\n\t\t}\n\t}\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"content-type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n// Chain conversions given the request and the original response\nfunction ajaxConvert( s, response ) {\n\n\t// Apply the dataFilter if provided\n\tif ( s.dataFilter ) {\n\t\tresponse = s.dataFilter( response, s.dataType );\n\t}\n\n\tvar dataTypes = s.dataTypes,\n\t\tconverters = {},\n\t\ti,\n\t\tkey,\n\t\tlength = dataTypes.length,\n\t\ttmp,\n\t\t// Current and previous dataTypes\n\t\tcurrent = dataTypes[ 0 ],\n\t\tprev,\n\t\t// Conversion expression\n\t\tconversion,\n\t\t// Conversion function\n\t\tconv,\n\t\t// Conversion functions (transitive conversion)\n\t\tconv1,\n\t\tconv2;\n\n\t// For each dataType in the chain\n\tfor ( i = 1; i < length; i++ ) {\n\n\t\t// Create converters map\n\t\t// with lowercased keys\n\t\tif ( i === 1 ) {\n\t\t\tfor ( key in s.converters ) {\n\t\t\t\tif ( typeof key === \"string\" ) {\n\t\t\t\t\tconverters[ key.toLowerCase() ] = s.converters[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Get the dataTypes\n\t\tprev = current;\n\t\tcurrent = dataTypes[ i ];\n\n\t\t// If current is auto dataType, update it to prev\n\t\tif ( current === \"*\" ) {\n\t\t\tcurrent = prev;\n\t\t// If no auto and dataTypes are actually different\n\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t// Get the converter\n\t\t\tconversion = prev + \" \" + current;\n\t\t\tconv = converters[ conversion ] || converters[ \"* \" + current ];\n\n\t\t\t// If there is no direct converter, search transitively\n\t\t\tif ( !conv ) {\n\t\t\t\tconv2 = undefined;\n\t\t\t\tfor ( conv1 in converters ) {\n\t\t\t\t\ttmp = conv1.split( \" \" );\n\t\t\t\t\tif ( tmp[ 0 ] === prev || tmp[ 0 ] === \"*\" ) {\n\t\t\t\t\t\tconv2 = converters[ tmp[1] + \" \" + current ];\n\t\t\t\t\t\tif ( conv2 ) {\n\t\t\t\t\t\t\tconv1 = converters[ conv1 ];\n\t\t\t\t\t\t\tif ( conv1 === true ) {\n\t\t\t\t\t\t\t\tconv = conv2;\n\t\t\t\t\t\t\t} else if ( conv2 === true ) {\n\t\t\t\t\t\t\t\tconv = conv1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If we found no converter, dispatch an error\n\t\t\tif ( !( conv || conv2 ) ) {\n\t\t\t\tjQuery.error( \"No conversion from \" + conversion.replace(\" \",\" to \") );\n\t\t\t}\n\t\t\t// If found converter is not an equivalence\n\t\t\tif ( conv !== true ) {\n\t\t\t\t// Convert with 1 or 2 converters accordingly\n\t\t\t\tresponse = conv ? conv( response ) : conv2( conv1(response) );\n\t\t\t}\n\t\t}\n\t}\n\treturn response;\n}\n\n\n\n\nvar jsc = jQuery.now(),\n\tjsre = /(\\=)\\?(&|$)|\\?\\?/i;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\treturn jQuery.expando + \"_\" + ( jsc++ );\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar inspectData = s.contentType === \"application/x-www-form-urlencoded\" &&\n\t\t( typeof s.data === \"string\" );\n\n\tif ( s.dataTypes[ 0 ] === \"jsonp\" ||\n\t\ts.jsonp !== false && ( jsre.test( s.url ) ||\n\t\t\t\tinspectData && jsre.test( s.data ) ) ) {\n\n\t\tvar responseContainer,\n\t\t\tjsonpCallback = s.jsonpCallback =\n\t\t\t\tjQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,\n\t\t\tprevious = window[ jsonpCallback ],\n\t\t\turl = s.url,\n\t\t\tdata = s.data,\n\t\t\treplace = \"$1\" + jsonpCallback + \"$2\";\n\n\t\tif ( s.jsonp !== false ) {\n\t\t\turl = url.replace( jsre, replace );\n\t\t\tif ( s.url === url ) {\n\t\t\t\tif ( inspectData ) {\n\t\t\t\t\tdata = data.replace( jsre, replace );\n\t\t\t\t}\n\t\t\t\tif ( s.data === data ) {\n\t\t\t\t\t// Add callback manually\n\t\t\t\t\turl += (/\\?/.test( url ) ? \"&\" : \"?\") + s.jsonp + \"=\" + jsonpCallback;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ts.url = url;\n\t\ts.data = data;\n\n\t\t// Install callback\n\t\twindow[ jsonpCallback ] = function( response ) {\n\t\t\tresponseContainer = [ response ];\n\t\t};\n\n\t\t// Clean-up function\n\t\tjqXHR.always(function() {\n\t\t\t// Set callback back to previous value\n\t\t\twindow[ jsonpCallback ] = previous;\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( previous ) ) {\n\t\t\t\twindow[ jsonpCallback ]( responseContainer[ 0 ] );\n\t\t\t}\n\t\t});\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( jsonpCallback + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /javascript|ecmascript/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || document.getElementsByTagName( \"head\" )[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = \"async\";\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( head && script.parentNode ) {\n\t\t\t\t\t\t\thead.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = undefined;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t// Use insertBefore instead of appendChild  to circumvent an IE6 bug.\n\t\t\t\t// This arises when a base node is used (#2709 and #4378).\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( 0, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar // #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject ? function() {\n\t\t// Abort all pending requests\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( 0, 1 );\n\t\t}\n\t} : false,\n\txhrId = 0,\n\txhrCallbacks;\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\n(function( xhr ) {\n\tjQuery.extend( jQuery.support, {\n\t\tajax: !!xhr,\n\t\tcors: !!xhr && ( \"withCredentials\" in xhr )\n\t});\n})( jQuery.ajaxSettings.xhr() );\n\n// Create transport if the browser can provide an xhr\nif ( jQuery.support.ajax ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar xhr = s.xhr(),\n\t\t\t\t\t\thandle,\n\t\t\t\t\t\ti;\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( _ ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\n\t\t\t\t\t\tvar status,\n\t\t\t\t\t\t\tstatusText,\n\t\t\t\t\t\t\tresponseHeaders,\n\t\t\t\t\t\t\tresponses,\n\t\t\t\t\t\t\txml;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occured\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\txml = xhr.responseXML;\n\n\t\t\t\t\t\t\t\t\t// Construct response list\n\t\t\t\t\t\t\t\t\tif ( xml && xml.documentElement /* #4958 */ ) {\n\t\t\t\t\t\t\t\t\t\tresponses.xml = xml;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// if we're in sync mode or it's in cache\n\t\t\t\t\t// and has been retrieved directly (IE6 & IE7)\n\t\t\t\t\t// we need to manually fire the callback\n\t\t\t\t\tif ( !s.async || xhr.readyState === 4 ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback(0,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\n\n\n\n\nvar elemdisplay = {},\n\tiframe, iframeDoc,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = /^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,\n\ttimerId,\n\tfxAttrs = [\n\t\t// height animations\n\t\t[ \"height\", \"marginTop\", \"marginBottom\", \"paddingTop\", \"paddingBottom\" ],\n\t\t// width animations\n\t\t[ \"width\", \"marginLeft\", \"marginRight\", \"paddingLeft\", \"paddingRight\" ],\n\t\t// opacity animations\n\t\t[ \"opacity\" ]\n\t],\n\tfxNow;\n\njQuery.fn.extend({\n\tshow: function( speed, easing, callback ) {\n\t\tvar elem, display;\n\n\t\tif ( speed || speed === 0 ) {\n\t\t\treturn this.animate( genFx(\"show\", 3), speed, easing, callback );\n\n\t\t} else {\n\t\t\tfor ( var i = 0, j = this.length; i < j; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.style ) {\n\t\t\t\t\tdisplay = elem.style.display;\n\n\t\t\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t\t\t// being hidden by cascaded rules or not\n\t\t\t\t\tif ( !jQuery._data(elem, \"olddisplay\") && display === \"none\" ) {\n\t\t\t\t\t\tdisplay = elem.style.display = \"\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set elements which have been overridden with display: none\n\t\t\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t\t\t// for such an element\n\t\t\t\t\tif ( display === \"\" && jQuery.css(elem, \"display\") === \"none\" ) {\n\t\t\t\t\t\tjQuery._data( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the display of most of the elements in a second loop\n\t\t\t// to avoid the constant reflow\n\t\t\tfor ( i = 0; i < j; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.style ) {\n\t\t\t\t\tdisplay = elem.style.display;\n\n\t\t\t\t\tif ( display === \"\" || display === \"none\" ) {\n\t\t\t\t\t\telem.style.display = jQuery._data( elem, \"olddisplay\" ) || \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t},\n\n\thide: function( speed, easing, callback ) {\n\t\tif ( speed || speed === 0 ) {\n\t\t\treturn this.animate( genFx(\"hide\", 3), speed, easing, callback);\n\n\t\t} else {\n\t\t\tvar elem, display,\n\t\t\t\ti = 0,\n\t\t\t\tj = this.length;\n\n\t\t\tfor ( ; i < j; i++ ) {\n\t\t\t\telem = this[i];\n\t\t\t\tif ( elem.style ) {\n\t\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t\t\t\tif ( display !== \"none\" && !jQuery._data( elem, \"olddisplay\" ) ) {\n\t\t\t\t\t\tjQuery._data( elem, \"olddisplay\", display );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the display of the elements in a second loop\n\t\t\t// to avoid the constant reflow\n\t\t\tfor ( i = 0; i < j; i++ ) {\n\t\t\t\tif ( this[i].style ) {\n\t\t\t\t\tthis[i].style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t},\n\n\t// Save the old toggle function\n\t_toggle: jQuery.fn.toggle,\n\n\ttoggle: function( fn, fn2, callback ) {\n\t\tvar bool = typeof fn === \"boolean\";\n\n\t\tif ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {\n\t\t\tthis._toggle.apply( this, arguments );\n\n\t\t} else if ( fn == null || bool ) {\n\t\t\tthis.each(function() {\n\t\t\t\tvar state = bool ? fn : jQuery(this).is(\":hidden\");\n\t\t\t\tjQuery(this)[ state ? \"show\" : \"hide\" ]();\n\t\t\t});\n\n\t\t} else {\n\t\t\tthis.animate(genFx(\"toggle\", 3), fn, fn2, callback);\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tfadeTo: function( speed, to, easing, callback ) {\n\t\treturn this.filter(\":hidden\").css(\"opacity\", 0).show().end()\n\t\t\t\t\t.animate({opacity: to}, speed, easing, callback);\n\t},\n\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar optall = jQuery.speed( speed, easing, callback );\n\n\t\tif ( jQuery.isEmptyObject( prop ) ) {\n\t\t\treturn this.each( optall.complete, [ false ] );\n\t\t}\n\n\t\t// Do not change referenced properties as per-property easing will be lost\n\t\tprop = jQuery.extend( {}, prop );\n\n\t\tfunction doAnimation() {\n\t\t\t// XXX 'this' does not always have a nodeName when running the\n\t\t\t// test suite\n\n\t\t\tif ( optall.queue === false ) {\n\t\t\t\tjQuery._mark( this );\n\t\t\t}\n\n\t\t\tvar opt = jQuery.extend( {}, optall ),\n\t\t\t\tisElement = this.nodeType === 1,\n\t\t\t\thidden = isElement && jQuery(this).is(\":hidden\"),\n\t\t\t\tname, val, p, e,\n\t\t\t\tparts, start, end, unit,\n\t\t\t\tmethod;\n\n\t\t\t// will store per property easing and be used to determine when an animation is complete\n\t\t\topt.animatedProperties = {};\n\n\t\t\tfor ( p in prop ) {\n\n\t\t\t\t// property name normalization\n\t\t\t\tname = jQuery.camelCase( p );\n\t\t\t\tif ( p !== name ) {\n\t\t\t\t\tprop[ name ] = prop[ p ];\n\t\t\t\t\tdelete prop[ p ];\n\t\t\t\t}\n\n\t\t\t\tval = prop[ name ];\n\n\t\t\t\t// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)\n\t\t\t\tif ( jQuery.isArray( val ) ) {\n\t\t\t\t\topt.animatedProperties[ name ] = val[ 1 ];\n\t\t\t\t\tval = prop[ name ] = val[ 0 ];\n\t\t\t\t} else {\n\t\t\t\t\topt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';\n\t\t\t\t}\n\n\t\t\t\tif ( val === \"hide\" && hidden || val === \"show\" && !hidden ) {\n\t\t\t\t\treturn opt.complete.call( this );\n\t\t\t\t}\n\n\t\t\t\tif ( isElement && ( name === \"height\" || name === \"width\" ) ) {\n\t\t\t\t\t// Make sure that nothing sneaks out\n\t\t\t\t\t// Record all 3 overflow attributes because IE does not\n\t\t\t\t\t// change the overflow attribute when overflowX and\n\t\t\t\t\t// overflowY are set to the same value\n\t\t\t\t\topt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];\n\n\t\t\t\t\t// Set display property to inline-block for height/width\n\t\t\t\t\t// animations on inline elements that are having width/height animated\n\t\t\t\t\tif ( jQuery.css( this, \"display\" ) === \"inline\" &&\n\t\t\t\t\t\t\tjQuery.css( this, \"float\" ) === \"none\" ) {\n\n\t\t\t\t\t\t// inline-level elements accept inline-block;\n\t\t\t\t\t\t// block-level elements need to be inline with layout\n\t\t\t\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === \"inline\" ) {\n\t\t\t\t\t\t\tthis.style.display = \"inline-block\";\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.style.zoom = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( opt.overflow != null ) {\n\t\t\t\tthis.style.overflow = \"hidden\";\n\t\t\t}\n\n\t\t\tfor ( p in prop ) {\n\t\t\t\te = new jQuery.fx( this, opt, p );\n\t\t\t\tval = prop[ p ];\n\n\t\t\t\tif ( rfxtypes.test( val ) ) {\n\n\t\t\t\t\t// Tracks whether to show or hide based on private\n\t\t\t\t\t// data attached to the element\n\t\t\t\t\tmethod = jQuery._data( this, \"toggle\" + p ) || ( val === \"toggle\" ? hidden ? \"show\" : \"hide\" : 0 );\n\t\t\t\t\tif ( method ) {\n\t\t\t\t\t\tjQuery._data( this, \"toggle\" + p, method === \"show\" ? \"hide\" : \"show\" );\n\t\t\t\t\t\te[ method ]();\n\t\t\t\t\t} else {\n\t\t\t\t\t\te[ val ]();\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tparts = rfxnum.exec( val );\n\t\t\t\t\tstart = e.cur();\n\n\t\t\t\t\tif ( parts ) {\n\t\t\t\t\t\tend = parseFloat( parts[2] );\n\t\t\t\t\t\tunit = parts[3] || ( jQuery.cssNumber[ p ] ? \"\" : \"px\" );\n\n\t\t\t\t\t\t// We need to compute starting value\n\t\t\t\t\t\tif ( unit !== \"px\" ) {\n\t\t\t\t\t\t\tjQuery.style( this, p, (end || 1) + unit);\n\t\t\t\t\t\t\tstart = ( (end || 1) / e.cur() ) * start;\n\t\t\t\t\t\t\tjQuery.style( this, p, start + unit);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\t\t\tif ( parts[1] ) {\n\t\t\t\t\t\t\tend = ( (parts[ 1 ] === \"-=\" ? -1 : 1) * end ) + start;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\te.custom( start, end, unit );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.custom( start, val, \"\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For JS strict compliance\n\t\t\treturn true;\n\t\t}\n\n\t\treturn optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\thadTimers = false,\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\t// clear marker counters if we know they won't be\n\t\t\tif ( !gotoEnd ) {\n\t\t\t\tjQuery._unmark( true, this );\n\t\t\t}\n\n\t\t\tfunction stopQueue( elem, data, index ) {\n\t\t\t\tvar hooks = data[ index ];\n\t\t\t\tjQuery.removeData( elem, index, true );\n\t\t\t\thooks.stop( gotoEnd );\n\t\t\t}\n\n\t\t\tif ( type == null ) {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && index.indexOf(\".run\") === index.length - 4 ) {\n\t\t\t\t\t\tstopQueue( this, data, index );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if ( data[ index = type + \".run\" ] && data[ index ].stop ){\n\t\t\t\tstopQueue( this, data, index );\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\tif ( gotoEnd ) {\n\n\t\t\t\t\t\t// force the next step to be the last\n\t\t\t\t\t\ttimers[ index ]( true );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimers[ index ].saveState();\n\t\t\t\t\t}\n\t\t\t\t\thadTimers = true;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( !( gotoEnd && hadTimers ) ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t}\n\n});\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout( clearFxNow, 0 );\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction clearFxNow() {\n\tfxNow = undefined;\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, num ) {\n\tvar obj = {};\n\n\tjQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {\n\t\tobj[ this ] = type;\n\t});\n\n\treturn obj;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx( \"show\", 1 ),\n\tslideUp: genFx( \"hide\", 1 ),\n\tslideToggle: genFx( \"toggle\", 1 ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.extend({\n\tspeed: function( speed, easing, fn ) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tjQuery.isFunction( speed ) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t\t};\n\n\t\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif ( opt.queue == null || opt.queue === true ) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function( noUnmark ) {\n\t\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\t\topt.old.call( this );\n\t\t\t}\n\n\t\t\tif ( opt.queue ) {\n\t\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t\t} else if ( noUnmark !== false ) {\n\t\t\t\tjQuery._unmark( this );\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t},\n\n\teasing: {\n\t\tlinear: function( p, n, firstNum, diff ) {\n\t\t\treturn firstNum + diff * p;\n\t\t},\n\t\tswing: function( p, n, firstNum, diff ) {\n\t\t\treturn ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;\n\t\t}\n\t},\n\n\ttimers: [],\n\n\tfx: function( elem, options, prop ) {\n\t\tthis.options = options;\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\n\t\toptions.orig = options.orig || {};\n\t}\n\n});\n\njQuery.fx.prototype = {\n\t// Simple function for setting a style value\n\tupdate: function() {\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\t( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );\n\t},\n\n\t// Get the current size\n\tcur: function() {\n\t\tif ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {\n\t\t\treturn this.elem[ this.prop ];\n\t\t}\n\n\t\tvar parsed,\n\t\t\tr = jQuery.css( this.elem, this.prop );\n\t\t// Empty strings, null, undefined and \"auto\" are converted to 0,\n\t\t// complex values such as \"rotate(1rad)\" are returned as is,\n\t\t// simple values such as \"10px\" are parsed to Float.\n\t\treturn isNaN( parsed = parseFloat( r ) ) ? !r || r === \"auto\" ? 0 : r : parsed;\n\t},\n\n\t// Start an animation from one number to another\n\tcustom: function( from, to, unit ) {\n\t\tvar self = this,\n\t\t\tfx = jQuery.fx;\n\n\t\tthis.startTime = fxNow || createFxNow();\n\t\tthis.end = to;\n\t\tthis.now = this.start = from;\n\t\tthis.pos = this.state = 0;\n\t\tthis.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? \"\" : \"px\" );\n\n\t\tfunction t( gotoEnd ) {\n\t\t\treturn self.step( gotoEnd );\n\t\t}\n\n\t\tt.queue = this.options.queue;\n\t\tt.elem = this.elem;\n\t\tt.saveState = function() {\n\t\t\tif ( self.options.hide && jQuery._data( self.elem, \"fxshow\" + self.prop ) === undefined ) {\n\t\t\t\tjQuery._data( self.elem, \"fxshow\" + self.prop, self.start );\n\t\t\t}\n\t\t};\n\n\t\tif ( t() && jQuery.timers.push(t) && !timerId ) {\n\t\t\ttimerId = setInterval( fx.tick, fx.interval );\n\t\t}\n\t},\n\n\t// Simple 'show' function\n\tshow: function() {\n\t\tvar dataShow = jQuery._data( this.elem, \"fxshow\" + this.prop );\n\n\t\t// Remember where we started, so that we can go back to it later\n\t\tthis.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );\n\t\tthis.options.show = true;\n\n\t\t// Begin the animation\n\t\t// Make sure that we start at a small width/height to avoid any flash of content\n\t\tif ( dataShow !== undefined ) {\n\t\t\t// This show is picking up where a previous hide or show left off\n\t\t\tthis.custom( this.cur(), dataShow );\n\t\t} else {\n\t\t\tthis.custom( this.prop === \"width\" || this.prop === \"height\" ? 1 : 0, this.cur() );\n\t\t}\n\n\t\t// Start by showing the element\n\t\tjQuery( this.elem ).show();\n\t},\n\n\t// Simple 'hide' function\n\thide: function() {\n\t\t// Remember where we started, so that we can go back to it later\n\t\tthis.options.orig[ this.prop ] = jQuery._data( this.elem, \"fxshow\" + this.prop ) || jQuery.style( this.elem, this.prop );\n\t\tthis.options.hide = true;\n\n\t\t// Begin the animation\n\t\tthis.custom( this.cur(), 0 );\n\t},\n\n\t// Each step of an animation\n\tstep: function( gotoEnd ) {\n\t\tvar p, n, complete,\n\t\t\tt = fxNow || createFxNow(),\n\t\t\tdone = true,\n\t\t\telem = this.elem,\n\t\t\toptions = this.options;\n\n\t\tif ( gotoEnd || t >= options.duration + this.startTime ) {\n\t\t\tthis.now = this.end;\n\t\t\tthis.pos = this.state = 1;\n\t\t\tthis.update();\n\n\t\t\toptions.animatedProperties[ this.prop ] = true;\n\n\t\t\tfor ( p in options.animatedProperties ) {\n\t\t\t\tif ( options.animatedProperties[ p ] !== true ) {\n\t\t\t\t\tdone = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( done ) {\n\t\t\t\t// Reset the overflow\n\t\t\t\tif ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {\n\n\t\t\t\t\tjQuery.each( [ \"\", \"X\", \"Y\" ], function( index, value ) {\n\t\t\t\t\t\telem.style[ \"overflow\" + value ] = options.overflow[ index ];\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Hide the element if the \"hide\" operation was done\n\t\t\t\tif ( options.hide ) {\n\t\t\t\t\tjQuery( elem ).hide();\n\t\t\t\t}\n\n\t\t\t\t// Reset the properties, if the item has been hidden or shown\n\t\t\t\tif ( options.hide || options.show ) {\n\t\t\t\t\tfor ( p in options.animatedProperties ) {\n\t\t\t\t\t\tjQuery.style( elem, p, options.orig[ p ] );\n\t\t\t\t\t\tjQuery.removeData( elem, \"fxshow\" + p, true );\n\t\t\t\t\t\t// Toggle data is no longer needed\n\t\t\t\t\t\tjQuery.removeData( elem, \"toggle\" + p, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Execute the complete function\n\t\t\t\t// in the event that the complete function throws an exception\n\t\t\t\t// we must ensure it won't be called twice. #5684\n\n\t\t\t\tcomplete = options.complete;\n\t\t\t\tif ( complete ) {\n\n\t\t\t\t\toptions.complete = false;\n\t\t\t\t\tcomplete.call( elem );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t} else {\n\t\t\t// classical easing cannot be used with an Infinity duration\n\t\t\tif ( options.duration == Infinity ) {\n\t\t\t\tthis.now = t;\n\t\t\t} else {\n\t\t\t\tn = t - this.startTime;\n\t\t\t\tthis.state = n / options.duration;\n\n\t\t\t\t// Perform the easing function, defaults to swing\n\t\t\t\tthis.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );\n\t\t\t\tthis.now = this.start + ( (this.end - this.start) * this.pos );\n\t\t\t}\n\t\t\t// Perform the next step of the animation\n\t\t\tthis.update();\n\t\t}\n\n\t\treturn true;\n\t}\n};\n\njQuery.extend( jQuery.fx, {\n\ttick: function() {\n\t\tvar timer,\n\t\t\ttimers = jQuery.timers,\n\t\t\ti = 0;\n\n\t\tfor ( ; i < timers.length; i++ ) {\n\t\t\ttimer = timers[ i ];\n\t\t\t// Checks the timer has not already been removed\n\t\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\t\ttimers.splice( i--, 1 );\n\t\t\t}\n\t\t}\n\n\t\tif ( !timers.length ) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t},\n\n\tinterval: 13,\n\n\tstop: function() {\n\t\tclearInterval( timerId );\n\t\ttimerId = null;\n\t},\n\n\tspeeds: {\n\t\tslow: 600,\n\t\tfast: 200,\n\t\t// Default speed\n\t\t_default: 400\n\t},\n\n\tstep: {\n\t\topacity: function( fx ) {\n\t\t\tjQuery.style( fx.elem, \"opacity\", fx.now );\n\t\t},\n\n\t\t_default: function( fx ) {\n\t\t\tif ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {\n\t\t\t\tfx.elem.style[ fx.prop ] = fx.now + fx.unit;\n\t\t\t} else {\n\t\t\t\tfx.elem[ fx.prop ] = fx.now;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Adds width/height step functions\n// Do not set anything below 0\njQuery.each([ \"width\", \"height\" ], function( i, prop ) {\n\tjQuery.fx.step[ prop ] = function( fx ) {\n\t\tjQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );\n\t};\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\n\n// Try to restore the default display value of an element\nfunction defaultDisplay( nodeName ) {\n\n\tif ( !elemdisplay[ nodeName ] ) {\n\n\t\tvar body = document.body,\n\t\t\telem = jQuery( \"<\" + nodeName + \">\" ).appendTo( body ),\n\t\t\tdisplay = elem.css( \"display\" );\n\t\telem.remove();\n\n\t\t// If the simple way fails,\n\t\t// get element's real default display by attaching it to a temp iframe\n\t\tif ( display === \"none\" || display === \"\" ) {\n\t\t\t// No iframe to use yet, so create it\n\t\t\tif ( !iframe ) {\n\t\t\t\tiframe = document.createElement( \"iframe\" );\n\t\t\t\tiframe.frameBorder = iframe.width = iframe.height = 0;\n\t\t\t}\n\n\t\t\tbody.appendChild( iframe );\n\n\t\t\t// Create a cacheable copy of the iframe document on first call.\n\t\t\t// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML\n\t\t\t// document to it; WebKit & Firefox won't allow reusing the iframe document.\n\t\t\tif ( !iframeDoc || !iframe.createElement ) {\n\t\t\t\tiframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;\n\t\t\t\tiframeDoc.write( ( document.compatMode === \"CSS1Compat\" ? \"<!doctype html>\" : \"\" ) + \"<html><body>\" );\n\t\t\t\tiframeDoc.close();\n\t\t\t}\n\n\t\t\telem = iframeDoc.createElement( nodeName );\n\n\t\t\tiframeDoc.body.appendChild( elem );\n\n\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\tbody.removeChild( iframe );\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn elemdisplay[ nodeName ];\n}\n\n\n\n\nvar rtable = /^t(?:able|d|h)$/i,\n\trroot = /^(?:body|html)$/i;\n\nif ( \"getBoundingClientRect\" in document.documentElement ) {\n\tjQuery.fn.offset = function( options ) {\n\t\tvar elem = this[0], box;\n\n\t\tif ( options ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t\t}\n\n\t\tif ( !elem || !elem.ownerDocument ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( elem === elem.ownerDocument.body ) {\n\t\t\treturn jQuery.offset.bodyOffset( elem );\n\t\t}\n\n\t\ttry {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t} catch(e) {}\n\n\t\tvar doc = elem.ownerDocument,\n\t\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure we're not dealing with a disconnected DOM node\n\t\tif ( !box || !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box ? { top: box.top, left: box.left } : { top: 0, left: 0 };\n\t\t}\n\n\t\tvar body = doc.body,\n\t\t\twin = getWindow(doc),\n\t\t\tclientTop  = docElem.clientTop  || body.clientTop  || 0,\n\t\t\tclientLeft = docElem.clientLeft || body.clientLeft || 0,\n\t\t\tscrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,\n\t\t\tscrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,\n\t\t\ttop  = box.top  + scrollTop  - clientTop,\n\t\t\tleft = box.left + scrollLeft - clientLeft;\n\n\t\treturn { top: top, left: left };\n\t};\n\n} else {\n\tjQuery.fn.offset = function( options ) {\n\t\tvar elem = this[0];\n\n\t\tif ( options ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t\t}\n\n\t\tif ( !elem || !elem.ownerDocument ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( elem === elem.ownerDocument.body ) {\n\t\t\treturn jQuery.offset.bodyOffset( elem );\n\t\t}\n\n\t\tvar computedStyle,\n\t\t\toffsetParent = elem.offsetParent,\n\t\t\tprevOffsetParent = elem,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tdocElem = doc.documentElement,\n\t\t\tbody = doc.body,\n\t\t\tdefaultView = doc.defaultView,\n\t\t\tprevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,\n\t\t\ttop = elem.offsetTop,\n\t\t\tleft = elem.offsetLeft;\n\n\t\twhile ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {\n\t\t\tif ( jQuery.support.fixedPosition && prevComputedStyle.position === \"fixed\" ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcomputedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;\n\t\t\ttop  -= elem.scrollTop;\n\t\t\tleft -= elem.scrollLeft;\n\n\t\t\tif ( elem === offsetParent ) {\n\t\t\t\ttop  += elem.offsetTop;\n\t\t\t\tleft += elem.offsetLeft;\n\n\t\t\t\tif ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {\n\t\t\t\t\ttop  += parseFloat( computedStyle.borderTopWidth  ) || 0;\n\t\t\t\t\tleft += parseFloat( computedStyle.borderLeftWidth ) || 0;\n\t\t\t\t}\n\n\t\t\t\tprevOffsetParent = offsetParent;\n\t\t\t\toffsetParent = elem.offsetParent;\n\t\t\t}\n\n\t\t\tif ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== \"visible\" ) {\n\t\t\t\ttop  += parseFloat( computedStyle.borderTopWidth  ) || 0;\n\t\t\t\tleft += parseFloat( computedStyle.borderLeftWidth ) || 0;\n\t\t\t}\n\n\t\t\tprevComputedStyle = computedStyle;\n\t\t}\n\n\t\tif ( prevComputedStyle.position === \"relative\" || prevComputedStyle.position === \"static\" ) {\n\t\t\ttop  += body.offsetTop;\n\t\t\tleft += body.offsetLeft;\n\t\t}\n\n\t\tif ( jQuery.support.fixedPosition && prevComputedStyle.position === \"fixed\" ) {\n\t\t\ttop  += Math.max( docElem.scrollTop, body.scrollTop );\n\t\t\tleft += Math.max( docElem.scrollLeft, body.scrollLeft );\n\t\t}\n\n\t\treturn { top: top, left: left };\n\t};\n}\n\njQuery.offset = {\n\n\tbodyOffset: function( body ) {\n\t\tvar top = body.offsetTop,\n\t\t\tleft = body.offsetLeft;\n\n\t\tif ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {\n\t\t\ttop  += parseFloat( jQuery.css(body, \"marginTop\") ) || 0;\n\t\t\tleft += parseFloat( jQuery.css(body, \"marginLeft\") ) || 0;\n\t\t}\n\n\t\treturn { top: top, left: left };\n\t},\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[0] ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar elem = this[0],\n\n\t\t// Get *real* offsetParent\n\t\toffsetParent = this.offsetParent(),\n\n\t\t// Get correct offsets\n\t\toffset       = this.offset(),\n\t\tparentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\n\t\t// Subtract element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\toffset.top  -= parseFloat( jQuery.css(elem, \"marginTop\") ) || 0;\n\t\toffset.left -= parseFloat( jQuery.css(elem, \"marginLeft\") ) || 0;\n\n\t\t// Add offsetParent borders\n\t\tparentOffset.top  += parseFloat( jQuery.css(offsetParent[0], \"borderTopWidth\") ) || 0;\n\t\tparentOffset.left += parseFloat( jQuery.css(offsetParent[0], \"borderLeftWidth\") ) || 0;\n\n\t\t// Subtract the two offsets\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top,\n\t\t\tleft: offset.left - parentOffset.left\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || document.body;\n\t\t\twhile ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, \"position\") === \"static\") ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( [\"Left\", \"Top\"], function( i, name ) {\n\tvar method = \"scroll\" + name;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\tvar elem, win;\n\n\t\tif ( val === undefined ) {\n\t\t\telem = this[ 0 ];\n\n\t\t\tif ( !elem ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\twin = getWindow( elem );\n\n\t\t\t// Return the scroll offset\n\t\t\treturn win ? (\"pageXOffset\" in win) ? win[ i ? \"pageYOffset\" : \"pageXOffset\" ] :\n\t\t\t\tjQuery.support.boxModel && win.document.documentElement[ method ] ||\n\t\t\t\t\twin.document.body[ method ] :\n\t\t\t\telem[ method ];\n\t\t}\n\n\t\t// Set the scroll offset\n\t\treturn this.each(function() {\n\t\t\twin = getWindow( this );\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!i ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\t i ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\tthis[ method ] = val;\n\t\t\t}\n\t\t});\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n\n\n\n\n// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods\njQuery.each([ \"Height\", \"Width\" ], function( i, name ) {\n\n\tvar type = name.toLowerCase();\n\n\t// innerHeight and innerWidth\n\tjQuery.fn[ \"inner\" + name ] = function() {\n\t\tvar elem = this[0];\n\t\treturn elem ?\n\t\t\telem.style ?\n\t\t\tparseFloat( jQuery.css( elem, type, \"padding\" ) ) :\n\t\t\tthis[ type ]() :\n\t\t\tnull;\n\t};\n\n\t// outerHeight and outerWidth\n\tjQuery.fn[ \"outer\" + name ] = function( margin ) {\n\t\tvar elem = this[0];\n\t\treturn elem ?\n\t\t\telem.style ?\n\t\t\tparseFloat( jQuery.css( elem, type, margin ? \"margin\" : \"border\" ) ) :\n\t\t\tthis[ type ]() :\n\t\t\tnull;\n\t};\n\n\tjQuery.fn[ type ] = function( size ) {\n\t\t// Get window width or height\n\t\tvar elem = this[0];\n\t\tif ( !elem ) {\n\t\t\treturn size == null ? null : this;\n\t\t}\n\n\t\tif ( jQuery.isFunction( size ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tvar self = jQuery( this );\n\t\t\t\tself[ type ]( size.call( this, i, self[ type ]() ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode\n\t\t\t// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat\n\t\t\tvar docElemProp = elem.document.documentElement[ \"client\" + name ],\n\t\t\t\tbody = elem.document.body;\n\t\t\treturn elem.document.compatMode === \"CSS1Compat\" && docElemProp ||\n\t\t\t\tbody && body[ \"client\" + name ] || docElemProp;\n\n\t\t// Get document width or height\n\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t// Either scroll[Width/Height] or offset[Width/Height], whichever is greater\n\t\t\treturn Math.max(\n\t\t\t\telem.documentElement[\"client\" + name],\n\t\t\t\telem.body[\"scroll\" + name], elem.documentElement[\"scroll\" + name],\n\t\t\t\telem.body[\"offset\" + name], elem.documentElement[\"offset\" + name]\n\t\t\t);\n\n\t\t// Get or set width or height on the element\n\t\t} else if ( size === undefined ) {\n\t\t\tvar orig = jQuery.css( elem, type ),\n\t\t\t\tret = parseFloat( orig );\n\n\t\t\treturn jQuery.isNumeric( ret ) ? ret : orig;\n\n\t\t// Set the width or height on the element (default to pixels if value is unitless)\n\t\t} else {\n\t\t\treturn this.css( type, typeof size === \"string\" ? size : size + \"px\" );\n\t\t}\n\t};\n\n});\n\n\n\n\n// Expose jQuery to the global object\nwindow.jQuery = window.$ = jQuery;\n\n// Expose jQuery as an AMD module, but only for AMD loaders that\n// understand the issues with loading multiple versions of jQuery\n// in a page that all might call define(). The loader will indicate\n// they have special allowances for multiple jQuery versions by\n// specifying define.amd.jQuery = true. Register as a named module,\n// since jQuery can be concatenated with other files that may use define,\n// but not use a proper concatenation script that understands anonymous\n// AMD modules. A named AMD is safest and most robust way to register.\n// Lowercase jquery is used because AMD module names are derived from\n// file names, and jQuery is normally delivered in a lowercase file name.\n// Do this after creating the global so that if an AMD module wants to call\n// noConflict to hide this version of jQuery, it will work.\nif ( typeof define === \"function\" && define.amd && define.amd.jQuery ) {\n\tdefine( \"jquery\", [], function () { return jQuery; } );\n}\n\n\n\n})( window );\n"
  },
  {
    "path": "Journey/Resources/WebView/vendor/jquery.cycle.js",
    "content": "/*!\n * jQuery Cycle Plugin (with Transition Definitions)\n * Examples and documentation at: http://jquery.malsup.com/cycle/\n * Copyright (c) 2007-2010 M. Alsup\n * Version: 2.88 (08-JUN-2010)\n * Dual licensed under the MIT and GPL licenses.\n * http://jquery.malsup.com/license.html\n * Requires: jQuery v1.2.6 or later\n */\n;(function($) {\n\nvar ver = '2.88';\n\n// if $.support is not defined (pre jQuery 1.3) add what I need\nif ($.support == undefined) {\n\t$.support = {\n\t\topacity: !($.browser.msie)\n\t};\n}\n\nfunction debug(s) {\n\tif ($.fn.cycle.debug)\n\t\tlog(s);\n}\nfunction log() {\n\tif (window.console && window.console.log)\n\t\twindow.console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));\n};\n\n// the options arg can be...\n//   a number  - indicates an immediate transition should occur to the given slide index\n//   a string  - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)\n//   an object - properties to control the slideshow\n//\n// the arg2 arg can be...\n//   the name of an fx (only used in conjunction with a numeric value for 'options')\n//   the value true (only used in first arg == 'resume') and indicates\n//\t that the resume should occur immediately (not wait for next timeout)\n\n$.fn.cycle = function(options, arg2) {\n\tvar o = { s: this.selector, c: this.context };\n\n\t// in 1.3+ we can fix mistakes with the ready state\n\tif (this.length === 0 && options != 'stop') {\n\t\tif (!$.isReady && o.s) {\n\t\t\tlog('DOM not ready, queuing slideshow');\n\t\t\t$(function() {\n\t\t\t\t$(o.s,o.c).cycle(options,arg2);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t\t// is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()\n\t\tlog('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));\n\t\treturn this;\n\t}\n\n\t// iterate the matched nodeset\n\treturn this.each(function() {\n\t\tvar opts = handleArguments(this, options, arg2);\n\t\tif (opts === false)\n\t\t\treturn;\n\n\t\topts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;\n\n\t\t// stop existing slideshow for this container (if there is one)\n\t\tif (this.cycleTimeout)\n\t\t\tclearTimeout(this.cycleTimeout);\n\t\tthis.cycleTimeout = this.cyclePause = 0;\n\n\t\tvar $cont = $(this);\n\t\tvar $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();\n\t\tvar els = $slides.get();\n\t\tif (els.length < 2) {\n\t\t\tlog('terminating; too few slides: ' + els.length);\n\t\t\treturn;\n\t\t}\n\n\t\tvar opts2 = buildOptions($cont, $slides, els, opts, o);\n\t\tif (opts2 === false)\n\t\t\treturn;\n\n\t\tvar startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.rev);\n\n\t\t// if it's an auto slideshow, kick it off\n\t\tif (startTime) {\n\t\t\tstartTime += (opts2.delay || 0);\n\t\t\tif (startTime < 10)\n\t\t\t\tstartTime = 10;\n\t\t\tdebug('first timeout: ' + startTime);\n\t\t\tthis.cycleTimeout = setTimeout(function(){go(els,opts2,0,(!opts2.rev && !opts.backwards))}, startTime);\n\t\t}\n\t});\n};\n\n// process the args that were passed to the plugin fn\nfunction handleArguments(cont, options, arg2) {\n\tif (cont.cycleStop == undefined)\n\t\tcont.cycleStop = 0;\n\tif (options === undefined || options === null)\n\t\toptions = {};\n\tif (options.constructor == String) {\n\t\tswitch(options) {\n\t\tcase 'destroy':\n\t\tcase 'stop':\n\t\t\tvar opts = $(cont).data('cycle.opts');\n\t\t\tif (!opts)\n\t\t\t\treturn false;\n\t\t\tcont.cycleStop++; // callbacks look for change\n\t\t\tif (cont.cycleTimeout)\n\t\t\t\tclearTimeout(cont.cycleTimeout);\n\t\t\tcont.cycleTimeout = 0;\n\t\t\t$(cont).removeData('cycle.opts');\n\t\t\tif (options == 'destroy')\n\t\t\t\tdestroy(opts);\n\t\t\treturn false;\n\t\tcase 'toggle':\n\t\t\tcont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;\n\t\t\tcheckInstantResume(cont.cyclePause, arg2, cont);\n\t\t\treturn false;\n\t\tcase 'pause':\n\t\t\tcont.cyclePause = 1;\n\t\t\treturn false;\n\t\tcase 'resume':\n\t\t\tcont.cyclePause = 0;\n\t\t\tcheckInstantResume(false, arg2, cont);\n\t\t\treturn false;\n\t\tcase 'prev':\n\t\tcase 'next':\n\t\t\tvar opts = $(cont).data('cycle.opts');\n\t\t\tif (!opts) {\n\t\t\t\tlog('options not found, \"prev/next\" ignored');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$.fn.cycle[options](opts);\n\t\t\treturn false;\n\t\tdefault:\n\t\t\toptions = { fx: options };\n\t\t};\n\t\treturn options;\n\t}\n\telse if (options.constructor == Number) {\n\t\t// go to the requested slide\n\t\tvar num = options;\n\t\toptions = $(cont).data('cycle.opts');\n\t\tif (!options) {\n\t\t\tlog('options not found, can not advance slide');\n\t\t\treturn false;\n\t\t}\n\t\tif (num < 0 || num >= options.elements.length) {\n\t\t\tlog('invalid slide index: ' + num);\n\t\t\treturn false;\n\t\t}\n\t\toptions.nextSlide = num;\n\t\tif (cont.cycleTimeout) {\n\t\t\tclearTimeout(cont.cycleTimeout);\n\t\t\tcont.cycleTimeout = 0;\n\t\t}\n\t\tif (typeof arg2 == 'string')\n\t\t\toptions.oneTimeFx = arg2;\n\t\tgo(options.elements, options, 1, num >= options.currSlide);\n\t\treturn false;\n\t}\n\treturn options;\n\n\tfunction checkInstantResume(isPaused, arg2, cont) {\n\t\tif (!isPaused && arg2 === true) { // resume now!\n\t\t\tvar options = $(cont).data('cycle.opts');\n\t\t\tif (!options) {\n\t\t\t\tlog('options not found, can not resume');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (cont.cycleTimeout) {\n\t\t\t\tclearTimeout(cont.cycleTimeout);\n\t\t\t\tcont.cycleTimeout = 0;\n\t\t\t}\n\t\t\tgo(options.elements, options, 1, (!opts.rev && !opts.backwards));\n\t\t}\n\t}\n};\n\nfunction removeFilter(el, opts) {\n\tif (!$.support.opacity && opts.cleartype && el.style.filter) {\n\t\ttry { el.style.removeAttribute('filter'); }\n\t\tcatch(smother) {} // handle old opera versions\n\t}\n};\n\n// unbind event handlers\nfunction destroy(opts) {\n\tif (opts.next)\n\t\t$(opts.next).unbind(opts.prevNextEvent);\n\tif (opts.prev)\n\t\t$(opts.prev).unbind(opts.prevNextEvent);\n\n\tif (opts.pager || opts.pagerAnchorBuilder)\n\t\t$.each(opts.pagerAnchors || [], function() {\n\t\t\tthis.unbind().remove();\n\t\t});\n\topts.pagerAnchors = null;\n\tif (opts.destroy) // callback\n\t\topts.destroy(opts);\n};\n\n// one-time initialization\nfunction buildOptions($cont, $slides, els, options, o) {\n\t// support metadata plugin (v1.0 and v2.0)\n\tvar opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});\n\tif (opts.autostop)\n\t\topts.countdown = opts.autostopCount || els.length;\n\n\tvar cont = $cont[0];\n\t$cont.data('cycle.opts', opts);\n\topts.$cont = $cont;\n\topts.stopCount = cont.cycleStop;\n\topts.elements = els;\n\topts.before = opts.before ? [opts.before] : [];\n\topts.after = opts.after ? [opts.after] : [];\n\topts.after.unshift(function(){ opts.busy=0; });\n\n\t// push some after callbacks\n\tif (!$.support.opacity && opts.cleartype)\n\t\topts.after.push(function() { removeFilter(this, opts); });\n\tif (opts.continuous)\n\t\topts.after.push(function() { go(els,opts,0,(!opts.rev && !opts.backwards)); });\n\n\tsaveOriginalOpts(opts);\n\n\t// clearType corrections\n\tif (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)\n\t\tclearTypeFix($slides);\n\n\t// container requires non-static position so that slides can be position within\n\tif ($cont.css('position') == 'static')\n\t\t$cont.css('position', 'relative');\n\tif (opts.width)\n\t\t$cont.width(opts.width);\n\tif (opts.height && opts.height != 'auto')\n\t\t$cont.height(opts.height);\n\n\tif (opts.startingSlide)\n\t\topts.startingSlide = parseInt(opts.startingSlide);\n\telse if (opts.backwards)\n\t\topts.startingSlide = els.length - 1;\n\n\t// if random, mix up the slide array\n\tif (opts.random) {\n\t\topts.randomMap = [];\n\t\tfor (var i = 0; i < els.length; i++)\n\t\t\topts.randomMap.push(i);\n\t\topts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});\n\t\topts.randomIndex = 1;\n\t\topts.startingSlide = opts.randomMap[1];\n\t}\n\telse if (opts.startingSlide >= els.length)\n\t\topts.startingSlide = 0; // catch bogus input\n\topts.currSlide = opts.startingSlide || 0;\n\tvar first = opts.startingSlide;\n\n\t// set position and zIndex on all the slides\n\t$slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {\n\t\tvar z;\n\t\tif (opts.backwards)\n\t\t\tz = first ? i <= first ? els.length + (i-first) : first-i : els.length-i;\n\t\telse\n\t\t\tz = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;\n\t\t$(this).css('z-index', z)\n\t});\n\n\t// make sure first slide is visible\n\t$(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case\n\tremoveFilter(els[first], opts);\n\n\t// stretch slides\n\tif (opts.fit && opts.width)\n\t\t$slides.width(opts.width);\n\tif (opts.fit && opts.height && opts.height != 'auto')\n\t\t$slides.height(opts.height);\n\n\t// stretch container\n\tvar reshape = opts.containerResize && !$cont.innerHeight();\n\tif (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9\n\t\tvar maxw = 0, maxh = 0;\n\t\tfor(var j=0; j < els.length; j++) {\n\t\t\tvar $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();\n\t\t\tif (!w) w = e.offsetWidth || e.width || $e.attr('width')\n\t\t\tif (!h) h = e.offsetHeight || e.height || $e.attr('height');\n\t\t\tmaxw = w > maxw ? w : maxw;\n\t\t\tmaxh = h > maxh ? h : maxh;\n\t\t}\n\t\tif (maxw > 0 && maxh > 0)\n\t\t\t$cont.css({width:maxw+'px',height:maxh+'px'});\n\t}\n\n\tif (opts.pause)\n\t\t$cont.hover(function(){this.cyclePause++;},function(){this.cyclePause--;});\n\n\tif (supportMultiTransitions(opts) === false)\n\t\treturn false;\n\n\t// apparently a lot of people use image slideshows without height/width attributes on the images.\n\t// Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.\n\tvar requeue = false;\n\toptions.requeueAttempts = options.requeueAttempts || 0;\n\t$slides.each(function() {\n\t\t// try to get height/width of each slide\n\t\tvar $el = $(this);\n\t\tthis.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);\n\t\tthis.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);\n\n\t\tif ( $el.is('img') ) {\n\t\t\t// sigh..  sniffing, hacking, shrugging...  this crappy hack tries to account for what browsers do when\n\t\t\t// an image is being downloaded and the markup did not include sizing info (height/width attributes);\n\t\t\t// there seems to be some \"default\" sizes used in this situation\n\t\t\tvar loadingIE\t= ($.browser.msie  && this.cycleW == 28 && this.cycleH == 30 && !this.complete);\n\t\t\tvar loadingFF\t= ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete);\n\t\t\tvar loadingOp\t= ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete);\n\t\t\tvar loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete);\n\t\t\t// don't requeue for images that are still loading but have a valid size\n\t\t\tif (loadingIE || loadingFF || loadingOp || loadingOther) {\n\t\t\t\tif (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever\n\t\t\t\t\tlog(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);\n\t\t\t\t\tsetTimeout(function() {$(o.s,o.c).cycle(options)}, opts.requeueTimeout);\n\t\t\t\t\trequeue = true;\n\t\t\t\t\treturn false; // break each loop\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlog('could not determine size of image: '+this.src, this.cycleW, this.cycleH);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t});\n\n\tif (requeue)\n\t\treturn false;\n\n\topts.cssBefore = opts.cssBefore || {};\n\topts.animIn = opts.animIn || {};\n\topts.animOut = opts.animOut || {};\n\n\t$slides.not(':eq('+first+')').css(opts.cssBefore);\n\tif (opts.cssFirst)\n\t\t$($slides[first]).css(opts.cssFirst);\n\n\tif (opts.timeout) {\n\t\topts.timeout = parseInt(opts.timeout);\n\t\t// ensure that timeout and speed settings are sane\n\t\tif (opts.speed.constructor == String)\n\t\t\topts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed);\n\t\tif (!opts.sync)\n\t\t\topts.speed = opts.speed / 2;\n\n\t\tvar buffer = opts.fx == 'shuffle' ? 500 : 250;\n\t\twhile((opts.timeout - opts.speed) < buffer) // sanitize timeout\n\t\t\topts.timeout += opts.speed;\n\t}\n\tif (opts.easing)\n\t\topts.easeIn = opts.easeOut = opts.easing;\n\tif (!opts.speedIn)\n\t\topts.speedIn = opts.speed;\n\tif (!opts.speedOut)\n\t\topts.speedOut = opts.speed;\n\n\topts.slideCount = els.length;\n\topts.currSlide = opts.lastSlide = first;\n\tif (opts.random) {\n\t\tif (++opts.randomIndex == els.length)\n\t\t\topts.randomIndex = 0;\n\t\topts.nextSlide = opts.randomMap[opts.randomIndex];\n\t}\n\telse if (opts.backwards)\n\t\topts.nextSlide = opts.startingSlide == 0 ? (els.length-1) : opts.startingSlide-1;\n\telse\n\t\topts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;\n\n\t// run transition init fn\n\tif (!opts.multiFx) {\n\t\tvar init = $.fn.cycle.transitions[opts.fx];\n\t\tif ($.isFunction(init))\n\t\t\tinit($cont, $slides, opts);\n\t\telse if (opts.fx != 'custom' && !opts.multiFx) {\n\t\t\tlog('unknown transition: ' + opts.fx,'; slideshow terminating');\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// fire artificial events\n\tvar e0 = $slides[first];\n\tif (opts.before.length)\n\t\topts.before[0].apply(e0, [e0, e0, opts, true]);\n\tif (opts.after.length > 1)\n\t\topts.after[1].apply(e0, [e0, e0, opts, true]);\n\n\tif (opts.next)\n\t\t$(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?-1:1)});\n\tif (opts.prev)\n\t\t$(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?1:-1)});\n\tif (opts.pager || opts.pagerAnchorBuilder)\n\t\tbuildPager(els,opts);\n\n\texposeAddSlide(opts, els);\n\n\treturn opts;\n};\n\n// save off original opts so we can restore after clearing state\nfunction saveOriginalOpts(opts) {\n\topts.original = { before: [], after: [] };\n\topts.original.cssBefore = $.extend({}, opts.cssBefore);\n\topts.original.cssAfter  = $.extend({}, opts.cssAfter);\n\topts.original.animIn\t= $.extend({}, opts.animIn);\n\topts.original.animOut   = $.extend({}, opts.animOut);\n\t$.each(opts.before, function() { opts.original.before.push(this); });\n\t$.each(opts.after,  function() { opts.original.after.push(this); });\n};\n\nfunction supportMultiTransitions(opts) {\n\tvar i, tx, txs = $.fn.cycle.transitions;\n\t// look for multiple effects\n\tif (opts.fx.indexOf(',') > 0) {\n\t\topts.multiFx = true;\n\t\topts.fxs = opts.fx.replace(/\\s*/g,'').split(',');\n\t\t// discard any bogus effect names\n\t\tfor (i=0; i < opts.fxs.length; i++) {\n\t\t\tvar fx = opts.fxs[i];\n\t\t\ttx = txs[fx];\n\t\t\tif (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {\n\t\t\t\tlog('discarding unknown transition: ',fx);\n\t\t\t\topts.fxs.splice(i,1);\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\t// if we have an empty list then we threw everything away!\n\t\tif (!opts.fxs.length) {\n\t\t\tlog('No valid transitions named; slideshow terminating.');\n\t\t\treturn false;\n\t\t}\n\t}\n\telse if (opts.fx == 'all') {  // auto-gen the list of transitions\n\t\topts.multiFx = true;\n\t\topts.fxs = [];\n\t\tfor (p in txs) {\n\t\t\ttx = txs[p];\n\t\t\tif (txs.hasOwnProperty(p) && $.isFunction(tx))\n\t\t\t\topts.fxs.push(p);\n\t\t}\n\t}\n\tif (opts.multiFx && opts.randomizeEffects) {\n\t\t// munge the fxs array to make effect selection random\n\t\tvar r1 = Math.floor(Math.random() * 20) + 30;\n\t\tfor (i = 0; i < r1; i++) {\n\t\t\tvar r2 = Math.floor(Math.random() * opts.fxs.length);\n\t\t\topts.fxs.push(opts.fxs.splice(r2,1)[0]);\n\t\t}\n\t\tdebug('randomized fx sequence: ',opts.fxs);\n\t}\n\treturn true;\n};\n\n// provide a mechanism for adding slides after the slideshow has started\nfunction exposeAddSlide(opts, els) {\n\topts.addSlide = function(newSlide, prepend) {\n\t\tvar $s = $(newSlide), s = $s[0];\n\t\tif (!opts.autostopCount)\n\t\t\topts.countdown++;\n\t\tels[prepend?'unshift':'push'](s);\n\t\tif (opts.els)\n\t\t\topts.els[prepend?'unshift':'push'](s); // shuffle needs this\n\t\topts.slideCount = els.length;\n\n\t\t$s.css('position','absolute');\n\t\t$s[prepend?'prependTo':'appendTo'](opts.$cont);\n\n\t\tif (prepend) {\n\t\t\topts.currSlide++;\n\t\t\topts.nextSlide++;\n\t\t}\n\n\t\tif (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)\n\t\t\tclearTypeFix($s);\n\n\t\tif (opts.fit && opts.width)\n\t\t\t$s.width(opts.width);\n\t\tif (opts.fit && opts.height && opts.height != 'auto')\n\t\t\t$slides.height(opts.height);\n\t\ts.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();\n\t\ts.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();\n\n\t\t$s.css(opts.cssBefore);\n\n\t\tif (opts.pager || opts.pagerAnchorBuilder)\n\t\t\t$.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);\n\n\t\tif ($.isFunction(opts.onAddSlide))\n\t\t\topts.onAddSlide($s);\n\t\telse\n\t\t\t$s.hide(); // default behavior\n\t};\n}\n\n// reset internal state; we do this on every pass in order to support multiple effects\n$.fn.cycle.resetState = function(opts, fx) {\n\tfx = fx || opts.fx;\n\topts.before = []; opts.after = [];\n\topts.cssBefore = $.extend({}, opts.original.cssBefore);\n\topts.cssAfter  = $.extend({}, opts.original.cssAfter);\n\topts.animIn\t= $.extend({}, opts.original.animIn);\n\topts.animOut   = $.extend({}, opts.original.animOut);\n\topts.fxFn = null;\n\t$.each(opts.original.before, function() { opts.before.push(this); });\n\t$.each(opts.original.after,  function() { opts.after.push(this); });\n\n\t// re-init\n\tvar init = $.fn.cycle.transitions[fx];\n\tif ($.isFunction(init))\n\t\tinit(opts.$cont, $(opts.elements), opts);\n};\n\n// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt\nfunction go(els, opts, manual, fwd) {\n\t// opts.busy is true if we're in the middle of an animation\n\tif (manual && opts.busy && opts.manualTrump) {\n\t\t// let manual transitions requests trump active ones\n\t\tdebug('manualTrump in go(), stopping active transition');\n\t\t$(els).stop(true,true);\n\t\topts.busy = false;\n\t}\n\t// don't begin another timeout-based transition if there is one active\n\tif (opts.busy) {\n\t\tdebug('transition active, ignoring new tx request');\n\t\treturn;\n\t}\n\n\tvar p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];\n\n\t// stop cycling if we have an outstanding stop request\n\tif (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual)\n\t\treturn;\n\n\t// check to see if we should stop cycling based on autostop options\n\tif (!manual && !p.cyclePause && !opts.bounce &&\n\t\t((opts.autostop && (--opts.countdown <= 0)) ||\n\t\t(opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {\n\t\tif (opts.end)\n\t\t\topts.end(opts);\n\t\treturn;\n\t}\n\n\t// if slideshow is paused, only transition on a manual trigger\n\tvar changed = false;\n\tif ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {\n\t\tchanged = true;\n\t\tvar fx = opts.fx;\n\t\t// keep trying to get the slide size if we don't have it yet\n\t\tcurr.cycleH = curr.cycleH || $(curr).height();\n\t\tcurr.cycleW = curr.cycleW || $(curr).width();\n\t\tnext.cycleH = next.cycleH || $(next).height();\n\t\tnext.cycleW = next.cycleW || $(next).width();\n\n\t\t// support multiple transition types\n\t\tif (opts.multiFx) {\n\t\t\tif (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length)\n\t\t\t\topts.lastFx = 0;\n\t\t\tfx = opts.fxs[opts.lastFx];\n\t\t\topts.currFx = fx;\n\t\t}\n\n\t\t// one-time fx overrides apply to:  $('div').cycle(3,'zoom');\n\t\tif (opts.oneTimeFx) {\n\t\t\tfx = opts.oneTimeFx;\n\t\t\topts.oneTimeFx = null;\n\t\t}\n\n\t\t$.fn.cycle.resetState(opts, fx);\n\n\t\t// run the before callbacks\n\t\tif (opts.before.length)\n\t\t\t$.each(opts.before, function(i,o) {\n\t\t\t\tif (p.cycleStop != opts.stopCount) return;\n\t\t\t\to.apply(next, [curr, next, opts, fwd]);\n\t\t\t});\n\n\t\t// stage the after callacks\n\t\tvar after = function() {\n\t\t\t$.each(opts.after, function(i,o) {\n\t\t\t\tif (p.cycleStop != opts.stopCount) return;\n\t\t\t\to.apply(next, [curr, next, opts, fwd]);\n\t\t\t});\n\t\t};\n\n\t\tdebug('tx firing; currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);\n\n\t\t// get ready to perform the transition\n\t\topts.busy = 1;\n\t\tif (opts.fxFn) // fx function provided?\n\t\t\topts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);\n\t\telse if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?\n\t\t\t$.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);\n\t\telse\n\t\t\t$.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);\n\t}\n\n\tif (changed || opts.nextSlide == opts.currSlide) {\n\t\t// calculate the next slide\n\t\topts.lastSlide = opts.currSlide;\n\t\tif (opts.random) {\n\t\t\topts.currSlide = opts.nextSlide;\n\t\t\tif (++opts.randomIndex == els.length)\n\t\t\t\topts.randomIndex = 0;\n\t\t\topts.nextSlide = opts.randomMap[opts.randomIndex];\n\t\t\tif (opts.nextSlide == opts.currSlide)\n\t\t\t\topts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;\n\t\t}\n\t\telse if (opts.backwards) {\n\t\t\tvar roll = (opts.nextSlide - 1) < 0;\n\t\t\tif (roll && opts.bounce) {\n\t\t\t\topts.backwards = !opts.backwards;\n\t\t\t\topts.nextSlide = 1;\n\t\t\t\topts.currSlide = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\topts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1;\n\t\t\t\topts.currSlide = roll ? 0 : opts.nextSlide+1;\n\t\t\t}\n\t\t}\n\t\telse { // sequence\n\t\t\tvar roll = (opts.nextSlide + 1) == els.length;\n\t\t\tif (roll && opts.bounce) {\n\t\t\t\topts.backwards = !opts.backwards;\n\t\t\t\topts.nextSlide = els.length-2;\n\t\t\t\topts.currSlide = els.length-1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\topts.nextSlide = roll ? 0 : opts.nextSlide+1;\n\t\t\t\topts.currSlide = roll ? els.length-1 : opts.nextSlide-1;\n\t\t\t}\n\t\t}\n\t}\n\tif (changed && opts.pager)\n\t\topts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);\n\n\t// stage the next transition\n\tvar ms = 0;\n\tif (opts.timeout && !opts.continuous)\n\t\tms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);\n\telse if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic\n\t\tms = 10;\n\tif (ms > 0)\n\t\tp.cycleTimeout = setTimeout(function(){ go(els, opts, 0, (!opts.rev && !opts.backwards)) }, ms);\n};\n\n// invoked after transition\n$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {\n   $(pager).each(function() {\n       $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);\n   });\n};\n\n// calculate timeout value for current transition\nfunction getTimeout(curr, next, opts, fwd) {\n\tif (opts.timeoutFn) {\n\t\t// call user provided calc fn\n\t\tvar t = opts.timeoutFn.call(curr,curr,next,opts,fwd);\n\t\twhile ((t - opts.speed) < 250) // sanitize timeout\n\t\t\tt += opts.speed;\n\t\tdebug('calculated timeout: ' + t + '; speed: ' + opts.speed);\n\t\tif (t !== false)\n\t\t\treturn t;\n\t}\n\treturn opts.timeout;\n};\n\n// expose next/prev function, caller must pass in state\n$.fn.cycle.next = function(opts) { advance(opts, opts.rev?-1:1); };\n$.fn.cycle.prev = function(opts) { advance(opts, opts.rev?1:-1);};\n\n// advance slide forward or back\nfunction advance(opts, val) {\n\tvar els = opts.elements;\n\tvar p = opts.$cont[0], timeout = p.cycleTimeout;\n\tif (timeout) {\n\t\tclearTimeout(timeout);\n\t\tp.cycleTimeout = 0;\n\t}\n\tif (opts.random && val < 0) {\n\t\t// move back to the previously display slide\n\t\topts.randomIndex--;\n\t\tif (--opts.randomIndex == -2)\n\t\t\topts.randomIndex = els.length-2;\n\t\telse if (opts.randomIndex == -1)\n\t\t\topts.randomIndex = els.length-1;\n\t\topts.nextSlide = opts.randomMap[opts.randomIndex];\n\t}\n\telse if (opts.random) {\n\t\topts.nextSlide = opts.randomMap[opts.randomIndex];\n\t}\n\telse {\n\t\topts.nextSlide = opts.currSlide + val;\n\t\tif (opts.nextSlide < 0) {\n\t\t\tif (opts.nowrap) return false;\n\t\t\topts.nextSlide = els.length - 1;\n\t\t}\n\t\telse if (opts.nextSlide >= els.length) {\n\t\t\tif (opts.nowrap) return false;\n\t\t\topts.nextSlide = 0;\n\t\t}\n\t}\n\n\tvar cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated\n\tif ($.isFunction(cb))\n\t\tcb(val > 0, opts.nextSlide, els[opts.nextSlide]);\n\tgo(els, opts, 1, val>=0);\n\treturn false;\n};\n\nfunction buildPager(els, opts) {\n\tvar $p = $(opts.pager);\n\t$.each(els, function(i,o) {\n\t\t$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);\n\t});\n\topts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);\n};\n\n$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {\n\tvar a;\n\tif ($.isFunction(opts.pagerAnchorBuilder)) {\n\t\ta = opts.pagerAnchorBuilder(i,el);\n\t\tdebug('pagerAnchorBuilder('+i+', el) returned: ' + a);\n\t}\n\telse\n\t\ta = '<a href=\"#\">'+(i+1)+'</a>';\n\n\tif (!a)\n\t\treturn;\n\tvar $a = $(a);\n\t// don't reparent if anchor is in the dom\n\tif ($a.parents('body').length === 0) {\n\t\tvar arr = [];\n\t\tif ($p.length > 1) {\n\t\t\t$p.each(function() {\n\t\t\t\tvar $clone = $a.clone(true);\n\t\t\t\t$(this).append($clone);\n\t\t\t\tarr.push($clone[0]);\n\t\t\t});\n\t\t\t$a = $(arr);\n\t\t}\n\t\telse {\n\t\t\t$a.appendTo($p);\n\t\t}\n\t}\n\n\topts.pagerAnchors =  opts.pagerAnchors || [];\n\topts.pagerAnchors.push($a);\n\t$a.bind(opts.pagerEvent, function(e) {\n\t\te.preventDefault();\n\t\topts.nextSlide = i;\n\t\tvar p = opts.$cont[0], timeout = p.cycleTimeout;\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\tp.cycleTimeout = 0;\n\t\t}\n\t\tvar cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated\n\t\tif ($.isFunction(cb))\n\t\t\tcb(opts.nextSlide, els[opts.nextSlide]);\n\t\tgo(els,opts,1,opts.currSlide < i); // trigger the trans\n//\t\treturn false; // <== allow bubble\n\t});\n\n\tif ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble)\n\t\t$a.bind('click.cycle', function(){return false;}); // suppress click\n\n\tif (opts.pauseOnPagerHover)\n\t\t$a.hover(function() { opts.$cont[0].cyclePause++; }, function() { opts.$cont[0].cyclePause--; } );\n};\n\n// helper fn to calculate the number of slides between the current and the next\n$.fn.cycle.hopsFromLast = function(opts, fwd) {\n\tvar hops, l = opts.lastSlide, c = opts.currSlide;\n\tif (fwd)\n\t\thops = c > l ? c - l : opts.slideCount - l;\n\telse\n\t\thops = c < l ? l - c : l + opts.slideCount - c;\n\treturn hops;\n};\n\n// fix clearType problems in ie6 by setting an explicit bg color\n// (otherwise text slides look horrible during a fade transition)\nfunction clearTypeFix($slides) {\n\tdebug('applying clearType background-color hack');\n\tfunction hex(s) {\n\t\ts = parseInt(s).toString(16);\n\t\treturn s.length < 2 ? '0'+s : s;\n\t};\n\tfunction getBg(e) {\n\t\tfor ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {\n\t\t\tvar v = $.css(e,'background-color');\n\t\t\tif (v.indexOf('rgb') >= 0 ) {\n\t\t\t\tvar rgb = v.match(/\\d+/g);\n\t\t\t\treturn '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);\n\t\t\t}\n\t\t\tif (v && v != 'transparent')\n\t\t\t\treturn v;\n\t\t}\n\t\treturn '#ffffff';\n\t};\n\t$slides.each(function() { $(this).css('background-color', getBg(this)); });\n};\n\n// reset common props before the next transition\n$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {\n\t$(opts.elements).not(curr).hide();\n\topts.cssBefore.opacity = 1;\n\topts.cssBefore.display = 'block';\n\tif (w !== false && next.cycleW > 0)\n\t\topts.cssBefore.width = next.cycleW;\n\tif (h !== false && next.cycleH > 0)\n\t\topts.cssBefore.height = next.cycleH;\n\topts.cssAfter = opts.cssAfter || {};\n\topts.cssAfter.display = 'none';\n\t$(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));\n\t$(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));\n};\n\n// the actual fn for effecting a transition\n$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {\n\tvar $l = $(curr), $n = $(next);\n\tvar speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;\n\t$n.css(opts.cssBefore);\n\tif (speedOverride) {\n\t\tif (typeof speedOverride == 'number')\n\t\t\tspeedIn = speedOut = speedOverride;\n\t\telse\n\t\t\tspeedIn = speedOut = 1;\n\t\teaseIn = easeOut = null;\n\t}\n\tvar fn = function() {$n.animate(opts.animIn, speedIn, easeIn, cb)};\n\t$l.animate(opts.animOut, speedOut, easeOut, function() {\n\t\tif (opts.cssAfter) $l.css(opts.cssAfter);\n\t\tif (!opts.sync) fn();\n\t});\n\tif (opts.sync) fn();\n};\n\n// transition definitions - only fade is defined here, transition pack defines the rest\n$.fn.cycle.transitions = {\n\tfade: function($cont, $slides, opts) {\n\t\t$slides.not(':eq('+opts.currSlide+')').css('opacity',0);\n\t\topts.before.push(function(curr,next,opts) {\n\t\t\t$.fn.cycle.commonReset(curr,next,opts);\n\t\t\topts.cssBefore.opacity = 0;\n\t\t});\n\t\topts.animIn\t   = { opacity: 1 };\n\t\topts.animOut   = { opacity: 0 };\n\t\topts.cssBefore = { top: 0, left: 0 };\n\t}\n};\n\n$.fn.cycle.ver = function() { return ver; };\n\n// override these globally if you like (they are all optional)\n$.fn.cycle.defaults = {\n\tfx:\t\t\t  'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')\n\ttimeout:\t   4000,  // milliseconds between slide transitions (0 to disable auto advance)\n\ttimeoutFn:     null,  // callback for determining per-slide timeout value:  function(currSlideElement, nextSlideElement, options, forwardFlag)\n\tcontinuous:\t   0,\t  // true to start next transition immediately after current one completes\n\tspeed:\t\t   1000,  // speed of the transition (any valid fx speed value)\n\tspeedIn:\t   null,  // speed of the 'in' transition\n\tspeedOut:\t   null,  // speed of the 'out' transition\n\tnext:\t\t   null,  // selector for element to use as event trigger for next slide\n\tprev:\t\t   null,  // selector for element to use as event trigger for previous slide\n//\tprevNextClick: null,  // @deprecated; please use onPrevNextEvent instead\n\tonPrevNextEvent: null,  // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)\n\tprevNextEvent:'click.cycle',// event which drives the manual transition to the previous or next slide\n\tpager:\t\t   null,  // selector for element to use as pager container\n\t//pagerClick   null,  // @deprecated; please use onPagerEvent instead\n\tonPagerEvent:  null,  // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)\n\tpagerEvent:\t  'click.cycle', // name of event which drives the pager navigation\n\tallowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling\n\tpagerAnchorBuilder: null, // callback fn for building anchor links:  function(index, DOMelement)\n\tbefore:\t\t   null,  // transition callback (scope set to element to be shown):\t function(currSlideElement, nextSlideElement, options, forwardFlag)\n\tafter:\t\t   null,  // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)\n\tend:\t\t   null,  // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)\n\teasing:\t\t   null,  // easing method for both in and out transitions\n\teaseIn:\t\t   null,  // easing for \"in\" transition\n\teaseOut:\t   null,  // easing for \"out\" transition\n\tshuffle:\t   null,  // coords for shuffle animation, ex: { top:15, left: 200 }\n\tanimIn:\t\t   null,  // properties that define how the slide animates in\n\tanimOut:\t   null,  // properties that define how the slide animates out\n\tcssBefore:\t   null,  // properties that define the initial state of the slide before transitioning in\n\tcssAfter:\t   null,  // properties that defined the state of the slide after transitioning out\n\tfxFn:\t\t   null,  // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)\n\theight:\t\t  'auto', // container height\n\tstartingSlide: 0,\t  // zero-based index of the first slide to be displayed\n\tsync:\t\t   1,\t  // true if in/out transitions should occur simultaneously\n\trandom:\t\t   0,\t  // true for random, false for sequence (not applicable to shuffle fx)\n\tfit:\t\t   0,\t  // force slides to fit container\n\tcontainerResize: 1,\t  // resize container to fit largest slide\n\tpause:\t\t   0,\t  // true to enable \"pause on hover\"\n\tpauseOnPagerHover: 0, // true to pause when hovering over pager link\n\tautostop:\t   0,\t  // true to end slideshow after X transitions (where X == slide count)\n\tautostopCount: 0,\t  // number of transitions (optionally used with autostop to define X)\n\tdelay:\t\t   0,\t  // additional delay (in ms) for first transition (hint: can be negative)\n\tslideExpr:\t   null,  // expression for selecting slides (if something other than all children is required)\n\tcleartype:\t   !$.support.opacity,  // true if clearType corrections should be applied (for IE)\n\tcleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)\n\tnowrap:\t\t   0,\t  // true to prevent slideshow from wrapping\n\tfastOnEvent:   0,\t  // force fast transitions when triggered manually (via pager or prev/next); value == time in ms\n\trandomizeEffects: 1,  // valid when multiple effects are used; true to make the effect sequence random\n\trev:\t\t   0,\t // causes animations to transition in reverse\n\tmanualTrump:   true,  // causes manual transition to stop an active transition instead of being ignored\n\trequeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded\n\trequeueTimeout: 250,  // ms delay for requeue\n\tactivePagerClass: 'activeSlide', // class name used for the active pager link\n\tupdateActivePagerLink: null, // callback fn invoked to update the active pager link (adds/removes activePagerClass style)\n\tbackwards:     false  // true to start slideshow at last slide and move backwards through the stack\n};\n\n})(jQuery);\n\n\n/*!\n * jQuery Cycle Plugin Transition Definitions\n * This script is a plugin for the jQuery Cycle Plugin\n * Examples and documentation at: http://malsup.com/jquery/cycle/\n * Copyright (c) 2007-2010 M. Alsup\n * Version:\t 2.72\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n */\n(function($) {\n\n//\n// These functions define one-time slide initialization for the named\n// transitions. To save file size feel free to remove any of these that you\n// don't need.\n//\n$.fn.cycle.transitions.none = function($cont, $slides, opts) {\n\topts.fxFn = function(curr,next,opts,after){\n\t\t$(next).show();\n\t\t$(curr).hide();\n\t\tafter();\n\t};\n}\n\n// scrollUp/Down/Left/Right\n$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {\n\t$cont.css('overflow','hidden');\n\topts.before.push($.fn.cycle.commonReset);\n\tvar h = $cont.height();\n\topts.cssBefore ={ top: h, left: 0 };\n\topts.cssFirst = { top: 0 };\n\topts.animIn\t  = { top: 0 };\n\topts.animOut  = { top: -h };\n};\n$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {\n\t$cont.css('overflow','hidden');\n\topts.before.push($.fn.cycle.commonReset);\n\tvar h = $cont.height();\n\topts.cssFirst = { top: 0 };\n\topts.cssBefore= { top: -h, left: 0 };\n\topts.animIn\t  = { top: 0 };\n\topts.animOut  = { top: h };\n};\n$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {\n\t$cont.css('overflow','hidden');\n\topts.before.push($.fn.cycle.commonReset);\n\tvar w = $cont.width();\n\topts.cssFirst = { left: 0 };\n\topts.cssBefore= { left: w, top: 0 };\n\topts.animIn\t  = { left: 0 };\n\topts.animOut  = { left: 0-w };\n};\n$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {\n\t$cont.css('overflow','hidden');\n\topts.before.push($.fn.cycle.commonReset);\n\tvar w = $cont.width();\n\topts.cssFirst = { left: 0 };\n\topts.cssBefore= { left: -w, top: 0 };\n\topts.animIn\t  = { left: 0 };\n\topts.animOut  = { left: w };\n};\n$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {\n\t$cont.css('overflow','hidden').width();\n\topts.before.push(function(curr, next, opts, fwd) {\n\t\t$.fn.cycle.commonReset(curr,next,opts);\n\t\topts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);\n\t\topts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;\n\t});\n\topts.cssFirst = { left: 0 };\n\topts.cssBefore= { top: 0 };\n\topts.animIn   = { left: 0 };\n\topts.animOut  = { top: 0 };\n};\n$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {\n\t$cont.css('overflow','hidden');\n\topts.before.push(function(curr, next, opts, fwd) {\n\t\t$.fn.cycle.commonReset(curr,next,opts);\n\t\topts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);\n\t\topts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;\n\t});\n\topts.cssFirst = { top: 0 };\n\topts.cssBefore= { left: 0 };\n\topts.animIn   = { top: 0 };\n\topts.animOut  = { left: 0 };\n};\n\n// slideX/slideY\n$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$(opts.elements).not(curr).hide();\n\t\t$.fn.cycle.commonReset(curr,next,opts,false,true);\n\t\topts.animIn.width = next.cycleW;\n\t});\n\topts.cssBefore = { left: 0, top: 0, width: 0 };\n\topts.animIn\t = { width: 'show' };\n\topts.animOut = { width: 0 };\n};\n$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$(opts.elements).not(curr).hide();\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,false);\n\t\topts.animIn.height = next.cycleH;\n\t});\n\topts.cssBefore = { left: 0, top: 0, height: 0 };\n\topts.animIn\t = { height: 'show' };\n\topts.animOut = { height: 0 };\n};\n\n// shuffle\n$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {\n\tvar i, w = $cont.css('overflow', 'visible').width();\n\t$slides.css({left: 0, top: 0});\n\topts.before.push(function(curr,next,opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,true,true);\n\t});\n\t// only adjust speed once!\n\tif (!opts.speedAdjusted) {\n\t\topts.speed = opts.speed / 2; // shuffle has 2 transitions\n\t\topts.speedAdjusted = true;\n\t}\n\topts.random = 0;\n\topts.shuffle = opts.shuffle || {left:-w, top:15};\n\topts.els = [];\n\tfor (i=0; i < $slides.length; i++)\n\t\topts.els.push($slides[i]);\n\n\tfor (i=0; i < opts.currSlide; i++)\n\t\topts.els.push(opts.els.shift());\n\n\t// custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)\n\topts.fxFn = function(curr, next, opts, cb, fwd) {\n\t\tvar $el = fwd ? $(curr) : $(next);\n\t\t$(next).css(opts.cssBefore);\n\t\tvar count = opts.slideCount;\n\t\t$el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {\n\t\t\tvar hops = $.fn.cycle.hopsFromLast(opts, fwd);\n\t\t\tfor (var k=0; k < hops; k++)\n\t\t\t\tfwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop());\n\t\t\tif (fwd) {\n\t\t\t\tfor (var i=0, len=opts.els.length; i < len; i++)\n\t\t\t\t\t$(opts.els[i]).css('z-index', len-i+count);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar z = $(curr).css('z-index');\n\t\t\t\t$el.css('z-index', parseInt(z)+1+count);\n\t\t\t}\n\t\t\t$el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {\n\t\t\t\t$(fwd ? this : curr).hide();\n\t\t\t\tif (cb) cb();\n\t\t\t});\n\t\t});\n\t};\n\topts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 };\n};\n\n// turnUp/Down/Left/Right\n$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,false);\n\t\topts.cssBefore.top = next.cycleH;\n\t\topts.animIn.height = next.cycleH;\n\t});\n\topts.cssFirst  = { top: 0 };\n\topts.cssBefore = { left: 0, height: 0 };\n\topts.animIn\t   = { top: 0 };\n\topts.animOut   = { height: 0 };\n};\n$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,false);\n\t\topts.animIn.height = next.cycleH;\n\t\topts.animOut.top   = curr.cycleH;\n\t});\n\topts.cssFirst  = { top: 0 };\n\topts.cssBefore = { left: 0, top: 0, height: 0 };\n\topts.animOut   = { height: 0 };\n};\n$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,false,true);\n\t\topts.cssBefore.left = next.cycleW;\n\t\topts.animIn.width = next.cycleW;\n\t});\n\topts.cssBefore = { top: 0, width: 0  };\n\topts.animIn\t   = { left: 0 };\n\topts.animOut   = { width: 0 };\n};\n$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,false,true);\n\t\topts.animIn.width = next.cycleW;\n\t\topts.animOut.left = curr.cycleW;\n\t});\n\topts.cssBefore = { top: 0, left: 0, width: 0 };\n\topts.animIn\t   = { left: 0 };\n\topts.animOut   = { width: 0 };\n};\n\n// zoom\n$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,false,false,true);\n\t\topts.cssBefore.top = next.cycleH/2;\n\t\topts.cssBefore.left = next.cycleW/2;\n\t\topts.animIn\t   = { top: 0, left: 0, width: next.cycleW, height: next.cycleH };\n\t\topts.animOut   = { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 };\n\t});\n\topts.cssFirst = { top:0, left: 0 };\n\topts.cssBefore = { width: 0, height: 0 };\n};\n\n// fadeZoom\n$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,false,false);\n\t\topts.cssBefore.left = next.cycleW/2;\n\t\topts.cssBefore.top = next.cycleH/2;\n\t\topts.animIn\t= { top: 0, left: 0, width: next.cycleW, height: next.cycleH };\n\t});\n\topts.cssBefore = { width: 0, height: 0 };\n\topts.animOut  = { opacity: 0 };\n};\n\n// blindX\n$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {\n\tvar w = $cont.css('overflow','hidden').width();\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts);\n\t\topts.animIn.width = next.cycleW;\n\t\topts.animOut.left   = curr.cycleW;\n\t});\n\topts.cssBefore = { left: w, top: 0 };\n\topts.animIn = { left: 0 };\n\topts.animOut  = { left: w };\n};\n// blindY\n$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {\n\tvar h = $cont.css('overflow','hidden').height();\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts);\n\t\topts.animIn.height = next.cycleH;\n\t\topts.animOut.top   = curr.cycleH;\n\t});\n\topts.cssBefore = { top: h, left: 0 };\n\topts.animIn = { top: 0 };\n\topts.animOut  = { top: h };\n};\n// blindZ\n$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {\n\tvar h = $cont.css('overflow','hidden').height();\n\tvar w = $cont.width();\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts);\n\t\topts.animIn.height = next.cycleH;\n\t\topts.animOut.top   = curr.cycleH;\n\t});\n\topts.cssBefore = { top: h, left: w };\n\topts.animIn = { top: 0, left: 0 };\n\topts.animOut  = { top: h, left: w };\n};\n\n// growX - grow horizontally from centered 0 width\n$.fn.cycle.transitions.growX = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,false,true);\n\t\topts.cssBefore.left = this.cycleW/2;\n\t\topts.animIn = { left: 0, width: this.cycleW };\n\t\topts.animOut = { left: 0 };\n\t});\n\topts.cssBefore = { width: 0, top: 0 };\n};\n// growY - grow vertically from centered 0 height\n$.fn.cycle.transitions.growY = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,false);\n\t\topts.cssBefore.top = this.cycleH/2;\n\t\topts.animIn = { top: 0, height: this.cycleH };\n\t\topts.animOut = { top: 0 };\n\t});\n\topts.cssBefore = { height: 0, left: 0 };\n};\n\n// curtainX - squeeze in both edges horizontally\n$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,false,true,true);\n\t\topts.cssBefore.left = next.cycleW/2;\n\t\topts.animIn = { left: 0, width: this.cycleW };\n\t\topts.animOut = { left: curr.cycleW/2, width: 0 };\n\t});\n\topts.cssBefore = { top: 0, width: 0 };\n};\n// curtainY - squeeze in both edges vertically\n$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,false,true);\n\t\topts.cssBefore.top = next.cycleH/2;\n\t\topts.animIn = { top: 0, height: next.cycleH };\n\t\topts.animOut = { top: curr.cycleH/2, height: 0 };\n\t});\n\topts.cssBefore = { left: 0, height: 0 };\n};\n\n// cover - curr slide covered by next slide\n$.fn.cycle.transitions.cover = function($cont, $slides, opts) {\n\tvar d = opts.direction || 'left';\n\tvar w = $cont.css('overflow','hidden').width();\n\tvar h = $cont.height();\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts);\n\t\tif (d == 'right')\n\t\t\topts.cssBefore.left = -w;\n\t\telse if (d == 'up')\n\t\t\topts.cssBefore.top = h;\n\t\telse if (d == 'down')\n\t\t\topts.cssBefore.top = -h;\n\t\telse\n\t\t\topts.cssBefore.left = w;\n\t});\n\topts.animIn = { left: 0, top: 0};\n\topts.animOut = { opacity: 1 };\n\topts.cssBefore = { top: 0, left: 0 };\n};\n\n// uncover - curr slide moves off next slide\n$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {\n\tvar d = opts.direction || 'left';\n\tvar w = $cont.css('overflow','hidden').width();\n\tvar h = $cont.height();\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,true,true);\n\t\tif (d == 'right')\n\t\t\topts.animOut.left = w;\n\t\telse if (d == 'up')\n\t\t\topts.animOut.top = -h;\n\t\telse if (d == 'down')\n\t\t\topts.animOut.top = h;\n\t\telse\n\t\t\topts.animOut.left = -w;\n\t});\n\topts.animIn = { left: 0, top: 0 };\n\topts.animOut = { opacity: 1 };\n\topts.cssBefore = { top: 0, left: 0 };\n};\n\n// toss - move top slide and fade away\n$.fn.cycle.transitions.toss = function($cont, $slides, opts) {\n\tvar w = $cont.css('overflow','visible').width();\n\tvar h = $cont.height();\n\topts.before.push(function(curr, next, opts) {\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,true,true);\n\t\t// provide default toss settings if animOut not provided\n\t\tif (!opts.animOut.left && !opts.animOut.top)\n\t\t\topts.animOut = { left: w*2, top: -h/2, opacity: 0 };\n\t\telse\n\t\t\topts.animOut.opacity = 0;\n\t});\n\topts.cssBefore = { left: 0, top: 0 };\n\topts.animIn = { left: 0 };\n};\n\n// wipe - clip animation\n$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {\n\tvar w = $cont.css('overflow','hidden').width();\n\tvar h = $cont.height();\n\topts.cssBefore = opts.cssBefore || {};\n\tvar clip;\n\tif (opts.clip) {\n\t\tif (/l2r/.test(opts.clip))\n\t\t\tclip = 'rect(0px 0px '+h+'px 0px)';\n\t\telse if (/r2l/.test(opts.clip))\n\t\t\tclip = 'rect(0px '+w+'px '+h+'px '+w+'px)';\n\t\telse if (/t2b/.test(opts.clip))\n\t\t\tclip = 'rect(0px '+w+'px 0px 0px)';\n\t\telse if (/b2t/.test(opts.clip))\n\t\t\tclip = 'rect('+h+'px '+w+'px '+h+'px 0px)';\n\t\telse if (/zoom/.test(opts.clip)) {\n\t\t\tvar top = parseInt(h/2);\n\t\t\tvar left = parseInt(w/2);\n\t\t\tclip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';\n\t\t}\n\t}\n\n\topts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';\n\n\tvar d = opts.cssBefore.clip.match(/(\\d+)/g);\n\tvar t = parseInt(d[0]), r = parseInt(d[1]), b = parseInt(d[2]), l = parseInt(d[3]);\n\n\topts.before.push(function(curr, next, opts) {\n\t\tif (curr == next) return;\n\t\tvar $curr = $(curr), $next = $(next);\n\t\t$.fn.cycle.commonReset(curr,next,opts,true,true,false);\n\t\topts.cssAfter.display = 'block';\n\n\t\tvar step = 1, count = parseInt((opts.speedIn / 13)) - 1;\n\t\t(function f() {\n\t\t\tvar tt = t ? t - parseInt(step * (t/count)) : 0;\n\t\t\tvar ll = l ? l - parseInt(step * (l/count)) : 0;\n\t\t\tvar bb = b < h ? b + parseInt(step * ((h-b)/count || 1)) : h;\n\t\t\tvar rr = r < w ? r + parseInt(step * ((w-r)/count || 1)) : w;\n\t\t\t$next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });\n\t\t\t(step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');\n\t\t})();\n\t});\n\topts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 };\n\topts.animIn\t   = { left: 0 };\n\topts.animOut   = { left: 0 };\n};\n\n})(jQuery);\n"
  },
  {
    "path": "Journey/Resources/WebView/vendor/jquery.timeago.js",
    "content": "/**\n * Timeago is a jQuery plugin that makes it easy to support automatically\n * updating fuzzy timestamps (e.g. \"4 minutes ago\" or \"about 1 day ago\").\n *\n * @name timeago\n * @version 0.10.0\n * @requires jQuery v1.2.3+\n * @author Ryan McGeary\n * @license MIT License - http://www.opensource.org/licenses/mit-license.php\n *\n * For usage and examples, visit:\n * http://timeago.yarp.com/\n *\n * Copyright (c) 2008-2011, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org)\n */\n(function($) {\n  $.timeago = function(timestamp) {\n    if (timestamp instanceof Date) {\n      return inWords(timestamp);\n    } else if (typeof timestamp === \"string\") {\n      return inWords($.timeago.parse(timestamp));\n    } else {\n      return inWords($.timeago.datetime(timestamp));\n    }\n  };\n  var $t = $.timeago;\n\n  $.extend($.timeago, {\n    settings: {\n      refreshMillis: 60000,\n      allowFuture: false,\n      strings: {\n        prefixAgo: null,\n        prefixFromNow: null,\n        suffixAgo: \"ago\",\n        suffixFromNow: \"from now\",\n        seconds: \"less than a minute\",\n        minute: \"about a minute\",\n        minutes: \"%d minutes\",\n        hour: \"about an hour\",\n        hours: \"about %d hours\",\n        day: \"a day\",\n        days: \"%d days\",\n        month: \"about a month\",\n        months: \"%d months\",\n        year: \"about a year\",\n        years: \"%d years\",\n        numbers: []\n      }\n    },\n    inWords: function(distanceMillis) {\n      var $l = this.settings.strings;\n      var prefix = $l.prefixAgo;\n      var suffix = $l.suffixAgo;\n      if (this.settings.allowFuture) {\n        if (distanceMillis < 0) {\n          prefix = $l.prefixFromNow;\n          suffix = $l.suffixFromNow;\n        }\n      }\n\n      var seconds = Math.abs(distanceMillis) / 1000;\n      var minutes = seconds / 60;\n      var hours = minutes / 60;\n      var days = hours / 24;\n      var years = days / 365;\n\n      function substitute(stringOrFunction, number) {\n        var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;\n        var value = ($l.numbers && $l.numbers[number]) || number;\n        return string.replace(/%d/i, value);\n      }\n\n      var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||\n        seconds < 90 && substitute($l.minute, 1) ||\n        minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||\n        minutes < 90 && substitute($l.hour, 1) ||\n        hours < 24 && substitute($l.hours, Math.round(hours)) ||\n        hours < 48 && substitute($l.day, 1) ||\n        days < 30 && substitute($l.days, Math.floor(days)) ||\n        days < 60 && substitute($l.month, 1) ||\n        days < 365 && substitute($l.months, Math.floor(days / 30)) ||\n        years < 2 && substitute($l.year, 1) ||\n        substitute($l.years, Math.floor(years));\n\n      return $.trim([prefix, words, suffix].join(\" \"));\n    },\n    parse: function(iso8601) {\n      var s = $.trim(iso8601);\n      s = s.replace(/\\.\\d\\d\\d+/,\"\"); // remove milliseconds\n      s = s.replace(/-/,\"/\").replace(/-/,\"/\");\n      s = s.replace(/T/,\" \").replace(/Z/,\" UTC\");\n      s = s.replace(/([\\+\\-]\\d\\d)\\:?(\\d\\d)/,\" $1$2\"); // -04:00 -> -0400\n      return new Date(s);\n    },\n    datetime: function(elem) {\n      // jQuery's `is()` doesn't play well with HTML5 in IE\n      var isTime = $(elem).get(0).tagName.toLowerCase() === \"time\"; // $(elem).is(\"time\");\n      var iso8601 = isTime ? $(elem).attr(\"datetime\") : $(elem).attr(\"title\");\n      return $t.parse(iso8601);\n    }\n  });\n\n  $.fn.timeago = function() {\n    var self = this;\n    self.each(refresh);\n\n    var $s = $t.settings;\n    if ($s.refreshMillis > 0) {\n      setInterval(function() { self.each(refresh); }, $s.refreshMillis);\n    }\n    return self;\n  };\n\n  function refresh() {\n    var data = prepareData(this);\n    if (!isNaN(data.datetime)) {\n      $(this).text(inWords(data.datetime));\n    }\n    return this;\n  }\n\n  function prepareData(element) {\n    element = $(element);\n    if (!element.data(\"timeago\")) {\n      element.data(\"timeago\", { datetime: $t.datetime(element) });\n      var text = $.trim(element.text());\n      if (text.length > 0) {\n        element.attr(\"title\", text);\n      }\n    }\n    return element.data(\"timeago\");\n  }\n\n  function inWords(date) {\n    return $t.inWords(distance(date));\n  }\n\n  function distance(date) {\n    return (new Date().getTime() - date.getTime());\n  }\n\n  // fix for IE6 suckage\n  document.createElement(\"abbr\");\n  document.createElement(\"time\");\n}(jQuery));\n"
  },
  {
    "path": "Journey/Resources/WebView/vendor/underscore.js",
    "content": "//     Underscore.js 1.3.1\n//     (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.\n//     Underscore is freely distributable under the MIT license.\n//     Portions of Underscore are inspired or borrowed from Prototype,\n//     Oliver Steele's Functional, and John Resig's Micro-Templating.\n//     For all details and documentation:\n//     http://documentcloud.github.com/underscore\n\n(function() {\n\n  // Baseline setup\n  // --------------\n\n  // Establish the root object, `window` in the browser, or `global` on the server.\n  var root = this;\n\n  // Save the previous value of the `_` variable.\n  var previousUnderscore = root._;\n\n  // Establish the object that gets returned to break out of a loop iteration.\n  var breaker = {};\n\n  // Save bytes in the minified (but not gzipped) version:\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n  // Create quick reference variables for speed access to core prototypes.\n  var slice            = ArrayProto.slice,\n      unshift          = ArrayProto.unshift,\n      toString         = ObjProto.toString,\n      hasOwnProperty   = ObjProto.hasOwnProperty;\n\n  // All **ECMAScript 5** native function implementations that we hope to use\n  // are declared here.\n  var\n    nativeForEach      = ArrayProto.forEach,\n    nativeMap          = ArrayProto.map,\n    nativeReduce       = ArrayProto.reduce,\n    nativeReduceRight  = ArrayProto.reduceRight,\n    nativeFilter       = ArrayProto.filter,\n    nativeEvery        = ArrayProto.every,\n    nativeSome         = ArrayProto.some,\n    nativeIndexOf      = ArrayProto.indexOf,\n    nativeLastIndexOf  = ArrayProto.lastIndexOf,\n    nativeIsArray      = Array.isArray,\n    nativeKeys         = Object.keys,\n    nativeBind         = FuncProto.bind;\n\n  // Create a safe reference to the Underscore object for use below.\n  var _ = function(obj) { return new wrapper(obj); };\n\n  // Export the Underscore object for **Node.js**, with\n  // backwards-compatibility for the old `require()` API. If we're in\n  // the browser, add `_` as a global object via a string identifier,\n  // for Closure Compiler \"advanced\" mode.\n  if (typeof exports !== 'undefined') {\n    if (typeof module !== 'undefined' && module.exports) {\n      exports = module.exports = _;\n    }\n    exports._ = _;\n  } else {\n    root['_'] = _;\n  }\n\n  // Current version.\n  _.VERSION = '1.3.1';\n\n  // Collection Functions\n  // --------------------\n\n  // The cornerstone, an `each` implementation, aka `forEach`.\n  // Handles objects with the built-in `forEach`, arrays, and raw objects.\n  // Delegates to **ECMAScript 5**'s native `forEach` if available.\n  var each = _.each = _.forEach = function(obj, iterator, context) {\n    if (obj == null) return;\n    if (nativeForEach && obj.forEach === nativeForEach) {\n      obj.forEach(iterator, context);\n    } else if (obj.length === +obj.length) {\n      for (var i = 0, l = obj.length; i < l; i++) {\n        if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;\n      }\n    } else {\n      for (var key in obj) {\n        if (_.has(obj, key)) {\n          if (iterator.call(context, obj[key], key, obj) === breaker) return;\n        }\n      }\n    }\n  };\n\n  // Return the results of applying the iterator to each element.\n  // Delegates to **ECMAScript 5**'s native `map` if available.\n  _.map = _.collect = function(obj, iterator, context) {\n    var results = [];\n    if (obj == null) return results;\n    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n    each(obj, function(value, index, list) {\n      results[results.length] = iterator.call(context, value, index, list);\n    });\n    if (obj.length === +obj.length) results.length = obj.length;\n    return results;\n  };\n\n  // **Reduce** builds up a single result from a list of values, aka `inject`,\n  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n  _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n    var initial = arguments.length > 2;\n    if (obj == null) obj = [];\n    if (nativeReduce && obj.reduce === nativeReduce) {\n      if (context) iterator = _.bind(iterator, context);\n      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n    }\n    each(obj, function(value, index, list) {\n      if (!initial) {\n        memo = value;\n        initial = true;\n      } else {\n        memo = iterator.call(context, memo, value, index, list);\n      }\n    });\n    if (!initial) throw new TypeError('Reduce of empty array with no initial value');\n    return memo;\n  };\n\n  // The right-associative version of reduce, also known as `foldr`.\n  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n  _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n    var initial = arguments.length > 2;\n    if (obj == null) obj = [];\n    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n      if (context) iterator = _.bind(iterator, context);\n      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n    }\n    var reversed = _.toArray(obj).reverse();\n    if (context && !initial) iterator = _.bind(iterator, context);\n    return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);\n  };\n\n  // Return the first value which passes a truth test. Aliased as `detect`.\n  _.find = _.detect = function(obj, iterator, context) {\n    var result;\n    any(obj, function(value, index, list) {\n      if (iterator.call(context, value, index, list)) {\n        result = value;\n        return true;\n      }\n    });\n    return result;\n  };\n\n  // Return all the elements that pass a truth test.\n  // Delegates to **ECMAScript 5**'s native `filter` if available.\n  // Aliased as `select`.\n  _.filter = _.select = function(obj, iterator, context) {\n    var results = [];\n    if (obj == null) return results;\n    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n    each(obj, function(value, index, list) {\n      if (iterator.call(context, value, index, list)) results[results.length] = value;\n    });\n    return results;\n  };\n\n  // Return all the elements for which a truth test fails.\n  _.reject = function(obj, iterator, context) {\n    var results = [];\n    if (obj == null) return results;\n    each(obj, function(value, index, list) {\n      if (!iterator.call(context, value, index, list)) results[results.length] = value;\n    });\n    return results;\n  };\n\n  // Determine whether all of the elements match a truth test.\n  // Delegates to **ECMAScript 5**'s native `every` if available.\n  // Aliased as `all`.\n  _.every = _.all = function(obj, iterator, context) {\n    var result = true;\n    if (obj == null) return result;\n    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n    each(obj, function(value, index, list) {\n      if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n    });\n    return result;\n  };\n\n  // Determine if at least one element in the object matches a truth test.\n  // Delegates to **ECMAScript 5**'s native `some` if available.\n  // Aliased as `any`.\n  var any = _.some = _.any = function(obj, iterator, context) {\n    iterator || (iterator = _.identity);\n    var result = false;\n    if (obj == null) return result;\n    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n    each(obj, function(value, index, list) {\n      if (result || (result = iterator.call(context, value, index, list))) return breaker;\n    });\n    return !!result;\n  };\n\n  // Determine if a given value is included in the array or object using `===`.\n  // Aliased as `contains`.\n  _.include = _.contains = function(obj, target) {\n    var found = false;\n    if (obj == null) return found;\n    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n    found = any(obj, function(value) {\n      return value === target;\n    });\n    return found;\n  };\n\n  // Invoke a method (with arguments) on every item in a collection.\n  _.invoke = function(obj, method) {\n    var args = slice.call(arguments, 2);\n    return _.map(obj, function(value) {\n      return (_.isFunction(method) ? method || value : value[method]).apply(value, args);\n    });\n  };\n\n  // Convenience version of a common use case of `map`: fetching a property.\n  _.pluck = function(obj, key) {\n    return _.map(obj, function(value){ return value[key]; });\n  };\n\n  // Return the maximum element or (element-based computation).\n  _.max = function(obj, iterator, context) {\n    if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);\n    if (!iterator && _.isEmpty(obj)) return -Infinity;\n    var result = {computed : -Infinity};\n    each(obj, function(value, index, list) {\n      var computed = iterator ? iterator.call(context, value, index, list) : value;\n      computed >= result.computed && (result = {value : value, computed : computed});\n    });\n    return result.value;\n  };\n\n  // Return the minimum element (or element-based computation).\n  _.min = function(obj, iterator, context) {\n    if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);\n    if (!iterator && _.isEmpty(obj)) return Infinity;\n    var result = {computed : Infinity};\n    each(obj, function(value, index, list) {\n      var computed = iterator ? iterator.call(context, value, index, list) : value;\n      computed < result.computed && (result = {value : value, computed : computed});\n    });\n    return result.value;\n  };\n\n  // Shuffle an array.\n  _.shuffle = function(obj) {\n    var shuffled = [], rand;\n    each(obj, function(value, index, list) {\n      if (index == 0) {\n        shuffled[0] = value;\n      } else {\n        rand = Math.floor(Math.random() * (index + 1));\n        shuffled[index] = shuffled[rand];\n        shuffled[rand] = value;\n      }\n    });\n    return shuffled;\n  };\n\n  // Sort the object's values by a criterion produced by an iterator.\n  _.sortBy = function(obj, iterator, context) {\n    return _.pluck(_.map(obj, function(value, index, list) {\n      return {\n        value : value,\n        criteria : iterator.call(context, value, index, list)\n      };\n    }).sort(function(left, right) {\n      var a = left.criteria, b = right.criteria;\n      return a < b ? -1 : a > b ? 1 : 0;\n    }), 'value');\n  };\n\n  // Groups the object's values by a criterion. Pass either a string attribute\n  // to group by, or a function that returns the criterion.\n  _.groupBy = function(obj, val) {\n    var result = {};\n    var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };\n    each(obj, function(value, index) {\n      var key = iterator(value, index);\n      (result[key] || (result[key] = [])).push(value);\n    });\n    return result;\n  };\n\n  // Use a comparator function to figure out at what index an object should\n  // be inserted so as to maintain order. Uses binary search.\n  _.sortedIndex = function(array, obj, iterator) {\n    iterator || (iterator = _.identity);\n    var low = 0, high = array.length;\n    while (low < high) {\n      var mid = (low + high) >> 1;\n      iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;\n    }\n    return low;\n  };\n\n  // Safely convert anything iterable into a real, live array.\n  _.toArray = function(iterable) {\n    if (!iterable)                return [];\n    if (iterable.toArray)         return iterable.toArray();\n    if (_.isArray(iterable))      return slice.call(iterable);\n    if (_.isArguments(iterable))  return slice.call(iterable);\n    return _.values(iterable);\n  };\n\n  // Return the number of elements in an object.\n  _.size = function(obj) {\n    return _.toArray(obj).length;\n  };\n\n  // Array Functions\n  // ---------------\n\n  // Get the first element of an array. Passing **n** will return the first N\n  // values in the array. Aliased as `head`. The **guard** check allows it to work\n  // with `_.map`.\n  _.first = _.head = function(array, n, guard) {\n    return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n  };\n\n  // Returns everything but the last entry of the array. Especcialy useful on\n  // the arguments object. Passing **n** will return all the values in\n  // the array, excluding the last N. The **guard** check allows it to work with\n  // `_.map`.\n  _.initial = function(array, n, guard) {\n    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n  };\n\n  // Get the last element of an array. Passing **n** will return the last N\n  // values in the array. The **guard** check allows it to work with `_.map`.\n  _.last = function(array, n, guard) {\n    if ((n != null) && !guard) {\n      return slice.call(array, Math.max(array.length - n, 0));\n    } else {\n      return array[array.length - 1];\n    }\n  };\n\n  // Returns everything but the first entry of the array. Aliased as `tail`.\n  // Especially useful on the arguments object. Passing an **index** will return\n  // the rest of the values in the array from that index onward. The **guard**\n  // check allows it to work with `_.map`.\n  _.rest = _.tail = function(array, index, guard) {\n    return slice.call(array, (index == null) || guard ? 1 : index);\n  };\n\n  // Trim out all falsy values from an array.\n  _.compact = function(array) {\n    return _.filter(array, function(value){ return !!value; });\n  };\n\n  // Return a completely flattened version of an array.\n  _.flatten = function(array, shallow) {\n    return _.reduce(array, function(memo, value) {\n      if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));\n      memo[memo.length] = value;\n      return memo;\n    }, []);\n  };\n\n  // Return a version of the array that does not contain the specified value(s).\n  _.without = function(array) {\n    return _.difference(array, slice.call(arguments, 1));\n  };\n\n  // Produce a duplicate-free version of the array. If the array has already\n  // been sorted, you have the option of using a faster algorithm.\n  // Aliased as `unique`.\n  _.uniq = _.unique = function(array, isSorted, iterator) {\n    var initial = iterator ? _.map(array, iterator) : array;\n    var result = [];\n    _.reduce(initial, function(memo, el, i) {\n      if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {\n        memo[memo.length] = el;\n        result[result.length] = array[i];\n      }\n      return memo;\n    }, []);\n    return result;\n  };\n\n  // Produce an array that contains the union: each distinct element from all of\n  // the passed-in arrays.\n  _.union = function() {\n    return _.uniq(_.flatten(arguments, true));\n  };\n\n  // Produce an array that contains every item shared between all the\n  // passed-in arrays. (Aliased as \"intersect\" for back-compat.)\n  _.intersection = _.intersect = function(array) {\n    var rest = slice.call(arguments, 1);\n    return _.filter(_.uniq(array), function(item) {\n      return _.every(rest, function(other) {\n        return _.indexOf(other, item) >= 0;\n      });\n    });\n  };\n\n  // Take the difference between one array and a number of other arrays.\n  // Only the elements present in just the first array will remain.\n  _.difference = function(array) {\n    var rest = _.flatten(slice.call(arguments, 1));\n    return _.filter(array, function(value){ return !_.include(rest, value); });\n  };\n\n  // Zip together multiple lists into a single array -- elements that share\n  // an index go together.\n  _.zip = function() {\n    var args = slice.call(arguments);\n    var length = _.max(_.pluck(args, 'length'));\n    var results = new Array(length);\n    for (var i = 0; i < length; i++) results[i] = _.pluck(args, \"\" + i);\n    return results;\n  };\n\n  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n  // we need this function. Return the position of the first occurrence of an\n  // item in an array, or -1 if the item is not included in the array.\n  // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n  // If the array is large and already in sort order, pass `true`\n  // for **isSorted** to use binary search.\n  _.indexOf = function(array, item, isSorted) {\n    if (array == null) return -1;\n    var i, l;\n    if (isSorted) {\n      i = _.sortedIndex(array, item);\n      return array[i] === item ? i : -1;\n    }\n    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);\n    for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;\n    return -1;\n  };\n\n  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n  _.lastIndexOf = function(array, item) {\n    if (array == null) return -1;\n    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);\n    var i = array.length;\n    while (i--) if (i in array && array[i] === item) return i;\n    return -1;\n  };\n\n  // Generate an integer Array containing an arithmetic progression. A port of\n  // the native Python `range()` function. See\n  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n  _.range = function(start, stop, step) {\n    if (arguments.length <= 1) {\n      stop = start || 0;\n      start = 0;\n    }\n    step = arguments[2] || 1;\n\n    var len = Math.max(Math.ceil((stop - start) / step), 0);\n    var idx = 0;\n    var range = new Array(len);\n\n    while(idx < len) {\n      range[idx++] = start;\n      start += step;\n    }\n\n    return range;\n  };\n\n  // Function (ahem) Functions\n  // ------------------\n\n  // Reusable constructor function for prototype setting.\n  var ctor = function(){};\n\n  // Create a function bound to a given object (assigning `this`, and arguments,\n  // optionally). Binding with arguments is also known as `curry`.\n  // Delegates to **ECMAScript 5**'s native `Function.bind` if available.\n  // We check for `func.bind` first, to fail fast when `func` is undefined.\n  _.bind = function bind(func, context) {\n    var bound, args;\n    if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n    if (!_.isFunction(func)) throw new TypeError;\n    args = slice.call(arguments, 2);\n    return bound = function() {\n      if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\n      ctor.prototype = func.prototype;\n      var self = new ctor;\n      var result = func.apply(self, args.concat(slice.call(arguments)));\n      if (Object(result) === result) return result;\n      return self;\n    };\n  };\n\n  // Bind all of an object's methods to that object. Useful for ensuring that\n  // all callbacks defined on an object belong to it.\n  _.bindAll = function(obj) {\n    var funcs = slice.call(arguments, 1);\n    if (funcs.length == 0) funcs = _.functions(obj);\n    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n    return obj;\n  };\n\n  // Memoize an expensive function by storing its results.\n  _.memoize = function(func, hasher) {\n    var memo = {};\n    hasher || (hasher = _.identity);\n    return function() {\n      var key = hasher.apply(this, arguments);\n      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n    };\n  };\n\n  // Delays a function for the given number of milliseconds, and then calls\n  // it with the arguments supplied.\n  _.delay = function(func, wait) {\n    var args = slice.call(arguments, 2);\n    return setTimeout(function(){ return func.apply(func, args); }, wait);\n  };\n\n  // Defers a function, scheduling it to run after the current call stack has\n  // cleared.\n  _.defer = function(func) {\n    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n  };\n\n  // Returns a function, that, when invoked, will only be triggered at most once\n  // during a given window of time.\n  _.throttle = function(func, wait) {\n    var context, args, timeout, throttling, more;\n    var whenDone = _.debounce(function(){ more = throttling = false; }, wait);\n    return function() {\n      context = this; args = arguments;\n      var later = function() {\n        timeout = null;\n        if (more) func.apply(context, args);\n        whenDone();\n      };\n      if (!timeout) timeout = setTimeout(later, wait);\n      if (throttling) {\n        more = true;\n      } else {\n        func.apply(context, args);\n      }\n      whenDone();\n      throttling = true;\n    };\n  };\n\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds.\n  _.debounce = function(func, wait) {\n    var timeout;\n    return function() {\n      var context = this, args = arguments;\n      var later = function() {\n        timeout = null;\n        func.apply(context, args);\n      };\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n    };\n  };\n\n  // Returns a function that will be executed at most one time, no matter how\n  // often you call it. Useful for lazy initialization.\n  _.once = function(func) {\n    var ran = false, memo;\n    return function() {\n      if (ran) return memo;\n      ran = true;\n      return memo = func.apply(this, arguments);\n    };\n  };\n\n  // Returns the first function passed as an argument to the second,\n  // allowing you to adjust arguments, run code before and after, and\n  // conditionally execute the original function.\n  _.wrap = function(func, wrapper) {\n    return function() {\n      var args = [func].concat(slice.call(arguments, 0));\n      return wrapper.apply(this, args);\n    };\n  };\n\n  // Returns a function that is the composition of a list of functions, each\n  // consuming the return value of the function that follows.\n  _.compose = function() {\n    var funcs = arguments;\n    return function() {\n      var args = arguments;\n      for (var i = funcs.length - 1; i >= 0; i--) {\n        args = [funcs[i].apply(this, args)];\n      }\n      return args[0];\n    };\n  };\n\n  // Returns a function that will only be executed after being called N times.\n  _.after = function(times, func) {\n    if (times <= 0) return func();\n    return function() {\n      if (--times < 1) { return func.apply(this, arguments); }\n    };\n  };\n\n  // Object Functions\n  // ----------------\n\n  // Retrieve the names of an object's properties.\n  // Delegates to **ECMAScript 5**'s native `Object.keys`\n  _.keys = nativeKeys || function(obj) {\n    if (obj !== Object(obj)) throw new TypeError('Invalid object');\n    var keys = [];\n    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n    return keys;\n  };\n\n  // Retrieve the values of an object's properties.\n  _.values = function(obj) {\n    return _.map(obj, _.identity);\n  };\n\n  // Return a sorted list of the function names available on the object.\n  // Aliased as `methods`\n  _.functions = _.methods = function(obj) {\n    var names = [];\n    for (var key in obj) {\n      if (_.isFunction(obj[key])) names.push(key);\n    }\n    return names.sort();\n  };\n\n  // Extend a given object with all the properties in passed-in object(s).\n  _.extend = function(obj) {\n    each(slice.call(arguments, 1), function(source) {\n      for (var prop in source) {\n        obj[prop] = source[prop];\n      }\n    });\n    return obj;\n  };\n\n  // Fill in a given object with default properties.\n  _.defaults = function(obj) {\n    each(slice.call(arguments, 1), function(source) {\n      for (var prop in source) {\n        if (obj[prop] == null) obj[prop] = source[prop];\n      }\n    });\n    return obj;\n  };\n\n  // Create a (shallow-cloned) duplicate of an object.\n  _.clone = function(obj) {\n    if (!_.isObject(obj)) return obj;\n    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n  };\n\n  // Invokes interceptor with the obj, and then returns obj.\n  // The primary purpose of this method is to \"tap into\" a method chain, in\n  // order to perform operations on intermediate results within the chain.\n  _.tap = function(obj, interceptor) {\n    interceptor(obj);\n    return obj;\n  };\n\n  // Internal recursive comparison function.\n  function eq(a, b, stack) {\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.\n    if (a === b) return a !== 0 || 1 / a == 1 / b;\n    // A strict comparison is necessary because `null == undefined`.\n    if (a == null || b == null) return a === b;\n    // Unwrap any wrapped objects.\n    if (a._chain) a = a._wrapped;\n    if (b._chain) b = b._wrapped;\n    // Invoke a custom `isEqual` method if one is provided.\n    if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);\n    if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className != toString.call(b)) return false;\n    switch (className) {\n      // Strings, numbers, dates, and booleans are compared by value.\n      case '[object String]':\n        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n        return a == String(b);\n      case '[object Number]':\n        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n        // other numeric values.\n        return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n      case '[object Date]':\n      case '[object Boolean]':\n        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n        // millisecond representations. Note that invalid dates with millisecond representations\n        // of `NaN` are not equivalent.\n        return +a == +b;\n      // RegExps are compared by their source patterns and flags.\n      case '[object RegExp]':\n        return a.source == b.source &&\n               a.global == b.global &&\n               a.multiline == b.multiline &&\n               a.ignoreCase == b.ignoreCase;\n    }\n    if (typeof a != 'object' || typeof b != 'object') return false;\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n    var length = stack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (stack[length] == a) return true;\n    }\n    // Add the first object to the stack of traversed objects.\n    stack.push(a);\n    var size = 0, result = true;\n    // Recursively compare objects and arrays.\n    if (className == '[object Array]') {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      size = a.length;\n      result = size == b.length;\n      if (result) {\n        // Deep compare the contents, ignoring non-numeric properties.\n        while (size--) {\n          // Ensure commutative equality for sparse arrays.\n          if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;\n        }\n      }\n    } else {\n      // Objects with different constructors are not equivalent.\n      if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;\n      // Deep compare objects.\n      for (var key in a) {\n        if (_.has(a, key)) {\n          // Count the expected number of properties.\n          size++;\n          // Deep compare each member.\n          if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;\n        }\n      }\n      // Ensure that both objects contain the same number of properties.\n      if (result) {\n        for (key in b) {\n          if (_.has(b, key) && !(size--)) break;\n        }\n        result = !size;\n      }\n    }\n    // Remove the first object from the stack of traversed objects.\n    stack.pop();\n    return result;\n  }\n\n  // Perform a deep comparison to check if two objects are equal.\n  _.isEqual = function(a, b) {\n    return eq(a, b, []);\n  };\n\n  // Is a given array, string, or object empty?\n  // An \"empty\" object has no enumerable own-properties.\n  _.isEmpty = function(obj) {\n    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n    for (var key in obj) if (_.has(obj, key)) return false;\n    return true;\n  };\n\n  // Is a given value a DOM element?\n  _.isElement = function(obj) {\n    return !!(obj && obj.nodeType == 1);\n  };\n\n  // Is a given value an array?\n  // Delegates to ECMA5's native Array.isArray\n  _.isArray = nativeIsArray || function(obj) {\n    return toString.call(obj) == '[object Array]';\n  };\n\n  // Is a given variable an object?\n  _.isObject = function(obj) {\n    return obj === Object(obj);\n  };\n\n  // Is a given variable an arguments object?\n  _.isArguments = function(obj) {\n    return toString.call(obj) == '[object Arguments]';\n  };\n  if (!_.isArguments(arguments)) {\n    _.isArguments = function(obj) {\n      return !!(obj && _.has(obj, 'callee'));\n    };\n  }\n\n  // Is a given value a function?\n  _.isFunction = function(obj) {\n    return toString.call(obj) == '[object Function]';\n  };\n\n  // Is a given value a string?\n  _.isString = function(obj) {\n    return toString.call(obj) == '[object String]';\n  };\n\n  // Is a given value a number?\n  _.isNumber = function(obj) {\n    return toString.call(obj) == '[object Number]';\n  };\n\n  // Is the given value `NaN`?\n  _.isNaN = function(obj) {\n    // `NaN` is the only value for which `===` is not reflexive.\n    return obj !== obj;\n  };\n\n  // Is a given value a boolean?\n  _.isBoolean = function(obj) {\n    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n  };\n\n  // Is a given value a date?\n  _.isDate = function(obj) {\n    return toString.call(obj) == '[object Date]';\n  };\n\n  // Is the given value a regular expression?\n  _.isRegExp = function(obj) {\n    return toString.call(obj) == '[object RegExp]';\n  };\n\n  // Is a given value equal to null?\n  _.isNull = function(obj) {\n    return obj === null;\n  };\n\n  // Is a given variable undefined?\n  _.isUndefined = function(obj) {\n    return obj === void 0;\n  };\n\n  // Has own property?\n  _.has = function(obj, key) {\n    return hasOwnProperty.call(obj, key);\n  };\n\n  // Utility Functions\n  // -----------------\n\n  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n  // previous owner. Returns a reference to the Underscore object.\n  _.noConflict = function() {\n    root._ = previousUnderscore;\n    return this;\n  };\n\n  // Keep the identity function around for default iterators.\n  _.identity = function(value) {\n    return value;\n  };\n\n  // Run a function **n** times.\n  _.times = function (n, iterator, context) {\n    for (var i = 0; i < n; i++) iterator.call(context, i);\n  };\n\n  // Escape a string for HTML interpolation.\n  _.escape = function(string) {\n    return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\\//g,'&#x2F;');\n  };\n\n  // Add your own custom functions to the Underscore object, ensuring that\n  // they're correctly added to the OOP wrapper as well.\n  _.mixin = function(obj) {\n    each(_.functions(obj), function(name){\n      addToWrapper(name, _[name] = obj[name]);\n    });\n  };\n\n  // Generate a unique integer id (unique within the entire client session).\n  // Useful for temporary DOM ids.\n  var idCounter = 0;\n  _.uniqueId = function(prefix) {\n    var id = idCounter++;\n    return prefix ? prefix + id : id;\n  };\n\n  // By default, Underscore uses ERB-style template delimiters, change the\n  // following template settings to use alternative delimiters.\n  _.templateSettings = {\n    evaluate    : /<%([\\s\\S]+?)%>/g,\n    interpolate : /<%=([\\s\\S]+?)%>/g,\n    escape      : /<%-([\\s\\S]+?)%>/g\n  };\n\n  // When customizing `templateSettings`, if you don't want to define an\n  // interpolation, evaluation or escaping regex, we need one that is\n  // guaranteed not to match.\n  var noMatch = /.^/;\n\n  // Within an interpolation, evaluation, or escaping, remove HTML escaping\n  // that had been previously added.\n  var unescape = function(code) {\n    return code.replace(/\\\\\\\\/g, '\\\\').replace(/\\\\'/g, \"'\");\n  };\n\n  // JavaScript micro-templating, similar to John Resig's implementation.\n  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n  // and correctly escapes quotes within interpolated code.\n  _.template = function(str, data) {\n    var c  = _.templateSettings;\n    var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +\n      'with(obj||{}){__p.push(\\'' +\n      str.replace(/\\\\/g, '\\\\\\\\')\n         .replace(/'/g, \"\\\\'\")\n         .replace(c.escape || noMatch, function(match, code) {\n           return \"',_.escape(\" + unescape(code) + \"),'\";\n         })\n         .replace(c.interpolate || noMatch, function(match, code) {\n           return \"',\" + unescape(code) + \",'\";\n         })\n         .replace(c.evaluate || noMatch, function(match, code) {\n           return \"');\" + unescape(code).replace(/[\\r\\n\\t]/g, ' ') + \";__p.push('\";\n         })\n         .replace(/\\r/g, '\\\\r')\n         .replace(/\\n/g, '\\\\n')\n         .replace(/\\t/g, '\\\\t')\n         + \"');}return __p.join('');\";\n    var func = new Function('obj', '_', tmpl);\n    if (data) return func(data, _);\n    return function(data) {\n      return func.call(this, data, _);\n    };\n  };\n\n  // Add a \"chain\" function, which will delegate to the wrapper.\n  _.chain = function(obj) {\n    return _(obj).chain();\n  };\n\n  // The OOP Wrapper\n  // ---------------\n\n  // If Underscore is called as a function, it returns a wrapped object that\n  // can be used OO-style. This wrapper holds altered versions of all the\n  // underscore functions. Wrapped objects may be chained.\n  var wrapper = function(obj) { this._wrapped = obj; };\n\n  // Expose `wrapper.prototype` as `_.prototype`\n  _.prototype = wrapper.prototype;\n\n  // Helper function to continue chaining intermediate results.\n  var result = function(obj, chain) {\n    return chain ? _(obj).chain() : obj;\n  };\n\n  // A method to easily add functions to the OOP wrapper.\n  var addToWrapper = function(name, func) {\n    wrapper.prototype[name] = function() {\n      var args = slice.call(arguments);\n      unshift.call(args, this._wrapped);\n      return result(func.apply(_, args), this._chain);\n    };\n  };\n\n  // Add all of the Underscore functions to the wrapper object.\n  _.mixin(_);\n\n  // Add all mutator Array functions to the wrapper.\n  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = ArrayProto[name];\n    wrapper.prototype[name] = function() {\n      var wrapped = this._wrapped;\n      method.apply(wrapped, arguments);\n      var length = wrapped.length;\n      if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];\n      return result(wrapped, this._chain);\n    };\n  });\n\n  // Add all accessor Array functions to the wrapper.\n  each(['concat', 'join', 'slice'], function(name) {\n    var method = ArrayProto[name];\n    wrapper.prototype[name] = function() {\n      return result(method.apply(this._wrapped, arguments), this._chain);\n    };\n  });\n\n  // Start chaining a wrapped Underscore object.\n  wrapper.prototype.chain = function() {\n    this._chain = true;\n    return this;\n  };\n\n  // Extracts the result from a wrapped and chained object.\n  wrapper.prototype.value = function() {\n    return this._wrapped;\n  };\n\n}).call(this);\n"
  },
  {
    "path": "Journey/Resources/WebView/vendor/zepto.js",
    "content": "//     Zepto.js\n//     (c) 2010, 2011 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\n(function(undefined){\n  if (String.prototype.trim === undefined) // fix for iOS 3.2\n    String.prototype.trim = function(){ return this.replace(/^\\s+/, '').replace(/\\s+$/, '') };\n\n  // For iOS 3.x\n  // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce\n  if (Array.prototype.reduce === undefined)\n    Array.prototype.reduce = function(fun){\n      if(this === void 0 || this === null) throw new TypeError();\n      var t = Object(this), len = t.length >>> 0, k = 0, accumulator;\n      if(typeof fun != 'function') throw new TypeError();\n      if(len == 0 && arguments.length == 1) throw new TypeError();\n\n      if(arguments.length >= 2)\n       accumulator = arguments[1];\n      else\n        do{\n          if(k in t){\n            accumulator = t[k++];\n            break;\n          }\n          if(++k >= len) throw new TypeError();\n        } while (true);\n\n      while (k < len){\n        if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t);\n        k++;\n      }\n      return accumulator;\n    };\n\n})();\n//     Zepto.js\n//     (c) 2010, 2011 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\nvar Zepto = (function() {\n  var undefined, key, $$, classList, emptyArray = [], slice = emptyArray.slice,\n    document = window.document,\n    elementDisplay = {}, classCache = {},\n    getComputedStyle = document.defaultView.getComputedStyle,\n    cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },\n    fragmentRE = /^\\s*<(\\w+)[^>]*>/,\n    elementTypes = [1, 9, 11],\n    adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],\n    table = document.createElement('table'),\n    tableRow = document.createElement('tr'),\n    containers = {\n      'tr': document.createElement('tbody'),\n      'tbody': table, 'thead': table, 'tfoot': table,\n      'td': tableRow, 'th': tableRow,\n      '*': document.createElement('div')\n    },\n    readyRE = /complete|loaded|interactive/,\n    classSelectorRE = /^\\.([\\w-]+)$/,\n    idSelectorRE = /^#([\\w-]+)$/,\n    tagSelectorRE = /^[\\w-]+$/;\n\n  function isF(value) { return ({}).toString.call(value) == \"[object Function]\" }\n  function isO(value) { return value instanceof Object }\n  function isA(value) { return value instanceof Array }\n  function likeArray(obj) { return typeof obj.length == 'number' }\n\n  function compact(array) { return array.filter(function(item){ return item !== undefined && item !== null }) }\n  function flatten(array) { return array.length > 0 ? [].concat.apply([], array) : array }\n  function camelize(str)  { return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }\n  function dasherize(str){\n    return str.replace(/::/g, '/')\n           .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n           .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n           .replace(/_/g, '-')\n           .toLowerCase();\n  }\n  function uniq(array)    { return array.filter(function(item,index,array){ return array.indexOf(item) == index }) }\n\n  function classRE(name){\n    return name in classCache ?\n      classCache[name] : (classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)'));\n  }\n\n  function maybeAddPx(name, value) { return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value; }\n\n  function defaultDisplay(nodeName) {\n    var element, display;\n    if (!elementDisplay[nodeName]) {\n      element = document.createElement(nodeName);\n      document.body.appendChild(element);\n      display = getComputedStyle(element, '').getPropertyValue(\"display\");\n      element.parentNode.removeChild(element);\n      display == \"none\" && (display = \"block\");\n      elementDisplay[nodeName] = display;\n    }\n    return elementDisplay[nodeName];\n  }\n\n  function fragment(html, name) {\n    if (name === undefined) fragmentRE.test(html) && RegExp.$1;\n    if (!(name in containers)) name = '*';\n    var container = containers[name];\n    container.innerHTML = '' + html;\n    return slice.call(container.childNodes);\n  }\n\n  function Z(dom, selector){\n    dom = dom || emptyArray;\n    dom.__proto__ = Z.prototype;\n    dom.selector = selector || '';\n    return dom;\n  }\n\n  function $(selector, context){\n    if (!selector) return Z();\n    if (context !== undefined) return $(context).find(selector);\n    else if (isF(selector)) return $(document).ready(selector);\n    else if (selector instanceof Z) return selector;\n    else {\n      var dom;\n      if (isA(selector)) dom = compact(selector);\n      else if (elementTypes.indexOf(selector.nodeType) >= 0 || selector === window)\n        dom = [selector], selector = null;\n      else if (fragmentRE.test(selector))\n        dom = fragment(selector.trim(), RegExp.$1), selector = null;\n      else if (selector.nodeType && selector.nodeType == 3) dom = [selector];\n      else dom = $$(document, selector);\n      return Z(dom, selector);\n    }\n  }\n\n  $.extend = function(target){\n    slice.call(arguments, 1).forEach(function(source) {\n      for (key in source) target[key] = source[key];\n    })\n    return target;\n  }\n\n  $.qsa = $$ = function(element, selector){\n    var found;\n    return (element === document && idSelectorRE.test(selector)) ?\n      ( (found = element.getElementById(RegExp.$1)) ? [found] : emptyArray ) :\n      slice.call(\n        classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) :\n        tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :\n        element.querySelectorAll(selector)\n      );\n  }\n\n  function filtered(nodes, selector){\n    return selector === undefined ? $(nodes) : $(nodes).filter(selector);\n  }\n\n  function funcArg(context, arg, idx, payload){\n   return isF(arg) ? arg.call(context, idx, payload) : arg;\n  }\n\n  $.isFunction = isF;\n  $.isObject = isO;\n  $.isArray = isA;\n\n  $.map = function(elements, callback) {\n    var value, values = [], i, key;\n    if (likeArray(elements))\n      for (i = 0; i < elements.length; i++) {\n        value = callback(elements[i], i);\n        if (value != null) values.push(value);\n      }\n    else\n      for (key in elements) {\n        value = callback(elements[key], key);\n        if (value != null) values.push(value);\n      }\n    return flatten(values);\n  }\n\n  $.each = function(elements, callback) {\n    var i, key;\n    if (likeArray(elements))\n      for(i = 0; i < elements.length; i++) {\n        if(callback(i, elements[i]) === false) return elements;\n      }\n    else\n      for(key in elements) {\n        if(callback(key, elements[key]) === false) return elements;\n      }\n    return elements;\n  }\n\n  $.fn = {\n    forEach: emptyArray.forEach,\n    reduce: emptyArray.reduce,\n    push: emptyArray.push,\n    indexOf: emptyArray.indexOf,\n    concat: emptyArray.concat,\n    map: function(fn){\n      return $.map(this, function(el, i){ return fn.call(el, i, el) });\n    },\n    slice: function(){\n      return $(slice.apply(this, arguments));\n    },\n    ready: function(callback){\n      if (readyRE.test(document.readyState)) callback($);\n      else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false);\n      return this;\n    },\n    get: function(idx){ return idx === undefined ? this : this[idx] },\n    size: function(){ return this.length },\n    remove: function () {\n      return this.each(function () {\n        if (this.parentNode != null) {\n          this.parentNode.removeChild(this);\n        }\n      });\n    },\n    each: function(callback){\n      this.forEach(function(el, idx){ callback.call(el, idx, el) });\n      return this;\n    },\n    filter: function(selector){\n      return $([].filter.call(this, function(element){\n        return element.parentNode && $$(element.parentNode, selector).indexOf(element) >= 0;\n      }));\n    },\n    end: function(){\n      return this.prevObject || $();\n    },\n    andSelf:function(){\n      return this.add(this.prevObject || $())\n    },\n    add:function(selector,context){\n      return $(uniq(this.concat($(selector,context))));\n    },\n    is: function(selector){\n      return this.length > 0 && $(this[0]).filter(selector).length > 0;\n    },\n    not: function(selector){\n      var nodes=[];\n      if (isF(selector) && selector.call !== undefined)\n        this.each(function(idx){\n          if (!selector.call(this,idx)) nodes.push(this);\n        });\n      else {\n        var excludes = typeof selector == 'string' ? this.filter(selector) :\n          (likeArray(selector) && isF(selector.item)) ? slice.call(selector) : $(selector);\n        this.forEach(function(el){\n          if (excludes.indexOf(el) < 0) nodes.push(el);\n        });\n      }\n      return $(nodes);\n    },\n    eq: function(idx){\n      return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1);\n    },\n    first: function(){ var el = this[0]; return el && !isO(el) ? el : $(el) },\n    last: function(){ var el = this[this.length - 1]; return el && !isO(el) ? el : $(el) },\n    find: function(selector){\n      var result;\n      if (this.length == 1) result = $$(this[0], selector);\n      else result = this.map(function(){ return $$(this, selector) });\n      return $(result);\n    },\n    closest: function(selector, context){\n      var node = this[0], candidates = $$(context || document, selector);\n      if (!candidates.length) node = null;\n      while (node && candidates.indexOf(node) < 0)\n        node = node !== context && node !== document && node.parentNode;\n      return $(node);\n    },\n    parents: function(selector){\n      var ancestors = [], nodes = this;\n      while (nodes.length > 0)\n        nodes = $.map(nodes, function(node){\n          if ((node = node.parentNode) && node !== document && ancestors.indexOf(node) < 0) {\n            ancestors.push(node);\n            return node;\n          }\n        });\n      return filtered(ancestors, selector);\n    },\n    parent: function(selector){\n      return filtered(uniq(this.pluck('parentNode')), selector);\n    },\n    children: function(selector){\n      return filtered(this.map(function(){ return slice.call(this.children) }), selector);\n    },\n    siblings: function(selector){\n      return filtered(this.map(function(i, el){\n        return slice.call(el.parentNode.children).filter(function(child){ return child!==el });\n      }), selector);\n    },\n    empty: function(){ return this.each(function(){ this.innerHTML = '' }) },\n    pluck: function(property){ return this.map(function(){ return this[property] }) },\n    show: function(){\n      return this.each(function() {\n        this.style.display == \"none\" && (this.style.display = null);\n        if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\") {\n          this.style.display = defaultDisplay(this.nodeName)\n        }\n      })\n    },\n    replaceWith: function(newContent) {\n      return this.each(function() {\n        $(this).before(newContent).remove();\n      });\n    },\n    wrap: function(newContent) {\n      return this.each(function() {\n        $(this).wrapAll($(newContent)[0].cloneNode(false));\n      });\n    },\n    wrapAll: function(newContent) {\n      if (this[0]) {\n        $(this[0]).before(newContent = $(newContent));\n        newContent.append(this);\n      }\n      return this;\n    },\n    unwrap: function(){\n      this.parent().each(function(){\n        $(this).replaceWith($(this).children());\n      });\n      return this;\n    },\n    hide: function(){\n      return this.css(\"display\", \"none\")\n    },\n    toggle: function(setting){\n      return (setting === undefined ? this.css(\"display\") == \"none\" : setting) ? this.show() : this.hide();\n    },\n    prev: function(){ return $(this.pluck('previousElementSibling')) },\n    next: function(){ return $(this.pluck('nextElementSibling')) },\n    html: function(html){\n      return html === undefined ?\n        (this.length > 0 ? this[0].innerHTML : null) :\n        this.each(function (idx) {\n          var originHtml = this.innerHTML;\n          $(this).empty().append( funcArg(this, html, idx, originHtml) );\n        });\n    },\n    text: function(text){\n      return text === undefined ?\n        (this.length > 0 ? this[0].textContent : null) :\n        this.each(function(){ this.textContent = text });\n    },\n    attr: function(name, value){\n      var res;\n      return (typeof name == 'string' && value === undefined) ?\n        (this.length == 0 ? undefined :\n          (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() :\n          (!(res = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : res\n        ) :\n        this.each(function(idx){\n          if (isO(name)) for (key in name) this.setAttribute(key, name[key])\n          else this.setAttribute(name, funcArg(this, value, idx, this.getAttribute(name)));\n        });\n    },\n    removeAttr: function(name) {\n      return this.each(function() { this.removeAttribute(name); });\n    },\n    data: function(name, value){\n      return this.attr('data-' + name, value);\n    },\n    val: function(value){\n      return (value === undefined) ?\n        (this.length > 0 ? this[0].value : null) :\n        this.each(function(idx){\n          this.value = funcArg(this, value, idx, this.value);\n        });\n    },\n    offset: function(){\n      if(this.length==0) return null;\n      var obj = this[0].getBoundingClientRect();\n      return {\n        left: obj.left + window.pageXOffset,\n        top: obj.top + window.pageYOffset,\n        width: obj.width,\n        height: obj.height\n      };\n    },\n    css: function(property, value){\n      if (value === undefined && typeof property == 'string') {\n        return(\n          this.length == 0\n            ? undefined\n            : this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property)\n        );\n      }\n      var css = '';\n      for (key in property) css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';';\n      if (typeof property == 'string') css = dasherize(property) + \":\" + maybeAddPx(property, value);\n      return this.each(function() { this.style.cssText += ';' + css });\n    },\n    index: function(element){\n      return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]);\n    },\n    hasClass: function(name){\n      if (this.length < 1) return false;\n      else return classRE(name).test(this[0].className);\n    },\n    addClass: function(name){\n      return this.each(function(idx) {\n        classList = [];\n        var cls = this.className, newName = funcArg(this, name, idx, cls);\n        newName.split(/\\s+/g).forEach(function(klass) {\n          if (!$(this).hasClass(klass)) {\n            classList.push(klass)\n          }\n        }, this);\n        classList.length && (this.className += (cls ? \" \" : \"\") + classList.join(\" \"))\n      });\n    },\n    removeClass: function(name){\n      return this.each(function(idx) {\n        if(name === undefined)\n          return this.className = '';\n        classList = this.className;\n        funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function(klass) {\n          classList = classList.replace(classRE(klass), \" \")\n        });\n        this.className = classList.trim()\n      });\n    },\n    toggleClass: function(name, when){\n      return this.each(function(idx){\n        var newName = funcArg(this, name, idx, this.className);\n        (when === undefined ? !$(this).hasClass(newName) : when) ?\n          $(this).addClass(newName) : $(this).removeClass(newName);\n      });\n    }\n  };\n\n  'filter,add,not,eq,first,last,find,closest,parents,parent,children,siblings'.split(',').forEach(function(property){\n    var fn = $.fn[property];\n    $.fn[property] = function() {\n      var ret = fn.apply(this, arguments);\n      ret.prevObject = this;\n      return ret;\n    }\n  });\n\n  ['width', 'height'].forEach(function(dimension){\n    $.fn[dimension] = function(value) {\n      var offset, Dimension = dimension.replace(/./, function(m) { return m[0].toUpperCase() });\n      if (value === undefined) return this[0] == window ? window['inner' + Dimension] :\n        this[0] == document ? document.documentElement['offset' + Dimension] :\n        (offset = this.offset()) && offset[dimension];\n      else return this.each(function(idx){\n        var el = $(this);\n        el.css(dimension, funcArg(this, value, idx, el[dimension]()));\n      });\n    }\n  });\n\n  function insert(operator, target, node) {\n    var parent = (operator % 2) ? target : target.parentNode;\n    parent && parent.insertBefore(node,\n      !operator ? target.nextSibling :      // after\n      operator == 1 ? parent.firstChild :   // prepend\n      operator == 2 ? target :              // before\n      null);                                // append\n  }\n\n  function traverseNode (node, fun) {\n    fun(node);\n    for (var key in node.childNodes) {\n      traverseNode(node.childNodes[key], fun);\n    }\n  }\n\n  adjacencyOperators.forEach(function(key, operator) {\n    $.fn[key] = function(html){\n      var nodes = isO(html) ? html : fragment(html);\n      if (!('length' in nodes) || nodes.nodeType) nodes = [nodes];\n      if (nodes.length < 1) return this;\n      var size = this.length, copyByClone = size > 1, inReverse = operator < 2;\n\n      return this.each(function(index, target){\n        for (var i = 0; i < nodes.length; i++) {\n          var node = nodes[inReverse ? nodes.length-i-1 : i];\n          traverseNode(node, function (node) {\n            if (node.nodeName != null && node.nodeName.toUpperCase() === 'SCRIPT' && (!node.type || node.type === 'text/javascript')) {\n              window['eval'].call(window, node.innerHTML);\n            }\n          });\n          if (copyByClone && index < size - 1) node = node.cloneNode(true);\n          insert(operator, target, node);\n        }\n      });\n    };\n\n    var reverseKey = (operator % 2) ? key+'To' : 'insert'+(operator ? 'Before' : 'After');\n    $.fn[reverseKey] = function(html) {\n      $(html)[key](this);\n      return this;\n    };\n  });\n\n  Z.prototype = $.fn;\n\n  return $;\n})();\n\nwindow.Zepto = Zepto;\n'$' in window || (window.$ = Zepto);\n//     Zepto.js\n//     (c) 2010, 2011 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\n(function($){\n  var $$ = $.qsa, handlers = {}, _zid = 1, specialEvents={};\n\n  specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents';\n\n  function zid(element) {\n    return element._zid || (element._zid = _zid++);\n  }\n  function findHandlers(element, event, fn, selector) {\n    event = parse(event);\n    if (event.ns) var matcher = matcherFor(event.ns);\n    return (handlers[zid(element)] || []).filter(function(handler) {\n      return handler\n        && (!event.e  || handler.e == event.e)\n        && (!event.ns || matcher.test(handler.ns))\n        && (!fn       || handler.fn == fn)\n        && (!selector || handler.sel == selector);\n    });\n  }\n  function parse(event) {\n    var parts = ('' + event).split('.');\n    return {e: parts[0], ns: parts.slice(1).sort().join(' ')};\n  }\n  function matcherFor(ns) {\n    return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)');\n  }\n\n  function eachEvent(events, fn, iterator){\n    if ($.isObject(events)) $.each(events, iterator);\n    else events.split(/\\s/).forEach(function(type){ iterator(type, fn) });\n  }\n\n  function add(element, events, fn, selector, getDelegate){\n    var id = zid(element), set = (handlers[id] || (handlers[id] = []));\n    eachEvent(events, fn, function(event, fn){\n      var delegate = getDelegate && getDelegate(fn, event),\n        callback = delegate || fn;\n      var proxyfn = function (event) {\n        var result = callback.apply(element, [event].concat(event.data));\n        if (result === false) event.preventDefault();\n        return result;\n      };\n      var handler = $.extend(parse(event), {fn: fn, proxy: proxyfn, sel: selector, del: delegate, i: set.length});\n      set.push(handler);\n      element.addEventListener(handler.e, proxyfn, false);\n    });\n  }\n  function remove(element, events, fn, selector){\n    var id = zid(element);\n    eachEvent(events || '', fn, function(event, fn){\n      findHandlers(element, event, fn, selector).forEach(function(handler){\n        delete handlers[id][handler.i];\n        element.removeEventListener(handler.e, handler.proxy, false);\n      });\n    });\n  }\n\n  $.event = { add: add, remove: remove }\n\n  $.fn.bind = function(event, callback){\n    return this.each(function(){\n      add(this, event, callback);\n    });\n  };\n  $.fn.unbind = function(event, callback){\n    return this.each(function(){\n      remove(this, event, callback);\n    });\n  };\n  $.fn.one = function(event, callback){\n    return this.each(function(i, element){\n      add(this, event, callback, null, function(fn, type){\n        return function(){\n          var result = fn.apply(element, arguments);\n          remove(element, type, fn);\n          return result;\n        }\n      });\n    });\n  };\n\n  var returnTrue = function(){return true},\n      returnFalse = function(){return false},\n      eventMethods = {\n        preventDefault: 'isDefaultPrevented',\n        stopImmediatePropagation: 'isImmediatePropagationStopped',\n        stopPropagation: 'isPropagationStopped'\n      };\n  function createProxy(event) {\n    var proxy = $.extend({originalEvent: event}, event);\n    $.each(eventMethods, function(name, predicate) {\n      proxy[name] = function(){\n        this[predicate] = returnTrue;\n        return event[name].apply(event, arguments);\n      };\n      proxy[predicate] = returnFalse;\n    })\n    return proxy;\n  }\n\n  // emulates the 'defaultPrevented' property for browsers that have none\n  function fix(event) {\n    if (!('defaultPrevented' in event)) {\n      event.defaultPrevented = false;\n      var prevent = event.preventDefault;\n      event.preventDefault = function() {\n        this.defaultPrevented = true;\n        prevent.call(this);\n      }\n    }\n  }\n\n  $.fn.delegate = function(selector, event, callback){\n    return this.each(function(i, element){\n      add(element, event, callback, selector, function(fn){\n        return function(e){\n          var evt, match = $(e.target).closest(selector, element).get(0);\n          if (match) {\n            evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element});\n            return fn.apply(match, [evt].concat([].slice.call(arguments, 1)));\n          }\n        }\n      });\n    });\n  };\n  $.fn.undelegate = function(selector, event, callback){\n    return this.each(function(){\n      remove(this, event, callback, selector);\n    });\n  }\n\n  $.fn.live = function(event, callback){\n    $(document.body).delegate(this.selector, event, callback);\n    return this;\n  };\n  $.fn.die = function(event, callback){\n    $(document.body).undelegate(this.selector, event, callback);\n    return this;\n  };\n\n  $.fn.on = function(event, selector, callback){\n    return selector === undefined || $.isFunction(selector) ?\n      this.bind(event, selector) : this.delegate(selector, event, callback);\n  };\n  $.fn.off = function(event, selector, callback){\n    return selector === undefined || $.isFunction(selector) ?\n      this.unbind(event, selector) : this.undelegate(selector, event, callback);\n  };\n\n  $.fn.trigger = function(event, data){\n    if (typeof event == 'string') event = $.Event(event);\n    fix(event);\n    event.data = data;\n    return this.each(function(){ this.dispatchEvent(event) });\n  };\n\n  // triggers event handlers on current element just as if an event occurred,\n  // doesn't trigger an actual event, doesn't bubble\n  $.fn.triggerHandler = function(event, data){\n    var e, result;\n    this.each(function(i, element){\n      e = createProxy(typeof event == 'string' ? $.Event(event) : event);\n      e.data = data; e.target = element;\n      $.each(findHandlers(element, event.type || event), function(i, handler){\n        result = handler.proxy(e);\n        if (e.isImmediatePropagationStopped()) return false;\n      });\n    });\n    return result;\n  };\n\n  // shortcut methods for `.bind(event, fn)` for each event type\n  ('focusin focusout load resize scroll unload click dblclick '+\n  'mousedown mouseup mousemove mouseover mouseout '+\n  'change select keydown keypress keyup error').split(' ').forEach(function(event) {\n    $.fn[event] = function(callback){ return this.bind(event, callback) };\n  });\n\n  ['focus', 'blur'].forEach(function(name) {\n    $.fn[name] = function(callback) {\n      if (callback) this.bind(name, callback);\n      else if (this.length) try { this.get(0)[name]() } catch(e){};\n      return this;\n    };\n  });\n\n  $.Event = function(type, props) {\n    var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true;\n    if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name]);\n    event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null);\n    return event;\n  };\n\n})(Zepto);\n//     Zepto.js\n//     (c) 2010, 2011 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\n(function($){\n  function detect(ua){\n    var os = (this.os = {}), browser = (this.browser = {}),\n      webkit = ua.match(/WebKit\\/([\\d.]+)/),\n      android = ua.match(/(Android)\\s+([\\d.]+)/),\n      ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/),\n      iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/),\n      webos = ua.match(/(webOS|hpwOS)[\\s\\/]([\\d.]+)/),\n      touchpad = webos && ua.match(/TouchPad/),\n      blackberry = ua.match(/(BlackBerry).*Version\\/([\\d.]+)/);\n\n    if (webkit) browser.version = webkit[1];\n    browser.webkit = !!webkit;\n\n    if (android) os.android = true, os.version = android[2];\n    if (iphone) os.ios = true, os.version = iphone[2].replace(/_/g, '.'), os.iphone = true;\n    if (ipad) os.ios = true, os.version = ipad[2].replace(/_/g, '.'), os.ipad = true;\n    if (webos) os.webos = true, os.version = webos[2];\n    if (touchpad) os.touchpad = true;\n    if (blackberry) os.blackberry = true, os.version = blackberry[2];\n  }\n\n  // ### $.os\n  //\n  // Object containing information about browser platform\n  //\n  // *Example:*\n  //\n  //     $.os.ios      // => true if running on Apple iOS\n  //     $.os.android  // => true if running on Android\n  //     $.os.webos    // => true if running on HP/Palm WebOS\n  //     $.os.touchpad // => true if running on a HP TouchPad\n  //     $.os.version  // => string with a version number, e.g.\n  //                         \"4.0\", \"3.1.1\", \"2.1\", etc.\n  //     $.os.iphone   // => true if running on iPhone\n  //     $.os.ipad     // => true if running on iPad\n  //     $.os.blackberry // => true if running on BlackBerry\n  //\n  // ### $.browser\n  //\n  // *Example:*\n  //\n  //     $.browser.webkit  // => true if the browser is WebKit-based\n  //     $.browser.version // => WebKit version string\n  detect.call($, navigator.userAgent);\n\n  // make available to unit tests\n  $.__detect = detect;\n\n})(Zepto);\n//     Zepto.js\n//     (c) 2010, 2011 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\n(function($, undefined){\n  var prefix = '', eventPrefix, endEventName, endAnimationName,\n    vendors = {Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS'},\n    document = window.document, testEl = document.createElement('div'),\n    supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;\n\n  function downcase(str) { return str.toLowerCase() }\n  function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) };\n\n  $.each(vendors, function(vendor, event){\n    if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {\n      prefix = '-' + downcase(vendor) + '-';\n      eventPrefix = event;\n      return false;\n    }\n  });\n\n  $.fx = {\n    off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),\n    cssPrefix: prefix,\n    transitionEnd: normalizeEvent('TransitionEnd'),\n    animationEnd: normalizeEvent('AnimationEnd')\n  };\n\n  $.fn.animate = function(properties, duration, ease, callback){\n    if ($.isObject(duration))\n      ease = duration.easing, callback = duration.complete, duration = duration.duration;\n    if (duration) duration = duration / 1000;\n    return this.anim(properties, duration, ease, callback);\n  };\n\n  $.fn.anim = function(properties, duration, ease, callback){\n    var transforms, cssProperties = {}, key, that = this, wrappedCallback, endEvent = $.fx.transitionEnd;\n    if (duration === undefined) duration = 0.4;\n    if ($.fx.off) duration = 0;\n\n    if (typeof properties == 'string') {\n      // keyframe animation\n      cssProperties[prefix + 'animation-name'] = properties;\n      cssProperties[prefix + 'animation-duration'] = duration + 's';\n      endEvent = $.fx.animationEnd;\n    } else {\n      // CSS transitions\n      for (key in properties)\n        if (supportedTransforms.test(key)) {\n          transforms || (transforms = []);\n          transforms.push(key + '(' + properties[key] + ')');\n        }\n        else cssProperties[key] = properties[key];\n\n      if (transforms) cssProperties[prefix + 'transform'] = transforms.join(' ');\n      if (!$.fx.off) cssProperties[prefix + 'transition'] = 'all ' + duration + 's ' + (ease || '');\n    }\n\n    wrappedCallback = function(){\n      var props = {};\n      props[prefix + 'transition'] = props[prefix + 'animation-name'] = 'none';\n      $(this).css(props);\n      callback && callback.call(this);\n    }\n    if (duration > 0) this.one(endEvent, wrappedCallback);\n\n    setTimeout(function() {\n      that.css(cssProperties);\n      if (duration <= 0) setTimeout(function() {\n        that.each(function(){ wrappedCallback.call(this) });\n      }, 0);\n    }, 0);\n\n    return this;\n  };\n\n  testEl = null;\n})(Zepto);\n//     Zepto.js\n//     (c) 2010, 2011 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\n(function($){\n  var jsonpID = 0,\n      isObject = $.isObject,\n      document = window.document,\n      key,\n      name;\n\n  // trigger a custom event and return false if it was cancelled\n  function triggerAndReturn(context, eventName, data) {\n    var event = $.Event(eventName);\n    $(context).trigger(event, data);\n    return !event.defaultPrevented;\n  }\n\n  // trigger an Ajax \"global\" event\n  function triggerGlobal(settings, context, eventName, data) {\n    if (settings.global) return triggerAndReturn(context || document, eventName, data);\n  }\n\n  // Number of active Ajax requests\n  $.active = 0;\n\n  function ajaxStart(settings) {\n    if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart');\n  }\n  function ajaxStop(settings) {\n    if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop');\n  }\n\n  // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n  function ajaxBeforeSend(xhr, settings) {\n    var context = settings.context;\n    if (settings.beforeSend.call(context, xhr, settings) === false ||\n        triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)\n      return false;\n\n    triggerGlobal(settings, context, 'ajaxSend', [xhr, settings]);\n  }\n  function ajaxSuccess(data, xhr, settings) {\n    var context = settings.context, status = 'success';\n    settings.success.call(context, data, status, xhr);\n    triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data]);\n    ajaxComplete(status, xhr, settings);\n  }\n  // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n  function ajaxError(error, type, xhr, settings) {\n    var context = settings.context;\n    settings.error.call(context, xhr, type, error);\n    triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error]);\n    ajaxComplete(type, xhr, settings);\n  }\n  // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n  function ajaxComplete(status, xhr, settings) {\n    var context = settings.context;\n    settings.complete.call(context, xhr, status);\n    triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings]);\n    ajaxStop(settings);\n  }\n\n  // Empty function, used as default callback\n  function empty() {}\n\n  // ### $.ajaxJSONP\n  //\n  // Load JSON from a server in a different domain (JSONP)\n  //\n  // *Arguments:*\n  //\n  //     options — object that configure the request,\n  //               see avaliable options below\n  //\n  // *Avaliable options:*\n  //\n  //     url     — url to which the request is sent\n  //     success — callback that is executed if the request succeeds\n  //     error   — callback that is executed if the server drops error\n  //     context — in which context to execute the callbacks in\n  //\n  // *Example:*\n  //\n  //     $.ajaxJSONP({\n  //        url:     'http://example.com/projects?callback=?',\n  //        success: function (data) {\n  //            projects.push(json);\n  //        }\n  //     });\n  //\n  $.ajaxJSONP = function(options){\n    var callbackName = 'jsonp' + (++jsonpID),\n      script = document.createElement('script'),\n      abort = function(){\n        $(script).remove();\n        if (callbackName in window) window[callbackName] = empty;\n        ajaxComplete(xhr, options, 'abort');\n      },\n      xhr = { abort: abort }, abortTimeout;\n\n    window[callbackName] = function(data){\n      clearTimeout(abortTimeout);\n      $(script).remove();\n      delete window[callbackName];\n      ajaxSuccess(data, xhr, options);\n    };\n\n    script.src = options.url.replace(/=\\?/, '=' + callbackName);\n    $('head').append(script);\n\n    if (options.timeout > 0) abortTimeout = setTimeout(function(){\n        xhr.abort();\n        ajaxComplete(xhr, options, 'timeout');\n      }, options.timeout);\n\n    return xhr;\n  };\n\n  // ### $.ajaxSettings\n  //\n  // AJAX settings\n  //\n  $.ajaxSettings = {\n    // Default type of request\n    type: 'GET',\n    // Callback that is executed before request\n    beforeSend: empty,\n    // Callback that is executed if the request succeeds\n    success: empty,\n    // Callback that is executed the the server drops error\n    error: empty,\n    // Callback that is executed on request complete (both: error and success)\n    complete: empty,\n    // The context for the callbacks\n    context: null,\n    // Whether to trigger \"global\" Ajax events\n    global: true,\n    // Transport\n    xhr: function () {\n      return new window.XMLHttpRequest();\n    },\n    // MIME types mapping\n    accepts: {\n      script: 'text/javascript, application/javascript',\n      json:   'application/json',\n      xml:    'application/xml, text/xml',\n      html:   'text/html',\n      text:   'text/plain'\n    },\n    // Whether the request is to another domain\n    crossDomain: false,\n    // Default timeout\n    timeout: 0\n  };\n\n  // ### $.ajax\n  //\n  // Perform AJAX request\n  //\n  // *Arguments:*\n  //\n  //     options — object that configure the request,\n  //               see avaliable options below\n  //\n  // *Avaliable options:*\n  //\n  //     type ('GET')          — type of request GET / POST\n  //     url (window.location) — url to which the request is sent\n  //     data                  — data to send to server,\n  //                             can be string or object\n  //     dataType ('json')     — what response type you accept from\n  //                             the server:\n  //                             'json', 'xml', 'html', or 'text'\n  //     timeout (0)           — request timeout\n  //     beforeSend            — callback that is executed before\n  //                             request send\n  //     complete              — callback that is executed on request\n  //                             complete (both: error and success)\n  //     success               — callback that is executed if\n  //                             the request succeeds\n  //     error                 — callback that is executed if\n  //                             the server drops error\n  //     context               — in which context to execute the\n  //                             callbacks in\n  //\n  // *Example:*\n  //\n  //     $.ajax({\n  //        type:       'POST',\n  //        url:        '/projects',\n  //        data:       { name: 'Zepto.js' },\n  //        dataType:   'html',\n  //        timeout:    100,\n  //        context:    $('body'),\n  //        success:    function (data) {\n  //            this.append(data);\n  //        },\n  //        error:    function (xhr, type) {\n  //            alert('Error!');\n  //        }\n  //     });\n  //\n  $.ajax = function(options){\n    var settings = $.extend({}, options || {});\n    for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key];\n\n    ajaxStart(settings);\n\n    if (!settings.crossDomain) settings.crossDomain = /^([\\w-]+:)?\\/\\/([^\\/]+)/.test(settings.url) &&\n      RegExp.$2 != window.location.host;\n\n    if (/=\\?/.test(settings.url)) return $.ajaxJSONP(settings);\n\n    if (!settings.url) settings.url = window.location.toString();\n    if (settings.data && !settings.contentType) settings.contentType = 'application/x-www-form-urlencoded';\n    if (isObject(settings.data)) settings.data = $.param(settings.data);\n\n    if (settings.type.match(/get/i) && settings.data) {\n      var queryString = settings.data;\n      if (settings.url.match(/\\?.*=/)) {\n        queryString = '&' + queryString;\n      } else if (queryString[0] != '?') {\n        queryString = '?' + queryString;\n      }\n      settings.url += queryString;\n    }\n\n    var mime = settings.accepts[settings.dataType],\n        baseHeaders = { },\n        protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n        xhr = $.ajaxSettings.xhr(), abortTimeout;\n\n    if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest';\n    if (mime) baseHeaders['Accept'] = mime;\n    settings.headers = $.extend(baseHeaders, settings.headers || {});\n\n    xhr.onreadystatechange = function(){\n      if (xhr.readyState == 4) {\n        clearTimeout(abortTimeout);\n        var result, error = false;\n        if ((xhr.status >= 200 && xhr.status < 300) || (xhr.status == 0 && protocol == 'file:')) {\n          if (mime == 'application/json' && !(/^\\s*$/.test(xhr.responseText))) {\n            try { result = JSON.parse(xhr.responseText); }\n            catch (e) { error = e; }\n          }\n          else result = xhr.responseText;\n          if (error) ajaxError(error, 'parsererror', xhr, settings);\n          else ajaxSuccess(result, xhr, settings);\n        } else {\n          ajaxError(null, 'error', xhr, settings);\n        }\n      }\n    };\n\n    xhr.open(settings.type, settings.url, true);\n\n    if (settings.contentType) settings.headers['Content-Type'] = settings.contentType;\n    for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name]);\n\n    if (ajaxBeforeSend(xhr, settings) === false) {\n      xhr.abort();\n      return false;\n    }\n\n    if (settings.timeout > 0) abortTimeout = setTimeout(function(){\n        xhr.onreadystatechange = empty;\n        xhr.abort();\n        ajaxError(null, 'timeout', xhr, settings);\n      }, settings.timeout);\n\n    xhr.send(settings.data);\n    return xhr;\n  };\n\n  // ### $.get\n  //\n  // Load data from the server using a GET request\n  //\n  // *Arguments:*\n  //\n  //     url     — url to which the request is sent\n  //     success — callback that is executed if the request succeeds\n  //\n  // *Example:*\n  //\n  //     $.get(\n  //        '/projects/42',\n  //        function (data) {\n  //            $('body').append(data);\n  //        }\n  //     );\n  //\n  $.get = function(url, success){ return $.ajax({ url: url, success: success }) };\n\n  // ### $.post\n  //\n  // Load data from the server using POST request\n  //\n  // *Arguments:*\n  //\n  //     url        — url to which the request is sent\n  //     [data]     — data to send to server, can be string or object\n  //     [success]  — callback that is executed if the request succeeds\n  //     [dataType] — type of expected response\n  //                  'json', 'xml', 'html', or 'text'\n  //\n  // *Example:*\n  //\n  //     $.post(\n  //        '/projects',\n  //        { name: 'Zepto.js' },\n  //        function (data) {\n  //            $('body').append(data);\n  //        },\n  //        'html'\n  //     );\n  //\n  $.post = function(url, data, success, dataType){\n    if ($.isFunction(data)) dataType = dataType || success, success = data, data = null;\n    return $.ajax({ type: 'POST', url: url, data: data, success: success, dataType: dataType });\n  };\n\n  // ### $.getJSON\n  //\n  // Load JSON from the server using GET request\n  //\n  // *Arguments:*\n  //\n  //     url     — url to which the request is sent\n  //     success — callback that is executed if the request succeeds\n  //\n  // *Example:*\n  //\n  //     $.getJSON(\n  //        '/projects/42',\n  //        function (json) {\n  //            projects.push(json);\n  //        }\n  //     );\n  //\n  $.getJSON = function(url, success){\n    return $.ajax({ url: url, success: success, dataType: 'json' });\n  };\n\n  // ### $.fn.load\n  //\n  // Load data from the server into an element\n  //\n  // *Arguments:*\n  //\n  //     url     — url to which the request is sent\n  //     [success] — callback that is executed if the request succeeds\n  //\n  // *Examples:*\n  //\n  //     $('#project_container').get(\n  //        '/projects/42',\n  //        function () {\n  //            alert('Project was successfully loaded');\n  //        }\n  //     );\n  //\n  //     $('#project_comments').get(\n  //        '/projects/42 #comments',\n  //        function () {\n  //            alert('Comments was successfully loaded');\n  //        }\n  //     );\n  //\n  $.fn.load = function(url, success){\n    if (!this.length) return this;\n    var self = this, parts = url.split(/\\s/), selector;\n    if (parts.length > 1) url = parts[0], selector = parts[1];\n    $.get(url, function(response){\n      self.html(selector ?\n        $(document.createElement('div')).html(response).find(selector).html()\n        : response);\n      success && success.call(self);\n    });\n    return this;\n  };\n\n  var escape = encodeURIComponent;\n\n  function serialize(params, obj, traditional, scope){\n    var array = $.isArray(obj);\n    $.each(obj, function(key, value) {\n      if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']';\n      // handle data in serializeArray() format\n      if (!scope && array) params.add(value.name, value.value);\n      // recurse into nested objects\n      else if (traditional ? $.isArray(value) : isObject(value))\n        serialize(params, value, traditional, key);\n      else params.add(key, value);\n    });\n  }\n\n  // ### $.param\n  //\n  // Encode object as a string of URL-encoded key-value pairs\n  //\n  // *Arguments:*\n  //\n  //     obj — object to serialize\n  //     [traditional] — perform shallow serialization\n  //\n  // *Example:*\n  //\n  //     $.param( { name: 'Zepto.js', version: '0.6' } );\n  //\n  $.param = function(obj, traditional){\n    var params = [];\n    params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) };\n    serialize(params, obj, traditional);\n    return params.join('&').replace('%20', '+');\n  };\n})(Zepto);\n//     Zepto.js\n//     (c) 2010, 2011 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\n(function ($) {\n\n  // ### $.fn.serializeArray\n  //\n  // Encode a set of form elements as an array of names and values\n  //\n  // *Example:*\n  //\n  //     $('#login_form').serializeArray();\n  //\n  //  returns\n  //\n  //     [\n  //         {\n  //             name: 'email',\n  //             value: 'koss@nocorp.me'\n  //         },\n  //         {\n  //             name: 'password',\n  //             value: '123456'\n  //         }\n  //     ]\n  //\n  $.fn.serializeArray = function () {\n    var result = [], el;\n    $( Array.prototype.slice.call(this.get(0).elements) ).each(function () {\n      el = $(this);\n      var type = el.attr('type');\n      if (\n        !this.disabled && type != 'submit' && type != 'reset' && type != 'button' &&\n        ((type != 'radio' && type != 'checkbox') || this.checked)\n      ) {\n        result.push({\n          name: el.attr('name'),\n          value: el.val()\n        });\n      }\n    });\n    return result;\n  };\n\n  // ### $.fn.serialize\n  //\n  //\n  // Encode a set of form elements as a string for submission\n  //\n  // *Example:*\n  //\n  //     $('#login_form').serialize();\n  //\n  //  returns\n  //\n  //     \"email=koss%40nocorp.me&password=123456\"\n  //\n  $.fn.serialize = function () {\n    var result = [];\n    this.serializeArray().forEach(function (elm) {\n      result.push( encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value) );\n    });\n    return result.join('&');\n  };\n\n  // ### $.fn.submit\n  //\n  // Bind or trigger the submit event for a form\n  //\n  // *Examples:*\n  //\n  // To bind a handler for the submit event:\n  //\n  //     $('#login_form').submit(function (e) {\n  //         alert('Form was submitted!');\n  //         e.preventDefault();\n  //     });\n  //\n  // To trigger form submit:\n  //\n  //     $('#login_form').submit();\n  //\n  $.fn.submit = function (callback) {\n    if (callback) this.bind('submit', callback)\n    else if (this.length) {\n      var event = $.Event('submit');\n      this.eq(0).trigger(event);\n      if (!event.defaultPrevented) this.get(0).submit()\n    }\n    return this;\n  }\n\n})(Zepto);\n//     Zepto.js\n//     (c) 2010, 2011 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\n(function($){\n  var touch = {}, touchTimeout;\n\n  function parentIfText(node){\n    return 'tagName' in node ? node : node.parentNode;\n  }\n\n  function swipeDirection(x1, x2, y1, y2){\n    var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2);\n    if (xDelta >= yDelta) {\n      return (x1 - x2 > 0 ? 'Left' : 'Right');\n    } else {\n      return (y1 - y2 > 0 ? 'Up' : 'Down');\n    }\n  }\n\n  var longTapDelay = 750;\n  function longTap(){\n    if (touch.last && (Date.now() - touch.last >= longTapDelay)) {\n      $(touch.target).trigger('longTap');\n      touch = {};\n    }\n  }\n\n  $(document).ready(function(){\n    $(document.body).bind('touchstart', function(e){\n      var now = Date.now(), delta = now - (touch.last || now);\n      touch.target = parentIfText(e.touches[0].target);\n      touchTimeout && clearTimeout(touchTimeout);\n      touch.x1 = e.touches[0].pageX;\n      touch.y1 = e.touches[0].pageY;\n      if (delta > 0 && delta <= 250) touch.isDoubleTap = true;\n      touch.last = now;\n      setTimeout(longTap, longTapDelay);\n    }).bind('touchmove', function(e){\n      touch.x2 = e.touches[0].pageX;\n      touch.y2 = e.touches[0].pageY;\n    }).bind('touchend', function(e){\n      if (touch.isDoubleTap) {\n        $(touch.target).trigger('doubleTap');\n        touch = {};\n      } else if (touch.x2 > 0 || touch.y2 > 0) {\n        (Math.abs(touch.x1 - touch.x2) > 30 || Math.abs(touch.y1 - touch.y2) > 30)  &&\n          $(touch.target).trigger('swipe') &&\n          $(touch.target).trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)));\n        touch.x1 = touch.x2 = touch.y1 = touch.y2 = touch.last = 0;\n      } else if ('last' in touch) {\n        touchTimeout = setTimeout(function(){\n          touchTimeout = null;\n          $(touch.target).trigger('tap')\n          touch = {};\n        }, 250);\n      }\n    }).bind('touchcancel', function(){ touch = {} });\n  });\n\n  ['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'longTap'].forEach(function(m){\n    $.fn[m] = function(callback){ return this.bind(m, callback) }\n  });\n})(Zepto);\n"
  },
  {
    "path": "Journey/Resources/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Journey/Support/Application.h",
    "content": "#import \"ConciseKit.h\"\n#import \"NSApplication+SharedObjects.h\"\n#import \"NSDictionary+PFMAdditions.h\"\n#import \"NSMutableDictionary+PFMAdditions.h\"\n#import \"NSDate+SCAdditions.h\"\n#import \"NSWindow+PFMAdditions.h\"\n\n#define kPathAPIHost                  @\"https://api.path.com\"\n#define kPathDefaultsEmailKey         @\"user_email\"\n#define kPathKeychainServiceName      @\"Journey\"\n#define kMomentsAPIPath               @\"/3/moment/feed/home\"\n"
  },
  {
    "path": "Journey/Support/Journey-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string>Icon</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.journeyformac.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>Journey</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>0.1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSApplicationCategoryType</key>\n\t<string>public.app-category.social-networking</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>${MACOSX_DEPLOYMENT_TARGET}</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Journey/Support/Journey-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'Path' target in the 'Path' project\n//\n\n#ifdef __OBJC__\n  #import <Cocoa/Cocoa.h>\n#endif\n"
  },
  {
    "path": "Journey/Support/main.m",
    "content": "#import <Cocoa/Cocoa.h>\n\nint main(int argc, char *argv[]) {\n  return NSApplicationMain(argc, (const char **)argv);\n}\n"
  },
  {
    "path": "Journey/Views/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"8.00\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1070</int>\n\t\t<string key=\"IBDocument.SystemVersion\">11D50</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">2177</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1138.32</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">568.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2177</string>\n\t\t</object>\n\t\t<array key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<string>NSObjectController</string>\n\t\t\t<string>NSMenu</string>\n\t\t\t<string>NSMenuItem</string>\n\t\t\t<string>NSCustomObject</string>\n\t\t</array>\n\t\t<array key=\"IBDocument.PluginDependencies\">\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t</array>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<array class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1048\">\n\t\t\t<object class=\"NSCustomObject\" id=\"1021\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1014\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1050\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSObjectController\" id=\"79500338\">\n\t\t\t\t<string key=\"NSObjectClassName\">PFMUser</string>\n\t\t\t\t<bool key=\"NSEditable\">YES</bool>\n\t\t\t\t<object class=\"_NSManagedProxy\" key=\"_NSManagedProxy\"/>\n\t\t\t</object>\n\t\t\t<object class=\"NSMenu\" id=\"649796088\">\n\t\t\t\t<string key=\"NSTitle\">AMainMenu</string>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t<object class=\"NSMenuItem\" id=\"694149608\">\n\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"649796088\"/>\n\t\t\t\t\t\t<string key=\"NSTitle\">Journey</string>\n\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t<object class=\"NSCustomResource\" key=\"NSOnImage\" id=\"35465992\">\n\t\t\t\t\t\t\t<string key=\"NSClassName\">NSImage</string>\n\t\t\t\t\t\t\t<string key=\"NSResourceName\">NSMenuCheckmark</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSCustomResource\" key=\"NSMixedImage\" id=\"502551668\">\n\t\t\t\t\t\t\t<string key=\"NSClassName\">NSImage</string>\n\t\t\t\t\t\t\t<string key=\"NSResourceName\">NSMenuMixedState</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"110575045\">\n\t\t\t\t\t\t\t<string key=\"NSTitle\">Journey</string>\n\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"238522557\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">About Journey</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"304266470\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"609285721\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Preferences…</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">,</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"481834944\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"1046388886\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Services</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"752062318\">\n\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Services</string>\n\t\t\t\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\"/>\n\t\t\t\t\t\t\t\t\t\t<string key=\"NSName\">_NSServicesMenu</string>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"646227648\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"755159360\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Hide Path</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">h</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"342932134\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Hide Others</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">h</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1572864</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"908899353\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Show All</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"1056857174\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"632727374\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"110575045\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Quit Journey</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">q</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t<string key=\"NSName\">_NSAppleMenu</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMenuItem\" id=\"379814623\">\n\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"649796088\"/>\n\t\t\t\t\t\t<string key=\"NSTitle\">File</string>\n\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"720053764\">\n\t\t\t\t\t\t\t<string key=\"NSTitle\">File</string>\n\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"370998918\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"720053764\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Sign Out</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMenuItem\" id=\"952259628\">\n\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"649796088\"/>\n\t\t\t\t\t\t<string key=\"NSTitle\">Edit</string>\n\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"789758025\">\n\t\t\t\t\t\t\t<string key=\"NSTitle\">Edit</string>\n\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"1058277027\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Undo</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">z</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"790794224\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Redo</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">Z</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1179648</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"1040322652\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"296257095\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Cut</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">x</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"860595796\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Copy</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">c</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"29853731\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Paste</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">v</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"82994268\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Paste and Match Style</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">V</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1572864</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"437104165\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Delete</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"583158037\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Select All</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">a</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"212016141\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"892235320\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Find</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"963351320\">\n\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Find</string>\n\t\t\t\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"447796847\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"963351320\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Find…</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">f</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSTag\">1</int>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"738670835\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"963351320\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Find and Replace…</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">f</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1572864</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSTag\">12</int>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"326711663\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"963351320\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Find Next</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">g</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSTag\">2</int>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"270902937\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"963351320\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Find Previous</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">G</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1179648</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSTag\">3</int>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"159080638\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"963351320\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Use Selection for Find</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">e</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSTag\">7</int>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"88285865\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"963351320\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Jump to Selection</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">j</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"972420730\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Spelling and Grammar</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"769623530\">\n\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Spelling and Grammar</string>\n\t\t\t\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"679648819\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"769623530\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Show Spelling and Grammar</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">:</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"96193923\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"769623530\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Check Document Now</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">;</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"859480356\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"769623530\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"948374510\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"769623530\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Check Spelling While Typing</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"967646866\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"769623530\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Check Grammar With Spelling</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"795346622\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"769623530\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Correct Spelling Automatically</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"507821607\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Substitutions</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"698887838\">\n\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Substitutions</string>\n\t\t\t\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"65139061\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"698887838\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Show Substitutions</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"19036812\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"698887838\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"605118523\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"698887838\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Smart Copy/Paste</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">f</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSTag\">1</int>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"197661976\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"698887838\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Smart Quotes</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">g</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSTag\">2</int>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"672708820\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"698887838\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Smart Dashes</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"708854459\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"698887838\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Smart Links</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">G</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1179648</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSTag\">3</int>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"537092702\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"698887838\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Text Replacement</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"288088188\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Transformations</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"579392910\">\n\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Transformations</string>\n\t\t\t\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"1060694897\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"579392910\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Make Upper Case</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"879586729\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"579392910\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Make Lower Case</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"56570060\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"579392910\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Capitalize</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"676164635\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"789758025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Speech</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"785027613\">\n\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Speech</string>\n\t\t\t\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"731782645\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"785027613\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Start Speaking</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"680220178\">\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"785027613\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Stop Speaking</string>\n\t\t\t\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMenuItem\" id=\"713487014\">\n\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"649796088\"/>\n\t\t\t\t\t\t<string key=\"NSTitle\">Window</string>\n\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"835318025\">\n\t\t\t\t\t\t\t<string key=\"NSTitle\">Window</string>\n\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"1011231497\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"835318025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Minimize</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">m</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"575023229\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"835318025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Zoom</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"299356726\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"835318025\"/>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"625202149\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"835318025\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Bring All to Front</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t<string key=\"NSName\">_NSWindowsMenu</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMenuItem\" id=\"448692316\">\n\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"649796088\"/>\n\t\t\t\t\t\t<string key=\"NSTitle\">Help</string>\n\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t<string key=\"NSAction\">submenuAction:</string>\n\t\t\t\t\t\t<object class=\"NSMenu\" key=\"NSSubmenu\" id=\"992780483\">\n\t\t\t\t\t\t\t<string key=\"NSTitle\">Help</string>\n\t\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t\t\t\t<object class=\"NSMenuItem\" id=\"105068016\">\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"992780483\"/>\n\t\t\t\t\t\t\t\t\t<string key=\"NSTitle\">Path Help</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSKeyEquiv\">?</string>\n\t\t\t\t\t\t\t\t\t<int key=\"NSKeyEquivModMask\">1048576</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t\t\t\t<int key=\"NSState\">1</int>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</array>\n\t\t\t\t\t\t\t<string key=\"NSName\">_NSHelpMenu</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"NSName\">_NSMainMenu</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"976324537\">\n\t\t\t\t<string key=\"NSClassName\">PathAppDelegate</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSMenu\" id=\"957410549\">\n\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"NSMenuItems\">\n\t\t\t\t\t<object class=\"NSMenuItem\" id=\"462219813\">\n\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"957410549\"/>\n\t\t\t\t\t\t<string key=\"NSTitle\">Show Journey</string>\n\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMenuItem\" id=\"707675987\">\n\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"957410549\"/>\n\t\t\t\t\t\t<bool key=\"NSIsDisabled\">YES</bool>\n\t\t\t\t\t\t<bool key=\"NSIsSeparator\">YES</bool>\n\t\t\t\t\t\t<string key=\"NSTitle\"/>\n\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMenuItem\" id=\"417900864\">\n\t\t\t\t\t\t<reference key=\"NSMenu\" ref=\"957410549\"/>\n\t\t\t\t\t\t<string key=\"NSTitle\">Quit</string>\n\t\t\t\t\t\t<string key=\"NSKeyEquiv\"/>\n\t\t\t\t\t\t<int key=\"NSMnemonicLoc\">2147483647</int>\n\t\t\t\t\t\t<reference key=\"NSOnImage\" ref=\"35465992\"/>\n\t\t\t\t\t\t<reference key=\"NSMixedImage\" ref=\"502551668\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t</object>\n\t\t</array>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<array class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">terminate:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1050\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"632727374\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">449</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">orderFrontStandardAboutPanel:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1021\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"238522557\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">142</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1021\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"976324537\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">495</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">performMiniaturize:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1011231497\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">37</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">arrangeInFront:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"625202149\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">39</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toggleContinuousSpellChecking:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"948374510\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">222</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">undo:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1058277027\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">223</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">copy:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"860595796\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">224</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">checkSpelling:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"96193923\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">225</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">paste:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"29853731\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">226</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">stopSpeaking:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"680220178\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">227</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">cut:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"296257095\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">228</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">showGuessPanel:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"679648819\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">230</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">redo:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"790794224\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">231</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">selectAll:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"583158037\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">232</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">startSpeaking:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"731782645\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">233</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delete:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"437104165\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">235</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">performZoom:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"575023229\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">240</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">performFindPanelAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"447796847\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">241</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">centerSelectionInVisibleArea:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"88285865\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">245</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toggleGrammarChecking:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"967646866\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">347</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toggleSmartInsertDelete:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"605118523\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">355</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toggleAutomaticQuoteSubstitution:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"197661976\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">356</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toggleAutomaticLinkDetection:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"708854459\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">357</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">hide:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"755159360\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">367</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">hideOtherApplications:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"342932134\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">368</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">unhideAllApplications:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"908899353\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">370</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toggleAutomaticSpellingCorrection:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"795346622\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">456</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">orderFrontSubstitutionsPanel:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"65139061\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">458</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toggleAutomaticDashSubstitution:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"672708820\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">461</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toggleAutomaticTextReplacement:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"537092702\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">463</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">uppercaseWord:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1060694897\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">464</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">capitalizeWord:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"56570060\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">467</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">lowercaseWord:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"879586729\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">468</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">pasteAsPlainText:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"82994268\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">486</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">performFindPanelAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"326711663\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">487</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">performFindPanelAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"270902937\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">488</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">performFindPanelAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"159080638\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">489</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">showHelp:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"105068016\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">493</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">performFindPanelAction:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"738670835\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">535</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">signOut:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"976324537\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"370998918\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">544</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">statusMenu</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"976324537\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"957410549\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">558</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">quitApp:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"976324537\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"417900864\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">574</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">showMainWindow:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"976324537\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"462219813\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">594</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">mainMenu</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"976324537\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"649796088\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">595</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">sharedUserController</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"976324537\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"79500338\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">596</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">enabled: selection.isSignedIn</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"370998918\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"79500338\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"370998918\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"79500338\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">enabled: selection.isSignedIn</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">enabled</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.isSignedIn</string>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">552</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">content</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"79500338\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1050\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">546</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">contentObject: sharedUser</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"79500338\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1050\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"79500338\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"1050\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">contentObject: sharedUser</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">contentObject</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">sharedUser</string>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">550</int>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<array key=\"orderedObjects\">\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<array key=\"object\" id=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1048\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1021\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1014\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1050\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">29</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"649796088\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"713487014\"/>\n\t\t\t\t\t\t\t<reference ref=\"694149608\"/>\n\t\t\t\t\t\t\t<reference ref=\"952259628\"/>\n\t\t\t\t\t\t\t<reference ref=\"379814623\"/>\n\t\t\t\t\t\t\t<reference ref=\"448692316\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">19</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"713487014\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"835318025\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"649796088\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">56</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"694149608\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"110575045\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"649796088\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">217</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"952259628\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"789758025\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"649796088\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">83</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"379814623\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"720053764\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"649796088\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">81</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"720053764\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"370998918\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"379814623\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">205</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"789758025\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"437104165\"/>\n\t\t\t\t\t\t\t<reference ref=\"583158037\"/>\n\t\t\t\t\t\t\t<reference ref=\"1058277027\"/>\n\t\t\t\t\t\t\t<reference ref=\"212016141\"/>\n\t\t\t\t\t\t\t<reference ref=\"296257095\"/>\n\t\t\t\t\t\t\t<reference ref=\"29853731\"/>\n\t\t\t\t\t\t\t<reference ref=\"860595796\"/>\n\t\t\t\t\t\t\t<reference ref=\"1040322652\"/>\n\t\t\t\t\t\t\t<reference ref=\"790794224\"/>\n\t\t\t\t\t\t\t<reference ref=\"892235320\"/>\n\t\t\t\t\t\t\t<reference ref=\"972420730\"/>\n\t\t\t\t\t\t\t<reference ref=\"676164635\"/>\n\t\t\t\t\t\t\t<reference ref=\"507821607\"/>\n\t\t\t\t\t\t\t<reference ref=\"288088188\"/>\n\t\t\t\t\t\t\t<reference ref=\"82994268\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"952259628\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">202</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"437104165\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">198</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"583158037\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">207</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1058277027\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">214</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"212016141\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">199</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"296257095\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">203</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"29853731\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">197</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"860595796\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">206</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1040322652\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">215</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"790794224\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">218</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"892235320\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"963351320\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">216</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"972420730\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"769623530\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">200</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"769623530\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"948374510\"/>\n\t\t\t\t\t\t\t<reference ref=\"96193923\"/>\n\t\t\t\t\t\t\t<reference ref=\"679648819\"/>\n\t\t\t\t\t\t\t<reference ref=\"967646866\"/>\n\t\t\t\t\t\t\t<reference ref=\"859480356\"/>\n\t\t\t\t\t\t\t<reference ref=\"795346622\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"972420730\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">219</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"948374510\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"769623530\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">201</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"96193923\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"769623530\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">204</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"679648819\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"769623530\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">220</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"963351320\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"270902937\"/>\n\t\t\t\t\t\t\t<reference ref=\"88285865\"/>\n\t\t\t\t\t\t\t<reference ref=\"159080638\"/>\n\t\t\t\t\t\t\t<reference ref=\"326711663\"/>\n\t\t\t\t\t\t\t<reference ref=\"447796847\"/>\n\t\t\t\t\t\t\t<reference ref=\"738670835\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"892235320\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">213</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"270902937\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"963351320\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">210</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"88285865\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"963351320\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">221</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"159080638\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"963351320\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">208</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"326711663\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"963351320\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">209</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"447796847\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"963351320\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">57</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"110575045\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"238522557\"/>\n\t\t\t\t\t\t\t<reference ref=\"755159360\"/>\n\t\t\t\t\t\t\t<reference ref=\"908899353\"/>\n\t\t\t\t\t\t\t<reference ref=\"632727374\"/>\n\t\t\t\t\t\t\t<reference ref=\"646227648\"/>\n\t\t\t\t\t\t\t<reference ref=\"609285721\"/>\n\t\t\t\t\t\t\t<reference ref=\"481834944\"/>\n\t\t\t\t\t\t\t<reference ref=\"304266470\"/>\n\t\t\t\t\t\t\t<reference ref=\"1046388886\"/>\n\t\t\t\t\t\t\t<reference ref=\"1056857174\"/>\n\t\t\t\t\t\t\t<reference ref=\"342932134\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"694149608\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">58</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"238522557\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">134</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"755159360\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">150</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"908899353\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">136</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"632727374\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">144</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"646227648\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">236</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"304266470\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">131</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1046388886\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"752062318\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">149</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1056857174\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">145</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"342932134\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">130</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"752062318\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1046388886\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">24</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"835318025\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"299356726\"/>\n\t\t\t\t\t\t\t<reference ref=\"625202149\"/>\n\t\t\t\t\t\t\t<reference ref=\"575023229\"/>\n\t\t\t\t\t\t\t<reference ref=\"1011231497\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"713487014\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">92</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"299356726\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"835318025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">5</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"625202149\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"835318025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">239</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"575023229\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"835318025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">23</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1011231497\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"835318025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">211</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"676164635\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"785027613\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">212</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"785027613\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"680220178\"/>\n\t\t\t\t\t\t\t<reference ref=\"731782645\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"676164635\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">195</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"680220178\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"785027613\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">196</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"731782645\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"785027613\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">346</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"967646866\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"769623530\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">348</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"507821607\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"698887838\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">349</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"698887838\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"605118523\"/>\n\t\t\t\t\t\t\t<reference ref=\"197661976\"/>\n\t\t\t\t\t\t\t<reference ref=\"708854459\"/>\n\t\t\t\t\t\t\t<reference ref=\"65139061\"/>\n\t\t\t\t\t\t\t<reference ref=\"19036812\"/>\n\t\t\t\t\t\t\t<reference ref=\"672708820\"/>\n\t\t\t\t\t\t\t<reference ref=\"537092702\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"507821607\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">350</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"605118523\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"698887838\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">351</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"197661976\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"698887838\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">354</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"708854459\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"698887838\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">450</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"288088188\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"579392910\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">451</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"579392910\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"1060694897\"/>\n\t\t\t\t\t\t\t<reference ref=\"879586729\"/>\n\t\t\t\t\t\t\t<reference ref=\"56570060\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"288088188\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">452</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1060694897\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"579392910\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">453</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"859480356\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"769623530\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">454</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"795346622\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"769623530\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">457</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"65139061\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"698887838\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">459</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"19036812\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"698887838\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">460</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"672708820\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"698887838\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">462</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"537092702\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"698887838\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">465</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"879586729\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"579392910\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">466</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"56570060\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"579392910\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">485</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"82994268\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"789758025\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">490</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"448692316\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"992780483\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"649796088\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">491</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"992780483\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"105068016\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"448692316\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">492</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"105068016\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"992780483\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">494</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"976324537\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">534</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"738670835\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"963351320\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">143</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"481834944\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">129</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"609285721\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"110575045\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">543</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"370998918\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"720053764\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">545</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"79500338\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">sharedUser Controller</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">553</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"957410549\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"462219813\"/>\n\t\t\t\t\t\t\t<reference ref=\"417900864\"/>\n\t\t\t\t\t\t\t<reference ref=\"707675987\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">554</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"462219813\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"957410549\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">555</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"417900864\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"957410549\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">557</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"707675987\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"957410549\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t</object>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<string key=\"-1.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"-2.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"-3.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"129.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"130.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"131.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"134.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"136.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"143.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"144.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"145.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"149.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"150.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"19.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"195.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"196.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"197.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"198.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"199.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"200.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"201.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"202.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"203.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"204.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"205.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"206.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"207.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"208.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"209.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"210.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"211.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"212.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"213.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"214.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"215.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"216.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"217.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"218.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"219.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"220.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"221.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"23.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"236.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"239.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"24.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"29.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"346.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"348.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"349.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"350.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"351.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"354.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"450.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"451.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"452.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"453.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"454.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"457.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"459.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"460.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"462.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"465.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"466.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"485.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"490.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"491.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"492.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"494.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"5.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"534.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"543.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"545.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"553.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"554.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"555.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"557.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"56.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"57.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"58.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"81.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"83.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string key=\"92.IBPluginDependency\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t</dictionary>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"unlocalizedProperties\"/>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"localizations\"/>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">596</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<array class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PathAppDelegate</string>\n\t\t\t\t\t<string key=\"superclassName\">NSObject</string>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"quitApp:\">id</string>\n\t\t\t\t\t\t<string key=\"showMainWindow:\">id</string>\n\t\t\t\t\t\t<string key=\"signOut:\">id</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"quitApp:\">\n\t\t\t\t\t\t\t<string key=\"name\">quitApp:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"showMainWindow:\">\n\t\t\t\t\t\t\t<string key=\"name\">showMainWindow:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"signOut:\">\n\t\t\t\t\t\t\t<string key=\"name\">signOut:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"mainMenu\">NSMenu</string>\n\t\t\t\t\t\t<string key=\"sharedUserController\">NSObjectController</string>\n\t\t\t\t\t\t<string key=\"statusMenu\">NSMenu</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"mainMenu\">\n\t\t\t\t\t\t\t<string key=\"name\">mainMenu</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSMenu</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"sharedUserController\">\n\t\t\t\t\t\t\t<string key=\"name\">sharedUserController</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSObjectController</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"statusMenu\">\n\t\t\t\t\t\t\t<string key=\"name\">statusMenu</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSMenu</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PathAppDelegate.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<dictionary class=\"NSMutableDictionary\" key=\"IBDocument.LastKnownImageSizes\">\n\t\t\t<string key=\"NSMenuCheckmark\">{11, 11}</string>\n\t\t\t<string key=\"NSMenuMixedState\">{10, 3}</string>\n\t\t</dictionary>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Journey/Views/MainWindow.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1070</int>\n\t\t<string key=\"IBDocument.SystemVersion\">11D50b</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">2177</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1138.32</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">568.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2177</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>NSCustomView</string>\n\t\t\t<string>NSImageView</string>\n\t\t\t<string>NSWindowTemplate</string>\n\t\t\t<string>NSView</string>\n\t\t\t<string>NSImageCell</string>\n\t\t\t<string>NSCustomObject</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSCustomObject\" id=\"1001\">\n\t\t\t\t<string key=\"NSClassName\">PFMMainWindowController</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1003\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1004\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSWindowTemplate\" id=\"1005\">\n\t\t\t\t<int key=\"NSWindowStyleMask\">271</int>\n\t\t\t\t<int key=\"NSWindowBacking\">2</int>\n\t\t\t\t<string key=\"NSWindowRect\">{{0, 0}, {404, 480}}</string>\n\t\t\t\t<int key=\"NSWTFlags\">544735232</int>\n\t\t\t\t<string key=\"NSWindowTitle\">Journey</string>\n\t\t\t\t<string key=\"NSWindowClass\">PFMThemedWindow</string>\n\t\t\t\t<nil key=\"NSViewClass\"/>\n\t\t\t\t<nil key=\"NSUserInterfaceItemIdentifier\"/>\n\t\t\t\t<string key=\"NSWindowContentMaxSize\">{405, 9999}</string>\n\t\t\t\t<string key=\"NSWindowContentMinSize\">{405, 390}</string>\n\t\t\t\t<object class=\"NSView\" key=\"NSWindowView\" id=\"1006\">\n\t\t\t\t\t<nil key=\"NSNextResponder\"/>\n\t\t\t\t\t<int key=\"NSvFlags\">256</int>\n\t\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSCustomView\" id=\"741870961\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">-2147483382</int>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{0, 413}, {404, 45}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"115924046\"/>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:1192</string>\n\t\t\t\t\t\t\t<string key=\"NSClassName\">NSView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSCustomView\" id=\"115924046\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t\t\t\t<string key=\"NSFrameSize\">{404, 458}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:1192</string>\n\t\t\t\t\t\t\t<string key=\"NSClassName\">PFMView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string key=\"NSFrameSize\">{404, 480}</string>\n\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"741870961\"/>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSScreenRect\">{{0, 0}, {1920, 1058}}</string>\n\t\t\t\t<string key=\"NSMinSize\">{405, 412}</string>\n\t\t\t\t<string key=\"NSMaxSize\">{405, 10021}</string>\n\t\t\t\t<bool key=\"NSWindowIsRestorable\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomView\" id=\"396936471\">\n\t\t\t\t<nil key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">266</int>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"NSImageView\" id=\"608012764\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"396936471\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">269</int>\n\t\t\t\t\t\t<object class=\"NSMutableSet\" key=\"NSDragTypes\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"set.sortedObjects\">\n\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t<string>Apple PDF pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>Apple PICT pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>Apple PNG pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>NSFilenamesPboardType</string>\n\t\t\t\t\t\t\t\t<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>NeXT TIFF v4.0 pasteboard type</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{154, 9}, {96, 30}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"396936471\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:2141</string>\n\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSImageCell\" key=\"NSCell\" id=\"768508872\">\n\t\t\t\t\t\t\t<int key=\"NSCellFlags\">130560</int>\n\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">33554432</int>\n\t\t\t\t\t\t\t<object class=\"NSCustomResource\" key=\"NSContents\">\n\t\t\t\t\t\t\t\t<string key=\"NSClassName\">NSImage</string>\n\t\t\t\t\t\t\t\t<string key=\"NSResourceName\">TitleBarLogo</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:2141</string>\n\t\t\t\t\t\t\t<int key=\"NSAlign\">0</int>\n\t\t\t\t\t\t\t<int key=\"NSScale\">2</int>\n\t\t\t\t\t\t\t<int key=\"NSStyle\">0</int>\n\t\t\t\t\t\t\t<bool key=\"NSAnimates\">NO</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"NSEditable\">YES</bool>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSFrameSize\">{404, 44}</string>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"608012764\"/>\n\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t<string key=\"NSClassName\">PFMView</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">window</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">5</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">momentListViewWrapper</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"115924046\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">10</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">toolbarViewWrapper</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"741870961\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">13</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">titleBarView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"396936471\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">18</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1005\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1001\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">19</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"object\" id=\"1002\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1004\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1005\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"1006\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1006\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"115924046\"/>\n\t\t\t\t\t\t\t<reference ref=\"741870961\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">9</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"115924046\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">11</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"741870961\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">17</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"396936471\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"608012764\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">Title Bar Decoration View</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">14</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"608012764\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"768508872\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"396936471\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">15</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"768508872\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"608012764\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>-3.IBPluginDependency</string>\n\t\t\t\t\t<string>1.IBNSWindowAutoPositionCentersHorizontal</string>\n\t\t\t\t\t<string>1.IBNSWindowAutoPositionCentersVertical</string>\n\t\t\t\t\t<string>1.IBPluginDependency</string>\n\t\t\t\t\t<string>1.IBWindowTemplateEditedContentRect</string>\n\t\t\t\t\t<string>1.NSWindowTemplate.visibleAtLaunch</string>\n\t\t\t\t\t<string>11.IBPluginDependency</string>\n\t\t\t\t\t<string>14.CustomClassName</string>\n\t\t\t\t\t<string>14.IBPluginDependency</string>\n\t\t\t\t\t<string>15.IBPluginDependency</string>\n\t\t\t\t\t<string>17.IBPluginDependency</string>\n\t\t\t\t\t<string>2.IBPluginDependency</string>\n\t\t\t\t\t<string>9.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<boolean value=\"NO\"/>\n\t\t\t\t\t<boolean value=\"NO\"/>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>{{357, 418}, {480, 270}}</string>\n\t\t\t\t\t<integer value=\"1\"/>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>PFMUnclickableImageView</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">19</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMMainWindowController</string>\n\t\t\t\t\t<string key=\"superclassName\">NSWindowController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>momentListViewWrapper</string>\n\t\t\t\t\t\t\t<string>titleBarView</string>\n\t\t\t\t\t\t\t<string>toolbarViewWrapper</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>PFMView</string>\n\t\t\t\t\t\t\t<string>PFMView</string>\n\t\t\t\t\t\t\t<string>NSView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>momentListViewWrapper</string>\n\t\t\t\t\t\t\t<string>titleBarView</string>\n\t\t\t\t\t\t\t<string>toolbarViewWrapper</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">momentListViewWrapper</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">PFMView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">titleBarView</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">PFMView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">toolbarViewWrapper</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSView</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMMainWindowController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMThemedWindow</string>\n\t\t\t\t\t<string key=\"superclassName\">NSWindow</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMThemedWindow.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMUnclickableImageView</string>\n\t\t\t\t\t<string key=\"superclassName\">NSImageView</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMUnclickableImageView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMView</string>\n\t\t\t\t\t<string key=\"superclassName\">NSView</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.LastKnownImageSizes\">\n\t\t\t<string key=\"NS.key.0\">TitleBarLogo</string>\n\t\t\t<string key=\"NS.object.0\">{96, 30}</string>\n\t\t</object>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Journey/Views/MomentListView.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1070</int>\n\t\t<string key=\"IBDocument.SystemVersion\">11D50</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">1938</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1138.32</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">568.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t<string>com.apple.WebKitIBPlugin</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<string>1938</string>\n\t\t\t\t<string>822</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>NSCustomView</string>\n\t\t\t<string>WebView</string>\n\t\t\t<string>NSCustomObject</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string>com.apple.WebKitIBPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSCustomObject\" id=\"1001\">\n\t\t\t\t<string key=\"NSClassName\">PFMMomentListViewController</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1003\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1004\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomView\" id=\"1005\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"WebView\" id=\"576004473\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1005\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t\t\t<object class=\"NSMutableSet\" key=\"NSDragTypes\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"set.sortedObjects\">\n\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t<string>Apple HTML pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>Apple PDF pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>Apple PICT pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>Apple URL pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>Apple Web Archive pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>NSColor pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>NSFilenamesPboardType</string>\n\t\t\t\t\t\t\t\t<string>NSStringPboardType</string>\n\t\t\t\t\t\t\t\t<string>NeXT RTFD pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>NeXT Rich Text Format v1.0 pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>NeXT TIFF v4.0 pasteboard type</string>\n\t\t\t\t\t\t\t\t<string>WebURLsWithTitlesPboardType</string>\n\t\t\t\t\t\t\t\t<string>public.png</string>\n\t\t\t\t\t\t\t\t<string>public.url</string>\n\t\t\t\t\t\t\t\t<string>public.url-name</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<string key=\"NSFrameSize\">{405, 405}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1005\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:51</string>\n\t\t\t\t\t\t<string key=\"FrameName\"/>\n\t\t\t\t\t\t<string key=\"GroupName\"/>\n\t\t\t\t\t\t<object class=\"WebPreferences\" key=\"Preferences\">\n\t\t\t\t\t\t\t<string key=\"Identifier\"/>\n\t\t\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"Values\">\n\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string>WebKitDefaultFixedFontSize</string>\n\t\t\t\t\t\t\t\t\t<string>WebKitDefaultFontSize</string>\n\t\t\t\t\t\t\t\t\t<string>WebKitMinimumFontSize</string>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t\t<integer value=\"12\"/>\n\t\t\t\t\t\t\t\t\t<integer value=\"12\"/>\n\t\t\t\t\t\t\t\t\t<integer value=\"1\"/>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"UseBackForwardList\">YES</bool>\n\t\t\t\t\t\t<bool key=\"AllowsUndo\">YES</bool>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSFrameSize\">{405, 405}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"576004473\"/>\n\t\t\t\t<string key=\"NSClassName\">NSView</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">2</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">webView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"576004473\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">6</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">UIDelegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"576004473\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1001\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">10</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">policyDelegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"576004473\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1001\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">11</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"object\" id=\"1002\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1004\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1005\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"576004473\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">5</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"576004473\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>-3.IBPluginDependency</string>\n\t\t\t\t\t<string>1.IBPluginDependency</string>\n\t\t\t\t\t<string>5.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.WebKitIBPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">11</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMMomentListViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">NSViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">webView</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">WebView</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">webView</string>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">webView</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">WebView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMMomentListViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">WebView</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">reloadFromOrigin:</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">id</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">reloadFromOrigin:</string>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">reloadFromOrigin:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/WebView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Journey/Views/PFMRedLinenView.h",
    "content": "#import <Cocoa/Cocoa.h>\n#import \"PFMView.h\"\n\n@interface PFMRedLinenView : PFMView\n@end\n"
  },
  {
    "path": "Journey/Views/PFMRedLinenView.m",
    "content": "#import \"PFMRedLinenView.h\"\n\n@implementation PFMRedLinenView\n\n- (id)initWithFrame:(NSRect)frame {\n  self = [super initWithFrame:frame];\n  if (self) {\n    self.backgroundColor = [NSColor colorWithPatternImage:[NSImage imageNamed:@\"RedLinenBg.png\"]];\n  }\n  return self;\n}\n\n- (void)drawRect:(NSRect)rect {\n  NSRect frame = [self frame];\n\t[[NSBezierPath bezierPathWithRoundedRect:frame xRadius:4.0 yRadius:4.0] addClip];\n  [super drawRect:rect];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Views/PFMThemedWindow.h",
    "content": "#import <Cocoa/Cocoa.h>\n\n@class\n  PFMRedLinenView\n;\n\n@interface PFMThemedWindow : NSWindow {\n  PFMRedLinenView *_redLinenView;\n}\n\n@property (nonatomic, retain) PFMRedLinenView *redLinenView;\n\n@end\n"
  },
  {
    "path": "Journey/Views/PFMThemedWindow.m",
    "content": "#import \"PFMThemedWindow.h\"\n#import \"PFMRedLinenView.h\"\n\n@implementation PFMThemedWindow\n\n@synthesize\n  redLinenView=_redLinenView\n;\n\n- (id)contentView {\n  NSView *contentView = [super contentView];\n  if(!self.redLinenView) {\n    self.redLinenView = [[PFMRedLinenView alloc] initWithFrame:NSZeroRect];\n    [self.redLinenView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];\n  }\n  if(![self.redLinenView superview]) {\n    NSView *themeFrame = [contentView superview];\n    [self.redLinenView setFrame:[themeFrame frame]];\n    [themeFrame addSubview:self.redLinenView positioned:NSWindowBelow relativeTo:[[themeFrame subviews] objectAtIndex:0]];\n  }\n  return contentView;\n}\n\n@end\n"
  },
  {
    "path": "Journey/Views/PFMUnclickableImageView.h",
    "content": "#import <Cocoa/Cocoa.h>\n\n@interface PFMUnclickableImageView : NSImageView\n@end\n"
  },
  {
    "path": "Journey/Views/PFMUnclickableImageView.m",
    "content": "#import \"PFMUnclickableImageView.h\"\n\n@implementation PFMUnclickableImageView\n\n- (BOOL)mouseDownCanMoveWindow {\n  return YES;\n}\n\n@end\n"
  },
  {
    "path": "Journey/Views/PFMView.h",
    "content": "#import <Cocoa/Cocoa.h>\n\n@interface PFMView : NSView {\n  NSColor *_backgroundColor;\n  void(^_drawRectBlock)(NSRect rect);\n}\n\n@property (nonatomic, retain) NSColor *backgroundColor;\n@property (nonatomic, copy) void(^drawRectBlock)(NSRect rect);\n\n@end\n"
  },
  {
    "path": "Journey/Views/PFMView.m",
    "content": "#import \"PFMView.h\"\n\n@implementation PFMView\n\n@synthesize\n  backgroundColor=_backgroundColor\n, drawRectBlock=_drawRectBlock\n;\n\n- (void)drawRect:(NSRect)rect {\n  if(self.backgroundColor) {\n    [self.backgroundColor setFill];\n    NSRectFill(rect);\n  }\n  if(self.drawRectBlock) {\n    self.drawRectBlock(rect);\n  }\n}\n\n- (void)setBackgroundColor:(NSColor *)backgroundColor {\n  _backgroundColor = backgroundColor;\n  [self setNeedsDisplay:YES];\n}\n\n@end\n"
  },
  {
    "path": "Journey/Views/SignInWindow.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1070</int>\n\t\t<string key=\"IBDocument.SystemVersion\">11D50</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">2177</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1138.32</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">568.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2177</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>NSObjectController</string>\n\t\t\t<string>NSButton</string>\n\t\t\t<string>NSTextFieldCell</string>\n\t\t\t<string>NSButtonCell</string>\n\t\t\t<string>NSImageView</string>\n\t\t\t<string>NSSecureTextFieldCell</string>\n\t\t\t<string>NSProgressIndicator</string>\n\t\t\t<string>NSImageCell</string>\n\t\t\t<string>NSCustomObject</string>\n\t\t\t<string>NSSecureTextField</string>\n\t\t\t<string>NSView</string>\n\t\t\t<string>NSWindowTemplate</string>\n\t\t\t<string>NSTextField</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSCustomObject\" id=\"1001\">\n\t\t\t\t<string key=\"NSClassName\">PFMSignInWindowController</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1003\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1004\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSObjectController\" id=\"735602253\">\n\t\t\t\t<string key=\"NSObjectClassName\">PFMUser</string>\n\t\t\t\t<bool key=\"NSEditable\">YES</bool>\n\t\t\t\t<object class=\"_NSManagedProxy\" key=\"_NSManagedProxy\"/>\n\t\t\t</object>\n\t\t\t<object class=\"NSWindowTemplate\" id=\"1005\">\n\t\t\t\t<int key=\"NSWindowStyleMask\">259</int>\n\t\t\t\t<int key=\"NSWindowBacking\">2</int>\n\t\t\t\t<string key=\"NSWindowRect\">{{100, 100}, {320, 427}}</string>\n\t\t\t\t<int key=\"NSWTFlags\">544736256</int>\n\t\t\t\t<string key=\"NSWindowTitle\">Journey</string>\n\t\t\t\t<string key=\"NSWindowClass\">PFMThemedWindow</string>\n\t\t\t\t<nil key=\"NSViewClass\"/>\n\t\t\t\t<nil key=\"NSUserInterfaceItemIdentifier\"/>\n\t\t\t\t<object class=\"NSView\" key=\"NSWindowView\" id=\"1006\">\n\t\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t\t<int key=\"NSvFlags\">256</int>\n\t\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSButton\" id=\"21134887\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{86, 12}, {92, 32}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"505547145\"/>\n\t\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:687</string>\n\t\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSButtonCell\" key=\"NSCell\" id=\"865250338\">\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags\">67239424</int>\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">134217728</int>\n\t\t\t\t\t\t\t\t<string key=\"NSContents\">Sign in</string>\n\t\t\t\t\t\t\t\t<object class=\"NSFont\" key=\"NSSupport\" id=\"274123255\">\n\t\t\t\t\t\t\t\t\t<string key=\"NSName\">LucidaGrande</string>\n\t\t\t\t\t\t\t\t\t<double key=\"NSSize\">13</double>\n\t\t\t\t\t\t\t\t\t<int key=\"NSfFlags\">1044</int>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:687</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSControlView\" ref=\"21134887\"/>\n\t\t\t\t\t\t\t\t<int key=\"NSButtonFlags\">-2034876161</int>\n\t\t\t\t\t\t\t\t<int key=\"NSButtonFlags2\">129</int>\n\t\t\t\t\t\t\t\t<object class=\"NSFont\" key=\"NSAlternateImage\">\n\t\t\t\t\t\t\t\t\t<string key=\"NSName\">LucidaGrande</string>\n\t\t\t\t\t\t\t\t\t<double key=\"NSSize\">13</double>\n\t\t\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<string key=\"NSAlternateContents\"/>\n\t\t\t\t\t\t\t\t<string type=\"base64-UTF8\" key=\"NSKeyEquivalent\">DQ</string>\n\t\t\t\t\t\t\t\t<int key=\"NSPeriodicDelay\">200</int>\n\t\t\t\t\t\t\t\t<int key=\"NSPeriodicInterval\">25</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSImageView\" id=\"1067665084\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">256</int>\n\t\t\t\t\t\t\t<object class=\"NSMutableSet\" key=\"NSDragTypes\">\n\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"set.sortedObjects\">\n\t\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string>Apple PDF pasteboard type</string>\n\t\t\t\t\t\t\t\t\t<string>Apple PICT pasteboard type</string>\n\t\t\t\t\t\t\t\t\t<string>Apple PNG pasteboard type</string>\n\t\t\t\t\t\t\t\t\t<string>NSFilenamesPboardType</string>\n\t\t\t\t\t\t\t\t\t<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>\n\t\t\t\t\t\t\t\t\t<string>NeXT TIFF v4.0 pasteboard type</string>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{17, 143}, {286, 267}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"38343772\"/>\n\t\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:2141</string>\n\t\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSImageCell\" key=\"NSCell\" id=\"69940840\">\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags\">130560</int>\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">33554432</int>\n\t\t\t\t\t\t\t\t<object class=\"NSCustomResource\" key=\"NSContents\">\n\t\t\t\t\t\t\t\t\t<string key=\"NSClassName\">NSImage</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSResourceName\">Logo</string>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:2141</string>\n\t\t\t\t\t\t\t\t<int key=\"NSAlign\">0</int>\n\t\t\t\t\t\t\t\t<int key=\"NSScale\">2</int>\n\t\t\t\t\t\t\t\t<int key=\"NSStyle\">0</int>\n\t\t\t\t\t\t\t\t<bool key=\"NSAnimates\">NO</bool>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<bool key=\"NSEditable\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSProgressIndicator\" id=\"505547145\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">1292</int>\n\t\t\t\t\t\t\t<object class=\"NSPSMatrix\" key=\"NSDrawMatrix\"/>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{180, 21}, {16, 16}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:3891</string>\n\t\t\t\t\t\t\t<int key=\"NSpiFlags\">28938</int>\n\t\t\t\t\t\t\t<double key=\"NSMaxValue\">100</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSTextField\" id=\"122949451\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{17, 53}, {68, 17}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"542936199\"/>\n\t\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:3944</string>\n\t\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSTextFieldCell\" key=\"NSCell\" id=\"581908922\">\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags\">68288064</int>\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">71304192</int>\n\t\t\t\t\t\t\t\t<string key=\"NSContents\">Password:</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSSupport\" ref=\"274123255\"/>\n\t\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:3944</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSControlView\" ref=\"122949451\"/>\n\t\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSBackgroundColor\" id=\"737230500\">\n\t\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">6</int>\n\t\t\t\t\t\t\t\t\t<string key=\"NSCatalogName\">System</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSColorName\">controlColor</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSColor\">\n\t\t\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MC42NjY2NjY2NjY3AA</bytes>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSTextColor\" id=\"115189110\">\n\t\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MSAxIDEAA</bytes>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSTextField\" id=\"709011843\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{18, 84}, {67, 17}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"224861825\"/>\n\t\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:3944</string>\n\t\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSTextFieldCell\" key=\"NSCell\" id=\"240393452\">\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags\">68288064</int>\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">71304192</int>\n\t\t\t\t\t\t\t\t<string key=\"NSContents\">Email:</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSSupport\" ref=\"274123255\"/>\n\t\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:3944</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSControlView\" ref=\"709011843\"/>\n\t\t\t\t\t\t\t\t<reference key=\"NSBackgroundColor\" ref=\"737230500\"/>\n\t\t\t\t\t\t\t\t<reference key=\"NSTextColor\" ref=\"115189110\"/>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSTextField\" id=\"38343772\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{14, 118}, {292, 17}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"709011843\"/>\n\t\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:3944</string>\n\t\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSTextFieldCell\" key=\"NSCell\" id=\"215415973\">\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags\">68288064</int>\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">138413056</int>\n\t\t\t\t\t\t\t\t<string key=\"NSContents\">Sign in with your Path account</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSSupport\" ref=\"274123255\"/>\n\t\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:3944</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSControlView\" ref=\"38343772\"/>\n\t\t\t\t\t\t\t\t<reference key=\"NSBackgroundColor\" ref=\"737230500\"/>\n\t\t\t\t\t\t\t\t<reference key=\"NSTextColor\" ref=\"115189110\"/>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSTextField\" id=\"224861825\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{92, 81}, {209, 22}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"122949451\"/>\n\t\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:903</string>\n\t\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSTextFieldCell\" key=\"NSCell\" id=\"416457126\">\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags\">-1804468671</int>\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">272630784</int>\n\t\t\t\t\t\t\t\t<string key=\"NSContents\"/>\n\t\t\t\t\t\t\t\t<reference key=\"NSSupport\" ref=\"274123255\"/>\n\t\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:903</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSControlView\" ref=\"224861825\"/>\n\t\t\t\t\t\t\t\t<bool key=\"NSDrawsBackground\">YES</bool>\n\t\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSBackgroundColor\" id=\"563115155\">\n\t\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">6</int>\n\t\t\t\t\t\t\t\t\t<string key=\"NSCatalogName\">System</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSColorName\">textBackgroundColor</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSColor\">\n\t\t\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSTextColor\" id=\"1013842623\">\n\t\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">6</int>\n\t\t\t\t\t\t\t\t\t<string key=\"NSCatalogName\">System</string>\n\t\t\t\t\t\t\t\t\t<string key=\"NSColorName\">textColor</string>\n\t\t\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSColor\">\n\t\t\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MAA</bytes>\n\t\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSSecureTextField\" id=\"542936199\">\n\t\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t\t\t\t<string key=\"NSFrame\">{{92, 50}, {209, 22}}</string>\n\t\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1006\"/>\n\t\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"21134887\"/>\n\t\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:3279</string>\n\t\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"NSSecureTextFieldCell\" key=\"NSCell\" id=\"224706850\">\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags\">343014976</int>\n\t\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">272630848</int>\n\t\t\t\t\t\t\t\t<string key=\"NSContents\"/>\n\t\t\t\t\t\t\t\t<reference key=\"NSSupport\" ref=\"274123255\"/>\n\t\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:3279</string>\n\t\t\t\t\t\t\t\t<reference key=\"NSControlView\" ref=\"542936199\"/>\n\t\t\t\t\t\t\t\t<bool key=\"NSDrawsBackground\">YES</bool>\n\t\t\t\t\t\t\t\t<reference key=\"NSBackgroundColor\" ref=\"563115155\"/>\n\t\t\t\t\t\t\t\t<reference key=\"NSTextColor\" ref=\"1013842623\"/>\n\t\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"NSAllowedInputLocales\">\n\t\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string>NSAllRomanInputSourcesLocaleIdentifier</string>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string key=\"NSFrameSize\">{320, 427}</string>\n\t\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"1067665084\"/>\n\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSScreenRect\">{{0, 0}, {1920, 1058}}</string>\n\t\t\t\t<string key=\"NSMaxSize\">{10000000000000, 10000000000000}</string>\n\t\t\t\t<bool key=\"NSWindowIsRestorable\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">window</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">15</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBActionConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">didClickOnSignInButton:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"21134887\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">169</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">signInButton</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"21134887\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">177</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">emailField</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"224861825\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">178</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">passwordField</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"542936199\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">179</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">spinner</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"505547145\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">180</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">emailLabel</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"709011843\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">181</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">sharedUserController</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">189</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">enabled: selection.email</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"21134887\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\" id=\"412368644\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"21134887\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">enabled: selection.email</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">enabled</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.email</string>\n\t\t\t\t\t\t\t<object class=\"NSDictionary\" key=\"NSOptions\">\n\t\t\t\t\t\t\t\t<string key=\"NS.key.0\">NSValueTransformerName</string>\n\t\t\t\t\t\t\t\t<string key=\"NS.object.0\">NSIsNotNil</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">150</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">enabled2: selection.password</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"21134887\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\" id=\"302515359\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"21134887\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">enabled2: selection.password</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">enabled2</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.password</string>\n\t\t\t\t\t\t\t<object class=\"NSDictionary\" key=\"NSOptions\">\n\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string>NSMultipleValuesPlaceholder</string>\n\t\t\t\t\t\t\t\t\t<string>NSNoSelectionPlaceholder</string>\n\t\t\t\t\t\t\t\t\t<string>NSNotApplicablePlaceholder</string>\n\t\t\t\t\t\t\t\t\t<string>NSNullPlaceholder</string>\n\t\t\t\t\t\t\t\t\t<string>NSValueTransformerName</string>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t\t<integer value=\"-1\"/>\n\t\t\t\t\t\t\t\t\t<integer value=\"-1\"/>\n\t\t\t\t\t\t\t\t\t<integer value=\"-1\"/>\n\t\t\t\t\t\t\t\t\t<integer value=\"-1\"/>\n\t\t\t\t\t\t\t\t\t<string>NSIsNotNil</string>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<reference key=\"NSPreviousConnector\" ref=\"412368644\"/>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">153</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">enabled3: selection.signingIn</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"21134887\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"21134887\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">enabled3: selection.signingIn</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">enabled3</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.signingIn</string>\n\t\t\t\t\t\t\t<object class=\"NSDictionary\" key=\"NSOptions\">\n\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t\t<string>NSMultipleValuesPlaceholder</string>\n\t\t\t\t\t\t\t\t\t<string>NSNoSelectionPlaceholder</string>\n\t\t\t\t\t\t\t\t\t<string>NSNotApplicablePlaceholder</string>\n\t\t\t\t\t\t\t\t\t<string>NSNullPlaceholder</string>\n\t\t\t\t\t\t\t\t\t<string>NSValueTransformerName</string>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t\t\t<integer value=\"-1\"/>\n\t\t\t\t\t\t\t\t\t<integer value=\"-1\"/>\n\t\t\t\t\t\t\t\t\t<integer value=\"-1\"/>\n\t\t\t\t\t\t\t\t\t<integer value=\"-1\"/>\n\t\t\t\t\t\t\t\t\t<string>NSNegateBoolean</string>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<reference key=\"NSPreviousConnector\" ref=\"302515359\"/>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">168</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">hidden: selection.signingIn</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"505547145\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"505547145\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">hidden: selection.signingIn</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">hidden</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.signingIn</string>\n\t\t\t\t\t\t\t<object class=\"NSDictionary\" key=\"NSOptions\">\n\t\t\t\t\t\t\t\t<string key=\"NS.key.0\">NSValueTransformerName</string>\n\t\t\t\t\t\t\t\t<string key=\"NS.object.0\">NSNegateBoolean</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">172</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">animate: selection.signingIn</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"505547145\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"505547145\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">animate: selection.signingIn</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">animate</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.signingIn</string>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">176</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">value: selection.email</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"224861825\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"224861825\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">value: selection.email</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">value</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.email</string>\n\t\t\t\t\t\t\t<object class=\"NSDictionary\" key=\"NSOptions\">\n\t\t\t\t\t\t\t\t<string key=\"NS.key.0\">NSContinuouslyUpdatesValue</string>\n\t\t\t\t\t\t\t\t<boolean value=\"YES\" key=\"NS.object.0\"/>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">144</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">enabled: selection.signingIn</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"224861825\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"224861825\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">enabled: selection.signingIn</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">enabled</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.signingIn</string>\n\t\t\t\t\t\t\t<object class=\"NSDictionary\" key=\"NSOptions\">\n\t\t\t\t\t\t\t\t<string key=\"NS.key.0\">NSValueTransformerName</string>\n\t\t\t\t\t\t\t\t<string key=\"NS.object.0\">NSNegateBoolean</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">185</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">value: selection.password</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"542936199\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"542936199\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">value: selection.password</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">value</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.password</string>\n\t\t\t\t\t\t\t<object class=\"NSDictionary\" key=\"NSOptions\">\n\t\t\t\t\t\t\t\t<string key=\"NS.key.0\">NSContinuouslyUpdatesValue</string>\n\t\t\t\t\t\t\t\t<boolean value=\"YES\" key=\"NS.object.0\"/>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">147</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">enabled: selection.signingIn</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"542936199\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"735602253\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"542936199\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">enabled: selection.signingIn</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">enabled</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">selection.signingIn</string>\n\t\t\t\t\t\t\t<object class=\"NSDictionary\" key=\"NSOptions\">\n\t\t\t\t\t\t\t\t<string key=\"NS.key.0\">NSValueTransformerName</string>\n\t\t\t\t\t\t\t\t<string key=\"NS.object.0\">NSNegateBoolean</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">188</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">content</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"735602253\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1004\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">137</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBBindingConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">contentObject: sharedUser</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"735602253\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1004\"/>\n\t\t\t\t\t\t<object class=\"NSNibBindingConnector\" key=\"connector\">\n\t\t\t\t\t\t\t<reference key=\"NSSource\" ref=\"735602253\"/>\n\t\t\t\t\t\t\t<reference key=\"NSDestination\" ref=\"1004\"/>\n\t\t\t\t\t\t\t<string key=\"NSLabel\">contentObject: sharedUser</string>\n\t\t\t\t\t\t\t<string key=\"NSBinding\">contentObject</string>\n\t\t\t\t\t\t\t<string key=\"NSKeyPath\">sharedUser</string>\n\t\t\t\t\t\t\t<int key=\"NSNibBindingConnectorVersion\">2</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">141</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"object\" id=\"1002\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1004\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1005\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"1006\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1006\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"1067665084\"/>\n\t\t\t\t\t\t\t<reference ref=\"122949451\"/>\n\t\t\t\t\t\t\t<reference ref=\"709011843\"/>\n\t\t\t\t\t\t\t<reference ref=\"224861825\"/>\n\t\t\t\t\t\t\t<reference ref=\"542936199\"/>\n\t\t\t\t\t\t\t<reference ref=\"21134887\"/>\n\t\t\t\t\t\t\t<reference ref=\"505547145\"/>\n\t\t\t\t\t\t\t<reference ref=\"38343772\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">11</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"21134887\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"865250338\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">12</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"865250338\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"21134887\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">13</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1067665084\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"69940840\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">14</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"69940840\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1067665084\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">47</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"505547145\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">110</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"122949451\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"581908922\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">111</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"581908922\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"122949451\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">112</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"709011843\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"240393452\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">113</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"240393452\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"709011843\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">114</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"224861825\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"416457126\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">115</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"416457126\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"224861825\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">116</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"542936199\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"224706850\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">117</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"224706850\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"542936199\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">135</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"735602253\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">sharedUser Controller</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">190</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"38343772\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"215415973\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1006\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">191</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"215415973\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"38343772\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>-3.IBPluginDependency</string>\n\t\t\t\t\t<string>1.IBNSWindowAutoPositionCentersHorizontal</string>\n\t\t\t\t\t<string>1.IBNSWindowAutoPositionCentersVertical</string>\n\t\t\t\t\t<string>1.IBPluginDependency</string>\n\t\t\t\t\t<string>1.IBWindowTemplateEditedContentRect</string>\n\t\t\t\t\t<string>1.NSWindowTemplate.visibleAtLaunch</string>\n\t\t\t\t\t<string>11.IBPluginDependency</string>\n\t\t\t\t\t<string>110.IBPluginDependency</string>\n\t\t\t\t\t<string>110.IBViewIntegration.shadowBlurRadius</string>\n\t\t\t\t\t<string>110.IBViewIntegration.shadowOffsetHeight</string>\n\t\t\t\t\t<string>111.IBPluginDependency</string>\n\t\t\t\t\t<string>112.IBAttributePlaceholdersKey</string>\n\t\t\t\t\t<string>112.IBPluginDependency</string>\n\t\t\t\t\t<string>112.IBViewIntegration.shadowBlurRadius</string>\n\t\t\t\t\t<string>112.IBViewIntegration.shadowOffsetHeight</string>\n\t\t\t\t\t<string>113.IBPluginDependency</string>\n\t\t\t\t\t<string>114.IBPluginDependency</string>\n\t\t\t\t\t<string>115.IBPluginDependency</string>\n\t\t\t\t\t<string>116.IBPluginDependency</string>\n\t\t\t\t\t<string>117.IBPluginDependency</string>\n\t\t\t\t\t<string>12.IBPluginDependency</string>\n\t\t\t\t\t<string>13.CustomClassName</string>\n\t\t\t\t\t<string>13.IBPluginDependency</string>\n\t\t\t\t\t<string>135.IBPluginDependency</string>\n\t\t\t\t\t<string>14.IBPluginDependency</string>\n\t\t\t\t\t<string>190.IBAttributePlaceholdersKey</string>\n\t\t\t\t\t<string>190.IBPluginDependency</string>\n\t\t\t\t\t<string>190.IBViewIntegration.shadowBlurRadius</string>\n\t\t\t\t\t<string>190.IBViewIntegration.shadowOffsetHeight</string>\n\t\t\t\t\t<string>191.IBPluginDependency</string>\n\t\t\t\t\t<string>2.IBPluginDependency</string>\n\t\t\t\t\t<string>47.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<boolean value=\"NO\"/>\n\t\t\t\t\t<boolean value=\"NO\"/>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>{{357, 418}, {480, 270}}</string>\n\t\t\t\t\t<integer value=\"1\"/>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<real value=\"0.0\"/>\n\t\t\t\t\t<real value=\"1\"/>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<real value=\"0.0\"/>\n\t\t\t\t\t<real value=\"1\"/>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>PFMUnclickableImageView</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<real value=\"0.0\"/>\n\t\t\t\t\t<real value=\"1\"/>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">191</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMSignInWindowController</string>\n\t\t\t\t\t<string key=\"superclassName\">NSWindowController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">didClickOnSignInButton:</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">id</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">didClickOnSignInButton:</string>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">didClickOnSignInButton:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>emailField</string>\n\t\t\t\t\t\t\t<string>emailLabel</string>\n\t\t\t\t\t\t\t<string>passwordField</string>\n\t\t\t\t\t\t\t<string>passwordLabel</string>\n\t\t\t\t\t\t\t<string>sharedUserController</string>\n\t\t\t\t\t\t\t<string>signInButton</string>\n\t\t\t\t\t\t\t<string>spinner</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>NSTextField</string>\n\t\t\t\t\t\t\t<string>NSTextField</string>\n\t\t\t\t\t\t\t<string>NSTextField</string>\n\t\t\t\t\t\t\t<string>NSTextField</string>\n\t\t\t\t\t\t\t<string>NSObjectController</string>\n\t\t\t\t\t\t\t<string>NSButton</string>\n\t\t\t\t\t\t\t<string>NSProgressIndicator</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>emailField</string>\n\t\t\t\t\t\t\t<string>emailLabel</string>\n\t\t\t\t\t\t\t<string>passwordField</string>\n\t\t\t\t\t\t\t<string>passwordLabel</string>\n\t\t\t\t\t\t\t<string>sharedUserController</string>\n\t\t\t\t\t\t\t<string>signInButton</string>\n\t\t\t\t\t\t\t<string>spinner</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">emailField</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSTextField</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">emailLabel</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSTextField</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">passwordField</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSTextField</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">passwordLabel</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSTextField</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">sharedUserController</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSObjectController</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">signInButton</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSButton</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">spinner</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">NSProgressIndicator</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMSignInWindowController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMThemedWindow</string>\n\t\t\t\t\t<string key=\"superclassName\">NSWindow</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMThemedWindow.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMUnclickableImageView</string>\n\t\t\t\t\t<string key=\"superclassName\">NSImageView</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMUnclickableImageView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.LastKnownImageSizes\">\n\t\t\t<string key=\"NS.key.0\">Logo</string>\n\t\t\t<string key=\"NS.object.0\">{284, 85}</string>\n\t\t</object>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Journey/Views/ToolbarView.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1070</int>\n\t\t<string key=\"IBDocument.SystemVersion\">11D50</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">2177</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1138.32</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">568.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2177</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>NSCustomView</string>\n\t\t\t<string>NSTextField</string>\n\t\t\t<string>NSButtonCell</string>\n\t\t\t<string>NSTextFieldCell</string>\n\t\t\t<string>NSButton</string>\n\t\t\t<string>NSCustomObject</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSCustomObject\" id=\"1001\">\n\t\t\t\t<string key=\"NSClassName\">PFMToolbarViewController</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1003\">\n\t\t\t\t<string key=\"NSClassName\">FirstResponder</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomObject\" id=\"1004\">\n\t\t\t\t<string key=\"NSClassName\">NSApplication</string>\n\t\t\t</object>\n\t\t\t<object class=\"NSCustomView\" id=\"1005\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"NSTextField\" id=\"799296225\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1005\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{51, 15}, {126, 17}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1005\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:3944</string>\n\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSTextFieldCell\" key=\"NSCell\" id=\"69241827\">\n\t\t\t\t\t\t\t<int key=\"NSCellFlags\">68288064</int>\n\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">272630784</int>\n\t\t\t\t\t\t\t<string key=\"NSContents\">Lorem Ipsum</string>\n\t\t\t\t\t\t\t<object class=\"NSFont\" key=\"NSSupport\" id=\"929779449\">\n\t\t\t\t\t\t\t\t<string key=\"NSName\">LucidaGrande</string>\n\t\t\t\t\t\t\t\t<double key=\"NSSize\">13</double>\n\t\t\t\t\t\t\t\t<int key=\"NSfFlags\">1044</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:3944</string>\n\t\t\t\t\t\t\t<reference key=\"NSControlView\" ref=\"799296225\"/>\n\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSBackgroundColor\">\n\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">6</int>\n\t\t\t\t\t\t\t\t<string key=\"NSCatalogName\">System</string>\n\t\t\t\t\t\t\t\t<string key=\"NSColorName\">controlColor</string>\n\t\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSColor\">\n\t\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MC42NjY2NjY2NjY3AA</bytes>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"NSColor\" key=\"NSTextColor\">\n\t\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MSAxIDEAA</bytes>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSButton\" id=\"896498606\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"1005\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">268</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{5, 5}, {40, 40}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"1005\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"799296225\"/>\n\t\t\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:2510</string>\n\t\t\t\t\t\t<bool key=\"NSEnabled\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSButtonCell\" key=\"NSCell\" id=\"32143054\">\n\t\t\t\t\t\t\t<int key=\"NSCellFlags\">67239424</int>\n\t\t\t\t\t\t\t<int key=\"NSCellFlags2\">134217728</int>\n\t\t\t\t\t\t\t<string key=\"NSContents\"/>\n\t\t\t\t\t\t\t<reference key=\"NSSupport\" ref=\"929779449\"/>\n\t\t\t\t\t\t\t<string key=\"NSCellIdentifier\">_NS:2510</string>\n\t\t\t\t\t\t\t<reference key=\"NSControlView\" ref=\"896498606\"/>\n\t\t\t\t\t\t\t<int key=\"NSButtonFlags\">-2041298689</int>\n\t\t\t\t\t\t\t<int key=\"NSButtonFlags2\">134</int>\n\t\t\t\t\t\t\t<object class=\"NSCustomResource\" key=\"NSNormalImage\">\n\t\t\t\t\t\t\t\t<string key=\"NSClassName\">NSImage</string>\n\t\t\t\t\t\t\t\t<string key=\"NSResourceName\">DefaultPortrait</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<string key=\"NSAlternateContents\"/>\n\t\t\t\t\t\t\t<string key=\"NSKeyEquivalent\"/>\n\t\t\t\t\t\t\t<int key=\"NSPeriodicDelay\">400</int>\n\t\t\t\t\t\t\t<int key=\"NSPeriodicInterval\">75</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSFrameSize\">{400, 45}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"896498606\"/>\n\t\t\t\t<bool key=\"NSViewIsLayerTreeHost\">YES</bool>\n\t\t\t\t<int key=\"NSViewLayerContentsRedrawPolicy\">2</int>\n\t\t\t\t<string key=\"NSClassName\">NSView</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">2</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"object\" id=\"1002\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1001\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">First Responder</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1004\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t\t<string key=\"objectName\">Application</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1005\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"896498606\"/>\n\t\t\t\t\t\t\t<reference ref=\"799296225\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1002\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">9</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"896498606\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"32143054\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">10</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"32143054\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"896498606\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">11</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"799296225\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"69241827\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">12</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"69241827\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"799296225\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.IBPluginDependency</string>\n\t\t\t\t\t<string>-2.IBPluginDependency</string>\n\t\t\t\t\t<string>-3.IBPluginDependency</string>\n\t\t\t\t\t<string>1.IBPluginDependency</string>\n\t\t\t\t\t<string>10.IBPluginDependency</string>\n\t\t\t\t\t<string>11.IBPluginDependency</string>\n\t\t\t\t\t<string>12.IBPluginDependency</string>\n\t\t\t\t\t<string>9.IBPluginDependency</string>\n\t\t\t\t\t<string>9.IBViewIntegration.shadowBlurRadius</string>\n\t\t\t\t\t<string>9.IBViewIntegration.shadowColor</string>\n\t\t\t\t\t<string>9.IBViewIntegration.shadowOffsetHeight</string>\n\t\t\t\t\t<string>9.IBViewIntegration.shadowOffsetWidth</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.CocoaPlugin</string>\n\t\t\t\t\t<real value=\"0.0\"/>\n\t\t\t\t\t<object class=\"NSColor\">\n\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t<bytes key=\"NSWhite\">MAA</bytes>\n\t\t\t\t\t</object>\n\t\t\t\t\t<real value=\"0.0\"/>\n\t\t\t\t\t<real value=\"0.0\"/>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"1002\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"1002\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">12</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">PFMToolbarViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">NSViewController</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/PFMToolbarViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3000\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.LastKnownImageSizes\">\n\t\t\t<string key=\"NS.key.0\">DefaultPortrait</string>\n\t\t\t<string key=\"NS.object.0\">{52, 52}</string>\n\t\t</object>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Journey.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tADBFC6DEAB4F4E14AE683583 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EAEC0C9312904ABA8CE686A2 /* libPods.a */; };\n\t\tE91CCEDA14E4413100DA6E96 /* ASIHTTPRequest+Spec.m in Sources */ = {isa = PBXBuildFile; fileRef = E91CCED914E4413100DA6E96 /* ASIHTTPRequest+Spec.m */; };\n\t\tE91CCEF614E4655400DA6E96 /* PFMMainWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = E91CCEF514E4655400DA6E96 /* PFMMainWindowController.m */; };\n\t\tE91CCEFC14E46ACB00DA6E96 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E91CCEFA14E4695600DA6E96 /* WebKit.framework */; };\n\t\tE93EC9A314F52ADC0060DB49 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = E93EC9A214F52ADC0060DB49 /* Icon.icns */; };\n\t\tE954C6C214E40A5700DF093C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E954C6C114E40A5700DF093C /* Cocoa.framework */; };\n\t\tE954C6E014E40A5800DF093C /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E954C6DF14E40A5800DF093C /* SenTestingKit.framework */; };\n\t\tE954C6E114E40A5800DF093C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E954C6C114E40A5700DF093C /* Cocoa.framework */; };\n\t\tE95FB1B314FA3B3300B2DF1A /* LICENSE.md in Resources */ = {isa = PBXBuildFile; fileRef = E95FB1AF14FA3B2900B2DF1A /* LICENSE.md */; };\n\t\tE95FB1B414FA3B3600B2DF1A /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = E95FB1B114FA3B2900B2DF1A /* README.md */; };\n\t\tE95FB1C514FB812000B2DF1A /* WebView+Spec.m in Sources */ = {isa = PBXBuildFile; fileRef = E95FB1C414FB812000B2DF1A /* WebView+Spec.m */; };\n\t\tE95FB1C714FB872700B2DF1A /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E91CCEFA14E4695600DA6E96 /* WebKit.framework */; };\n\t\tE95FB1CD14FBDD1800B2DF1A /* EXPMatchers+toMatch.m in Sources */ = {isa = PBXBuildFile; fileRef = E95FB1CC14FBDD1800B2DF1A /* EXPMatchers+toMatch.m */; };\n\t\tE96080EB14E4D1A100127E58 /* PFMHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E96080EA14E4D1A100127E58 /* PFMHelper.m */; };\n\t\tE960810014E4DFA100127E58 /* TestHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E96080FF14E4DFA100127E58 /* TestHelper.m */; };\n\t\tE960810614E5476B00127E58 /* PFMView.m in Sources */ = {isa = PBXBuildFile; fileRef = E960810514E5476B00127E58 /* PFMView.m */; };\n\t\tE966221214E6584A003F8861 /* NSApplication+SharedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = E966221114E6584A003F8861 /* NSApplication+SharedObjects.m */; };\n\t\tE966221414E661DA003F8861 /* PFMMainWindowControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = E966221314E661DA003F8861 /* PFMMainWindowControllerSpec.m */; };\n\t\tE972ADF414E825220049FFEA /* NSMutableDictionary+PFMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E972ADF314E825220049FFEA /* NSMutableDictionary+PFMAdditions.m */; };\n\t\tE972ADF714E829220049FFEA /* NSDictionary+PFMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E972ADF614E829220049FFEA /* NSDictionary+PFMAdditions.m */; };\n\t\tE972ADFA14E832920049FFEA /* NSDate+SCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E972ADF914E832920049FFEA /* NSDate+SCAdditions.m */; };\n\t\tE9926A3D14E4C12400F4EFA5 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9926A3A14E4C12400F4EFA5 /* MainWindow.xib */; };\n\t\tE9926A3E14E4C12400F4EFA5 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9926A3B14E4C12400F4EFA5 /* MainMenu.xib */; };\n\t\tE9926A3F14E4C12400F4EFA5 /* SignInWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9926A3C14E4C12400F4EFA5 /* SignInWindow.xib */; };\n\t\tE9926A4214E4C13000F4EFA5 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = E9926A4114E4C13000F4EFA5 /* Credits.rtf */; };\n\t\tE994D49414E6CAAE00B3F011 /* DefaultPortrait.png in Resources */ = {isa = PBXBuildFile; fileRef = E994D49314E6CAAE00B3F011 /* DefaultPortrait.png */; };\n\t\tE994D49914E7E20600B3F011 /* WebView in Resources */ = {isa = PBXBuildFile; fileRef = E994D49814E7E20600B3F011 /* WebView */; };\n\t\tE9AC9C2514E4AB6C00F9AC4B /* settings.json in Resources */ = {isa = PBXBuildFile; fileRef = E91CCEE414E44D1F00DA6E96 /* settings.json */; };\n\t\tE9ADC7F714E40F6B00E39527 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9ADC7F614E40F6B00E39527 /* Security.framework */; };\n\t\tE9ADC80314E40FD300E39527 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9ADC7F614E40F6B00E39527 /* Security.framework */; };\n\t\tE9ADC80814E4112E00E39527 /* PFMSignInWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9ADC80714E4112E00E39527 /* PFMSignInWindowController.m */; };\n\t\tE9ADC80E14E411D800E39527 /* PFMSignInWindowControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = E9ADC80D14E411D800E39527 /* PFMSignInWindowControllerSpec.m */; };\n\t\tE9ADC81014E4121500E39527 /* PathAppDelegateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = E9ADC80F14E4121500E39527 /* PathAppDelegateSpec.m */; };\n\t\tE9ADC81514E419A900E39527 /* PFMModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E9ADC81414E419A900E39527 /* PFMModel.m */; };\n\t\tE9ADC81714E41B6100E39527 /* PFMModelSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = E9ADC81614E41B6100E39527 /* PFMModelSpec.m */; };\n\t\tE9ADC81A14E41BE700E39527 /* PFMUser.m in Sources */ = {isa = PBXBuildFile; fileRef = E9ADC81914E41BE700E39527 /* PFMUser.m */; };\n\t\tE9ADC81C14E41C1700E39527 /* PFMUserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = E9ADC81B14E41C1700E39527 /* PFMUserSpec.m */; };\n\t\tE9B9D9AC14E672B5005D5B5B /* PFMMomentListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B9D9AA14E672B4005D5B5B /* PFMMomentListViewController.m */; };\n\t\tE9B9D9B014E672D8005D5B5B /* PFMMomentListViewControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B9D9AF14E672D8005D5B5B /* PFMMomentListViewControllerSpec.m */; };\n\t\tE9B9D9B214E674B3005D5B5B /* MomentListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9B9D9B114E674B3005D5B5B /* MomentListView.xib */; };\n\t\tE9B9D9B614E67BA4005D5B5B /* PFMToolbarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B9D9B414E67BA4005D5B5B /* PFMToolbarViewController.m */; };\n\t\tE9B9D9B914E67BDB005D5B5B /* ToolbarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9B9D9B814E67BDB005D5B5B /* ToolbarView.xib */; };\n\t\tE9B9D9BB14E67C15005D5B5B /* PFMToolbarViewControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B9D9BA14E67C15005D5B5B /* PFMToolbarViewControllerSpec.m */; };\n\t\tE9B9D9C614E68017005D5B5B /* PFMThemedWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B9D9C514E68017005D5B5B /* PFMThemedWindow.m */; };\n\t\tE9B9D9C914E686E9005D5B5B /* TitleBarLogo.png in Resources */ = {isa = PBXBuildFile; fileRef = E9B9D9C814E686E9005D5B5B /* TitleBarLogo.png */; };\n\t\tE9B9D9CC14E68D5F005D5B5B /* PFMUnclickableImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B9D9CB14E68D5F005D5B5B /* PFMUnclickableImageView.m */; };\n\t\tE9C75DC214F6A44600F564A0 /* StatusItemIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = E9C75DC014F6A44600F564A0 /* StatusItemIcon.png */; };\n\t\tE9C75DC314F6A44600F564A0 /* StatusItemIconHighlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = E9C75DC114F6A44600F564A0 /* StatusItemIconHighlighted.png */; };\n\t\tE9C75DC514F6A5C700F564A0 /* StatusItemIconSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = E9C75DC414F6A5C700F564A0 /* StatusItemIconSelected.png */; };\n\t\tE9C75DC814F6C1D300F564A0 /* NSWindow+PFMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C75DC714F6C1D300F564A0 /* NSWindow+PFMAdditions.m */; };\n\t\tE9CE16F914E54E3700B199AF /* RedLinenBg.png in Resources */ = {isa = PBXBuildFile; fileRef = E9CE16F814E54E3700B199AF /* RedLinenBg.png */; };\n\t\tE9CE170114E5557100B199AF /* PFMRedLinenView.m in Sources */ = {isa = PBXBuildFile; fileRef = E9CE170014E5557100B199AF /* PFMRedLinenView.m */; };\n\t\tE9CE170314E55A9F00B199AF /* Logo.png in Resources */ = {isa = PBXBuildFile; fileRef = E9CE170214E55A9F00B199AF /* Logo.png */; };\n\t\tE9FD376014E40C80007F90AF /* PathAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FD375114E40C80007F90AF /* PathAppDelegate.m */; };\n\t\tE9FD376214E40C80007F90AF /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E9FD375614E40C80007F90AF /* InfoPlist.strings */; };\n\t\tE9FD376414E40C80007F90AF /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FD375B14E40C80007F90AF /* main.m */; };\n\t\tE9FE51B214F8DB0800500C1C /* libPods-test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E9FE51A114F8D6A100500C1C /* libPods-test.a */; };\n\t\tF449978514E6215000306056 /* moments_feed.json in Resources */ = {isa = PBXBuildFile; fileRef = F449978414E6215000306056 /* moments_feed.json */; };\n\t\tF449978914E6295C00306056 /* PFMMoment.m in Sources */ = {isa = PBXBuildFile; fileRef = F449978814E6295C00306056 /* PFMMoment.m */; };\n\t\tF44997A214E6571F00306056 /* PFMPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = F44997A114E6571F00306056 /* PFMPhoto.m */; };\n\t\tF44997A514E6582300306056 /* PFMPhotoSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = F44997A414E6582300306056 /* PFMPhotoSpec.m */; };\n\t\tF47A489B14E6D987007D0B9F /* PFMPlace.m in Sources */ = {isa = PBXBuildFile; fileRef = F47A489A14E6D987007D0B9F /* PFMPlace.m */; };\n\t\tF4B7F73D14E676CC005E8AF4 /* PFMComment.m in Sources */ = {isa = PBXBuildFile; fileRef = F4B7F73C14E676CC005E8AF4 /* PFMComment.m */; };\n\t\tF4B7F74214E68110005E8AF4 /* PFMLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = F4B7F74114E68110005E8AF4 /* PFMLocation.m */; };\n\t\tF4DB598E14E7FEBF009E92E8 /* PFMCommentSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DB598D14E7FEBF009E92E8 /* PFMCommentSpec.m */; };\n\t\tF4DB599114E80A6E009E92E8 /* PFMLocationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DB599014E80A6E009E92E8 /* PFMLocationSpec.m */; };\n\t\tF4DB599314E80D12009E92E8 /* PFMPlaceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DB599214E80D12009E92E8 /* PFMPlaceSpec.m */; };\n\t\tF4F7DF3914EE393300CAB792 /* moments_feed_newer_than.json in Resources */ = {isa = PBXBuildFile; fileRef = F4F7DF3814EE393300CAB792 /* moments_feed_newer_than.json */; };\n\t\tF4F7DF3C14EE591900CAB792 /* moments_feed_older_than.json in Resources */ = {isa = PBXBuildFile; fileRef = F4F7DF3B14EE591900CAB792 /* moments_feed_older_than.json */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tE954C6E214E40A5800DF093C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = E954C6B414E40A5700DF093C /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E954C6BC14E40A5700DF093C;\n\t\t\tremoteInfo = Path;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t3762FDED24BF40BDAF87D96A /* Pods.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = SOURCE_ROOT; };\n\t\tE91CCED414E4349100DA6E96 /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = \"<group>\"; };\n\t\tE91CCED814E4413100DA6E96 /* ASIHTTPRequest+Spec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"ASIHTTPRequest+Spec.h\"; sourceTree = \"<group>\"; };\n\t\tE91CCED914E4413100DA6E96 /* ASIHTTPRequest+Spec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"ASIHTTPRequest+Spec.m\"; sourceTree = \"<group>\"; };\n\t\tE91CCEE414E44D1F00DA6E96 /* settings.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = settings.json; sourceTree = \"<group>\"; };\n\t\tE91CCEF414E4655300DA6E96 /* PFMMainWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMMainWindowController.h; sourceTree = \"<group>\"; };\n\t\tE91CCEF514E4655400DA6E96 /* PFMMainWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMMainWindowController.m; sourceTree = \"<group>\"; };\n\t\tE91CCEFA14E4695600DA6E96 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };\n\t\tE933945F14F8D40D00078772 /* Pods-test.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = \"Pods-test.xcconfig\"; path = \"Pods/Pods-test.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE93EC9A214F52ADC0060DB49 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = \"<group>\"; };\n\t\tE954C6BD14E40A5700DF093C /* Journey.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Journey.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE954C6C114E40A5700DF093C /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\tE954C6C414E40A5700DF093C /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\tE954C6C514E40A5700DF093C /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\tE954C6C614E40A5700DF093C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tE954C6DE14E40A5800DF093C /* JourneyTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JourneyTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE954C6DF14E40A5800DF093C /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };\n\t\tE95FB1AF14FA3B2900B2DF1A /* LICENSE.md */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.md; sourceTree = \"<group>\"; };\n\t\tE95FB1B014FA3B2900B2DF1A /* Podfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Podfile; sourceTree = \"<group>\"; };\n\t\tE95FB1B114FA3B2900B2DF1A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.md; sourceTree = \"<group>\"; };\n\t\tE95FB1C314FB812000B2DF1A /* WebView+Spec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"WebView+Spec.h\"; sourceTree = \"<group>\"; };\n\t\tE95FB1C414FB812000B2DF1A /* WebView+Spec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"WebView+Spec.m\"; sourceTree = \"<group>\"; };\n\t\tE95FB1CB14FBDD1800B2DF1A /* EXPMatchers+toMatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"EXPMatchers+toMatch.h\"; sourceTree = \"<group>\"; };\n\t\tE95FB1CC14FBDD1800B2DF1A /* EXPMatchers+toMatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"EXPMatchers+toMatch.m\"; sourceTree = \"<group>\"; };\n\t\tE96080E914E4D1A100127E58 /* PFMHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMHelper.h; sourceTree = \"<group>\"; };\n\t\tE96080EA14E4D1A100127E58 /* PFMHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMHelper.m; sourceTree = \"<group>\"; };\n\t\tE96080FF14E4DFA100127E58 /* TestHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestHelper.m; sourceTree = \"<group>\"; };\n\t\tE960810414E5476B00127E58 /* PFMView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMView.h; sourceTree = \"<group>\"; };\n\t\tE960810514E5476B00127E58 /* PFMView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMView.m; sourceTree = \"<group>\"; };\n\t\tE966221014E6584A003F8861 /* NSApplication+SharedObjects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSApplication+SharedObjects.h\"; sourceTree = \"<group>\"; };\n\t\tE966221114E6584A003F8861 /* NSApplication+SharedObjects.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSApplication+SharedObjects.m\"; sourceTree = \"<group>\"; };\n\t\tE966221314E661DA003F8861 /* PFMMainWindowControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMMainWindowControllerSpec.m; sourceTree = \"<group>\"; };\n\t\tE972ADF214E825220049FFEA /* NSMutableDictionary+PFMAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSMutableDictionary+PFMAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tE972ADF314E825220049FFEA /* NSMutableDictionary+PFMAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSMutableDictionary+PFMAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tE972ADF514E829220049FFEA /* NSDictionary+PFMAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSDictionary+PFMAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tE972ADF614E829220049FFEA /* NSDictionary+PFMAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSDictionary+PFMAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tE972ADF814E832920049FFEA /* NSDate+SCAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSDate+SCAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tE972ADF914E832920049FFEA /* NSDate+SCAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSDate+SCAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tE9926A3A14E4C12400F4EFA5 /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = \"<group>\"; };\n\t\tE9926A3B14E4C12400F4EFA5 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = \"<group>\"; };\n\t\tE9926A3C14E4C12400F4EFA5 /* SignInWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SignInWindow.xib; sourceTree = \"<group>\"; };\n\t\tE9926A4114E4C13000F4EFA5 /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = \"<group>\"; };\n\t\tE994D49314E6CAAE00B3F011 /* DefaultPortrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DefaultPortrait.png; sourceTree = \"<group>\"; };\n\t\tE994D49814E7E20600B3F011 /* WebView */ = {isa = PBXFileReference; lastKnownFileType = folder; path = WebView; sourceTree = \"<group>\"; };\n\t\tE9ADC7F614E40F6B00E39527 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };\n\t\tE9ADC80614E4112E00E39527 /* PFMSignInWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMSignInWindowController.h; sourceTree = \"<group>\"; };\n\t\tE9ADC80714E4112E00E39527 /* PFMSignInWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMSignInWindowController.m; sourceTree = \"<group>\"; };\n\t\tE9ADC80D14E411D800E39527 /* PFMSignInWindowControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMSignInWindowControllerSpec.m; sourceTree = \"<group>\"; };\n\t\tE9ADC80F14E4121500E39527 /* PathAppDelegateSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PathAppDelegateSpec.m; sourceTree = \"<group>\"; };\n\t\tE9ADC81314E419A900E39527 /* PFMModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMModel.h; sourceTree = \"<group>\"; };\n\t\tE9ADC81414E419A900E39527 /* PFMModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMModel.m; sourceTree = \"<group>\"; };\n\t\tE9ADC81614E41B6100E39527 /* PFMModelSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMModelSpec.m; sourceTree = \"<group>\"; };\n\t\tE9ADC81814E41BE700E39527 /* PFMUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMUser.h; sourceTree = \"<group>\"; };\n\t\tE9ADC81914E41BE700E39527 /* PFMUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMUser.m; sourceTree = \"<group>\"; };\n\t\tE9ADC81B14E41C1700E39527 /* PFMUserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMUserSpec.m; sourceTree = \"<group>\"; };\n\t\tE9ADC81E14E4222F00E39527 /* JourneyTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"JourneyTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tE9ADC81F14E4222F00E39527 /* TestHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestHelper.h; sourceTree = \"<group>\"; };\n\t\tE9B9D9A914E672B4005D5B5B /* PFMMomentListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMMomentListViewController.h; sourceTree = \"<group>\"; };\n\t\tE9B9D9AA14E672B4005D5B5B /* PFMMomentListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMMomentListViewController.m; sourceTree = \"<group>\"; };\n\t\tE9B9D9AF14E672D8005D5B5B /* PFMMomentListViewControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMMomentListViewControllerSpec.m; sourceTree = \"<group>\"; };\n\t\tE9B9D9B114E674B3005D5B5B /* MomentListView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MomentListView.xib; sourceTree = \"<group>\"; };\n\t\tE9B9D9B314E67BA4005D5B5B /* PFMToolbarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMToolbarViewController.h; sourceTree = \"<group>\"; };\n\t\tE9B9D9B414E67BA4005D5B5B /* PFMToolbarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMToolbarViewController.m; sourceTree = \"<group>\"; };\n\t\tE9B9D9B814E67BDB005D5B5B /* ToolbarView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ToolbarView.xib; sourceTree = \"<group>\"; };\n\t\tE9B9D9BA14E67C15005D5B5B /* PFMToolbarViewControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMToolbarViewControllerSpec.m; sourceTree = \"<group>\"; };\n\t\tE9B9D9C414E68017005D5B5B /* PFMThemedWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMThemedWindow.h; sourceTree = \"<group>\"; };\n\t\tE9B9D9C514E68017005D5B5B /* PFMThemedWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMThemedWindow.m; sourceTree = \"<group>\"; };\n\t\tE9B9D9C814E686E9005D5B5B /* TitleBarLogo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TitleBarLogo.png; sourceTree = \"<group>\"; };\n\t\tE9B9D9CA14E68D5F005D5B5B /* PFMUnclickableImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMUnclickableImageView.h; sourceTree = \"<group>\"; };\n\t\tE9B9D9CB14E68D5F005D5B5B /* PFMUnclickableImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMUnclickableImageView.m; sourceTree = \"<group>\"; };\n\t\tE9C75DC014F6A44600F564A0 /* StatusItemIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = StatusItemIcon.png; sourceTree = \"<group>\"; };\n\t\tE9C75DC114F6A44600F564A0 /* StatusItemIconHighlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = StatusItemIconHighlighted.png; sourceTree = \"<group>\"; };\n\t\tE9C75DC414F6A5C700F564A0 /* StatusItemIconSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = StatusItemIconSelected.png; sourceTree = \"<group>\"; };\n\t\tE9C75DC614F6C1D300F564A0 /* NSWindow+PFMAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSWindow+PFMAdditions.h\"; sourceTree = \"<group>\"; };\n\t\tE9C75DC714F6C1D300F564A0 /* NSWindow+PFMAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSWindow+PFMAdditions.m\"; sourceTree = \"<group>\"; };\n\t\tE9CE16F814E54E3700B199AF /* RedLinenBg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = RedLinenBg.png; sourceTree = \"<group>\"; };\n\t\tE9CE16FF14E5557100B199AF /* PFMRedLinenView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMRedLinenView.h; sourceTree = \"<group>\"; };\n\t\tE9CE170014E5557100B199AF /* PFMRedLinenView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMRedLinenView.m; sourceTree = \"<group>\"; };\n\t\tE9CE170214E55A9F00B199AF /* Logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Logo.png; sourceTree = \"<group>\"; };\n\t\tE9FD375014E40C80007F90AF /* PathAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathAppDelegate.h; sourceTree = \"<group>\"; };\n\t\tE9FD375114E40C80007F90AF /* PathAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PathAppDelegate.m; sourceTree = \"<group>\"; };\n\t\tE9FD375714E40C80007F90AF /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\tE9FD375B14E40C80007F90AF /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tE9FD375C14E40C80007F90AF /* Journey-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"Journey-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tE9FD375D14E40C80007F90AF /* Journey-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"Journey-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tE9FE51A114F8D6A100500C1C /* libPods-test.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = \"libPods-test.a\"; path = \"../../Library/Developer/Xcode/DerivedData/Journey-gicjnhowhxtsfjaysjxvfgsgxlof/Build/Products/Debug/libPods-test.a\"; sourceTree = \"<group>\"; };\n\t\tEAEC0C9312904ABA8CE686A2 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF449978414E6215000306056 /* moments_feed.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = moments_feed.json; sourceTree = \"<group>\"; };\n\t\tF449978714E6295C00306056 /* PFMMoment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMMoment.h; sourceTree = \"<group>\"; };\n\t\tF449978814E6295C00306056 /* PFMMoment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMMoment.m; sourceTree = \"<group>\"; };\n\t\tF44997A014E6571F00306056 /* PFMPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMPhoto.h; sourceTree = \"<group>\"; };\n\t\tF44997A114E6571F00306056 /* PFMPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMPhoto.m; sourceTree = \"<group>\"; };\n\t\tF44997A414E6582300306056 /* PFMPhotoSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMPhotoSpec.m; sourceTree = \"<group>\"; };\n\t\tF47A489914E6D987007D0B9F /* PFMPlace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMPlace.h; sourceTree = \"<group>\"; };\n\t\tF47A489A14E6D987007D0B9F /* PFMPlace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMPlace.m; sourceTree = \"<group>\"; };\n\t\tF4B7F73B14E676CB005E8AF4 /* PFMComment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMComment.h; sourceTree = \"<group>\"; };\n\t\tF4B7F73C14E676CC005E8AF4 /* PFMComment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMComment.m; sourceTree = \"<group>\"; };\n\t\tF4B7F74014E68110005E8AF4 /* PFMLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFMLocation.h; sourceTree = \"<group>\"; };\n\t\tF4B7F74114E68110005E8AF4 /* PFMLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMLocation.m; sourceTree = \"<group>\"; };\n\t\tF4DB598D14E7FEBF009E92E8 /* PFMCommentSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMCommentSpec.m; sourceTree = \"<group>\"; };\n\t\tF4DB599014E80A6E009E92E8 /* PFMLocationSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMLocationSpec.m; sourceTree = \"<group>\"; };\n\t\tF4DB599214E80D12009E92E8 /* PFMPlaceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFMPlaceSpec.m; sourceTree = \"<group>\"; };\n\t\tF4F7DF3814EE393300CAB792 /* moments_feed_newer_than.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = moments_feed_newer_than.json; sourceTree = \"<group>\"; };\n\t\tF4F7DF3B14EE591900CAB792 /* moments_feed_older_than.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = moments_feed_older_than.json; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tE954C6BA14E40A5700DF093C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE91CCEFC14E46ACB00DA6E96 /* WebKit.framework in Frameworks */,\n\t\t\t\tE9ADC7F714E40F6B00E39527 /* Security.framework in Frameworks */,\n\t\t\t\tE954C6C214E40A5700DF093C /* Cocoa.framework in Frameworks */,\n\t\t\t\tADBFC6DEAB4F4E14AE683583 /* libPods.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE954C6DA14E40A5800DF093C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE95FB1C714FB872700B2DF1A /* WebKit.framework in Frameworks */,\n\t\t\t\tE9ADC80314E40FD300E39527 /* Security.framework in Frameworks */,\n\t\t\t\tE954C6E014E40A5800DF093C /* SenTestingKit.framework in Frameworks */,\n\t\t\t\tE954C6E114E40A5800DF093C /* Cocoa.framework in Frameworks */,\n\t\t\t\tE9FE51B214F8DB0800500C1C /* libPods-test.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tE91CCEE314E44D0F00DA6E96 /* Fixtures */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE91CCEE414E44D1F00DA6E96 /* settings.json */,\n\t\t\t\tF449978414E6215000306056 /* moments_feed.json */,\n\t\t\t\tF4F7DF3814EE393300CAB792 /* moments_feed_newer_than.json */,\n\t\t\t\tF4F7DF3B14EE591900CAB792 /* moments_feed_older_than.json */,\n\t\t\t);\n\t\t\tpath = Fixtures;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE954C6B214E40A5700DF093C = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE95FB1B114FA3B2900B2DF1A /* README.md */,\n\t\t\t\tE95FB1AF14FA3B2900B2DF1A /* LICENSE.md */,\n\t\t\t\tE95FB1B014FA3B2900B2DF1A /* Podfile */,\n\t\t\t\tE9FD374E14E40C80007F90AF /* Journey */,\n\t\t\t\tE954C6E414E40A5800DF093C /* JourneyTests */,\n\t\t\t\tE954C6C014E40A5700DF093C /* Frameworks */,\n\t\t\t\tE954C6BE14E40A5700DF093C /* Products */,\n\t\t\t\t3762FDED24BF40BDAF87D96A /* Pods.xcconfig */,\n\t\t\t\tE933945F14F8D40D00078772 /* Pods-test.xcconfig */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE954C6BE14E40A5700DF093C /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE954C6BD14E40A5700DF093C /* Journey.app */,\n\t\t\t\tE954C6DE14E40A5800DF093C /* JourneyTests.octest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE954C6C014E40A5700DF093C /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE91CCEFA14E4695600DA6E96 /* WebKit.framework */,\n\t\t\t\tE9ADC7F614E40F6B00E39527 /* Security.framework */,\n\t\t\t\tE954C6C114E40A5700DF093C /* Cocoa.framework */,\n\t\t\t\tE954C6DF14E40A5800DF093C /* SenTestingKit.framework */,\n\t\t\t\tE954C6C314E40A5700DF093C /* Other Frameworks */,\n\t\t\t\tEAEC0C9312904ABA8CE686A2 /* libPods.a */,\n\t\t\t\tE9FE51A114F8D6A100500C1C /* libPods-test.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE954C6C314E40A5700DF093C /* Other Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE954C6C414E40A5700DF093C /* AppKit.framework */,\n\t\t\t\tE954C6C514E40A5700DF093C /* CoreData.framework */,\n\t\t\t\tE954C6C614E40A5700DF093C /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = \"Other Frameworks\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE954C6E414E40A5800DF093C /* JourneyTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE91CCEE314E44D0F00DA6E96 /* Fixtures */,\n\t\t\t\tE95BAB6F14E4C544007383EC /* Lib */,\n\t\t\t\tE9ADC80A14E4118700E39527 /* Models */,\n\t\t\t\tE9ADC80B14E4118700E39527 /* Views */,\n\t\t\t\tE9ADC80914E4118700E39527 /* Controllers */,\n\t\t\t\tE9ADC81D14E4222F00E39527 /* Support */,\n\t\t\t);\n\t\t\tpath = JourneyTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE95BAB6F14E4C544007383EC /* Lib */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tpath = Lib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE96080E814E4D1A100127E58 /* Helpers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE96080E914E4D1A100127E58 /* PFMHelper.h */,\n\t\t\t\tE96080EA14E4D1A100127E58 /* PFMHelper.m */,\n\t\t\t);\n\t\t\tpath = Helpers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE972ADF014E825000049FFEA /* Lib */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE972ADF814E832920049FFEA /* NSDate+SCAdditions.h */,\n\t\t\t\tE972ADF914E832920049FFEA /* NSDate+SCAdditions.m */,\n\t\t\t\tE972ADF214E825220049FFEA /* NSMutableDictionary+PFMAdditions.h */,\n\t\t\t\tE972ADF314E825220049FFEA /* NSMutableDictionary+PFMAdditions.m */,\n\t\t\t\tE972ADF514E829220049FFEA /* NSDictionary+PFMAdditions.h */,\n\t\t\t\tE972ADF614E829220049FFEA /* NSDictionary+PFMAdditions.m */,\n\t\t\t\tE9C75DC614F6C1D300F564A0 /* NSWindow+PFMAdditions.h */,\n\t\t\t\tE9C75DC714F6C1D300F564A0 /* NSWindow+PFMAdditions.m */,\n\t\t\t);\n\t\t\tpath = Lib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9ADC80914E4118700E39527 /* Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE9ADC80F14E4121500E39527 /* PathAppDelegateSpec.m */,\n\t\t\t\tE9ADC80D14E411D800E39527 /* PFMSignInWindowControllerSpec.m */,\n\t\t\t\tE966221314E661DA003F8861 /* PFMMainWindowControllerSpec.m */,\n\t\t\t\tE9B9D9AF14E672D8005D5B5B /* PFMMomentListViewControllerSpec.m */,\n\t\t\t\tE9B9D9BA14E67C15005D5B5B /* PFMToolbarViewControllerSpec.m */,\n\t\t\t);\n\t\t\tpath = Controllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9ADC80A14E4118700E39527 /* Models */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE9ADC81614E41B6100E39527 /* PFMModelSpec.m */,\n\t\t\t\tE9ADC81B14E41C1700E39527 /* PFMUserSpec.m */,\n\t\t\t\tF44997A414E6582300306056 /* PFMPhotoSpec.m */,\n\t\t\t\tF4DB598D14E7FEBF009E92E8 /* PFMCommentSpec.m */,\n\t\t\t\tF4DB599014E80A6E009E92E8 /* PFMLocationSpec.m */,\n\t\t\t\tF4DB599214E80D12009E92E8 /* PFMPlaceSpec.m */,\n\t\t\t);\n\t\t\tpath = Models;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9ADC80B14E4118700E39527 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9ADC81D14E4222F00E39527 /* Support */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE9ADC81E14E4222F00E39527 /* JourneyTests-Info.plist */,\n\t\t\t\tE91CCED814E4413100DA6E96 /* ASIHTTPRequest+Spec.h */,\n\t\t\t\tE91CCED914E4413100DA6E96 /* ASIHTTPRequest+Spec.m */,\n\t\t\t\tE9ADC81F14E4222F00E39527 /* TestHelper.h */,\n\t\t\t\tE96080FF14E4DFA100127E58 /* TestHelper.m */,\n\t\t\t\tE95FB1C314FB812000B2DF1A /* WebView+Spec.h */,\n\t\t\t\tE95FB1C414FB812000B2DF1A /* WebView+Spec.m */,\n\t\t\t\tE95FB1CB14FBDD1800B2DF1A /* EXPMatchers+toMatch.h */,\n\t\t\t\tE95FB1CC14FBDD1800B2DF1A /* EXPMatchers+toMatch.m */,\n\t\t\t);\n\t\t\tpath = Support;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9FD374E14E40C80007F90AF /* Journey */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE972ADF014E825000049FFEA /* Lib */,\n\t\t\t\tE9FD375214E40C80007F90AF /* Models */,\n\t\t\t\tE9FD375F14E40C80007F90AF /* Views */,\n\t\t\t\tE9FD374F14E40C80007F90AF /* Controllers */,\n\t\t\t\tE96080E814E4D1A100127E58 /* Helpers */,\n\t\t\t\tE9FD375314E40C80007F90AF /* Resources */,\n\t\t\t\tE9FD375A14E40C80007F90AF /* Support */,\n\t\t\t);\n\t\t\tpath = Journey;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9FD374F14E40C80007F90AF /* Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE9FD375014E40C80007F90AF /* PathAppDelegate.h */,\n\t\t\t\tE9FD375114E40C80007F90AF /* PathAppDelegate.m */,\n\t\t\t\tE9ADC80614E4112E00E39527 /* PFMSignInWindowController.h */,\n\t\t\t\tE9ADC80714E4112E00E39527 /* PFMSignInWindowController.m */,\n\t\t\t\tE91CCEF414E4655300DA6E96 /* PFMMainWindowController.h */,\n\t\t\t\tE91CCEF514E4655400DA6E96 /* PFMMainWindowController.m */,\n\t\t\t\tE9B9D9A914E672B4005D5B5B /* PFMMomentListViewController.h */,\n\t\t\t\tE9B9D9AA14E672B4005D5B5B /* PFMMomentListViewController.m */,\n\t\t\t\tE9B9D9B314E67BA4005D5B5B /* PFMToolbarViewController.h */,\n\t\t\t\tE9B9D9B414E67BA4005D5B5B /* PFMToolbarViewController.m */,\n\t\t\t);\n\t\t\tpath = Controllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9FD375214E40C80007F90AF /* Models */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE9ADC81314E419A900E39527 /* PFMModel.h */,\n\t\t\t\tE9ADC81414E419A900E39527 /* PFMModel.m */,\n\t\t\t\tE9ADC81814E41BE700E39527 /* PFMUser.h */,\n\t\t\t\tE9ADC81914E41BE700E39527 /* PFMUser.m */,\n\t\t\t\tF449978714E6295C00306056 /* PFMMoment.h */,\n\t\t\t\tF449978814E6295C00306056 /* PFMMoment.m */,\n\t\t\t\tF44997A014E6571F00306056 /* PFMPhoto.h */,\n\t\t\t\tF44997A114E6571F00306056 /* PFMPhoto.m */,\n\t\t\t\tE966221014E6584A003F8861 /* NSApplication+SharedObjects.h */,\n\t\t\t\tE966221114E6584A003F8861 /* NSApplication+SharedObjects.m */,\n\t\t\t\tF4B7F73B14E676CB005E8AF4 /* PFMComment.h */,\n\t\t\t\tF4B7F73C14E676CC005E8AF4 /* PFMComment.m */,\n\t\t\t\tF4B7F74014E68110005E8AF4 /* PFMLocation.h */,\n\t\t\t\tF4B7F74114E68110005E8AF4 /* PFMLocation.m */,\n\t\t\t\tF47A489914E6D987007D0B9F /* PFMPlace.h */,\n\t\t\t\tF47A489A14E6D987007D0B9F /* PFMPlace.m */,\n\t\t\t);\n\t\t\tpath = Models;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9FD375314E40C80007F90AF /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE994D49814E7E20600B3F011 /* WebView */,\n\t\t\t\tE994D49314E6CAAE00B3F011 /* DefaultPortrait.png */,\n\t\t\t\tE9CE170214E55A9F00B199AF /* Logo.png */,\n\t\t\t\tE9CE16F814E54E3700B199AF /* RedLinenBg.png */,\n\t\t\t\tE9B9D9C814E686E9005D5B5B /* TitleBarLogo.png */,\n\t\t\t\tE9FD375614E40C80007F90AF /* InfoPlist.strings */,\n\t\t\t\tE9926A4114E4C13000F4EFA5 /* Credits.rtf */,\n\t\t\t\tE93EC9A214F52ADC0060DB49 /* Icon.icns */,\n\t\t\t\tE9C75DC014F6A44600F564A0 /* StatusItemIcon.png */,\n\t\t\t\tE9C75DC414F6A5C700F564A0 /* StatusItemIconSelected.png */,\n\t\t\t\tE9C75DC114F6A44600F564A0 /* StatusItemIconHighlighted.png */,\n\t\t\t);\n\t\t\tpath = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9FD375A14E40C80007F90AF /* Support */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE91CCED414E4349100DA6E96 /* Application.h */,\n\t\t\t\tE9FD375B14E40C80007F90AF /* main.m */,\n\t\t\t\tE9FD375C14E40C80007F90AF /* Journey-Info.plist */,\n\t\t\t\tE9FD375D14E40C80007F90AF /* Journey-Prefix.pch */,\n\t\t\t);\n\t\t\tpath = Support;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9FD375F14E40C80007F90AF /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE9926A3B14E4C12400F4EFA5 /* MainMenu.xib */,\n\t\t\t\tE9926A3C14E4C12400F4EFA5 /* SignInWindow.xib */,\n\t\t\t\tE9926A3A14E4C12400F4EFA5 /* MainWindow.xib */,\n\t\t\t\tE9B9D9B114E674B3005D5B5B /* MomentListView.xib */,\n\t\t\t\tE9B9D9B814E67BDB005D5B5B /* ToolbarView.xib */,\n\t\t\t\tE960810414E5476B00127E58 /* PFMView.h */,\n\t\t\t\tE960810514E5476B00127E58 /* PFMView.m */,\n\t\t\t\tE9CE16FF14E5557100B199AF /* PFMRedLinenView.h */,\n\t\t\t\tE9CE170014E5557100B199AF /* PFMRedLinenView.m */,\n\t\t\t\tE9B9D9C414E68017005D5B5B /* PFMThemedWindow.h */,\n\t\t\t\tE9B9D9C514E68017005D5B5B /* PFMThemedWindow.m */,\n\t\t\t\tE9B9D9CA14E68D5F005D5B5B /* PFMUnclickableImageView.h */,\n\t\t\t\tE9B9D9CB14E68D5F005D5B5B /* PFMUnclickableImageView.m */,\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tE954C6BC14E40A5700DF093C /* Journey */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E954C6EF14E40A5800DF093C /* Build configuration list for PBXNativeTarget \"Journey\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE954C6B914E40A5700DF093C /* Sources */,\n\t\t\t\tE954C6BA14E40A5700DF093C /* Frameworks */,\n\t\t\t\tE954C6BB14E40A5700DF093C /* Resources */,\n\t\t\t\t0CCDD2DBCB304A9782DF4F04 /* Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Journey;\n\t\t\tproductName = Path;\n\t\t\tproductReference = E954C6BD14E40A5700DF093C /* Journey.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tE954C6DD14E40A5800DF093C /* JourneyTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E954C6F214E40A5800DF093C /* Build configuration list for PBXNativeTarget \"JourneyTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE954C6D914E40A5800DF093C /* Sources */,\n\t\t\t\tE954C6DA14E40A5800DF093C /* Frameworks */,\n\t\t\t\tE954C6DB14E40A5800DF093C /* Resources */,\n\t\t\t\tE954C6DC14E40A5800DF093C /* ShellScript */,\n\t\t\t\t0CCDD2DBCB304A9782DF4F04 /* Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE954C6E314E40A5800DF093C /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = JourneyTests;\n\t\t\tproductName = PathTests;\n\t\t\tproductReference = E954C6DE14E40A5800DF093C /* JourneyTests.octest */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tE954C6B414E40A5700DF093C /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0430;\n\t\t\t\tORGANIZATIONNAME = DecisiveBits;\n\t\t\t};\n\t\t\tbuildConfigurationList = E954C6B714E40A5700DF093C /* Build configuration list for PBXProject \"Journey\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = E954C6B214E40A5700DF093C;\n\t\t\tproductRefGroup = E954C6BE14E40A5700DF093C /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tE954C6BC14E40A5700DF093C /* Journey */,\n\t\t\t\tE954C6DD14E40A5800DF093C /* JourneyTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tE954C6BB14E40A5700DF093C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE9FD376214E40C80007F90AF /* InfoPlist.strings in Resources */,\n\t\t\t\tE9926A3D14E4C12400F4EFA5 /* MainWindow.xib in Resources */,\n\t\t\t\tE9926A3E14E4C12400F4EFA5 /* MainMenu.xib in Resources */,\n\t\t\t\tE9926A3F14E4C12400F4EFA5 /* SignInWindow.xib in Resources */,\n\t\t\t\tE9926A4214E4C13000F4EFA5 /* Credits.rtf in Resources */,\n\t\t\t\tE9CE16F914E54E3700B199AF /* RedLinenBg.png in Resources */,\n\t\t\t\tE9CE170314E55A9F00B199AF /* Logo.png in Resources */,\n\t\t\t\tE9B9D9B214E674B3005D5B5B /* MomentListView.xib in Resources */,\n\t\t\t\tE9B9D9B914E67BDB005D5B5B /* ToolbarView.xib in Resources */,\n\t\t\t\tE9B9D9C914E686E9005D5B5B /* TitleBarLogo.png in Resources */,\n\t\t\t\tE994D49414E6CAAE00B3F011 /* DefaultPortrait.png in Resources */,\n\t\t\t\tE994D49914E7E20600B3F011 /* WebView in Resources */,\n\t\t\t\tE93EC9A314F52ADC0060DB49 /* Icon.icns in Resources */,\n\t\t\t\tE9C75DC214F6A44600F564A0 /* StatusItemIcon.png in Resources */,\n\t\t\t\tE9C75DC314F6A44600F564A0 /* StatusItemIconHighlighted.png in Resources */,\n\t\t\t\tE9C75DC514F6A5C700F564A0 /* StatusItemIconSelected.png in Resources */,\n\t\t\t\tE95FB1B314FA3B3300B2DF1A /* LICENSE.md in Resources */,\n\t\t\t\tE95FB1B414FA3B3600B2DF1A /* README.md in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE954C6DB14E40A5800DF093C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE9AC9C2514E4AB6C00F9AC4B /* settings.json in Resources */,\n\t\t\t\tF449978514E6215000306056 /* moments_feed.json in Resources */,\n\t\t\t\tF4F7DF3914EE393300CAB792 /* moments_feed_newer_than.json in Resources */,\n\t\t\t\tF4F7DF3C14EE591900CAB792 /* moments_feed_older_than.json in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t0CCDD2DBCB304A9782DF4F04 /* Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Pods-resources.sh\\\"\\n\";\n\t\t};\n\t\tE954C6DC14E40A5800DF093C /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"# Run the unit tests in this test bundle.\\n\\\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\\\"\\n\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tE954C6B914E40A5700DF093C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE9FD376014E40C80007F90AF /* PathAppDelegate.m in Sources */,\n\t\t\t\tE9FD376414E40C80007F90AF /* main.m in Sources */,\n\t\t\t\tE9ADC80814E4112E00E39527 /* PFMSignInWindowController.m in Sources */,\n\t\t\t\tE9ADC81514E419A900E39527 /* PFMModel.m in Sources */,\n\t\t\t\tE9ADC81A14E41BE700E39527 /* PFMUser.m in Sources */,\n\t\t\t\tE91CCEF614E4655400DA6E96 /* PFMMainWindowController.m in Sources */,\n\t\t\t\tE96080EB14E4D1A100127E58 /* PFMHelper.m in Sources */,\n\t\t\t\tE960810614E5476B00127E58 /* PFMView.m in Sources */,\n\t\t\t\tE9CE170114E5557100B199AF /* PFMRedLinenView.m in Sources */,\n\t\t\t\tF449978914E6295C00306056 /* PFMMoment.m in Sources */,\n\t\t\t\tF44997A214E6571F00306056 /* PFMPhoto.m in Sources */,\n\t\t\t\tE966221214E6584A003F8861 /* NSApplication+SharedObjects.m in Sources */,\n\t\t\t\tF4B7F73D14E676CC005E8AF4 /* PFMComment.m in Sources */,\n\t\t\t\tE9B9D9AC14E672B5005D5B5B /* PFMMomentListViewController.m in Sources */,\n\t\t\t\tE9B9D9B614E67BA4005D5B5B /* PFMToolbarViewController.m in Sources */,\n\t\t\t\tE9B9D9C614E68017005D5B5B /* PFMThemedWindow.m in Sources */,\n\t\t\t\tE9B9D9CC14E68D5F005D5B5B /* PFMUnclickableImageView.m in Sources */,\n\t\t\t\tF4B7F74214E68110005E8AF4 /* PFMLocation.m in Sources */,\n\t\t\t\tF47A489B14E6D987007D0B9F /* PFMPlace.m in Sources */,\n\t\t\t\tE972ADF414E825220049FFEA /* NSMutableDictionary+PFMAdditions.m in Sources */,\n\t\t\t\tE972ADF714E829220049FFEA /* NSDictionary+PFMAdditions.m in Sources */,\n\t\t\t\tE972ADFA14E832920049FFEA /* NSDate+SCAdditions.m in Sources */,\n\t\t\t\tE9C75DC814F6C1D300F564A0 /* NSWindow+PFMAdditions.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE954C6D914E40A5800DF093C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE9ADC80E14E411D800E39527 /* PFMSignInWindowControllerSpec.m in Sources */,\n\t\t\t\tE9ADC81014E4121500E39527 /* PathAppDelegateSpec.m in Sources */,\n\t\t\t\tE9ADC81714E41B6100E39527 /* PFMModelSpec.m in Sources */,\n\t\t\t\tE9ADC81C14E41C1700E39527 /* PFMUserSpec.m in Sources */,\n\t\t\t\tE91CCEDA14E4413100DA6E96 /* ASIHTTPRequest+Spec.m in Sources */,\n\t\t\t\tE960810014E4DFA100127E58 /* TestHelper.m in Sources */,\n\t\t\t\tF44997A514E6582300306056 /* PFMPhotoSpec.m in Sources */,\n\t\t\t\tE966221414E661DA003F8861 /* PFMMainWindowControllerSpec.m in Sources */,\n\t\t\t\tE9B9D9B014E672D8005D5B5B /* PFMMomentListViewControllerSpec.m in Sources */,\n\t\t\t\tE9B9D9BB14E67C15005D5B5B /* PFMToolbarViewControllerSpec.m in Sources */,\n\t\t\t\tF4DB598E14E7FEBF009E92E8 /* PFMCommentSpec.m in Sources */,\n\t\t\t\tF4DB599114E80A6E009E92E8 /* PFMLocationSpec.m in Sources */,\n\t\t\t\tF4DB599314E80D12009E92E8 /* PFMPlaceSpec.m in Sources */,\n\t\t\t\tE95FB1C514FB812000B2DF1A /* WebView+Spec.m in Sources */,\n\t\t\t\tE95FB1CD14FBDD1800B2DF1A /* EXPMatchers+toMatch.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tE954C6E314E40A5800DF093C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = E954C6BC14E40A5700DF093C /* Journey */;\n\t\t\ttargetProxy = E954C6E214E40A5800DF093C /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tE9FD375614E40C80007F90AF /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tE9FD375714E40C80007F90AF /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tE954C6ED14E40A5800DF093C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.6;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE954C6EE14E40A5800DF093C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_64_BIT)\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_ENABLE_OBJC_EXCEPTIONS = YES;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.6;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE954C6F014E40A5800DF093C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 3762FDED24BF40BDAF87D96A /* Pods.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tDSTROOT = /tmp/xcodeproj.dst;\n\t\t\t\tGCC_ENABLE_OBJC_GC = required;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Journey/Support/Journey-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"Journey/Support/Journey-Info.plist\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.6;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = NO;\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE954C6F114E40A5800DF093C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 3762FDED24BF40BDAF87D96A /* Pods.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = \"$(ARCHS_STANDARD_32_64_BIT)\";\n\t\t\t\tDSTROOT = /tmp/xcodeproj.dst;\n\t\t\t\tGCC_ENABLE_OBJC_GC = required;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Journey/Support/Journey-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"Journey/Support/Journey-Info.plist\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.6;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = NO;\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE954C6F314E40A5800DF093C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E933945F14F8D40D00078772 /* Pods-test.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/Journey.app/Contents/MacOS/Journey\";\n\t\t\t\tDSTROOT = /tmp/xcodeproj.dst;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(DEVELOPER_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tGCC_ENABLE_OBJC_GC = required;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Journey/Support/Journey-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"JourneyTests/Support/JourneyTests-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"$(SRCROOT)/../../Library/Developer/Xcode/DerivedData/Journey-gicjnhowhxtsfjaysjxvfgsgxlof/Build/Products/Debug\\\"\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(PODS_ROOT)/Headers\\\" \\\"$(PODS_ROOT)/Headers/ASIHTTPRequest\\\" \\\"$(PODS_ROOT)/Headers/ConciseKit\\\" \\\"$(PODS_ROOT)/Headers/SBJson\\\" \\\"$(PODS_ROOT)/Headers/SSKeychain\\\"\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE954C6F414E40A5800DF093C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E933945F14F8D40D00078772 /* Pods-test.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/Journey.app/Contents/MacOS/Journey\";\n\t\t\t\tDSTROOT = /tmp/xcodeproj.dst;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(DEVELOPER_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tGCC_ENABLE_OBJC_GC = required;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Journey/Support/Journey-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"JourneyTests/Support/JourneyTests-Info.plist\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"$(SRCROOT)/../../Library/Developer/Xcode/DerivedData/Journey-gicjnhowhxtsfjaysjxvfgsgxlof/Build/Products/Debug\\\"\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\\\"$(PODS_ROOT)/Headers\\\" \\\"$(PODS_ROOT)/Headers/ASIHTTPRequest\\\" \\\"$(PODS_ROOT)/Headers/ConciseKit\\\" \\\"$(PODS_ROOT)/Headers/SBJson\\\" \\\"$(PODS_ROOT)/Headers/SSKeychain\\\"\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tE954C6B714E40A5700DF093C /* Build configuration list for PBXProject \"Journey\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE954C6ED14E40A5800DF093C /* Debug */,\n\t\t\t\tE954C6EE14E40A5800DF093C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE954C6EF14E40A5800DF093C /* Build configuration list for PBXNativeTarget \"Journey\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE954C6F014E40A5800DF093C /* Debug */,\n\t\t\t\tE954C6F114E40A5800DF093C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE954C6F214E40A5800DF093C /* Build configuration list for PBXNativeTarget \"JourneyTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE954C6F314E40A5800DF093C /* Debug */,\n\t\t\t\tE954C6F414E40A5800DF093C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = E954C6B414E40A5700DF093C /* Project object */;\n}\n"
  },
  {
    "path": "JourneyTests/Controllers/PFMMainWindowControllerSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMMainWindowController.h\"\n#import \"PFMMomentListViewController.h\"\n#import \"PFMToolbarViewController.h\"\n\nSpecBegin(PFMMainWindowController)\n\n__block PFMMainWindowController *controller;\n\nbefore(^{\n  [ASIHTTPRequest resetRequests];\n  controller = [PFMMainWindowController new];\n  [[controller window] makeKeyAndOrderFront:nil];\n});\n\nafter(^{\n  [controller close];\n});\n\nit(@\"loads MainWindow nib\", ^{\n  expect([controller windowNibName]).toEqual(@\"MainWindow\");\n});\n\nit(@\"has its wrapper view outlets correctly connected\", ^{\n  expect(controller.toolbarViewWrapper).toBeKindOf([NSView class]);\n  expect(controller.momentListViewWrapper).toBeKindOf([NSView class]);\n});\n\nit(@\"initializes PFMMomentListViewController and adds its view as a subview of momentListViewWrapper\", ^{\n  expect(controller.momentListViewController).toBeKindOf([PFMMomentListViewController class]);\n  NSView *momentListView = [controller.momentListViewController view];\n  expect([[controller.momentListViewWrapper subviews] objectAtIndex:0]).toEqual(momentListView);\n  expect([momentListView frame]).toEqual([controller.momentListViewWrapper bounds]);\n});\n\nit(@\"initializes PFMToolbarViewController and adds its view as a subview of toolbarViewWrapper\", ^{\n  expect(controller.toolbarViewController).toBeKindOf([PFMToolbarViewController class]);\n  NSView *toolbarView = [controller.toolbarViewController view];\n  expect([[controller.toolbarViewWrapper subviews] objectAtIndex:0]).toEqual(toolbarView);\n  expect([toolbarView frame]).toEqual([controller.toolbarViewWrapper bounds]);\n});\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Controllers/PFMMomentListViewControllerSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMMomentListViewController.h\"\n#import \"PFMMoment.h\"\n#import \"PFMPhoto.h\"\n#import \"SBJson.h\"\n\nSpecBegin(PFMMomentListViewController)\n\n__block PFMMomentListViewController *controller;\n__block PFMUser *user;\n__block id mockUser;\n\nbefore(^{\n  [ASIHTTPRequest resetRequests];\n  user = [NSApp resetSharedUser];\n  mockUser = [OCMockObject partialMockForObject:user];\n  controller = [PFMMomentListViewController new];\n  [WebView resetJavascripts];\n});\n\nvoid (^openView)(void) = ^{\n  [controller view];\n};\n\nit(@\"loads MomentListView nib\", ^{\n  openView();\n  expect([controller nibName]).toEqual(@\"MomentListView\");\n});\n\nit(@\"sets itself to be shared user's sign in delegate\", ^{\n  openView();\n  expect(user.momentsDelegate).toEqual(controller);\n});\n\nit(@\"begins fetching moments\", ^{\n  [[mockUser expect] fetchMomentsNewerThan:0.0];\n  openView();\n  [mockUser verify];\n});\n\nit(@\"is its webview's UIDelegate\", ^{\n  openView();\n  expect([controller.webView UIDelegate]).toEqual(controller);\n});\n\ndescribe(@\"-makeTemplateJSON:\", ^{\n  __block NSArray *moments;\n\n  before(^{\n    moments = $arr([PFMMoment momentFrom:$dict(@\"1\", @\"id\")],\n                   [PFMMoment momentFrom:$dict(@\"2\", @\"id\")]);\n    user.profilePhoto = [PFMPhoto new];\n    user.profilePhoto.iOSHighResFileName = @\"foo.jpg\";\n    user.coverPhoto = [PFMPhoto new];\n    user.coverPhoto.iOSHighResFileName = @\"bar.jpg\";\n  });\n\n  it(@\"prepares a json object needed by the view\", ^{\n    NSString *json = [controller makeTemplateJSON:moments];\n    NSDictionary *dict = [json JSONValue];\n    expect([dict objectForKey:@\"moments\"]).toEqual([moments $map:^(id moment) {\n      return [(PFMMoment *)moment toHash];\n    }]);\n    expect([dict objectForKey:@\"coverPhoto\"]).toEqual([user.coverPhoto iOSHighResURL]);\n    expect([dict objectForKey:@\"profilePhoto\"]).toEqual([user.profilePhoto iOSHighResURL]);\n  });\n});\n\ndescribe(@\"PFMUserMomentsDelegate\", ^{\n  before(^{\n    openView();\n  });\n\n  describe(@\"-didFetchMoments:atTop:\", ^{\n    context(@\"when the moments given is an empty array\", ^{\n      before(^{\n        [controller didFetchMoments:[NSArray array] atTop:YES];\n      });\n\n      it(@\"calls Path.didCompleteRefresh() to stop the refresh animation\", ^{\n        expect([WebView javascripts]).toContain(@\"Path.didCompleteRefresh()\");\n      });\n    });\n\n    context(@\"when the moments given is not empty\", ^{\n      __block NSArray *moments;\n\n      before(^{\n        moments = $arr([PFMMoment momentFrom:$dict(@\"1\", @\"id\")],\n                       [PFMMoment momentFrom:$dict(@\"2\", @\"id\")]);\n      });\n\n      context(@\"when atTop is YES\", ^{\n        it(@\"calls Path.renderTemplate js function with 'feed', <the template json>, true as arguments\", ^{\n          [controller didFetchMoments:moments atTop:YES];\n          NSString *lastJSCall = [[WebView javascripts] lastObject];\n          NSString *regex = $str(@\"Path\\\\.renderTemplate\\\\(\\\\s*['\\\"]feed['\\\"]\\\\s*,\\\\s*.*\\\\s*,\\\\s*true\\\\s*\\\\)\");\n          expect(lastJSCall).toMatch(regex);\n          expect(lastJSCall).toContain([controller makeTemplateJSON:moments]);\n        });\n      });\n\n      context(@\"when atTop is NO\", ^{\n        it(@\"calls Path.renderTemplate js function with 'feed', <the template json>, false as arguments\", ^{\n          [controller didFetchMoments:moments atTop:NO];\n          NSString *lastJSCall = [[WebView javascripts] lastObject];\n          NSString *regex = $str(@\"Path\\\\.renderTemplate\\\\(\\\\s*['\\\"]feed['\\\"]\\\\s*,\\\\s*.*\\\\s*,\\\\s*false\\\\s*\\\\)\");\n          expect(lastJSCall).toMatch(regex);\n          expect(lastJSCall).toContain([controller makeTemplateJSON:moments]);\n        });\n      });\n    });\n  });\n\n  describe(@\"-didFailToFetchMoments\", ^{\n    it(@\"calls Path.didCompleteRefresh javascript function\", ^{\n      [controller didFailToFetchMoments];\n      expect([WebView javascripts]).toContain(@\"Path.didCompleteRefresh()\");\n    });\n  });\n});\n\ndescribe(@\"-refreshFeed\", ^{\n  before(^{\n    openView();\n    [user parseMomentsJSON:loadStringFixture(@\"moments_feed.json\") insertAtTop:YES];\n  });\n\n  it(@\"fetches moments newer than the first moment's createdAt\", ^{\n    double firstMomentCreatedAt = ((PFMMoment *)[user.fetchedMoments objectAtIndex:0]).createdAt;\n    [[mockUser expect] fetchMomentsNewerThan:firstMomentCreatedAt];\n    [controller refreshFeed];\n    [mockUser verify];\n  });\n});\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Controllers/PFMSignInWindowControllerSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMSignInWindowController.h\"\n#import \"PFMMainWindowController.h\"\n#import \"PathAppDelegate.h\"\n#import \"PFMHelper.h\"\n\nSpecBegin(PFMSignInWindowController)\n\n__block PFMSignInWindowController *controller;\n__block PFMUser *user;\n__block id mockUser;\n\nbefore(^{\n  resetUserDefaultsAndKeychain();\n  user = [NSApp resetSharedUser];\n  mockUser = [OCMockObject partialMockForObject:user];\n  controller = [PFMSignInWindowController new];\n  [[controller window] makeKeyAndOrderFront:nil];\n});\n\nafter(^{\n  [controller close];\n});\n\nit(@\"loads SignInWindow nib\", ^{\n  expect([controller windowNibName]).toEqual(@\"SignInWindow\");\n});\n\nit(@\"sets itself to be the shared user's sign in delegate\", ^{\n  expect(user.signInDelegate).toEqual(controller);\n});\n\ndescribe(@\"bindings\", ^{\n  describe(@\"email field\", ^{\n    it(@\"is bound to shared user object's email property\", ^{\n      user.email = @\"lol@hahaha.com\";\n      expect([controller.emailField stringValue]).toEqual(@\"lol@hahaha.com\");\n    });\n  });\n\n  describe(@\"password field\", ^{\n    it(@\"is bound to shared user object's password property\", ^{\n      user.password = @\"R3A11yD|ff|cU17P@55w0rD\";\n      expect([controller.passwordField stringValue]).toEqual(@\"R3A11yD|ff|cU17P@55w0rD\");\n    });\n  });\n\n  context(@\"when the shared user's email and password properties are filled up\", ^{\n    before(^{\n      user.email = @\"foo@bar.com\";\n      user.password = @\"123456\";\n    });\n\n    it(@\"enables sign in button\", ^{\n      expect([controller.signInButton isEnabled]).toEqual(YES);\n    });\n\n    context(@\"when the shared user's email property is nil\", ^{\n      before(^{\n        user.email = nil;\n      });\n\n      it(@\"disables sign in button\", ^{\n        expect([controller.signInButton isEnabled]).toEqual(NO);\n      });\n    });\n\n    context(@\"when the shared user's password property is nil\", ^{\n      before(^{\n        user.password = nil;\n      });\n\n      it(@\"disables sign in button\", ^{\n        expect([controller.signInButton isEnabled]).toEqual(NO);\n      });\n    });\n\n    context(@\"when the shared user's signingIn property is YES\", ^{\n      before(^{\n        user.signingIn = YES;\n      });\n\n      it(@\"disables sign in button\", ^{\n        expect([controller.signInButton isEnabled]).toEqual(NO);\n      });\n\n      it(@\"disables the text fields\", ^{\n        expect([controller.signInButton isEnabled]).toEqual(NO);\n        expect([controller.signInButton isEnabled]).toEqual(NO);\n      });\n    });\n  });\n\n  describe(@\"spinner\", ^{\n    it(@\"is hidden and by default (user is not signing in)\", ^{\n      expect([controller.spinner isHidden]).toEqual(YES);\n    });\n\n    context(@\"when user is signing in\", ^{\n      before(^{\n        user.signingIn = YES;\n      });\n\n      it(@\"is shown\", ^{\n        expect([controller.spinner isHidden]).toEqual(NO);\n      });\n    });\n  });\n});\n\ndescribe(@\"actions\", ^{\n  context(@\"clicking on the sign in button\", ^{\n    it(@\"sends -signIn message to the shared user\", ^{\n      [[mockUser expect] signIn];\n      [controller.signInButton setEnabled:YES];\n      [controller.signInButton performClick:nil];\n      [mockUser verify];\n    });\n  });\n});\n\ndescribe(@\"PFMUserSignInDelegate\", ^{\n  describe(@\"-didSignIn\", ^{\n    __block id windowController;\n\n    before(^{\n      [controller didSignIn];\n      windowController = [[[NSApp orderedWindows] objectAtIndex:0] windowController];\n    });\n\n    it(@\"opens main window controller\", ^{\n      expect(((PathAppDelegate *)[NSApp delegate]).mainWindowController).toBeIdenticalTo(windowController);\n      expect(windowController).toBeKindOf([PFMMainWindowController class]);\n      expect([[windowController window] isVisible]).toEqual(YES);\n    });\n\n    after(^{\n      [[windowController window] close];\n    });\n  });\n\n  describe(@\"-didFailSignInDueToInvalidCredentials\", ^{\n    it(@\"shows alert sheet\", ^{\n      id mockHelper = [OCMockObject partialMockForObject:[PFMHelper helper]];\n      [[mockHelper expect] showAlertSheetWithTitle:(id)containsString(@\"Failed\") message:(id)containsString(@\"password\") window:OCMOCK_ANY];\n      [controller didFailSignInDueToInvalidCredentials];\n      [mockHelper verify];\n    });\n  });\n\n  describe(@\"-didFailSignInDueToRequestError\", ^{\n    it(@\"shows alert sheet\", ^{\n      id mockHelper = [OCMockObject partialMockForObject:[PFMHelper helper]];\n      [[mockHelper expect] showAlertSheetWithTitle:(id)containsString(@\"Failed\") message:(id)containsString(@\"Internet connection\") window:OCMOCK_ANY];\n      [controller didFailSignInDueToRequestError];\n      [mockHelper verify];\n    });\n  });\n\n  describe(@\"-didFailSignInDueToPathError\", ^{\n    it(@\"shows alert sheet\", ^{\n      id mockHelper = [OCMockObject partialMockForObject:[PFMHelper helper]];\n      [[mockHelper expect] showAlertSheetWithTitle:(id)containsString(@\"Failed\") message:(id)containsString(@\"Unable to login\") window:OCMOCK_ANY];\n      [controller didFailSignInDueToPathError];\n      [mockHelper verify];\n    });\n  });\n});\n\ndescribe(@\"auto sign in\", ^{\n  context(@\"when the user's credentials are saved\", ^{\n    before(^{\n      user.email = @\"foo@bar.com\";\n      user.password = @\"123456\";\n      [user saveCredentials];\n      user.email = nil;\n      user.password = nil;\n    });\n\n    context(@\"on -windowDidLoad\", ^{\n      it(@\"loads credentials and then sends -signIn message to the user\", ^{\n        [[mockUser expect] signIn];\n        [controller windowDidLoad];\n        expect(user.email).toEqual(@\"foo@bar.com\");\n        expect(user.password).toEqual(@\"123456\");\n        [mockUser verify];\n      });\n    });\n  });\n\n  context(@\"when the user's credentials aren't found\", ^{\n    before(^{\n      user.email = nil;\n      user.password = nil;\n      [user saveCredentials];\n    });\n\n    context(@\"on -windowDidLoad\", ^{\n      it(@\"does not send -signIn message to the user\", ^{\n        [[mockUser reject] signIn];\n        [controller windowDidLoad];\n        [mockUser verify];\n      });\n    });\n  });\n});\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Controllers/PFMToolbarViewControllerSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMToolbarViewController.h\"\n#import \"PFMUser.h\"\n\nSpecBegin(PFMToolbarViewController)\n\n__block PFMToolbarViewController *controller;\n__block PFMUser *user;\n__block id mockUser;\n\nbefore(^{\n  [ASIHTTPRequest resetRequests];\n  user = [NSApp resetSharedUser];\n  mockUser = [OCMockObject partialMockForObject:user];\n  controller = [PFMToolbarViewController new];\n});\n\nvoid (^openView)(void) = ^{\n  [controller view];\n};\n\nit(@\"loads ToolbarView nib\", ^{\n  openView();\n  expect([controller nibName]).toEqual(@\"ToolbarView\");\n});\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Controllers/PathAppDelegateSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PathAppDelegate.h\"\n#import \"PFMSignInWindowController.h\"\n#import \"PFMMainWindowController.h\"\n\nSpecBegin(PathAppDelegate)\n\n__block PathAppDelegate *appDelegate;\n__block PFMUser *user;\n__block id mockUser;\n\nbefore(^{\n  resetUserDefaultsAndKeychain();\n  user = [NSApp resetSharedUser];\n  mockUser = [OCMockObject partialMockForObject:user];\n  appDelegate = [NSApp delegate];\n});\n\ncontext(@\"at launch\", ^{\n  __block id windowController;\n\n  before(^{\n    [appDelegate applicationDidFinishLaunching:nil];\n    windowController = [[[NSApp orderedWindows] objectAtIndex:0] windowController];\n  });\n\n  it(@\"initializes and shows signInWindowController\", ^{\n    expect(appDelegate.signInWindowController).toBeIdenticalTo(windowController);\n    expect(appDelegate.signInWindowController).toBeKindOf([PFMSignInWindowController class]);\n    expect([[appDelegate.signInWindowController window] isVisible]).toEqual(YES);\n  });\n\n  after(^{\n    [appDelegate.signInWindowController close];\n  });\n});\n\ndescribe(@\"-signOut:\", ^{\n  before(^{\n    [appDelegate.signInWindowController close];\n    appDelegate.mainWindowController = [PFMMainWindowController new];\n    [[appDelegate.mainWindowController window] makeKeyAndOrderFront:nil];\n  });\n\n  void (^doAction)(void) = ^{\n    [appDelegate signOut:nil];\n  };\n\n  it(@\"invokes user's deleteCredentials method\", ^{\n    [[mockUser expect] deleteCredentials];\n    doAction();\n    [mockUser verify];\n  });\n\n  it(@\"closes mainWindow and nullifies mainWindowController pointer\", ^{\n    id mockMainWindowController = [OCMockObject partialMockForObject:appDelegate.mainWindowController];\n    [[mockMainWindowController expect] close];\n    doAction();\n    [mockMainWindowController verify];\n    expect(appDelegate.mainWindowController).toBeNil();\n  });\n\n  it(@\"shows sign in window controller\", ^{\n    doAction();\n    id windowController = [[[NSApp orderedWindows] objectAtIndex:0] windowController];\n    expect(appDelegate.signInWindowController).toBeIdenticalTo(windowController);\n    expect([[appDelegate.signInWindowController window] isVisible]).toEqual(YES);\n  });\n});\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Fixtures/moments_feed.json",
    "content": "{\n    \"places\": {\n        \"4bcd4dc50687ef3b31c6e0cc\": {\n            \"name\": \"Mescluns\",\n            \"location\": {\n                \"city\": \"Singapore\",\n                \"address\": \"64 Circular Road\",\n                \"country\": \"Singapore\",\n                \"lng\": 103.849196,\n                \"postalCode\": \"049418\",\n                \"lat\": 1.286237,\n                \"state\": \"Singapore\"\n            },\n            \"total_checkins\": 1,\n            \"contact\": {\n                \"phone\": \"+6562218141\",\n                \"formattedPhone\": \"+65 6221 8141\"\n            },\n            \"id\": \"4bcd4dc50687ef3b31c6e0cc\",\n            \"path_location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.849196,\n                \"lnglat\": [\n                    103.849196,\n                    1.286237\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.286237\n            },\n            \"createdAt\": 1271745989,\n            \"categories\": [\n                {\n                    \"shortName\": \"Salad\",\n                    \"name\": \"Salad Place\",\n                    \"parents\": [\n                        \"Food\"\n                    ],\n                    \"primary\": true,\n                    \"id\": \"4bf58dd8d48988d1bd941735\",\n                    \"icon\": \"https://foursquare.com/img/categories/food/salad.png\",\n                    \"pluralName\": \"Salad Shop\"\n                },\n                {\n                    \"shortName\": \"Juice Bar\",\n                    \"name\": \"Juice Bar\",\n                    \"parents\": [\n                        \"Food\"\n                    ],\n                    \"id\": \"4bf58dd8d48988d112941735\",\n                    \"icon\": \"https://foursquare.com/img/categories/food/default.png\",\n                    \"pluralName\": \"Juice Bars\"\n                },\n                {\n                    \"shortName\": \"Soup\",\n                    \"name\": \"Soup Place\",\n                    \"parents\": [\n                        \"Food\"\n                    ],\n                    \"id\": \"4bf58dd8d48988d1dd931735\",\n                    \"icon\": \"https://foursquare.com/img/categories/food/soup.png\",\n                    \"pluralName\": \"Soup Places\"\n                }\n            ],\n            \"shortUrl\": \"http://4sq.com/czAo9v\"\n        }\n    },\n    \"sleep\": {\n        \"asleep_since\": null\n    },\n    \"cover\": {\n        \"photo\": {\n            \"ios\": {\n                \"2x\": {\n                    \"height\": 640,\n                    \"file\": \"2x.jpg\",\n                    \"width\": 640\n                },\n                \"1x\": {\n                    \"height\": 320,\n                    \"file\": \"1x.jpg\",\n                    \"width\": 320\n                }\n            },\n            \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19\",\n            \"web\": {\n                \"height\": 1031,\n                \"file\": \"web.jpg\",\n                \"width\": 1650\n            },\n            \"original\": {\n                \"height\": 1031,\n                \"file\": \"original.jpg\",\n                \"width\": 1650\n            }\n        },\n        \"filter\": \"PTLomoFilter\",\n        \"captured\": 1328778316.78812,\n        \"user\": {\n            \"joined\": 1328778313,\n            \"id\": \"4f338c49f6b766128d011175\"\n        },\n        \"state\": \"live\",\n        \"moments\": {\n            \"total\": 11\n        },\n        \"created\": 1328778316.78812\n    },\n    \"music\": {},\n    \"users\": {\n        \"4f3ff09b9c6c3f41c90036a6\": {\n          \"created_at\": \"2012-02-18 18:40:27\",\n          \"username\": \"leeyen-tan\",\n          \"is_incoming_request\": false,\n          \"id\": \"4f3ff09b9c6c3f41c90036a6\",\n          \"gender\": \"female\",\n          \"last_name\": \"Tan\",\n          \"primary_network\": \"path\",\n          \"is_outgoing_request\": false,\n          \"state\": \"enabled\",\n          \"is_friend\": false,\n          \"first_name\": \"Lee Yen\"\n        },\n        \"4f338c49f6b766128d011175\": {\n            \"photo\": {\n                \"ios\": {\n                    \"2x\": {\n                        \"height\": 160,\n                        \"file\": \"processed_160x160.jpg\",\n                        \"width\": 160\n                    },\n                    \"1x\": {\n                        \"height\": 80,\n                        \"file\": \"processed_80x80.jpg\",\n                        \"width\": 80\n                    }\n                },\n                \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/bef62e4fdd1b2a4e1df408443fcb4e2cde6f2a03\",\n                \"version\": 3,\n                \"original\": {\n                    \"height\": 160,\n                    \"file\": \"original.jpg\",\n                    \"width\": 160\n                }\n            },\n            \"created_at\": \"2012-02-09 09:05:13\",\n            \"username\": \"aloha-boss\",\n            \"is_incoming_request\": false,\n            \"id\": \"4f338c49f6b766128d011175\",\n            \"gender\": \"unspecified\",\n            \"last_name\": \"Boss\",\n            \"primary_network\": \"path\",\n            \"is_outgoing_request\": false,\n            \"is_friend\": false,\n            \"first_name\": \"Aloha\"\n        }\n    },\n    \"locations\": {\n        \"4f34078be7cf662b9d09e2d2\": {\n            \"location\": {},\n            \"lng\": 103.84912140788,\n            \"id\": \"4f34078be7cf662b9d09e2d2\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28617359750407,\n            \"created\": 1328809735.59837\n        },\n        \"4f33f2caad495450df097c21\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"0 meters per second\",\n                \"dewpoint\": \"70F\",\n                \"temperature\": \"80F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.84907,\n                \"lnglat\": [\n                    103.84907,\n                    1.2862346\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.2862346\n            },\n            \"lng\": 103.84907,\n            \"id\": \"4f33f2caad495450df097c21\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.2862346,\n            \"created\": 1328804554.5923\n        },\n        \"4f33f62e830b3b134d0982b3\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"0 meters per second\",\n                \"dewpoint\": \"71F\",\n                \"temperature\": \"79F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849152707777,\n                \"lnglat\": [\n                    103.849152707777,\n                    1.28618792453878\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28618792453878\n            },\n            \"lng\": 103.849152707777,\n            \"id\": \"4f33f62e830b3b134d0982b3\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28618792453878,\n            \"created\": 1328805298.16438\n        },\n        \"4f33ee63e7cf662ba2095fb9\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"0 meters per second\",\n                \"dewpoint\": \"70F\",\n                \"temperature\": \"80F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849205,\n                \"lnglat\": [\n                    103.849205,\n                    1.2861519\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.2861519\n            },\n            \"lng\": 103.849205,\n            \"id\": \"4f33ee63e7cf662ba2095fb9\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.2861519,\n            \"created\": 1328803427.32585\n        },\n        \"4f343cfee7cf66507000782a\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"10.3 meters per second\",\n                \"dewpoint\": \"73F\",\n                \"temperature\": \"77F\",\n                \"wind_direction\": \"60 degrees\"\n            },\n            \"elevation\": 41.0816497802734,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849091326997,\n                \"lnglat\": [\n                    103.849091326997,\n                    1.28617786244295\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28617786244295\n            },\n            \"accuracy\": 76.2130243463154,\n            \"lng\": 103.849091326997,\n            \"id\": \"4f343cfee7cf66507000782a\",\n            \"elevation_accuracy\": 19.6218966806398,\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28617786244295,\n            \"created\": 1328823550.9533\n        },\n        \"4f343a1fd2bfa87b380074dd\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"2.2 meters per second\",\n                \"dewpoint\": \"75F\",\n                \"temperature\": \"77F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"elevation\": 41.0816497802734,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849133705997,\n                \"lnglat\": [\n                    103.849133705997,\n                    1.28618559888091\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28618559888091\n            },\n            \"accuracy\": 65,\n            \"lng\": 103.849133705997,\n            \"id\": \"4f343a1fd2bfa87b380074dd\",\n            \"elevation_accuracy\": 10,\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28618559888091,\n            \"created\": 1328822815.94779\n        },\n        \"4f33ee67df21bf6bb7095b86\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"0 meters per second\",\n                \"dewpoint\": \"70F\",\n                \"temperature\": \"80F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849205,\n                \"lnglat\": [\n                    103.849205,\n                    1.2861519\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.2861519\n            },\n            \"lng\": 103.849205,\n            \"id\": \"4f33ee67df21bf6bb7095b86\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.2861519,\n            \"created\": 1328803431.52243\n        },\n        \"4f33df6ea3affa7f10091849\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"2 meters per second\",\n                \"dewpoint\": \"70F\",\n                \"temperature\": \"79F\",\n                \"wind_direction\": \"93 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849152707777,\n                \"lnglat\": [\n                    103.849152707777,\n                    1.28618792453878\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28618792453878\n            },\n            \"lng\": 103.849152707777,\n            \"id\": \"4f33df6ea3affa7f10091849\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28618792453878,\n            \"created\": 1328799473.27879\n        },\n        \"4f3404e4830b3b135e09d655\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"0 meters per second\",\n                \"dewpoint\": \"71F\",\n                \"temperature\": \"79F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849087302163,\n                \"lnglat\": [\n                    103.849087302163,\n                    1.28617275889934\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28617275889934\n            },\n            \"lng\": 103.849087302163,\n            \"id\": \"4f3404e4830b3b135e09d655\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28617275889934,\n            \"created\": 1328809188.25508\n        },\n        \"4f3402c821c7ea4fc509bf51\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"0 meters per second\",\n                \"dewpoint\": \"71F\",\n                \"temperature\": \"79F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849085611037,\n                \"lnglat\": [\n                    103.849085611037,\n                    1.28623273672895\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28623273672895\n            },\n            \"lng\": 103.849085611037,\n            \"id\": \"4f3402c821c7ea4fc509bf51\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28623273672895,\n            \"created\": 1328808648.35581\n        },\n        \"4f33fc2af1f70e230b09b276\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"0 meters per second\",\n                \"dewpoint\": \"71F\",\n                \"temperature\": \"79F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849205,\n                \"lnglat\": [\n                    103.849205,\n                    1.2861766\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.2861766\n            },\n            \"lng\": 103.849205,\n            \"id\": \"4f33fc2af1f70e230b09b276\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.2861766,\n            \"created\": 1328806954.35806\n        },\n        \"4f33fd88df21bf6bbd09a387\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"0 meters per second\",\n                \"dewpoint\": \"71F\",\n                \"temperature\": \"79F\",\n                \"wind_direction\": \"0 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849152707777,\n                \"lnglat\": [\n                    103.849152707777,\n                    1.28618792453878\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28618792453878\n            },\n            \"lng\": 103.849152707777,\n            \"id\": \"4f33fd88df21bf6bbd09a387\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28618792453878,\n            \"created\": 1328807179.73663\n        },\n        \"4f338c52a3affa7ef607b5d2\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"6 meters per second\",\n                \"dewpoint\": \"62F\",\n                \"temperature\": \"87F\",\n                \"wind_direction\": \"98 degrees\"\n            },\n            \"elevation\": 41.0330467224121,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849224456241,\n                \"lnglat\": [\n                    103.849224456241,\n                    1.28616867611967\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28616867611967\n            },\n            \"accuracy\": 65,\n            \"lng\": 103.849224456241,\n            \"id\": \"4f338c52a3affa7ef607b5d2\",\n            \"elevation_accuracy\": 10.4602001292119,\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28616867611967,\n            \"created\": 1328778322.02391\n        },\n        \"4f33b224e7cf662ba2082b6b\": {\n            \"weather\": {\n                \"conditions\": \"Mostly cloudy\",\n                \"cloud_cover\": \"75%\",\n                \"wind_speed\": \"4 meters per second\",\n                \"dewpoint\": \"66F\",\n                \"temperature\": \"83F\",\n                \"wind_direction\": \"100 degrees\"\n            },\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849152707777,\n                \"elevation\": 41.0330467224121,\n                \"accuracy\": 76.2130243463154,\n                \"lnglat\": [\n                    103.849152707777,\n                    1.28618792453878\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28618792453878\n            },\n            \"lng\": 103.849152707777,\n            \"id\": \"4f33b224e7cf662ba2082b6b\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"lat\": 1.28618792453878,\n            \"created\": 1328787878.69412\n        }\n    },\n    \"moments\": [\n        {\n            \"photo\": {\n                \"photo\": {\n                    \"ios\": {\n                        \"2x\": {\n                            \"height\": 857,\n                            \"file\": \"2x.jpg\",\n                            \"width\": 640\n                        },\n                        \"1x\": {\n                            \"height\": 428,\n                            \"file\": \"1x.jpg\",\n                            \"width\": 320\n                        },\n                        \"2x_thumb\": {\n                            \"height\": 70,\n                            \"file\": \"2x_thumb.jpg\",\n                            \"width\": 52\n                        },\n                        \"1x_thumb\": {\n                            \"height\": 35,\n                            \"file\": \"1x_thumb.jpg\",\n                            \"width\": 26\n                        }\n                    },\n                    \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e\",\n                    \"original\": {\n                        \"height\": 1280,\n                        \"file\": \"original.jpg\",\n                        \"width\": 956\n                    }\n                }\n            },\n            \"visible_ts\": 1328809870.34917,\n            \"location\": {},\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"custom_id\": \"8AD4C376-FF77-4CD1-A483-6CA55D19CEF9\",\n            \"comments\": [\n                {\n                    \"body\": \"Hello\",\n                    \"id\": \"4f34078de7cf662b9d09e2d8\",\n                    \"user_id\": \"4f338c49f6b766128d011175\",\n                    \"location_id\": \"4f34078be7cf662b9d09e2d2\",\n                    \"moment_id\": \"4f34078de7cf662b9d09e2d7\",\n                    \"state\": \"live\",\n                    \"created\": 1328809735.59837\n                },\n                {\n                    \"body\": \"xdt\",\n                    \"id\": \"4f343a20d2bfa87b380074de\",\n                    \"user_id\": \"4f338c49f6b766128d011175\",\n                    \"location_id\": \"4f343a1fd2bfa87b380074dd\",\n                    \"moment_id\": \"4f34078de7cf662b9d09e2d7\",\n                    \"state\": \"live\",\n                    \"created\": 1328822815.94779\n                }\n            ],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"id\": \"4f34078de7cf662b9d09e2d7\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"photo\",\n            \"shared\": false,\n            \"location_id\": \"4f34078be7cf662b9d09e2d2\",\n            \"state\": \"live\",\n            \"short_hash\": \"1MGHsu\",\n            \"created\": 1328809735.59837\n        },\n        {\n            \"subheadline\": \"It's 1:39 AM, mostly cloudy, and 79°F. You know Clark Kent never racked 8 hours.\",\n            \"visible_ts\": 1328809188.52855,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.849087302163,\n                \"lnglat\": [\n                    103.849087302163,\n                    1.28617275889934\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.28617275889934\n            },\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"comments\": [],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"Awake in <b>Singapore</b>\",\n            \"id\": \"4f3404e4830b3b135e09d659\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"ambient\",\n            \"ambient\": {\n                \"duration\": 539.899270057678,\n                \"subheadline_string_key\": \"awake_sleepy_subheadline_3\",\n                \"url\": \"path://cities/4ea9f1f6d0bacc4f0800006d\",\n                \"subtype\": \"awake\"\n            },\n            \"shared\": false,\n            \"location_id\": \"4f3404e4830b3b135e09d655\",\n            \"state\": \"live\",\n            \"short_hash\": \"\",\n            \"created\": 1328809188.52855\n        },\n        {\n            \"subheadline\": \"It's 1:30 AM.\",\n            \"visible_ts\": 1328808648.63265,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.849085611037,\n                \"lnglat\": [\n                    103.849085611037,\n                    1.28623273672895\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.28623273672895\n            },\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"comments\": [],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"Sleeping in <b>Singapore</b>\",\n            \"id\": \"4f3402c821c7ea4fc509bf56\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"ambient\",\n            \"ambient\": {\n                \"url\": \"path://cities/4ea9f1f6d0bacc4f0800006d\",\n                \"subtype\": \"asleep\"\n            },\n            \"shared\": false,\n            \"location_id\": \"4f3402c821c7ea4fc509bf51\",\n            \"state\": \"live\",\n            \"short_hash\": \"\",\n            \"created\": 1328808648.63265\n        },\n        {\n            \"visible_ts\": 1328807305.14247,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.849152707777,\n                \"lnglat\": [\n                    103.849152707777,\n                    1.28618792453878\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.28618792453878\n            },\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"custom_id\": \"B608696F-7AD5-43CF-8260-9F8552FE1F7F\",\n            \"comments\": [],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"Bdjkskshsjs\",\n            \"id\": \"4f33fd89df21bf6bbd09a38a\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"thought\",\n            \"thought\": {\n                \"body\": \"Bdjkskshsjs\"\n            },\n            \"shared\": false,\n            \"location_id\": \"4f33fd88df21bf6bbd09a387\",\n            \"state\": \"live\",\n            \"short_hash\": \"2YYuKS\",\n            \"created\": 1328807179.73663\n        },\n        {\n            \"visible_ts\": 1328806954.77847,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.849205,\n                \"lnglat\": [\n                    103.849205,\n                    1.2861766\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.2861766\n            },\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"comments\": [],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"Fggfbh\",\n            \"id\": \"4f33fc2af1f70e230b09b278\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"thought\",\n            \"thought\": {\n                \"body\": \"Fggfbh\"\n            },\n            \"shared\": false,\n            \"location_id\": \"4f33fc2af1f70e230b09b276\",\n            \"state\": \"live\",\n            \"short_hash\": \"3YwulE\",\n            \"created\": 1328806954.77843\n        },\n        {\n            \"visible_ts\": 1328805423.91695,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.849152707777,\n                \"lnglat\": [\n                    103.849152707777,\n                    1.28618792453878\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.28618792453878\n            },\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"custom_id\": \"B243134A-881E-4CAB-96ED-4EEB1984F0B8\",\n            \"comments\": [],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"Ndkskdndm\",\n            \"id\": \"4f33f62f830b3b134d0982b8\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"thought\",\n            \"thought\": {\n                \"body\": \"Ndkskdndm\"\n            },\n            \"shared\": false,\n            \"location_id\": \"4f33f62e830b3b134d0982b3\",\n            \"state\": \"live\",\n            \"short_hash\": \"j0zS6\",\n            \"created\": 1328805298.16438\n        },\n        {\n            \"visible_ts\": 1328804554.87459,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.84907,\n                \"lnglat\": [\n                    103.84907,\n                    1.2862346\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.2862346\n            },\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"comments\": [],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"hsfadibmwr  dgh\",\n            \"id\": \"4f33f2caad495450df097c24\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"thought\",\n            \"thought\": {\n                \"body\": \"hsfadibmwr  dgh\"\n            },\n            \"shared\": false,\n            \"location_id\": \"4f33f2caad495450df097c21\",\n            \"state\": \"live\",\n            \"short_hash\": \"32oLC8\",\n            \"created\": 1328804554.87457\n        },\n        {\n            \"visible_ts\": 1328799598.43687,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.849152707777,\n                \"lnglat\": [\n                    103.849152707777,\n                    1.28618792453878\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.28618792453878\n            },\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"custom_id\": \"680431C2-9CDF-4845-886B-4F14596814D0\",\n            \"comments\": [\n                {\n                    \"body\": \"Fgjj\",\n                    \"id\": \"4f33ee63e7cf662ba2095fbc\",\n                    \"user_id\": \"4f338c49f6b766128d011175\",\n                    \"location_id\": \"4f33ee63e7cf662ba2095fb9\",\n                    \"moment_id\": \"4f33df6ea3affa7f1009184d\",\n                    \"state\": \"live\",\n                    \"created\": 1328803427.32585\n                },\n                {\n                    \"body\": \"Xjssj\",\n                    \"id\": \"4f33ee68df21bf6bb7095b8a\",\n                    \"user_id\": \"4f338c49f6b766128d011175\",\n                    \"location_id\": \"4f33ee67df21bf6bb7095b86\",\n                    \"moment_id\": \"4f33df6ea3affa7f1009184d\",\n                    \"state\": \"live\",\n                    \"created\": 1328803431.52243\n                }\n            ],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"Ronery\",\n            \"id\": \"4f33df6ea3affa7f1009184d\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"thought\",\n            \"thought\": {\n                \"body\": \"Ronery\"\n            },\n            \"shared\": false,\n            \"location_id\": \"4f33df6ea3affa7f10091849\",\n            \"state\": \"live\",\n            \"short_hash\": \"4sFvz5\",\n            \"created\": 1328799473.27879\n        },\n        {\n            \"visible_ts\": 1328788004.63025,\n            \"location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"province_name\": null,\n                \"lng\": 103.849152707777,\n                \"lnglat\": [\n                    103.849152707777,\n                    1.28618792453878\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"province\": null,\n                \"lat\": 1.28618792453878\n            },\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"custom_id\": \"56F485B9-296B-4232-AB90-58A5B6AD125F\",\n            \"comments\": [],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"I'm so ronery — at <b>Mescluns</b>.\",\n            \"id\": \"4f33b224e7cf662ba2082b6e\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"thought\",\n            \"thought\": {\n                \"body\": \"I'm so ronery\"\n            },\n            \"shared\": false,\n            \"location_id\": \"4f33b224e7cf662ba2082b6b\",\n            \"place\": {\n                \"id\": \"4bcd4dc50687ef3b31c6e0cc\"\n            },\n            \"state\": \"live\",\n            \"short_hash\": \"1VO2g7\",\n            \"created\": 1328787878.69412\n        },\n        {\n            \"visible_ts\": 1328778322.31011,\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"comments\": [\n                {\n                    \"body\": \"hcyp\",\n                    \"id\": \"4f343d00e7cf665070007834\",\n                    \"user_id\": \"4f338c49f6b766128d011175\",\n                    \"location_id\": \"4f343cfee7cf66507000782a\",\n                    \"moment_id\": \"4f338c52a3affa7ef607b5da\",\n                    \"state\": \"live\",\n                    \"created\": 1328823550.9533\n                }\n            ],\n            \"private\": false,\n            \"origin_location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849224456241,\n                \"lnglat\": [\n                    103.849224456241,\n                    1.28616867611967\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28616867611967\n            },\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"In <b>Singapore</b>\",\n            \"id\": \"4f338c52a3affa7ef607b5da\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"ambient\",\n            \"ambient\": {\n                \"origin_id\": \"4f338c52a3affa7ef607b5d2\",\n                \"url\": \"path://cities/4ea9f1f6d0bacc4f0800006d\",\n                \"icon\": \"driving\",\n                \"destination_id\": \"4f338c52a3affa7ef607b5d2\",\n                \"subtype\": \"distance\",\n                \"distance\": 0\n            },\n            \"shared\": false,\n            \"destination_location\": {\n                \"country_name\": \"Singapore\",\n                \"city\": \"Singapore\",\n                \"country\": \"SG\",\n                \"lng\": 103.849224456241,\n                \"lnglat\": [\n                    103.849224456241,\n                    1.28616867611967\n                ],\n                \"gc\": \"s\",\n                \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n                \"lat\": 1.28616867611967\n            },\n            \"state\": \"live\",\n            \"short_hash\": \"\",\n            \"created\": 1328778322.31011\n        },\n        {\n          \"visible_ts\": 1329749754.59701,\n          \"emotions\": {\n          \"total\": 0,\n          \"users\": [\n\n          ]\n          },\n          \"custom_id\": \"\",\n          \"comments\": [\n\n          ],\n          \"private\": false,\n          \"seen_its\": {\n          \"total\": 1\n          },\n          \"headline\": \"Friends with <b>Lee Yen Tan</b>\",\n          \"id\": \"4f425efaf6b7663dc8011d6e\",\n          \"user_id\": \"4ce11821c0ce28398e000003\",\n          \"type\": \"ambient\",\n          \"ambient\": {\n            \"url\": \"path://users/4f3ff09b9c6c3f41c90036a6\",\n            \"subtype\": \"friend\",\n            \"people\": [\n               {\n                 \"id\": \"4f3ff09b9c6c3f41c90036a6\",\n                 \"type\": \"path\"\n               }\n            ]\n          },\n          \"shared\": false,\n          \"state\": \"live\",\n          \"short_hash\": \"\",\n          \"created\": 1329749754.59701\n        },\n        {\n            \"subheadline\": \"On February 9th, 2012\",\n            \"visible_ts\": 1328778313.41825,\n            \"emotions\": {\n                \"total\": 0,\n                \"users\": []\n            },\n            \"custom_id\": \"\",\n            \"comments\": [],\n            \"private\": false,\n            \"seen_its\": {\n                \"total\": 1\n            },\n            \"headline\": \"Joined Path\",\n            \"id\": \"4f338c49f6b766128d011178\",\n            \"user_id\": \"4f338c49f6b766128d011175\",\n            \"type\": \"ambient\",\n            \"location_id\": \"4f34078be7cf662b9d09e2d2\",\n            \"ambient\": {\n                \"url\": \"path://users/4f338c49f6b766128d011175\",\n                \"subtype\": \"joined\"\n            },\n            \"thought\": \"this is cool\",\n            \"shared\": false,\n            \"state\": \"live\",\n            \"short_hash\": \"\",\n            \"created\": 1328778313.41825\n        }\n    ]\n}\n"
  },
  {
    "path": "JourneyTests/Fixtures/moments_feed_newer_than.json",
    "content": "{\n  \"places\": {\n    \"4b1f98aff964a5203c2724e3\": {\n      \"name\": \"Bukit Panjang Plaza\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"address\": \"1 Jelebu Rd\",\n        \"country\": \"Singapore\",\n        \"lng\": 103.764216899872,\n        \"postalCode\": \"677738\",\n        \"lat\": 1.38000256684719,\n        \"state\": \"Singapore\"\n      },\n      \"total_checkins\": 25,\n      \"tags\": [\n               \"bpp\",\n               \"bukit panjang plaza\",\n               \"mall\",\n               \"verified original\"\n               ],\n      \"id\": \"4b1f98aff964a5203c2724e3\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.764216899872,\n        \"lnglat\": [\n                   103.764216899872,\n                   1.38000256684719\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.38000256684719\n      },\n      \"createdAt\": 1260361903,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Mall\",\n                     \"name\": \"Mall\",\n                     \"parents\": [\n                                 \"Shops & Services\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d1fd941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/shops/default.png\",\n                     \"pluralName\": \"Malls\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/69D3aZ\"\n    }\n  },\n  \"sleep\": {\n    \"asleep_since\": null\n  },\n  \"cover\": {\n    \"photo\": {\n      \"ios\": {\n        \"2x\": {\n          \"height\": 640,\n          \"file\": \"2x.jpg\",\n          \"width\": 640\n        },\n        \"1x\": {\n          \"height\": 320,\n          \"file\": \"1x.jpg\",\n          \"width\": 320\n        }\n      },\n      \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19\",\n      \"web\": {\n        \"height\": 1031,\n        \"file\": \"web.jpg\",\n        \"width\": 1650\n      },\n      \"original\": {\n        \"height\": 1031,\n        \"file\": \"original.jpg\",\n        \"width\": 1650\n      }\n    },\n    \"filter\": \"PTLomoFilter\",\n    \"captured\": 1328778316.78812,\n    \"user\": {\n      \"joined\": 1328778313,\n      \"id\": \"4f338c49f6b766128d011175\"\n    },\n    \"state\": \"live\",\n    \"moments\": {\n      \"total\": 24\n    },\n    \"created\": 1328778316.78812\n  },\n  \"music\": {\n\n  },\n  \"users\": {\n    \"4e7300abd9b35960d0000024\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/2b19e5d6d55fc1e41aa135d29aa65a63d27c9e98\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-09-16 07:54:19\",\n      \"username\": \"janesh-janardhanan\",\n      \"is_incoming_request\": false,\n      \"id\": \"4e7300abd9b35960d0000024\",\n      \"gender\": \"male\",\n      \"last_name\": \"Janardhanan\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Janesh\"\n    },\n    \"4f368b2ccf42866f02004656\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/008a31c502cf2ddb4c49c015167100d3f856299b\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2012-02-11 15:37:16\",\n      \"username\": \"developer-bear\",\n      \"is_incoming_request\": false,\n      \"id\": \"4f368b2ccf42866f02004656\",\n      \"gender\": \"male\",\n      \"last_name\": \"Bear\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": true,\n      \"first_name\": \"Developer\"\n    },\n    \"4ed6331cbee9e75a2f0009a7\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/65e0aa8bb1abd8fb0831756e05a1be2b04dee6d4\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-11-30 13:43:56\",\n      \"username\": \"arun-thampi\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"gender\": \"male\",\n      \"last_name\": \"Thampi\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": true,\n      \"first_name\": \"Arun\"\n    },\n    \"4f338c49f6b766128d011175\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/bef62e4fdd1b2a4e1df408443fcb4e2cde6f2a03\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2012-02-09 09:05:13\",\n      \"username\": \"aloha-boss\",\n      \"is_incoming_request\": false,\n      \"id\": \"4f338c49f6b766128d011175\",\n      \"gender\": \"unspecified\",\n      \"last_name\": \"Boss\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": true,\n      \"first_name\": \"Aloha\"\n    }\n  },\n  \"locations\": {\n    \"4f3ce714df21bf578b03e0db\": {\n      \"weather\": {\n        \"conditions\": \"Thunderstorms\",\n        \"cloud_cover\": \"100%\",\n        \"wind_speed\": \"10.1 meters per second\",\n        \"dewpoint\": \"71F\",\n        \"temperature\": \"81F\",\n        \"wind_direction\": \"93 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849763256547,\n        \"lnglat\": [\n                   103.849763256547,\n                   1.28666165122906\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28666165122906\n      },\n      \"lng\": 103.849763256547,\n      \"id\": \"4f3ce714df21bf578b03e0db\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.28666165122906,\n      \"created\": 1329391380.5689\n    },\n    \"4f3ce707a3affa4e34040908\": {\n      \"weather\": {\n        \"conditions\": \"Thunderstorms\",\n        \"cloud_cover\": \"100%\",\n        \"wind_speed\": \"10.1 meters per second\",\n        \"dewpoint\": \"71F\",\n        \"temperature\": \"81F\",\n        \"wind_direction\": \"93 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849763256547,\n        \"lnglat\": [\n                   103.849763256547,\n                   1.28666165122906\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28666165122906\n      },\n      \"lng\": 103.849763256547,\n      \"id\": \"4f3ce707a3affa4e34040908\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.28666165122906,\n      \"created\": 1329391367.87638\n    },\n    \"4f34078be7cf662b9d09e2d2\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.84912140788,\n      \"id\": \"4f34078be7cf662b9d09e2d2\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.28617359750407,\n      \"created\": 1328809735.59837\n    },\n    \"4f3a87d7e9b6cc778f04063b\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.764428946675,\n      \"id\": \"4f3a87d7e9b6cc778f04063b\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38013865007761,\n      \"created\": 1329235940.48877\n    },\n    \"4f3a879da3affa48b90404a5\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.764428946675,\n      \"id\": \"4f3a879da3affa48b90404a5\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38013865007761,\n      \"created\": 1329235880.29355\n    },\n    \"4f3a87f4830b3b126b0405e1\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.764424973752,\n      \"id\": \"4f3a87f4830b3b126b0405e1\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38010008126864,\n      \"created\": 1329235956.77137\n    },\n    \"4f3a7c93a3affa48ba03c3b3\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"81F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.764441660707,\n        \"lnglat\": [\n                   103.764441660707,\n                   1.3802620768301\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.3802620768301\n      },\n      \"lng\": 103.764441660707,\n      \"id\": \"4f3a7c93a3affa48ba03c3b3\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.3802620768301,\n      \"created\": 1329233055.50958\n    },\n    \"4f37cdd2df21bf076b0eb1b7\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.764422519702,\n      \"id\": \"4f37cdd2df21bf076b0eb1b7\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.3800762575059,\n      \"created\": 1329057240.88476\n    },\n    \"4f343a1fd2bfa87b380074dd\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"2.2 meters per second\",\n        \"dewpoint\": \"75F\",\n        \"temperature\": \"77F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 41.0816497802734,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849133705997,\n        \"lnglat\": [\n                   103.849133705997,\n                   1.28618559888091\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28618559888091\n      },\n      \"accuracy\": 65.0,\n      \"lng\": 103.849133705997,\n      \"id\": \"4f343a1fd2bfa87b380074dd\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.28618559888091,\n      \"created\": 1328822815.94779\n    },\n    \"4f3a89e8d2bfa8396b0409ea\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.764423384578,\n      \"id\": \"4f3a89e8d2bfa8396b0409ea\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.3800846536979,\n      \"created\": 1329236468.41958\n    },\n    \"4f3a2f2ff1f70e38d1022aa5\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.849125402767,\n      \"id\": \"4f3a2f2ff1f70e38d1022aa5\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.28617146581744,\n      \"created\": 1329213101.77966\n    },\n    \"4f37c221df21bf077d0e7531\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.764456523005,\n      \"id\": \"4f37c221df21bf077d0e7531\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38063897971135,\n      \"created\": 1329054253.51085\n    },\n    \"4f37c180a3affa1a740e72ab\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"82F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 100.0,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.764428599806,\n        \"lnglat\": [\n                   103.764428599806,\n                   1.38067720877027\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.38067720877027\n      },\n      \"accuracy\": 894.084419203323,\n      \"lng\": 103.764428599806,\n      \"id\": \"4f37c180a3affa1a740e72ab\",\n      \"elevation_accuracy\": 32.0,\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38067720877027,\n      \"created\": 1329054080.71735\n    },\n    \"4f3a864dad4954365903f864\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"4.9 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"80F\",\n        \"wind_direction\": \"89 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.764441660036,\n        \"lnglat\": [\n                   103.764441660036,\n                   1.38026207034927\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.38026207034927\n      },\n      \"lng\": 103.764441660036,\n      \"id\": \"4f3a864dad4954365903f864\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38026207034927,\n      \"created\": 1329235540.15624\n    },\n    \"4f37ff19e9b6cc18670fa2ea\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"75F\",\n        \"temperature\": \"80F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.84766717855,\n        \"lnglat\": [\n                   103.84766717855,\n                   1.30089543668454\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30089543668454\n      },\n      \"lng\": 103.84766717855,\n      \"id\": \"4f37ff19e9b6cc18670fa2ea\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.30089543668454,\n      \"created\": 1329069712.96372\n    },\n    \"4f3a859621c7ea32f503f58a\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"4.9 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"80F\",\n        \"wind_direction\": \"89 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.84778909,\n        \"lnglat\": [\n                   103.84778909,\n                   1.30092216923077\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30092216923077\n      },\n      \"lng\": 103.84778909,\n      \"id\": \"4f3a859621c7ea32f503f58a\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.30092216923077,\n      \"created\": 1329235220.59465\n    },\n    \"4f3813efe7cf6670fb0ff3f6\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.847788777808,\n      \"id\": \"4f3813efe7cf6670fb0ff3f6\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.30103010611552,\n      \"created\": 1329075057.09071\n    },\n    \"4f37c2b0f1f70e3bf702d41b\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"82F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.764422570144,\n        \"lnglat\": [\n                   103.764422570144,\n                   1.38007628464673\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.38007628464673\n      },\n      \"lng\": 103.764422570144,\n      \"id\": \"4f37c2b0f1f70e3bf702d41b\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38007628464673,\n      \"created\": 1329054394.94027\n    },\n    \"4f3a8799ad4954368a04015b\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"4.9 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"80F\",\n        \"wind_direction\": \"89 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847825806667,\n        \"lnglat\": [\n                   103.847825806667,\n                   1.30098448444444\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30098448444444\n      },\n      \"lng\": 103.847825806667,\n      \"id\": \"4f3a8799ad4954368a04015b\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.30098448444444,\n      \"created\": 1329235731.11982\n    },\n    \"4f3a7c3cdf21bf70a703b49e\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.764441660707,\n      \"id\": \"4f3a7c3cdf21bf70a703b49e\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.3802620768301,\n      \"created\": 1329232963.58361\n    },\n    \"4f368b32ad49544a10092961\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"81F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 40.905460357666,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.762400898093,\n        \"lnglat\": [\n                   103.762400898093,\n                   1.38043168543138\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.38043168543138\n      },\n      \"accuracy\": 162.79815032032,\n      \"lng\": 103.762400898093,\n      \"id\": \"4f368b32ad49544a10092961\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38043168543138,\n      \"created\": 1328974642.76694\n    },\n    \"4f3a8905ad4954366e0404aa\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"4.9 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"80F\",\n        \"wind_direction\": \"89 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.764423384578,\n        \"lnglat\": [\n                   103.764423384578,\n                   1.3800846536979\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.3800846536979\n      },\n      \"lng\": 103.764423384578,\n      \"id\": \"4f3a8905ad4954366e0404aa\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.3800846536979,\n      \"created\": 1329236242.34964\n    },\n    \"4f3a8595ad4954368503f48b\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"4.9 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"80F\",\n        \"wind_direction\": \"89 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.764441660109,\n        \"lnglat\": [\n                   103.764441660109,\n                   1.38026207104782\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.38026207104782\n      },\n      \"lng\": 103.764441660109,\n      \"id\": \"4f3a8595ad4954368503f48b\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38026207104782,\n      \"created\": 1329235362.38528\n    },\n    \"4f3801d8f1f70e3bf7040d65\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"75F\",\n        \"temperature\": \"80F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 36.9355201721191,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847734647492,\n        \"lnglat\": [\n                   103.847734647492,\n                   1.30097376337777\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30097376337777\n      },\n      \"accuracy\": 163.849205279171,\n      \"lng\": 103.847734647492,\n      \"id\": \"4f3801d8f1f70e3bf7040d65\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.30097376337777,\n      \"created\": 1329070552.06314\n    },\n    \"4f37c17ad2bfa80cf80e70f9\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"82F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.76442950002,\n        \"lnglat\": [\n                   103.76442950002,\n                   1.38029134126881\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.38029134126881\n      },\n      \"lng\": 103.76442950002,\n      \"id\": \"4f37c17ad2bfa80cf80e70f9\",\n      \"user_id\": \"4f368b2ccf42866f02004656\",\n      \"lat\": 1.38029134126881,\n      \"created\": 1329054080.3676\n    },\n    \"4f3a8616ad4954366e03f32d\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.845305888097,\n      \"id\": \"4f3a8616ad4954366e03f32d\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"lat\": 1.30258156966455,\n      \"created\": 1329235349.46271\n    }\n  },\n  \"moments\": [\n    {\n      \"visible_ts\": 1329463171.21298,\n      \"emotions\": {\n        \"total\": 0,\n        \"users\": []\n      },\n      \"comments\": [],\n      \"private\": false,\n        \"seen_its\": {\n        \"total\": 1\n      },\n      \"headline\": \"ykvhct hvhc\",\n      \"id\": \"4f3dff83d2bfa8122f04eff2\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"type\": \"thought\",\n      \"thought\": {\n        \"body\": \"ykvhct hvhc\"\n      },\n      \"shared\": false,\n      \"state\": \"live\",\n      \"short_hash\": \"2kREwn\",\n      \"created\": 1329463171.21295\n    },\n    {\n      \"photo\": {\n        \"photo\": {\n          \"ios\": {\n            \"2x\": {\n              \"height\": 857,\n              \"file\": \"2x.jpg\",\n              \"width\": 640\n            },\n            \"1x\": {\n              \"height\": 428,\n              \"file\": \"1x.jpg\",\n              \"width\": 320\n            },\n            \"2x_thumb\": {\n              \"height\": 70,\n              \"file\": \"2x_thumb.jpg\",\n              \"width\": 52\n            },\n            \"1x_thumb\": {\n              \"height\": 35,\n              \"file\": \"1x_thumb.jpg\",\n              \"width\": 26\n            }\n          },\n          \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e\",\n          \"original\": {\n            \"height\": 1280,\n            \"file\": \"original.jpg\",\n            \"width\": 956\n          }\n        }\n      },\n      \"visible_ts\": 1328809870.34917,\n      \"location\": {},\n      \"emotions\": {\n      \"total\": 0,\n      \"users\": []\n    },\n    \"custom_id\": \"8AD4C376-FF77-4CD1-A483-6CA55D19CEF9\",\n    \"comments\": [\n       {\n         \"body\": \"Hello\",\n         \"id\": \"4f34078de7cf662b9d09e2d8\",\n         \"user_id\": \"4f338c49f6b766128d011175\",\n         \"location_id\": \"4f34078be7cf662b9d09e2d2\",\n         \"moment_id\": \"4f34078de7cf662b9d09e2d7\",\n         \"state\": \"live\",\n         \"created\": 1328809735.59837\n       },\n       {\n         \"body\": \"xdt\",\n         \"id\": \"4f343a20d2bfa87b380074de\",\n         \"user_id\": \"4f338c49f6b766128d011175\",\n         \"location_id\": \"4f343a1fd2bfa87b380074dd\",\n         \"moment_id\": \"4f34078de7cf662b9d09e2d7\",\n         \"state\": \"live\",\n         \"created\": 1328822815.94779\n       }\n    ],\n    \"private\": false,\n    \"seen_its\": {\n      \"total\": 1\n    },\n    \"id\": \"4f34078de7cf662b9d09e2d7\",\n    \"user_id\": \"4f338c49f6b766128d011175\",\n    \"type\": \"photo\",\n    \"shared\": false,\n    \"location_id\": \"4f34078be7cf662b9d09e2d2\",\n    \"state\": \"live\",\n    \"short_hash\": \"1MGHsu\",\n    \"created\": 1328809735.59837\n    }\n  ]\n}"
  },
  {
    "path": "JourneyTests/Fixtures/moments_feed_older_than.json",
    "content": "{\n  \"places\": {\n    \"4b05880bf964a520faad22e3\": {\n      \"name\": \"Molly Malone's Irish Pub\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"address\": \"56 Circular Road\",\n        \"country\": \"Singapore\",\n        \"lng\": 103.849356,\n        \"postalCode\": \"049411\",\n        \"lat\": 1.28595072394012,\n        \"state\": \"Singapore\"\n      },\n      \"total_checkins\": 2,\n      \"id\": \"4b05880bf964a520faad22e3\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.849356,\n        \"lnglat\": [\n                   103.849356,\n                   1.28595072394012\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.28595072394012\n      },\n      \"createdAt\": 1258653707,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Bar\",\n                     \"name\": \"Bar\",\n                     \"parents\": [\n                                 \"Nightlife Spots\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d116941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/nightlife/bar.png\",\n                     \"pluralName\": \"Bars\"\n                     },\n                     {\n                     \"shortName\": \"Pub\",\n                     \"name\": \"Pub\",\n                     \"parents\": [\n                                 \"Nightlife Spots\"\n                                 ],\n                     \"id\": \"4bf58dd8d48988d11b941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/nightlife/pub.png\",\n                     \"pluralName\": \"Pubs\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/caRoAn\"\n    },\n    \"4bb1f811f964a52069ae3ce3\": {\n      \"name\": \"Thai Smile Cafe\",\n      \"location\": {\n        \"lng\": 103.848888874054,\n        \"lat\": 1.286781\n      },\n      \"tags\": [\n               \"chinese\",\n               \"kopi tiam\",\n               \"thai\",\n               \"thai and chinese cuisine\",\n               \"thai and chinese food\",\n               \"thai cuisine\",\n               \"thai food\"\n               ],\n      \"id\": \"4bb1f811f964a52069ae3ce3\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.848888874054,\n        \"lnglat\": [\n                   103.848888874054,\n                   1.286781\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.286781\n      },\n      \"createdAt\": 1269954577,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Thai\",\n                     \"name\": \"Thai Restaurant\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d149941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/default.png\",\n                     \"pluralName\": \"Thai Restaurants\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/byVtlC\"\n    },\n    \"4ef56a5c29c2683187c7706f\": {\n      \"name\": \"Sophia Mansions\",\n      \"location\": {\n        \"lng\": 103.847847,\n        \"lat\": 1.301056,\n        \"distance\": 0\n      },\n      \"total_checkins\": 14,\n      \"id\": \"4ef56a5c29c2683187c7706f\",\n      \"lnglat\": [\n                 103.847847,\n                 1.301056\n                 ],\n      \"createdAt\": 1324706396,\n      \"city_id\": \"4eb18bc6d0bacc647500274d\",\n      \"shortUrl\": \"http://4sq.com/v6YzrB\"\n    },\n    \"4c0717b8b4aa0f47fb356562\": {\n      \"name\": \"Molly Roffey's @ Plaza By The Park\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"address\": \"51 Bras Basah Road, #01-02A, Plaza By The Park\",\n        \"country\": \"Singapore\",\n        \"lng\": 103.850240707397,\n        \"crossStreet\": \"next to Singapore Art Museum\",\n        \"postalCode\": \"189554\",\n        \"lat\": 1.29748548604041,\n        \"state\": \"SIngapore\"\n      },\n      \"total_checkins\": 2,\n      \"tags\": [\n               \"european food\",\n               \"irish food\"\n               ],\n      \"id\": \"4c0717b8b4aa0f47fb356562\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.850240707397,\n        \"lnglat\": [\n                   103.850240707397,\n                   1.29748548604041\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.29748548604041\n      },\n      \"createdAt\": 1275533240,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Pub\",\n                     \"name\": \"Pub\",\n                     \"parents\": [\n                                 \"Nightlife Spots\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d11b941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/nightlife/pub.png\",\n                     \"pluralName\": \"Pubs\"\n                     },\n                     {\n                     \"shortName\": \"Other - Food\",\n                     \"name\": \"Restaurant\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"id\": \"4bf58dd8d48988d1c4941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/default.png\",\n                     \"pluralName\": \"Restaurants\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/bhiP5L\"\n    },\n    \"4d8d9a01d4ec8cfae3065e89\": {\n      \"name\": \"The House of Robert Timms\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"address\": \"333 Orchard Road Orchard Shopping Centre\",\n        \"lng\": 103.837666511536,\n        \"postalCode\": \"238867\",\n        \"lat\": 1.30172496767094,\n        \"state\": \"Singapore\"\n      },\n      \"total_checkins\": 4,\n      \"id\": \"4d8d9a01d4ec8cfae3065e89\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.837666511536,\n        \"lnglat\": [\n                   103.837666511536,\n                   1.30172496767094\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.30172496767094\n      },\n      \"createdAt\": 1301125633,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Australian\",\n                     \"name\": \"Australian Restaurant\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d169941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/australian.png\",\n                     \"pluralName\": \"Australian Restaurants\"\n                     },\n                     {\n                     \"shortName\": \"American\",\n                     \"name\": \"American Restaurant\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"id\": \"4bf58dd8d48988d14e941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/default.png\",\n                     \"pluralName\": \"American Restaurants\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/dFLCsa\"\n    },\n    \"4ca076de7c096dcbf7e7e6d1\": {\n      \"name\": \"Blk 891A Woodlands drive 50\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"lng\": 103.790972,\n        \"lat\": 1.437486\n      },\n      \"tags\": [\n               \"http://www.facebook.com/#!/profile.php?id=703204092\"\n               ],\n      \"id\": \"4ca076de7c096dcbf7e7e6d1\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.790972,\n        \"lnglat\": [\n                   103.790972,\n                   1.437486\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.437486\n      },\n      \"createdAt\": 1285584606,\n      \"shortUrl\": \"http://4sq.com/a8CSPJ\"\n    },\n    \"4c01653df7ab0f470f0916b6\": {\n      \"name\": \"Akbar's The Grand\",\n      \"location\": {\n        \"city\": \"Leeds\",\n        \"address\": \"Greek St.\",\n        \"country\": \"United Kingdom\",\n        \"lng\": -1.54877185821533,\n        \"postalCode\": \"LS1 5RU\",\n        \"lat\": 53.7982175731294,\n        \"state\": \"West Yorkshire\"\n      },\n      \"contact\": {\n        \"phone\": \"+441132425426\",\n        \"formattedPhone\": \"+44 113 242 5426\"\n      },\n      \"id\": \"4c01653df7ab0f470f0916b6\",\n      \"path_location\": {\n        \"country_name\": \"United Kingdom\",\n        \"city\": \"Leeds\",\n        \"country\": \"GB\",\n        \"province_name\": \"West Yorkshire\",\n        \"lng\": -1.54877185821533,\n        \"lnglat\": [\n                   -1.54877185821533,\n                   53.7982175731294\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ec2de906a9eba193000003f\",\n        \"province\": \"West Yorkshire\",\n        \"lat\": 53.7982175731294\n      },\n      \"createdAt\": 1275159869,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Indian\",\n                     \"name\": \"Indian Restaurant\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d10f941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/indian.png\",\n                     \"pluralName\": \"Indian Restaurants\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/cdpZr2\"\n    },\n    \"4ee81b0d9a52792fdc30984d\": {\n      \"name\": \"Anideo HQ\",\n      \"location\": {\n        \"lng\": 103.849074,\n        \"lat\": 1.286164,\n        \"distance\": 0\n      },\n      \"total_checkins\": 1,\n      \"id\": \"4ee81b0d9a52792fdc30984d\",\n      \"lnglat\": [\n                 103.849074,\n                 1.286164\n                 ],\n      \"createdAt\": 1323834125,\n      \"city_id\": \"4eb18bc6d0bacc647500274d\",\n      \"shortUrl\": \"http://4sq.com/vu342i\"\n    },\n    \"4eaacf9c8b8180c90b8e7bda\": {\n      \"name\": \"Shaw Theatres Imax @ Lido Level 5\",\n      \"location\": {\n        \"lng\": 103.83178699498,\n        \"lat\": 1.30497196989667,\n        \"state\": \"Singapore\"\n      },\n      \"id\": \"4eaacf9c8b8180c90b8e7bda\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.83178699498,\n        \"lnglat\": [\n                   103.83178699498,\n                   1.30497196989667\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.30497196989667\n      },\n      \"createdAt\": 1319817116,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Movie Theater\",\n                     \"name\": \"Movie Theater\",\n                     \"parents\": [\n                                 \"Arts & Entertainment\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d17f941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/arts_entertainment/movietheater.png\",\n                     \"pluralName\": \"Movie Theaters\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/uuGiLp\"\n    },\n    \"4c677c4e7abde21ea3e96668\": {\n      \"name\": \"Artichoke\",\n      \"location\": {\n        \"address\": \"Sculpture Square\",\n        \"lng\": 103.851993,\n        \"lat\": 1.299764\n      },\n      \"total_checkins\": 6,\n      \"id\": \"4c677c4e7abde21ea3e96668\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.851993,\n        \"lnglat\": [\n                   103.851993,\n                   1.299764\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.299764\n      },\n      \"createdAt\": 1281850446,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Café\",\n                     \"name\": \"Café\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d16d941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/cafe.png\",\n                     \"pluralName\": \"Cafés\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/9QGwvP\"\n    },\n    \"4b17aae7f964a520f3c623e3\": {\n      \"name\": \"Wheelock Place\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"address\": \"501 Orchard Rd\",\n        \"lng\": 103.831186294556,\n        \"postalCode\": \"238880\",\n        \"lat\": 1.30464245626679,\n        \"state\": \"Singapore\"\n      },\n      \"total_checkins\": 5,\n      \"tags\": [\n               \"apparel\",\n               \"books\",\n               \"food\",\n               \"mall\",\n               \"offices\",\n               \"restaurants\",\n               \"verified original\",\n               \"wheelock place\"\n               ],\n      \"id\": \"4b17aae7f964a520f3c623e3\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.831186294556,\n        \"lnglat\": [\n                   103.831186294556,\n                   1.30464245626679\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.30464245626679\n      },\n      \"createdAt\": 1259842279,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Mall\",\n                     \"name\": \"Mall\",\n                     \"parents\": [\n                                 \"Shops & Services\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d1fd941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/shops/default.png\",\n                     \"pluralName\": \"Malls\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/55G8c4\"\n    },\n    \"4f3330b8e4b0d65e601dc7e9\": {\n      \"name\": \"Baja Fresh\",\n      \"location\": {\n        \"country\": \"Singapore\",\n        \"lng\": 103.851252,\n        \"lat\": 1.297839,\n        \"distance\": 0\n      },\n      \"total_checkins\": 1,\n      \"id\": \"4f3330b8e4b0d65e601dc7e9\",\n      \"lnglat\": [\n                 103.851252,\n                 1.297839\n                 ],\n      \"createdAt\": 1328754872,\n      \"city_id\": \"4f18a85fd2bfa81b2b000e4c\",\n      \"shortUrl\": \"http://4sq.com/w18mIv\"\n    },\n    \"4b2c6299f964a52088c624e3\": {\n      \"name\": \"Murugan Idli Shop\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"address\": \"Syed Alwi Road\",\n        \"lng\": 103.856157660484,\n        \"crossStreet\": \"Serangoon Road\",\n        \"lat\": 1.309143,\n        \"state\": \"Singapore\"\n      },\n      \"id\": \"4b2c6299f964a52088c624e3\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.856157660484,\n        \"lnglat\": [\n                   103.856157660484,\n                   1.309143\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.309143\n      },\n      \"createdAt\": 1261200025,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Indian\",\n                     \"name\": \"Indian Restaurant\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d10f941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/indian.png\",\n                     \"pluralName\": \"Indian Restaurants\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/abPIDj\"\n    },\n    \"4b168115f964a520ccb923e3\": {\n      \"name\": \"Block 210 Hougang St 21\",\n      \"location\": {\n        \"city\": \"Kovan\",\n        \"isFuzzed\": true,\n        \"lng\": 103.885400718162,\n        \"lat\": 1.35910128457211,\n        \"state\": \"Singapore\"\n      },\n      \"tags\": [\n               \"apartment\",\n               \"shops\"\n               ],\n      \"id\": \"4b168115f964a520ccb923e3\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.885400718162,\n        \"lnglat\": [\n                   103.885400718162,\n                   1.35910128457211\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.35910128457211\n      },\n      \"createdAt\": 1259766037,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Home\",\n                     \"name\": \"Home\",\n                     \"parents\": [\n                                 \"Residences\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d103941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/building/home.png\",\n                     \"pluralName\": \"Homes\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/9g62pj\"\n    },\n    \"4b05880df964a5204fae22e3\": {\n      \"name\": \"Spice Junction\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"address\": \"126 Race Course Road\",\n        \"lng\": 103.8521345,\n        \"postalCode\": \"218585\",\n        \"lat\": 1.3095882,\n        \"state\": \"Singapore\"\n      },\n      \"total_checkins\": 1,\n      \"contact\": {\n        \"phone\": \"6563417980\",\n        \"formattedPhone\": \"6341 7980\"\n      },\n      \"id\": \"4b05880df964a5204fae22e3\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.8521345,\n        \"lnglat\": [\n                   103.8521345,\n                   1.3095882\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.3095882\n      },\n      \"createdAt\": 1258653709,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Indian\",\n                     \"name\": \"Indian Restaurant\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d10f941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/indian.png\",\n                     \"pluralName\": \"Indian Restaurants\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/dd2Jrz\"\n    },\n    \"4b2cbfe7f964a520fec824e3\": {\n      \"name\": \"Skinny Pizza\",\n      \"location\": {\n        \"city\": \"Singapore\",\n        \"address\": \"501 Orchard Road #03-04/04A\",\n        \"country\": \"Singapore\",\n        \"lng\": 103.830564022064,\n        \"crossStreet\": \"Wheelock Place\",\n        \"postalCode\": \"238880\",\n        \"lat\": 1.3047711689211\n      },\n      \"total_checkins\": 2,\n      \"contact\": {\n        \"phone\": \"62357823\",\n        \"formattedPhone\": \"6235 7823\"\n      },\n      \"tags\": [\n               \"brooklyn\",\n               \"douchebag\",\n               \"frat boys\",\n               \"pizza\",\n               \"ski area\",\n               \"socialite\"\n               ],\n      \"id\": \"4b2cbfe7f964a520fec824e3\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.830564022064,\n        \"lnglat\": [\n                   103.830564022064,\n                   1.3047711689211\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.3047711689211\n      },\n      \"createdAt\": 1261223911,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Pizza\",\n                     \"name\": \"Pizza Place\",\n                     \"parents\": [\n                                 \"Food\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d1ca941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/food/pizza.png\",\n                     \"pluralName\": \"Pizza Places\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/84NuXs\"\n    },\n    \"4ca93cb576d3a0933d3e1e6b\": {\n      \"name\": \"Bedok Reservoir Park\",\n      \"location\": {\n        \"lng\": 103.933608770878,\n        \"lat\": 1.33938713449321\n      },\n      \"total_checkins\": 8,\n      \"id\": \"4ca93cb576d3a0933d3e1e6b\",\n      \"path_location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"province_name\": null,\n        \"lng\": 103.933608770878,\n        \"lnglat\": [\n                   103.933608770878,\n                   1.33938713449321\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"province\": null,\n        \"lat\": 1.33938713449321\n      },\n      \"createdAt\": 1286159541,\n      \"categories\": [\n                     {\n                     \"shortName\": \"Park\",\n                     \"name\": \"Park\",\n                     \"parents\": [\n                                 \"Great Outdoors\"\n                                 ],\n                     \"primary\": true,\n                     \"id\": \"4bf58dd8d48988d163941735\",\n                     \"icon\": \"https://foursquare.com/img/categories/parks_outdoors/default.png\",\n                     \"pluralName\": \"Parks\"\n                     }\n                     ],\n      \"shortUrl\": \"http://4sq.com/9WqcN6\"\n    }\n  },\n  \"sleep\": {\n    \"asleep_since\": null\n  },\n  \"cover\": {\n    \"photo\": {\n      \"ios\": {\n        \"2x\": {\n          \"height\": 640,\n          \"file\": \"2x.jpg\",\n          \"width\": 640\n        },\n        \"1x\": {\n          \"height\": 320,\n          \"file\": \"1x.jpg\",\n          \"width\": 320\n        }\n      },\n      \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19\",\n      \"web\": {\n        \"height\": 1031,\n        \"file\": \"web.jpg\",\n        \"width\": 1650\n      },\n      \"original\": {\n        \"height\": 1031,\n        \"file\": \"original.jpg\",\n        \"width\": 1650\n      }\n    },\n    \"filter\": \"PTLomoFilter\",\n    \"captured\": 1328778316.78812,\n    \"user\": {\n      \"joined\": 1328778313,\n      \"id\": \"4f338c49f6b766128d011175\"\n    },\n    \"state\": \"live\",\n    \"moments\": {\n      \"total\": 24\n    },\n    \"created\": 1328778316.78812\n  },\n  \"music\": {\n\n  },\n  \"users\": {\n    \"4edd68dc6c18395c2e00155d\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/eec5ab83c4cfcfb881de078f34a39b115f19ad20\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-12-06 00:59:08\",\n      \"username\": \"mazur-mike\",\n      \"is_incoming_request\": false,\n      \"id\": \"4edd68dc6c18395c2e00155d\",\n      \"gender\": \"male\",\n      \"last_name\": \"Mazur\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Mike\"\n    },\n    \"4ed72202271af160e200115f\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/79b52bce435f17bc1c0b05a72091ca3f55514a06\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-12-01 06:43:14\",\n      \"username\": \"nguyen-kent\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ed72202271af160e200115f\",\n      \"gender\": \"male\",\n      \"last_name\": \"Nguyen\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Kent\"\n    },\n    \"4ce7ed37337381410c000bc2\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"160_160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"80_80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/users/4ce7ed37337381410c000bc2/photos/7fee3f56367ffd414f390410a3a9e49bdeafd420\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"160_160.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2010-11-20 15:45:59\",\n      \"username\": \"choon-keat-chew\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ce7ed37337381410c000bc2\",\n      \"gender\": \"male\",\n      \"last_name\": \"Chew\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Choon Keat\"\n    },\n    \"4efc6c55633890092c011f94\": {\n      \"created_at\": \"2011-12-29 13:34:13\",\n      \"username\": \"ged-lim\",\n      \"is_incoming_request\": false,\n      \"id\": \"4efc6c55633890092c011f94\",\n      \"gender\": \"female\",\n      \"last_name\": \"Lim\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Ged\"\n    },\n    \"4ed79fae6c183938a60031e4\": {\n      \"created_at\": \"2011-12-01 15:39:26\",\n      \"username\": \"aj-solimine\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ed79fae6c183938a60031e4\",\n      \"gender\": \"male\",\n      \"last_name\": \"Solimine\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"AJ\"\n    },\n    \"4f0c38bbcf4286344e002fda\": {\n      \"created_at\": \"2012-01-10 13:10:19\",\n      \"username\": \"ajay-thampi\",\n      \"is_incoming_request\": false,\n      \"id\": \"4f0c38bbcf4286344e002fda\",\n      \"gender\": \"male\",\n      \"last_name\": \"Thampi\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Ajay\"\n    },\n    \"4eeda1b3ad49542633022fe4\": {\n      \"is_incoming_request\": false,\n      \"id\": \"4eeda1b3ad49542633022fe4\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"type\": \"address\",\n      \"last_name\": \"Thampy\",\n      \"primary_network\": \"address\",\n      \"is_outgoing_request\": false,\n      \"is_friend\": false,\n      \"first_name\": \"Vijay\"\n    },\n    \"4ce0de8656a3580638000032\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/1bce21f55388788094eddb4ff38242f51a26bb82\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2010-11-15 07:17:26\",\n      \"username\": \"cheeaun\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ce0de8656a3580638000032\",\n      \"gender\": \"male\",\n      \"last_name\": \"Lim\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Chee Aun\"\n    },\n    \"4eeda1b3ad49542633022fe5\": {\n      \"is_incoming_request\": false,\n      \"id\": \"4eeda1b3ad49542633022fe5\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"type\": \"address\",\n      \"last_name\": \"Menon\",\n      \"primary_network\": \"address\",\n      \"is_outgoing_request\": false,\n      \"is_friend\": false,\n      \"first_name\": \"Shibu\"\n    },\n    \"4ed5e5e4271af107c80001b3\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/95d6c002658875ce9115383f5825fa0f2ff196bc\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-11-30 08:14:28\",\n      \"username\": \"vishnu-prem\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ed5e5e4271af107c80001b3\",\n      \"gender\": \"male\",\n      \"last_name\": \"Prem\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Vishnu\"\n    },\n    \"4ce10bfec0ce2806f0000242\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/e832ead903565a9fc7984e291662166b94df84d9\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2010-11-15 10:31:26\",\n      \"username\": \"redhae\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ce10bfec0ce2806f0000242\",\n      \"gender\": \"male\",\n      \"last_name\": \"E\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Redha\"\n    },\n    \"4eef212b63389069800018eb\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/7194b2d4573fbdeb3ae3b56a2ae6d7545098c8c7\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-12-19 11:34:03\",\n      \"username\": \"joonian-wong\",\n      \"is_incoming_request\": false,\n      \"id\": \"4eef212b63389069800018eb\",\n      \"gender\": \"male\",\n      \"last_name\": \"Wong\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Joon Ian\"\n    },\n    \"4eeda1b3ad49542633022fe6\": {\n      \"is_incoming_request\": false,\n      \"id\": \"4eeda1b3ad49542633022fe6\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"type\": \"address\",\n      \"last_name\": \"Vinodan\",\n      \"primary_network\": \"address\",\n      \"is_outgoing_request\": false,\n      \"is_friend\": false,\n      \"first_name\": \"Meera\"\n    },\n    \"4f2948739c6c3f3b9f01da4d\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/83d27b5cac82903321291a20bcf8809589034405\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2012-02-01 14:13:07\",\n      \"username\": \"ctrlalt-reboot\",\n      \"is_incoming_request\": false,\n      \"id\": \"4f2948739c6c3f3b9f01da4d\",\n      \"gender\": \"male\",\n      \"last_name\": \"reboot\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"ctrlalt\"\n    },\n    \"4eeb6810df21bf256e016837\": {\n      \"is_incoming_request\": false,\n      \"id\": \"4eeb6810df21bf256e016837\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"type\": \"address\",\n      \"last_name\": \"Thampi\",\n      \"primary_network\": \"address\",\n      \"is_outgoing_request\": false,\n      \"is_friend\": false,\n      \"first_name\": \"Ajay\",\n      \"email\": \"ajay.thampi@gmail.com\"\n    },\n    \"4ed6331cbee9e75a2f0009a7\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/65e0aa8bb1abd8fb0831756e05a1be2b04dee6d4\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-11-30 13:43:56\",\n      \"username\": \"arun-thampi\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"gender\": \"male\",\n      \"last_name\": \"Thampi\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": true,\n      \"first_name\": \"Arun\"\n    },\n    \"4ce0e84db3bf570d07000012\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/001891c04439d7ffd7570da69c8701d3f02e100e\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2010-11-15 07:59:09\",\n      \"username\": \"chu-yeow-cheah\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ce0e84db3bf570d07000012\",\n      \"gender\": \"male\",\n      \"last_name\": \"Cheah\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Chu Yeow\"\n    },\n    \"4f338c49f6b766128d011175\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/bef62e4fdd1b2a4e1df408443fcb4e2cde6f2a03\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2012-02-09 09:05:13\",\n      \"username\": \"aloha-boss\",\n      \"is_incoming_request\": false,\n      \"id\": \"4f338c49f6b766128d011175\",\n      \"gender\": \"unspecified\",\n      \"last_name\": \"Boss\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Aloha\"\n    },\n    \"4ee8ed159c6c3f758a0073fb\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/1c72550d2c4f8b88a407c027ca12c3008edabae3\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-12-14 18:38:13\",\n      \"username\": \"skyfish81\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ee8ed159c6c3f758a0073fb\",\n      \"gender\": \"male\",\n      \"last_name\": \"Tan\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Ryan\"\n    },\n    \"4ee8b2ecf5f1a245e100b950\": {\n      \"photo\": {\n        \"ios\": {\n          \"2x\": {\n            \"height\": 160,\n            \"file\": \"processed_160x160.jpg\",\n            \"width\": 160\n          },\n          \"1x\": {\n            \"height\": 80,\n            \"file\": \"processed_80x80.jpg\",\n            \"width\": 80\n          }\n        },\n        \"url\": \"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/9d51d41c5efa1cbccac87f1a8423628b768eba8e\",\n        \"version\": 3,\n        \"original\": {\n          \"height\": 160,\n          \"file\": \"original.jpg\",\n          \"width\": 160\n        }\n      },\n      \"created_at\": \"2011-12-14 14:30:04\",\n      \"username\": \"sneha-menon\",\n      \"is_incoming_request\": false,\n      \"id\": \"4ee8b2ecf5f1a245e100b950\",\n      \"gender\": \"female\",\n      \"last_name\": \"Menon\",\n      \"primary_network\": \"path\",\n      \"is_outgoing_request\": false,\n      \"state\": \"enabled\",\n      \"is_friend\": false,\n      \"first_name\": \"Sneha\"\n    }\n  },\n  \"locations\": {\n    \"4f1af7d7df21bf219103fb31\": {\n      \"elevation\": 131.684783935547,\n      \"location\": {\n\n      },\n      \"accuracy\": 102.727527631698,\n      \"lng\": 101.666945861663,\n      \"id\": \"4f1af7d7df21bf219103fb31\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4eef212b63389069800018eb\",\n      \"lat\": 3.144825795885,\n      \"created\": 1327167446.72066\n    },\n    \"4efc9cb4830b3b7e3c02f633\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"3.4 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"77F\",\n        \"wind_direction\": \"330 degrees\"\n      },\n      \"elevation\": 34.8048095703125,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.803365672283,\n        \"lnglat\": [\n                   103.803365672283,\n                   1.44410023372248\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.44410023372248\n      },\n      \"accuracy\": 81.117253793434,\n      \"lng\": 103.803365672283,\n      \"id\": \"4efc9cb4830b3b7e3c02f633\",\n      \"elevation_accuracy\": 14.4288816944739,\n      \"user_id\": \"4ed5e5e4271af107c80001b3\",\n      \"lat\": 1.44410023372248,\n      \"created\": 1325178046.53904\n    },\n    \"4eeff603a3affa4224004d66\": {\n      \"elevation\": 67.4194412231445,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.799583916752,\n        \"lnglat\": [\n                   103.799583916752,\n                   1.27448677892498\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.27448677892498\n      },\n      \"accuracy\": 65.0,\n      \"lng\": 103.799583916752,\n      \"id\": \"4eeff603a3affa4224004d66\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4ee8b2ecf5f1a245e100b950\",\n      \"lat\": 1.27448677892498,\n      \"created\": 1324348931.73957\n    },\n    \"4eece333f1f70e7e12010d35\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"5.8 meters per second\",\n        \"dewpoint\": \"77F\",\n        \"temperature\": \"81F\",\n        \"wind_direction\": \"70 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847850498018,\n        \"lnglat\": [\n                   103.847850498018,\n                   1.30075341528096\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30075341528096\n      },\n      \"lng\": 103.847850498018,\n      \"id\": \"4eece333f1f70e7e12010d35\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30075341528096,\n      \"created\": 1324147507.48541\n    },\n    \"4f3330d2df21bf6bbd060b4a\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"70F\",\n        \"temperature\": \"82F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.851251501817,\n        \"lnglat\": [\n                   103.851251501817,\n                   1.29783873172136\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.29783873172136\n      },\n      \"lng\": 103.851251501817,\n      \"id\": \"4f3330d2df21bf6bbd060b4a\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.29783873172136,\n      \"created\": 1328754759.14902\n    },\n    \"4effa6f0f1f70e5a4a03e290\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"3.4 meters per second\",\n        \"dewpoint\": \"77F\",\n        \"temperature\": \"79F\",\n        \"wind_direction\": \"50 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847753551692,\n        \"lnglat\": [\n                   103.847753551692,\n                   1.30098286217652\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30098286217652\n      },\n      \"lng\": 103.847753551692,\n      \"id\": \"4effa6f0f1f70e5a4a03e290\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30098286217652,\n      \"created\": 1325377264.21649\n    },\n    \"4eef8aeef1f70e7e1204d0ba\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847704770845,\n        \"lnglat\": [\n                   103.847704770845,\n                   1.30085158988471\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30085158988471\n      },\n      \"lng\": 103.847704770845,\n      \"id\": \"4eef8aeef1f70e7e1204d0ba\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30085158988471,\n      \"created\": 1324321518.70545\n    },\n    \"4efca041d2bfa83ee202fc7c\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"1.1 meters per second\",\n        \"dewpoint\": \"72F\",\n        \"temperature\": \"79F\",\n        \"wind_direction\": \"20 degrees\"\n      },\n      \"elevation\": 34.7263946533203,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847806698618,\n        \"lnglat\": [\n                   103.847806698618,\n                   1.30106863328928\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30106863328928\n      },\n      \"accuracy\": 65.0,\n      \"lng\": 103.847806698618,\n      \"id\": \"4efca041d2bfa83ee202fc7c\",\n      \"elevation_accuracy\": 10.7663832620301,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30106863328928,\n      \"created\": 1325178863.70922\n    },\n    \"4ef1586ae9b6cc3c09009fbb\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"74F\",\n        \"temperature\": \"82F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849179730924,\n        \"lnglat\": [\n                   103.849179730924,\n                   1.28614646548527\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28614646548527\n      },\n      \"lng\": 103.849179730924,\n      \"id\": \"4ef1586ae9b6cc3c09009fbb\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.28614646548527,\n      \"created\": 1324439586.46334\n    },\n    \"4eefcf29df21bf546e000797\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847701099024,\n        \"lnglat\": [\n                   103.847701099024,\n                   1.30085652379322\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30085652379322\n      },\n      \"lng\": 103.847701099024,\n      \"id\": \"4eefcf29df21bf546e000797\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30085652379322,\n      \"created\": 1324338985.13808\n    },\n    \"4eef6a6ad2bfa84af3049cf6\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.850367429755,\n        \"lnglat\": [\n                   103.850367429755,\n                   1.2974833246611\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.2974833246611\n      },\n      \"lng\": 103.850367429755,\n      \"id\": \"4eef6a6ad2bfa84af3049cf6\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.2974833246611,\n      \"created\": 1324313123.85528\n    },\n    \"4eec22d221c7ea56c4001c0d\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847706574829,\n        \"lnglat\": [\n                   103.847706574829,\n                   1.30085173156798\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30085173156798\n      },\n      \"lng\": 103.847706574829,\n      \"id\": \"4eec22d221c7ea56c4001c0d\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30085173156798,\n      \"created\": 1324098190.66262\n    },\n    \"4f27535fd2bfa8420c1d7e44\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"74F\",\n        \"temperature\": \"82F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.84764808383,\n        \"lnglat\": [\n                   103.84764808383,\n                   1.30090719823441\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30090719823441\n      },\n      \"lng\": 103.84764808383,\n      \"id\": \"4f27535fd2bfa8420c1d7e44\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30090719823441,\n      \"created\": 1327977311.88182\n    },\n    \"4f23968e21c7ea26360d13a9\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"34F\",\n        \"temperature\": \"36F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 40.4278831481934,\n      \"location\": {\n        \"country_name\": \"United Kingdom\",\n        \"city\": \"Leeds\",\n        \"country\": \"GB\",\n        \"province_name\": \"West Yorkshire\",\n        \"lng\": -1.55119230196886,\n        \"lnglat\": [\n                   -1.55119230196886,\n                   53.7814649522212\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ec2de906a9eba193000003f\",\n        \"province\": \"West Yorkshire\",\n        \"lat\": 53.7814649522212\n      },\n      \"accuracy\": 65.0,\n      \"lng\": -1.55119230196886,\n      \"id\": \"4f23968e21c7ea26360d13a9\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 53.7814649522212,\n      \"created\": 1327732366.79785\n    },\n    \"4f1982ffa3affa374f03aeb6\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"2.2 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"75F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 24.9082374572754,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.990083186324,\n        \"lnglat\": [\n                   103.990083186324,\n                   1.36509597870206\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.36509597870206\n      },\n      \"accuracy\": 65.0,\n      \"lng\": 103.990083186324,\n      \"id\": \"4f1982ffa3affa374f03aeb6\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.36509597870206,\n      \"created\": 1327071999.494\n    },\n    \"4eff4e30e7cf666a10031eb7\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"2.2 meters per second\",\n        \"dewpoint\": \"75F\",\n        \"temperature\": \"82F\",\n        \"wind_direction\": \"90 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847743899054,\n        \"lnglat\": [\n                   103.847743899054,\n                   1.30093981720375\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30093981720375\n      },\n      \"lng\": 103.847743899054,\n      \"id\": \"4eff4e30e7cf666a10031eb7\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30093981720375,\n      \"created\": 1325354544.95866\n    },\n    \"4ef7f0e5830b3b164f0336ce\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.837766888675,\n        \"lnglat\": [\n                   103.837766888675,\n                   1.3017868416354\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.3017868416354\n      },\n      \"lng\": 103.837766888675,\n      \"id\": \"4ef7f0e5830b3b164f0336ce\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.3017868416354,\n      \"created\": 1324871821.92919\n    },\n    \"4eed37777c21507d7d018df1\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.848458953366,\n        \"lnglat\": [\n                   103.848458953366,\n                   1.30065577563353\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30065577563353\n      },\n      \"lng\": 103.848458953366,\n      \"id\": \"4eed37777c21507d7d018df1\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30065577563353,\n      \"created\": 1324169079.77829\n    },\n    \"4f1f072ba3affa2423001c0a\": {\n      \"weather\": {\n        \"conditions\": \"Fog\",\n        \"cloud_cover\": \"0%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"41F\",\n        \"temperature\": \"41F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 40.0545425415039,\n      \"location\": {\n        \"country_name\": \"United Kingdom\",\n        \"city\": \"Leeds\",\n        \"country\": \"GB\",\n        \"province_name\": \"West Yorkshire\",\n        \"lng\": -1.55122949445131,\n        \"lnglat\": [\n                   -1.55122949445131,\n                   53.7815796971236\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ec2de906a9eba193000003f\",\n        \"province\": \"West Yorkshire\",\n        \"lat\": 53.7815796971236\n      },\n      \"accuracy\": 65.0,\n      \"lng\": -1.55122949445131,\n      \"id\": \"4f1f072ba3affa2423001c0a\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 53.7815796971236,\n      \"created\": 1327433515.62367\n    },\n    \"4ef56a96d2bfa81b3b058d00\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847847393719,\n        \"lnglat\": [\n                   103.847847393719,\n                   1.30105576046717\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30105576046717\n      },\n      \"lng\": 103.847847393719,\n      \"id\": \"4ef56a96d2bfa81b3b058d00\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30105576046717,\n      \"created\": 1324706378.50439\n    },\n    \"4eeff5e4f1f70e565c004d66\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.856118445058,\n        \"lnglat\": [\n                   103.856118445058,\n                   1.30911806304898\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30911806304898\n      },\n      \"lng\": 103.856118445058,\n      \"id\": \"4eeff5e4f1f70e565c004d66\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30911806304898,\n      \"created\": 1324348827.67569\n    },\n    \"4eeede8a830b3b212b03fcb4\": {\n      \"elevation\": 71.0,\n      \"location\": {\n        \"country_name\": \"Taiwan\",\n        \"city\": \"Taipei\",\n        \"province_name\": \"Taipei\",\n        \"lng\": 121.518217614034,\n        \"lnglat\": [\n                   121.518217614034,\n                   25.0641740905354\n                   ],\n        \"gc\": \"s\",\n        \"province\": \"Taipei\",\n        \"lat\": 25.0641740905354\n      },\n      \"accuracy\": 5.0,\n      \"lng\": 121.518217614034,\n      \"id\": \"4eeede8a830b3b212b03fcb4\",\n      \"elevation_accuracy\": 6.0,\n      \"user_id\": \"4ce0e84db3bf570d07000012\",\n      \"velocity\": 0.0,\n      \"lat\": 25.0641740905354,\n      \"created\": 1324277385.92682\n    },\n    \"4f26fabda3affa75191c2fba\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"78F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847669006344,\n        \"lnglat\": [\n                   103.847669006344,\n                   1.30079521040267\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30079521040267\n      },\n      \"lng\": 103.847669006344,\n      \"id\": \"4f26fabda3affa75191c2fba\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30079521040267,\n      \"created\": 1327954507.7142\n    },\n    \"4f1ac114d2bfa85f3902f4c0\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"17.9 meters per second\",\n        \"dewpoint\": \"40F\",\n        \"temperature\": \"47F\",\n        \"wind_direction\": \"90 degrees\"\n      },\n      \"elevation\": 40.6666679382324,\n      \"location\": {\n        \"country_name\": \"United Kingdom\",\n        \"city\": \"Leeds\",\n        \"country\": \"GB\",\n        \"province_name\": \"West Yorkshire\",\n        \"lng\": -1.55123244155127,\n        \"lnglat\": [\n                   -1.55123244155127,\n                   53.7815329988144\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ec2de906a9eba193000003f\",\n        \"province\": \"West Yorkshire\",\n        \"lat\": 53.7815329988144\n      },\n      \"accuracy\": 65.0,\n      \"lng\": -1.55123244155127,\n      \"id\": \"4f1ac114d2bfa85f3902f4c0\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 53.7815329988144,\n      \"created\": 1327153428.32987\n    },\n    \"4efe38a2e7cf666a1000683e\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"2.2 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"77F\",\n        \"wind_direction\": \"100 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847722583112,\n        \"lnglat\": [\n                   103.847722583112,\n                   1.30088762514922\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30088762514922\n      },\n      \"lng\": 103.847722583112,\n      \"id\": \"4efe38a2e7cf666a1000683e\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30088762514922,\n      \"created\": 1325283490.05534\n    },\n    \"4eef475be9b6cc3d96046bae\": {\n      \"weather\": {\n        \"conditions\": \"Light rain\",\n        \"cloud_cover\": \"100%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"75F\",\n        \"temperature\": \"75F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 29.4120578765869,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.80090858713,\n        \"lnglat\": [\n                   103.80090858713,\n                   1.30366617809748\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30366617809748\n      },\n      \"accuracy\": 161.833411935008,\n      \"lng\": 103.80090858713,\n      \"id\": \"4eef475be9b6cc3d96046bae\",\n      \"elevation_accuracy\": 14.9661075433795,\n      \"user_id\": \"4ee8ed159c6c3f758a0073fb\",\n      \"lat\": 1.30366617809748,\n      \"created\": 1324304217.80084\n    },\n    \"4efe41b0830b3b29a9007a02\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"3.4 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"77F\",\n        \"wind_direction\": \"90 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.933720986957,\n        \"lnglat\": [\n                   103.933720986957,\n                   1.33875006627822\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.33875006627822\n      },\n      \"lng\": 103.933720986957,\n      \"id\": \"4efe41b0830b3b29a9007a02\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.33875006627822,\n      \"created\": 1325285724.28829\n    },\n    \"4ef00225e7cf6659790062ab\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849190903012,\n        \"lnglat\": [\n                   103.849190903012,\n                   1.28615428813381\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28615428813381\n      },\n      \"lng\": 103.849190903012,\n      \"id\": \"4ef00225e7cf6659790062ab\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.28615428813381,\n      \"created\": 1324351963.51814\n    },\n    \"4eedd6ded2bfa84af80267a5\": {\n      \"weather\": {\n        \"conditions\": \"Rain\",\n        \"cloud_cover\": \"100%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"75F\",\n        \"temperature\": \"76F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.831741262434,\n        \"lnglat\": [\n                   103.831741262434,\n                   1.30464240688511\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30464240688511\n      },\n      \"lng\": 103.831741262434,\n      \"id\": \"4eedd6ded2bfa84af80267a5\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30464240688511,\n      \"created\": 1324209792.94099\n    },\n    \"4f2423add2bfa841fd0f9a9f\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"2.9 meters per second\",\n        \"dewpoint\": \"36F\",\n        \"temperature\": \"47F\",\n        \"wind_direction\": \"315 degrees\"\n      },\n      \"elevation\": 33.9876327514648,\n      \"location\": {\n        \"country_name\": \"United Kingdom\",\n        \"city\": \"London\",\n        \"country\": \"GB\",\n        \"province_name\": \"Westminster\",\n        \"lng\": -0.156473928711194,\n        \"lnglat\": [\n                   -0.156473928711194,\n                   51.5221940831121\n                   ],\n        \"gc\": \"s\",\n        \"neighborhood\": \"St. Marylebone\",\n        \"city_id\": \"4ec2ced26a9eba190d000005\",\n        \"province\": \"Westminster\",\n        \"lat\": 51.5221940831121\n      },\n      \"accuracy\": 65.0,\n      \"lng\": -0.156473928711194,\n      \"id\": \"4f2423add2bfa841fd0f9a9f\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 51.5221940831121,\n      \"created\": 1327768493.23198\n    },\n    \"4efdf5d721c7ea030801b223\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"4.7 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"81F\",\n        \"wind_direction\": \"40 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847736570924,\n        \"lnglat\": [\n                   103.847736570924,\n                   1.30085846973646\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30085846973646\n      },\n      \"lng\": 103.847736570924,\n      \"id\": \"4efdf5d721c7ea030801b223\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30085846973646,\n      \"created\": 1325266391.48808\n    },\n    \"4efc95afd2bfa83ee702e062\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"3.4 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"77F\",\n        \"wind_direction\": \"330 degrees\"\n      },\n      \"elevation\": 134.0,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.756985413007,\n        \"lnglat\": [\n                   103.756985413007,\n                   1.35230788495518\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.35230788495518\n      },\n      \"accuracy\": 10.0,\n      \"lng\": 103.756985413007,\n      \"id\": \"4efc95afd2bfa83ee702e062\",\n      \"elevation_accuracy\": 12.0,\n      \"user_id\": \"4ce0e84db3bf570d07000012\",\n      \"velocity\": 0.239932298660278,\n      \"lat\": 1.35230788495518,\n      \"created\": 1325176239.12721\n    },\n    \"4efc958f830b3b7e6202e1a8\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"1.1 meters per second\",\n        \"dewpoint\": \"72F\",\n        \"temperature\": \"79F\",\n        \"wind_direction\": \"20 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847744567572,\n        \"lnglat\": [\n                   103.847744567572,\n                   1.30087339794512\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30087339794512\n      },\n      \"lng\": 103.847744567572,\n      \"id\": \"4efc958f830b3b7e6202e1a8\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30087339794512,\n      \"created\": 1325176126.29185\n    },\n    \"4ef089db21c7ea2f45011041\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"2.2 meters per second\",\n        \"dewpoint\": \"75F\",\n        \"temperature\": \"81F\",\n        \"wind_direction\": \"360 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.836571378218,\n        \"lnglat\": [\n                   103.836571378218,\n                   1.4182258736629\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.4182258736629\n      },\n      \"lng\": 103.836571378218,\n      \"id\": \"4ef089db21c7ea2f45011041\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.4182258736629,\n      \"created\": 1324386706.18335\n    },\n    \"4eeed02cd2bfa84af803e85d\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849018594273,\n        \"lnglat\": [\n                   103.849018594273,\n                   1.28652707599995\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28652707599995\n      },\n      \"lng\": 103.849018594273,\n      \"id\": \"4eeed02cd2bfa84af803e85d\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.28652707599995,\n      \"created\": 1324273634.87562\n    },\n    \"4eeeb224df21bf466a03bba9\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849104606237,\n        \"lnglat\": [\n                   103.849104606237,\n                   1.28607680973308\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28607680973308\n      },\n      \"lng\": 103.849104606237,\n      \"id\": \"4eeeb224df21bf466a03bba9\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.28607680973308,\n      \"created\": 1324265950.18351\n    },\n    \"4eeda1b2ad49542633022fe1\": {\n      \"weather\": {\n        \"conditions\": \"Partly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"5.8 meters per second\",\n        \"dewpoint\": \"77F\",\n        \"temperature\": \"84F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.831802224219,\n        \"lnglat\": [\n                   103.831802224219,\n                   1.30485605044358\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30485605044358\n      },\n      \"lng\": 103.831802224219,\n      \"id\": \"4eeda1b2ad49542633022fe1\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30485605044358,\n      \"created\": 1324196193.09677\n    },\n    \"4f271acfe9b6cc3a5e1c7ac3\": {\n      \"location\": {\n\n      },\n      \"lng\": 103.847720599825,\n      \"id\": \"4f271acfe9b6cc3a5e1c7ac3\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30085642869691,\n      \"created\": 1327962831.03853\n    },\n    \"4f25ed85830b3b757f178c41\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"2.2 meters per second\",\n        \"dewpoint\": \"75F\",\n        \"temperature\": \"79F\",\n        \"wind_direction\": \"70 degrees\"\n      },\n      \"elevation\": 35.5,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.847724370058,\n        \"lnglat\": [\n                   103.847724370058,\n                   1.30102437997895\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.30102437997895\n      },\n      \"accuracy\": 162.820987496055,\n      \"lng\": 103.847724370058,\n      \"id\": \"4f25ed85830b3b757f178c41\",\n      \"elevation_accuracy\": 10.0,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.30102437997895,\n      \"created\": 1327885701.75976\n    },\n    \"4f1e27ebe9b6cc33ee007105\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"0 meters per second\",\n        \"dewpoint\": \"70F\",\n        \"temperature\": \"80F\",\n        \"wind_direction\": \"0 degrees\"\n      },\n      \"elevation\": 36.0,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.756201956518,\n        \"lnglat\": [\n                   103.756201956518,\n                   1.35296498425431\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.35296498425431\n      },\n      \"accuracy\": 50.0,\n      \"lng\": 103.756201956518,\n      \"id\": \"4f1e27ebe9b6cc33ee007105\",\n      \"elevation_accuracy\": 64.0,\n      \"user_id\": \"4ce0e84db3bf570d07000012\",\n      \"velocity\": 0.0,\n      \"lat\": 1.35296498425431,\n      \"created\": 1327376363.40731\n    },\n    \"4f1dced0d2bfa85f430fc156\": {\n      \"weather\": {\n        \"conditions\": \"Partly cloudy\",\n        \"cloud_cover\": \"38%\",\n        \"wind_speed\": \"4 meters per second\",\n        \"dewpoint\": \"36F\",\n        \"temperature\": \"39F\",\n        \"wind_direction\": \"202 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"United Kingdom\",\n        \"city\": \"Leeds\",\n        \"country\": \"GB\",\n        \"province_name\": \"West Yorkshire\",\n        \"lng\": -1.5510300231579,\n        \"lnglat\": [\n                   -1.5510300231579,\n                   53.7815636800023\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ec2de906a9eba193000003f\",\n        \"province\": \"West Yorkshire\",\n        \"lat\": 53.7815636800023\n      },\n      \"lng\": -1.5510300231579,\n      \"id\": \"4f1dced0d2bfa85f430fc156\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 53.7815636800023,\n      \"created\": 1327353435.97207\n    },\n    \"4efe548de9b6cc76d7009bcc\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"1.1 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"77F\",\n        \"wind_direction\": \"70 degrees\"\n      },\n      \"elevation\": 16.6568336486816,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.914258521652,\n        \"lnglat\": [\n                   103.914258521652,\n                   1.33715127668288\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.33715127668288\n      },\n      \"accuracy\": 5.0,\n      \"lng\": 103.914258521652,\n      \"id\": \"4efe548de9b6cc76d7009bcc\",\n      \"elevation_accuracy\": 9.16790179007832,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"velocity\": 9.83412435004859,\n      \"lat\": 1.33715127668288,\n      \"created\": 1325290552.02467\n    },\n    \"4efd5e36f1f70e3e1f004679\": {\n      \"weather\": {\n        \"conditions\": \"Mostly cloudy\",\n        \"cloud_cover\": \"75%\",\n        \"wind_speed\": \"3.4 meters per second\",\n        \"dewpoint\": \"73F\",\n        \"temperature\": \"90F\",\n        \"wind_direction\": \"330 degrees\"\n      },\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849484019398,\n        \"lnglat\": [\n                   103.849484019398,\n                   1.28586182206257\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28586182206257\n      },\n      \"lng\": 103.849484019398,\n      \"id\": \"4efd5e36f1f70e3e1f004679\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.28586182206257,\n      \"created\": 1325227487.81527\n    },\n    \"4eeeeacfd2bfa84af8040cd1\": {\n      \"elevation\": 39.7234840393066,\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.849046060915,\n        \"lnglat\": [\n                   103.849046060915,\n                   1.28617706420411\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.28617706420411\n      },\n      \"accuracy\": 71.2114598446565,\n      \"lng\": 103.849046060915,\n      \"id\": \"4eeeeacfd2bfa84af8040cd1\",\n      \"elevation_accuracy\": 13.826629178454,\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.28617706420411,\n      \"created\": 1324280456.59781\n    },\n    \"4eed5cdea3affa6d8101cd8b\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.886704927228,\n        \"lnglat\": [\n                   103.886704927228,\n                   1.35982376077178\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.35982376077178\n      },\n      \"lng\": 103.886704927228,\n      \"id\": \"4eed5cdea3affa6d8101cd8b\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.35982376077178,\n      \"created\": 1324178584.53338\n    },\n    \"4eedd61edf21bf466a026d7f\": {\n      \"location\": {\n        \"country_name\": \"Singapore\",\n        \"city\": \"Singapore\",\n        \"country\": \"SG\",\n        \"lng\": 103.831023264658,\n        \"lnglat\": [\n                   103.831023264658,\n                   1.3042732228397\n                   ],\n        \"gc\": \"s\",\n        \"city_id\": \"4ea9f1f6d0bacc4f0800006d\",\n        \"lat\": 1.3042732228397\n      },\n      \"lng\": 103.831023264658,\n      \"id\": \"4eedd61edf21bf466a026d7f\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"lat\": 1.3042732228397,\n      \"created\": 1324205701.94081\n    }\n  },\n  \"moments\": [\n    {\n      \"subheadline\": \"On February 9th, 2012\",\n      \"visible_ts\": 1328778313.41825,\n      \"emotions\": {\n        \"total\": 0,\n        \"users\": []\n      },\n      \"custom_id\": \"\",\n      \"comments\": [],\n      \"private\": false,\n      \"seen_its\": {\n        \"total\": 1\n      },\n      \"headline\": \"Joined Path\",\n      \"id\": \"4f338c49f6b766128d011178\",\n      \"user_id\": \"4f338c49f6b766128d011175\",\n      \"type\": \"ambient\",\n      \"ambient\": {\n        \"url\": \"path://users/4f338c49f6b766128d011175\",\n        \"subtype\": \"joined\"\n      },\n      \"shared\": false,\n      \"state\": \"live\",\n      \"short_hash\": \"\",\n      \"created\": 1328778313.41825\n    },\n    {\n      \"headline\": \"At <b>Artichoke</b>\",\n      \"id\": \"4eec22d321c7ea56c4001c10\",\n      \"user_id\": \"4ed6331cbee9e75a2f0009a7\",\n      \"type\": \"place\",\n      \"shared\": false,\n      \"location_id\": \"4eec22d221c7ea56c4001c0d\",\n      \"state\": \"live\",\n      \"short_hash\": \"4gSxao\",\n      \"created\": 1324098190.66262\n    }\n  ]\n}"
  },
  {
    "path": "JourneyTests/Fixtures/settings.json",
    "content": "{\n  \"settings\": {\n    \"user_primary_email\": \"foo@bar.com\",\n    \"user_first_name\": \"Foo\",\n    \"user_last_name\": \"Bar\",\n    \"path_emails_friend_req\": true,\n    \"path_emails_emotion\": false,\n    \"user_gender\": \"unspecified\",\n    \"path_notifications_emotion\": true,\n    \"path_emails_moment\": true,\n    \"user_other_emails\": [\n      {\n        \"created_at\": \"2012-01-01 00:00:00.000000\",\n        \"email\": \"foo@bar.com\"\n      }\n    ],\n    \"path_emails_tagged\": true,\n    \"path_notifications_friend_req\": true,\n    \"path_notifications_tagged\": true,\n    \"path_notifications_comment\": true,\n    \"user_username\": \"foo-bar\",\n    \"path_notifications_moment\": true,\n    \"path_emails_comment\": false,\n    \"path_ambient_distance_moments\": true\n  }\n}"
  },
  {
    "path": "JourneyTests/Models/PFMCommentSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMComment.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n#import \"PFMUser.h\"\n#import \"PFMLocation.h\"\n\nSpecBegin(PFMComment)\n\n__block PFMComment *comment;\n__block PFMLocation *location;\n__block PFMUser *user;\n\nbefore(^{\n  comment = [PFMComment new];\n  comment.oid = @\"comment.id\";\n  comment.body = @\"Comment Body\";\n  comment.state = @\"Live\";\n\n  user = [PFMUser new];\n  user.firstName = @\"Aloha\";\n  user.lastName = @\"Boss\";\n\n  location = [PFMLocation new];\n  location.oid = @\"location.id\";\n  location.latitude = 1.23456;\n  location.longitude = 123.456;\n\n  [[NSApp sharedUsers] setObject:user forKey:@\"user.id\"];\n  [[NSApp sharedLocations] setObject:location forKey:@\"location.id\"];\n\n  comment.locationId = @\"location.id\";\n  comment.userId = @\"user.id\";\n});\n\nafter(^{\n  [NSApp resetSharedUsers];\n  [NSApp resetSharedLocations];\n});\n\ndescribe(@\"-JSONRepresentation\", ^{\n  it(@\"returns a JSON string which contains the JSON representation of the comment\", ^{\n    NSString * commentJSON = [comment JSONRepresentation];\n    NSDictionary * commentDict = [commentJSON JSONValue];\n\n    expect([commentDict $for:@\"body\"]).toEqual(@\"Comment Body\");\n    expect([commentDict $for:@\"state\"]).toEqual(@\"Live\");\n    expect([(NSNumber *)[[commentDict $for:@\"location\"] $for:@\"latitude\"] floatValue]).toEqual(1.23456f);\n    expect([(NSNumber *)[[commentDict $for:@\"location\"] $for:@\"longitude\"] floatValue]).toEqual(123.456f);\n    expect([[commentDict $for:@\"user\"] $for:@\"firstName\"]).toEqual(@\"Aloha\");\n    expect([[commentDict $for:@\"user\"] $for:@\"lastName\"]).toEqual(@\"Boss\");\n  });\n\n});\n\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Models/PFMLocationSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMLocation.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n\nSpecBegin(PFMLocation)\n\n__block PFMLocation *location;\n\nbefore(^{\n  location = [PFMLocation new];\n  location.oid = @\"comment.id\";\n  location.weatherConditions = @\"Nice and Breezy\";\n  location.latitude = 1.212312;\n  location.longitude = 123.31232;\n  location.countryName = @\"Singapore\";\n});\n\ndescribe(@\"-JSONRepresentation\", ^{\n  it(@\"returns a JSON string which contains the JSON representation of the comment\", ^{\n    NSString * locationJSON = [location JSONRepresentation];\n    NSDictionary * locationDict = [locationJSON JSONValue];\n\n    expect([locationDict $for:@\"weatherConditions\"]).toEqual(@\"Nice and Breezy\");\n    expect([[locationDict $for:@\"latitude\"] floatValue]).toEqual(1.212312f);\n    expect([[locationDict $for:@\"longitude\"] floatValue]).toEqual(123.31232f);\n    expect([locationDict $for:@\"countryName\"]).toEqual(@\"Singapore\");\n  });\n});\n\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Models/PFMModelSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMModel.h\"\n\nSpecBegin(PFMModel)\n\n__block PFMModel *model;\n\nbefore(^{\n  model = [PFMModel new];\n});\n\ndescribe(@\"-requestWithPath:completionBlock:failedBlock:\", ^{\n  it(@\"creates and returns ASIHTTPRequest object with full request url\", ^{\n    ASIHTTPRequest *request = [model requestWithPath:@\"/3/user/settings\"];\n    expect([request.url absoluteString]).toEqual($str(@\"%@/3/user/settings\", kPathAPIHost));\n  });\n});\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Models/PFMPhotoSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMPhoto.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n\nSpecBegin(PFMPhoto)\n\n__block PFMPhoto *photo;\n__block id mockPhoto;\n\nbefore(^{\n  photo = [PFMPhoto new];\n  mockPhoto = [OCMockObject partialMockForObject:photo];\n  photo.iOSLowResFileName = @\"1x.jpg\";\n  photo.iOSHighResFileName = @\"2x.jpg\";\n  photo.webFileName = @\"web.jpg\";\n  photo.originalFileName = @\"original.jpg\";\n  photo.baseURL = @\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19\";\n});\n\ndescribe(@\"-iOSLowResURL\", ^{\n  it(@\"returns the full iOS low-res URL\", ^{\n    expect(photo.iOSLowResURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/1x.jpg\");\n  });\n});\n\ndescribe(@\"-iOSHighResURL\", ^{\n  it(@\"returns the full iOS high-res URL\", ^{\n    expect(photo.iOSHighResURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/2x.jpg\");\n  });\n});\n\ndescribe(@\"-webURL\", ^{\n  it(@\"returns the full web URL\", ^{\n    expect(photo.webURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/web.jpg\");\n  });\n});\n\ndescribe(@\"-originalURL\", ^{\n  it(@\"returns the full original URL\", ^{\n    expect(photo.originalURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/original.jpg\");\n  });\n});\n\ndescribe(@\"-JSONRepresentation\", ^{\n  it(@\"returns a JSON string which contains the URLs to the images\", ^{\n    NSString * photoJSON = [photo JSONRepresentation];\n\n    NSDictionary * photoDict = [photoJSON JSONValue];\n\n    expect([photoDict $for:@\"iOSLowResURL\"]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/1x.jpg\");\n    expect([photoDict $for:@\"iOSHighResURL\"]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/2x.jpg\");\n    expect([photoDict $for:@\"webURL\"]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/web.jpg\");\n    expect([photoDict $for:@\"originalURL\"]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/original.jpg\");\n  });\n});\n\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Models/PFMPlaceSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMPlace.h\"\n#import \"Application.h\"\n#import \"SBJson.h\"\n\nSpecBegin(PFMPlace)\n\n__block PFMPlace *place;\n\nbefore(^{\n  place = [PFMPlace new];\n  place.oid = @\"place.id\";\n\n  place.name = @\"Anideo HQ\";\n  place.latitude = 1.212312;\n  place.longitude = 123.31232;\n  place.country = @\"Singapore\";\n});\n\ndescribe(@\"-JSONRepresentation\", ^{\n  it(@\"returns a JSON string which contains the JSON representation of the comment\", ^{\n    NSString * placeJSON = [place JSONRepresentation];\n    NSDictionary * placeDict = [placeJSON JSONValue];\n\n    expect([placeDict $for:@\"name\"]).toEqual(@\"Anideo HQ\");\n    expect([[placeDict $for:@\"latitude\"] floatValue]).toEqual(1.212312f);\n    expect([[placeDict $for:@\"longitude\"] floatValue]).toEqual(123.31232f);\n    expect([placeDict $for:@\"country\"]).toEqual(@\"Singapore\");\n  });\n});\n\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Models/PFMUserSpec.m",
    "content": "#import \"TestHelper.h\"\n#import \"PFMUser.h\"\n#import \"SSKeychain.h\"\n#import \"PFMMoment.h\"\n#import \"PFMPhoto.h\"\n#import \"PFMComment.h\"\n#import \"PFMLocation.h\"\n#import \"PFMPlace.h\"\n#import \"SBJson.h\"\n\nSpecBegin(PFMUser)\n\n__block PFMUser *user;\n__block id mockUser;\n\nbefore(^{\n  resetUserDefaultsAndKeychain();\n  user = [PFMUser new];\n  mockUser = [OCMockObject partialMockForObject:user];\n  user.email = @\"foo@bar.com\";\n  user.password = @\"123456\";\n});\n\ndescribe(@\"-signIn\", ^{\n  __block ASIHTTPRequest *request;\n  __block id mockRequest;\n  __block id mockSignInDelegate;\n\n  before(^{\n    [user signIn];\n    request = [ASIHTTPRequest mostRecentRequest];\n    mockRequest = [OCMockObject partialMockForObject:request];\n    mockSignInDelegate = [OCMockObject mockForProtocol:@protocol(PFMUserSignInDelegate)];\n  });\n\n  it(@\"sets user's signingIn property to be YES\", ^{\n    expect(user.signingIn).toEqual(YES);\n  });\n\n  it(@\"makes an asynchronous GET request to /3/user/settings\", ^{\n    expect([request.url relativePath]).toContain(@\"/3/user/settings\");\n    expect(request.started).toEqual(YES);\n    expect(request.asynchronous).toEqual(YES);\n  });\n\n  it(@\"makes request with basic auth\", ^{\n    expect([request.requestHeaders allKeys]).toContain(@\"Authorization\");\n    expect([request.requestHeaders objectForKey:@\"Authorization\"]).toContain(@\"Basic\");\n  });\n\n  describe(@\"when the request is completed\", ^{\n    before(^{\n      [[[mockRequest stub] andReturn:loadStringFixture(@\"settings.json\")] responseString];\n    });\n\n    void (^doAction)(void) = ^{\n      [request completionBlock]();\n    };\n\n    context(@\"when the response code is 200\", ^{\n      before(^{\n        int responseStatusCode = 200;\n        [[[mockRequest stub] andReturnValue:OCMOCK_VALUE(responseStatusCode)] responseStatusCode];\n      });\n\n      it(@\"sets firstName and lastName\", ^{\n        doAction();\n        expect(user.firstName).toEqual(@\"Foo\");\n        expect(user.lastName).toEqual(@\"Bar\");\n      });\n\n      it(@\"persists the user\", ^{\n        [[mockUser expect] saveCredentials];\n        doAction();\n        [mockUser verify];\n      });\n\n      it(@\"sends -didSignIn message to the signInDelegate\", ^{\n        user.signInDelegate = mockSignInDelegate;\n        [[mockSignInDelegate expect] didSignIn];\n        doAction();\n        [mockSignInDelegate verify];\n      });\n\n      it(@\"sets user's signedIn property to YES\", ^{\n        doAction();\n        expect(user.signedIn).toEqual(YES);\n      });\n\n      it(@\"sets user's signingIn property to NO\", ^{\n        doAction();\n        expect(user.signingIn).toEqual(NO);\n      });\n    });\n\n    context(@\"when the response code is 403\", ^{\n      before(^{\n        int responseStatusCode = 403;\n        [[[mockRequest stub] andReturnValue:OCMOCK_VALUE(responseStatusCode)] responseStatusCode];\n      });\n\n      it(@\"sends -didFailSignInDueToInvalidCredentials message to the signInDelegate\", ^{\n        user.signInDelegate = mockSignInDelegate;\n        [[mockSignInDelegate expect] didFailSignInDueToInvalidCredentials];\n        doAction();\n        [mockSignInDelegate verify];\n      });\n\n      it(@\"sets user's signingIn property to NO\", ^{\n        doAction();\n        expect(user.signingIn).toEqual(NO);\n      });\n    });\n\n    context(@\"when the response code is 500\", ^{\n      before(^{\n        int responseStatusCode = 500;\n        [[[mockRequest stub] andReturnValue:OCMOCK_VALUE(responseStatusCode)] responseStatusCode];\n      });\n\n      it(@\"sends -didFailSignInDueToInvalidCredentials message to the signInDelegate\", ^{\n        user.signInDelegate = mockSignInDelegate;\n        [[mockSignInDelegate expect] didFailSignInDueToPathError];\n        doAction();\n        [mockSignInDelegate verify];\n      });\n\n      it(@\"sets user's signingIn property to NO\", ^{\n        doAction();\n        expect(user.signingIn).toEqual(NO);\n      });\n    });\n  });\n\n  describe(@\"when the request fails\", ^{\n    void (^doAction)(void) = ^{\n      [request failureBlock]();\n    };\n\n    it(@\"sends -didFailSignInDueToRequestError message to the signInDelegate\", ^{\n      user.signInDelegate = mockSignInDelegate;\n      [[mockSignInDelegate expect] didFailSignInDueToRequestError];\n      doAction();\n      [mockSignInDelegate verify];\n    });\n\n    it(@\"sets user's signingIn property to NO\", ^{\n      doAction();\n      expect(user.signingIn).toEqual(NO);\n    });\n  });\n});\n\ndescribe(@\"-saveCredentials\", ^{\n  before(^{\n    [user saveCredentials];\n  });\n\n  it(@\"saves the email in user defaults\", ^{\n    expect([[NSUserDefaults standardUserDefaults] objectForKey:kPathDefaultsEmailKey]).toEqual(@\"foo@bar.com\");\n  });\n\n  it(@\"saves the password in the keychain\", ^{\n    expect([SSKeychain passwordForService:kPathKeychainServiceName account:user.email]).toEqual(@\"123456\");\n  });\n});\n\ndescribe(@\"-loadCredentials\", ^{\n  before(^{\n    [user saveCredentials];\n    user.email = nil;\n    user.password = nil;\n    [user loadCredentials];\n  });\n\n  it(@\"loads the email from user defaults\", ^{\n    expect(user.email).toEqual(@\"foo@bar.com\");\n  });\n\n  it(@\"loads the password from the keychain\", ^{\n    expect(user.password).toEqual(@\"123456\");\n  });\n});\n\ndescribe(@\"-deleteCredentials\", ^{\n  before(^{\n    user.oid = @\"\";\n    user.signedIn = YES;\n    user.signingIn = YES;\n    user.fetchingMoments = YES;\n    user.firstName = @\"\";\n    user.lastName = @\"\";\n    user.allMomentIds = $dict(@\"v\",@\"k\");\n    user.allMoments = $arr([PFMMoment new]);\n    user.fetchedMoments = $arr(@\"\");\n    user.coverPhoto = [PFMPhoto new];\n    user.profilePhoto = [PFMPhoto new];\n    [user saveCredentials];\n    [user deleteCredentials];\n  });\n\n  it(@\"removes the email in user defaults\", ^{\n    expect([[NSUserDefaults standardUserDefaults] objectForKey:kPathDefaultsEmailKey]).toBeNil();\n  });\n\n  it(@\"removes the keychain entry\", ^{\n    expect([SSKeychain passwordForService:kPathKeychainServiceName account:user.email]).toBeNil();\n  });\n\n  it(@\"resets the user object\", ^{\n    expect(user.oid).toBeNil();\n    expect(user.email).toBeNil();\n    expect(user.password).toBeNil();\n    expect(user.signedIn).toEqual(NO);\n    expect(user.signingIn).toEqual(NO);\n    expect(user.fetchingMoments).toEqual(NO);\n    expect(user.firstName).toBeNil();\n    expect(user.lastName).toBeNil();\n    expect([user.allMomentIds count]).toEqual(0);\n    expect([user.allMoments count]).toEqual(0);\n    expect(user.fetchedMoments).toBeNil();\n    expect(user.coverPhoto).toBeNil();\n    expect(user.profilePhoto).toBeNil();\n  });\n});\n\ndescribe(@\"-fetchMomentsNewerThan: (non-null Date)\", ^{\n  __block ASIHTTPRequest *request;\n  __block id mockRequest;\n  __block id mockMomentsDelegate;\n\n  before(^{\n    [user fetchMomentsNewerThan:1328809735.59837];\n    request = [ASIHTTPRequest mostRecentRequest];\n    mockRequest = [OCMockObject partialMockForObject:request];\n    mockMomentsDelegate = [OCMockObject mockForProtocol:@protocol(PFMUserMomentsDelegate)];\n    // There are already moments loaded as part of the user\n    [user parseMomentsJSON:loadStringFixture(@\"moments_feed.json\") insertAtTop:YES];\n  });\n\n  after(^{\n    [NSApp resetSharedUsers];\n    [NSApp resetSharedLocations];\n    [NSApp resetSharedPlaces];\n    [NSApp resetSharedLocations];\n  });\n\n  it(@\"makes an asynchronous GET request to /3/moment/feed/home?newer_than=1328809735.59837\", ^{\n    expect([request.url relativePath]).toContain(@\"/3/moment/feed/home\");\n    expect([request.url query]).toContain(@\"newer_than=1328809735.59837\");\n    expect(request.started).toEqual(YES);\n    expect(request.asynchronous).toEqual(YES);\n  });\n\n  describe(@\"when the request is completed\", ^{\n    before(^{\n      // This feed contains one moment which has been already initialized in the allMomentIds hash\n      // so it wont be added to fetchedMoments\n      [[[mockRequest stub] andReturn:loadStringFixture(@\"moments_feed_newer_than.json\")] responseString];\n    });\n\n    void (^doAction)(void) = ^{\n      [request completionBlock]();\n    };\n\n    context(@\"when the response code is 200\", ^{\n      before(^{\n        int responseStatusCode = 200;\n        [[[mockRequest stub] andReturnValue:OCMOCK_VALUE(responseStatusCode)] responseStatusCode];\n      });\n\n      it(@\"populates the fetchedMoments array with the new moments fetched from the API\", ^{\n        doAction();\n        expect([user.fetchedMoments count]).toEqual(1);\n      });\n\n      it(@\"populates the allMoments array with the all moments fetched so far\", ^{\n        doAction();\n        expect([user.allMoments count]).toEqual(13);\n      });\n    });\n  });\n});\n\ndescribe(@\"-fetchMomentsOlderThan: (non-null Date)\", ^{\n  __block ASIHTTPRequest *request;\n  __block id mockRequest;\n  __block id mockMomentsDelegate;\n\n  before(^{\n    [user fetchMomentsOlderThan:1328778313.41825];\n    request = [ASIHTTPRequest mostRecentRequest];\n    mockRequest = [OCMockObject partialMockForObject:request];\n    mockMomentsDelegate = [OCMockObject mockForProtocol:@protocol(PFMUserMomentsDelegate)];\n    [user parseMomentsJSON:loadStringFixture(@\"moments_feed.json\") insertAtTop:YES];\n  });\n\n  after(^{\n    [NSApp resetSharedUsers];\n    [NSApp resetSharedLocations];\n    [NSApp resetSharedPlaces];\n    [NSApp resetSharedLocations];\n  });\n\n  it(@\"makes an asynchronous GET request to /3/moment/feed/home?older_than=1328778313.41825\", ^{\n    expect([request.url relativePath]).toContain(@\"/3/moment/feed/home\");\n    expect([request.url query]).toContain(@\"older_than=1328778313.41825\");\n    expect(request.started).toEqual(YES);\n    expect(request.asynchronous).toEqual(YES);\n  });\n\n  describe(@\"when the request is completed\", ^{\n    before(^{\n      // This feed contains one moment which has been already initialized in the allMomentIds hash\n      // so it wont be added to fetchedMoments\n      [[[mockRequest stub] andReturn:loadStringFixture(@\"moments_feed_older_than.json\")] responseString];\n    });\n\n    void (^doAction)(void) = ^{\n      [request completionBlock]();\n    };\n\n    context(@\"when the response code is 200\", ^{\n      before(^{\n        int responseStatusCode = 200;\n        [[[mockRequest stub] andReturnValue:OCMOCK_VALUE(responseStatusCode)] responseStatusCode];\n      });\n\n      it(@\"populates the fetchedMoments array with the new moments fetched from the API\", ^{\n        doAction();\n        expect([user.fetchedMoments count]).toEqual(1);\n      });\n\n      it(@\"populates the allMoments array with the all moments fetched so far\", ^{\n        doAction();\n        expect([user.allMoments count]).toEqual(13);\n      });\n    });\n  });\n});\n\ndescribe(@\"-fetchMomentsNewerThan:/-fetchMomentsOlderThan: (with nil date)\", ^{\n  __block ASIHTTPRequest *request;\n  __block id mockRequest;\n  __block id mockMomentsDelegate;\n\n  before(^{\n    [user fetchMomentsNewerThan:0.0];\n    request = [ASIHTTPRequest mostRecentRequest];\n    mockRequest = [OCMockObject partialMockForObject:request];\n    mockMomentsDelegate = [OCMockObject mockForProtocol:@protocol(PFMUserMomentsDelegate)];\n  });\n\n  it(@\"sets user's fetchingMoments property to be YES\", ^{\n    expect(user.fetchingMoments).toEqual(YES);\n  });\n\n  it(@\"makes an asynchronous GET request to /3/moment/feed/home\", ^{\n    expect([request.url relativePath]).toContain(@\"/3/moment/feed/home\");\n    expect(request.started).toEqual(YES);\n    expect(request.asynchronous).toEqual(YES);\n  });\n\n  it(@\"makes request with basic auth\", ^{\n    expect([request.requestHeaders allKeys]).toContain(@\"Authorization\");\n    expect([request.requestHeaders objectForKey:@\"Authorization\"]).toContain(@\"Basic\");\n  });\n\n  describe(@\"when the request is completed\", ^{\n    before(^{\n      [[[mockRequest stub] andReturn:loadStringFixture(@\"moments_feed.json\")] responseString];\n    });\n\n    void (^doAction)(void) = ^{\n      [request completionBlock]();\n    };\n\n    context(@\"when the response code is 200\", ^{\n      before(^{\n        int responseStatusCode = 200;\n        [[[mockRequest stub] andReturnValue:OCMOCK_VALUE(responseStatusCode)] responseStatusCode];\n      });\n\n      it(@\"populates the fetchedMoments array with the moments fetched from the API\", ^{\n        doAction();\n        expect([user.fetchedMoments count]).toEqual(12);\n      });\n\n      it(@\"sets the cover photo of the user\", ^{\n        doAction();\n        expect([user.coverPhoto webURL]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/web.jpg\");\n        expect([user.coverPhoto originalURL]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/original.jpg\");\n        expect([user.coverPhoto iOSLowResURL]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/1x.jpg\");\n        expect([user.coverPhoto iOSHighResURL]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/2x.jpg\");\n      });\n\n      it(@\"sets the id of the user\", ^{\n        doAction();\n        expect(user.oid).toEqual(@\"4f338c49f6b766128d011175\");\n      });\n\n      it(@\"sets the profile photo of the user\", ^{\n        doAction();\n        expect(user.profilePhoto.iOSLowResURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/bef62e4fdd1b2a4e1df408443fcb4e2cde6f2a03/processed_80x80.jpg\");\n        expect(user.profilePhoto.iOSHighResURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/bef62e4fdd1b2a4e1df408443fcb4e2cde6f2a03/processed_160x160.jpg\");\n        expect(user.profilePhoto.originalURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/bef62e4fdd1b2a4e1df408443fcb4e2cde6f2a03/original.jpg\");\n      });\n\n      it(@\"sends -didFetchMoments message to the userdelegate\", ^{\n        user.momentsDelegate = mockMomentsDelegate;\n        [[mockMomentsDelegate expect] didFetchMoments:[OCMArg checkWithBlock:^BOOL (id obj) {\n          expect(obj).toEqual(user.fetchedMoments);\n          return YES;\n        }] atTop:YES];\n        doAction();\n        [mockMomentsDelegate verify];\n        PFMMoment *moment = [user.fetchedMoments lastObject];\n        expect(moment.oid).toEqual(@\"4f338c49f6b766128d011178\");\n        expect(moment.userId).toEqual(@\"4f338c49f6b766128d011175\");\n        expect(moment.locationId).toEqual(@\"4f34078be7cf662b9d09e2d2\");\n        expect(moment.type).toEqual(@\"ambient\");\n        expect(moment.headline).toEqual(@\"Joined Path\");\n        expect(moment.subHeadline).toEqual(@\"On February 9th, 2012\");\n        expect(moment.thought).toEqual(@\"this is cool\");\n        expect(moment.state).toEqual(@\"live\");\n        expect(moment.shared).toEqual(false);\n        expect(moment.private).toEqual(false);\n        expect(moment.subType).toEqual(@\"joined\");\n\n        expect((float)moment.createdAt).toEqual(1328778313.41825f);\n\n        PFMMoment * momentWithPlace = (PFMMoment *)[user.fetchedMoments $at:8];\n        expect(momentWithPlace.placeId).toEqual(@\"4bcd4dc50687ef3b31c6e0cc\");\n\n        PFMMoment * momentWithPeople = (PFMMoment *)[user.fetchedMoments $at:([user.fetchedMoments count] - 2)];\n        expect([momentWithPeople.people count]).toEqual(1);\n      });\n\n      it(@\"sets the sharedLocations dictionary with id <-> location mapping\", ^{\n        doAction();\n        expect([[NSApp sharedLocations] count]).toEqual(14);\n\n        PFMLocation * location = [[NSApp sharedLocations] $for:@\"4f33b224e7cf662ba2082b6b\"];\n        expect(location.oid).toEqual(@\"4f33b224e7cf662ba2082b6b\");\n        expect(location.weatherConditions).toEqual(@\"Mostly cloudy\");\n        expect(location.cloudCover).toEqual(@\"75%\");\n        expect(location.windSpeed).toEqual(@\"4 meters per second\");\n        expect(location.dewPoint).toEqual(@\"66F\");\n        expect(location.temperature).toEqual(@\"83F\");\n        expect(location.windDirection).toEqual(@\"100 degrees\");\n        expect((float)location.latitude).toEqual(1.28618792453878f);\n        expect((float)location.longitude).toEqual(103.849152707777f);\n        expect((float)location.accuracy).toEqual(76.2130243463154f);\n        expect((float)location.elevation).toEqual(41.0330467224121f);\n        expect(location.countryName).toEqual(@\"Singapore\");\n        expect(location.country).toEqual(@\"SG\");\n        expect(location.city).toEqual(@\"Singapore\");\n      });\n\n      it(@\"sets the sharedPlaces dictionary with id <-> place mapping\", ^{\n        doAction();\n        expect([[NSApp sharedPlaces] count]).toEqual(1);\n\n        PFMPlace * place = [[NSApp sharedPlaces] $for:@\"4bcd4dc50687ef3b31c6e0cc\"];\n        expect(place.oid).toEqual(@\"4bcd4dc50687ef3b31c6e0cc\");\n        expect(place.name).toEqual(@\"Mescluns\");\n        expect(place.address).toEqual(@\"64 Circular Road\");\n        expect(place.city).toEqual(@\"Singapore\");\n        expect(place.country).toEqual(@\"Singapore\");\n        expect(place.state).toEqual(@\"Singapore\");\n\n        expect((float)place.latitude).toEqual(1.286237f);\n        expect((float)place.longitude).toEqual(103.849196);\n        expect(place.totalCheckins).toEqual(1);\n        expect(place.phone).toEqual(@\"+6562218141\");\n        expect(place.formattedPhone).toEqual(@\"+65 6221 8141\");\n      });\n\n      it(@\"sets the sharedUsers dictionary with id <-> user mapping\", ^{\n        doAction();\n        expect([[NSApp sharedUsers] count]).toEqual(2);\n\n        PFMUser * user = [[NSApp sharedUsers] $for:@\"4f338c49f6b766128d011175\"];\n        expect(user.oid).toEqual(@\"4f338c49f6b766128d011175\");\n        expect(user.firstName).toEqual(@\"Aloha\");\n        expect(user.lastName).toEqual(@\"Boss\");\n        expect(user.profilePhoto.originalURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/profile_photos/bef62e4fdd1b2a4e1df408443fcb4e2cde6f2a03/original.jpg\");\n      });\n\n      it(@\"should assign photos to moments (if they exist)\", ^{\n        doAction();\n        PFMMoment *moment = (PFMMoment *)[user.fetchedMoments $at:0];\n\n        expect(moment.photo.iOSLowResURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/1x.jpg\");\n        expect(moment.photo.iOSHighResURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/2x.jpg\");\n        expect(moment.photo.originalURL).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/photos2/d5abf9a1-1217-418a-9188-b8be09b1026e/original.jpg\");\n      });\n\n      it(@\"should assign comments to moments (if they exist)\", ^{\n        doAction();\n        PFMMoment *moment = (PFMMoment *)[user.fetchedMoments $at:0];\n\n        expect([moment.comments count]).toEqual(2);\n\n        PFMComment * comment1 = (PFMComment *)[moment.comments $at:0];\n        PFMComment * comment2 = (PFMComment *)[moment.comments $at:1];\n\n        expect(comment1.oid).toEqual(@\"4f34078de7cf662b9d09e2d8\");\n        expect(comment1.body).toEqual(@\"Hello\");\n        expect(comment1.userId).toEqual(@\"4f338c49f6b766128d011175\");\n        expect(comment1.locationId).toEqual(@\"4f34078be7cf662b9d09e2d2\");\n        expect(comment1.momentId).toEqual(@\"4f34078de7cf662b9d09e2d7\");\n        expect(comment1.state).toEqual(@\"live\");\n        expect(comment1.createdAt).toEqual([NSDate dateWithTimeIntervalSince1970:1328809735]);\n\n        expect(comment2.oid).toEqual(@\"4f343a20d2bfa87b380074de\");\n        expect(comment2.body).toEqual(@\"xdt\");\n        expect(comment2.userId).toEqual(@\"4f338c49f6b766128d011175\");\n        expect(comment2.locationId).toEqual(@\"4f343a1fd2bfa87b380074dd\");\n        expect(comment2.momentId).toEqual(@\"4f34078de7cf662b9d09e2d7\");\n        expect(comment2.state).toEqual(@\"live\");\n        expect(comment2.createdAt).toEqual([NSDate dateWithTimeIntervalSince1970:1328822815]);\n      });\n\n      it(@\"sets user's fetchingMoments property to be NO\", ^{\n        doAction();\n        expect(user.fetchingMoments).toEqual(NO);\n      });\n    });\n\n    context(@\"When the response code is not 200 (404/500)\", ^{\n      before(^{\n        int responseStatusCode = 500;\n        [[[mockRequest stub] andReturnValue:OCMOCK_VALUE(responseStatusCode)] responseStatusCode];\n      });\n\n      after(^{\n        [NSApp resetSharedUsers];\n        [NSApp resetSharedLocations];\n        [NSApp resetSharedPlaces];\n        [NSApp resetSharedLocations];\n      });\n\n      it(@\"should call the didFailToFetchMoments\", ^{\n        user.momentsDelegate = mockMomentsDelegate;\n        [[mockMomentsDelegate expect] didFailToFetchMoments];\n        doAction();\n        [mockMomentsDelegate verify];\n      });\n    });\n  });\n});\n\ndescribe(@\"-JSONRepresentation\", ^{\n  before(^{\n    user.firstName = @\"Aloha\";\n    user.lastName = @\"Boss\";\n    user.oid = @\"user.id\";\n\n    PFMPhoto * coverPhoto = [PFMPhoto new];\n\n    coverPhoto.iOSLowResFileName = @\"1x.jpg\";\n    coverPhoto.iOSHighResFileName = @\"2x.jpg\";\n    coverPhoto.webFileName = @\"web.jpg\";\n    coverPhoto.originalFileName = @\"original.jpg\";\n    coverPhoto.baseURL = @\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19\";\n\n    PFMPhoto * profilePhoto = [PFMPhoto new];\n\n    profilePhoto.iOSLowResFileName = @\"1x.jpg\";\n    profilePhoto.iOSHighResFileName = @\"2x.jpg\";\n    profilePhoto.webFileName = @\"web.jpg\";\n    profilePhoto.originalFileName = @\"original.jpg\";\n    profilePhoto.baseURL = @\"https://s3-us-west-1.amazonaws.com/images.path.com/static/profile/1\";\n\n    user.coverPhoto = coverPhoto;\n    user.profilePhoto = profilePhoto;\n  });\n\n  it(@\"should return a JSON representation of the user, including nested objects\", ^{\n    NSString * userJSON = [user JSONRepresentation];\n    NSDictionary * userDict = [userJSON JSONValue];\n\n    expect([userDict $for:@\"id\"]).toEqual(@\"user.id\");\n    expect([userDict $for:@\"email\"]).toEqual(@\"foo@bar.com\");\n    expect([userDict $for:@\"firstName\"]).toEqual(@\"Aloha\");\n    expect([userDict $for:@\"lastName\"]).toEqual(@\"Boss\");\n\n    expect([[userDict $for:@\"profilePhoto\"] $for:@\"webURL\"]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/profile/1/web.jpg\");\n    expect([[userDict $for:@\"coverPhoto\"] $for:@\"webURL\"]).toEqual(@\"https://s3-us-west-1.amazonaws.com/images.path.com/static/covers/19/web.jpg\");\n  });\n});\n\nSpecEnd\n"
  },
  {
    "path": "JourneyTests/Support/ASIHTTPRequest+Spec.h",
    "content": "#import \"ASIHTTPRequest.h\"\n\n@interface ASIHTTPRequest (Spec)\n\n+ (NSMutableArray *)requests;\n+ (void)resetRequests;\n+ (ASIHTTPRequest *)mostRecentRequest;\n\n- (ASIBasicBlock)startedBlock;\n- (ASIBasicBlock)completionBlock;\n- (ASIBasicBlock)failureBlock;\n- (void)startSynchronous2;\n- (void)startAsynchronous2;\n\n@property (getter=isStarted) BOOL started;\n@property (getter=isAsynchronous) BOOL asynchronous;\n\n@end\n"
  },
  {
    "path": "JourneyTests/Support/ASIHTTPRequest+Spec.m",
    "content": "#import \"TestHelper.h\"\n#import \"ASIHTTPRequest+Spec.h\"\n#import <objc/runtime.h>\n\nstatic NSMutableArray *requests = nil;\n\n@implementation ASIHTTPRequest (Spec)\n\n+ (NSMutableArray *)requests {\n  @synchronized(self) {\n    if(!requests) {\n      requests = [NSMutableArray new];\n    }\n  }\n  return requests;\n}\n\n+ (void)resetRequests {\n  [[self requests] removeAllObjects];\n}\n\n+ (ASIHTTPRequest *)mostRecentRequest {\n  return [[self requests] lastObject];\n}\n\n- (ASIBasicBlock)startedBlock {\n  return startedBlock;\n}\n\n- (ASIBasicBlock)completionBlock {\n  return completionBlock;\n}\n\n- (ASIBasicBlock)failureBlock {\n  return failureBlock;\n}\n\n- (void)setStarted:(BOOL)started {\n  objc_setAssociatedObject(self, \"started\", $bool(started), OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n- (BOOL)isStarted {\n  return [objc_getAssociatedObject(self, \"started\") boolValue];\n}\n\n- (void)setAsynchronous:(BOOL)asynchronous {\n  objc_setAssociatedObject(self, \"asynchronous\", $bool(asynchronous), OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n}\n\n- (BOOL)isAsynchronous {\n  return [objc_getAssociatedObject(self, \"asynchronous\") boolValue];\n}\n\n#pragma mark - stubbed methods\n\n- (void)startSynchronous {\n  self.started = YES;\n  self.asynchronous = NO;\n  [[[self class] requests] addObject:self];\n}\n\n- (void)startAsynchronous {\n  self.started = YES;\n  self.asynchronous = YES;\n  [[[self class] requests] addObject:self];\n}\n\n- (void)start {\n  self.started = YES;\n  [[[self class] requests] addObject:self];\n}\n\n@end\n"
  },
  {
    "path": "JourneyTests/Support/EXPMatchers+toMatch.h",
    "content": "#import \"Expecta.h\"\n\nEXPMatcherInterface(toMatch, (NSString *regex));\n"
  },
  {
    "path": "JourneyTests/Support/EXPMatchers+toMatch.m",
    "content": "#import \"EXPMatchers+toMatch.h\"\n\nEXPMatcherImplementationBegin(toMatch, (NSString * regex)) {\n  BOOL actualIsString = [actual isKindOfClass:[NSString class]];\n  BOOL regexIsString = [regex isKindOfClass:[NSString class]];\n\n  prerequisite(^BOOL{\n    return actualIsString && regexIsString;\n  });\n\n  match(^BOOL{\n    NSPredicate *pred = [NSPredicate predicateWithFormat:@\"SELF MATCHES %@\", regex];\n    BOOL matchResult = [pred evaluateWithObject:(NSString *)actual];\n    return matchResult;\n  });\n\n  failureMessageForTo(^NSString *{\n    if(!actualIsString) return [NSString stringWithFormat:@\"%@ is not an instance of NSString\", EXPDescribeObject(actual)];\n    if(!regexIsString) return @\"the regex is not an instance of NSString\";\n    return [NSString stringWithFormat:@\"expected %@ to match %@\", EXPDescribeObject(actual), EXPDescribeObject(regex)];\n  });\n\n  failureMessageForNotTo(^NSString *{\n    if(!actualIsString) return [NSString stringWithFormat:@\"%@ is not an instance of NSString\", EXPDescribeObject(actual)];\n    if(!regexIsString) return @\"tthe regex is not an instance of NSString\";\n    return [NSString stringWithFormat:@\"expected %@ not to match %@\", EXPDescribeObject(actual), EXPDescribeObject(regex)];\n  });\n}\nEXPMatcherImplementationEnd\n"
  },
  {
    "path": "JourneyTests/Support/JourneyTests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.pathformac.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "JourneyTests/Support/TestHelper.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"Specta.h\"\n#define EXP_SHORTHAND\n#import \"Expecta.h\"\n#import \"EXPMatchers+toMatch.h\"\n#import \"OCMock.h\"\n#define HC_SHORTHAND\n#import \"OCHamcrest.h\"\n\n#import \"Application.h\"\n#import \"ASIHTTPRequest+Spec.h\"\n#import \"WebView+Spec.h\"\n\n#define loadStringFixture(fileName) \\\n[NSString stringWithContentsOfFile:[[[NSBundle bundleForClass:[self class]] resourcePath] stringByAppendingString:$str(@\"/%@\", (fileName))] encoding:NSUTF8StringEncoding error:NULL]\n\nvoid resetUserDefaultsAndKeychain(void);\n\n@interface TestHelper : NSObject\n@end\n"
  },
  {
    "path": "JourneyTests/Support/TestHelper.m",
    "content": "#import \"TestHelper.h\"\n#import \"SSKeychain.h\"\n\nvoid resetUserDefaultsAndKeychain(void) {\n  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n  [defaults removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];\n  NSArray *accounts = [SSKeychain accountsForService:kPathKeychainServiceName];\n  for(id account in accounts) {\n    [SSKeychain deletePasswordForService:kPathKeychainServiceName account:account];\n  }\n}\n\n@implementation TestHelper\n\n+ (void)initialize {\n}\n\n@end\n"
  },
  {
    "path": "JourneyTests/Support/WebView+Spec.h",
    "content": "#import <WebKit/WebKit.h>\n\n@interface WebView (Spec)\n\n+ (NSMutableArray *)javascripts;\n+ (void)setJavascriptReturnValue:(NSString *)returnValue;\n+ (NSString *)javascriptReturnValue;\n+ (void)resetJavascripts;\n\n- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;\n\n@end\n"
  },
  {
    "path": "JourneyTests/Support/WebView+Spec.m",
    "content": "#import \"TestHelper.h\"\n#import \"WebView+Spec.h\"\n#import \"ConciseKit.h\"\n\nstatic NSMutableArray *javascripts = nil;\nstatic NSString *javascriptReturnValue = nil;\n\n@implementation WebView (Spec)\n\n+ (void)initialize {\n  [super initialize];\n  [$ swizzleMethod:@selector(stringByEvaluatingJavaScriptFromString:) with:@selector(stringByEvaluatingJavaScriptFromString2:) in:[self class]];\n}\n\n+ (NSMutableArray *)javascripts {\n  @synchronized(self) {\n    if(!javascripts) {\n      javascripts = [NSMutableArray new];\n    }\n  }\n  return javascripts;\n}\n\n+ (void)stubJavascriptReturnValue:(NSString *)returnValue {\n  javascriptReturnValue = returnValue;\n}\n\n+ (void)resetJavascripts {\n  [[self javascripts] removeAllObjects];\n  javascriptReturnValue = nil;\n}\n\n- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script {\n  [[[self class] javascripts] addObject:script];\n  return javascriptReturnValue;\n}\n\n@end\n"
  },
  {
    "path": "LICENSE.md",
    "content": "```\nCopyright (c) 2012 Anideo and DecisiveBits.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n```\n\n-----\n\nThis software contains code from the following open source projects:\n\n* [ASIHTTPRequest](http://allseeing-i.com/ASIHTTPRequest)\n\n```\nCopyright (c) 2007-2012, All-Seeing Interactive\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n    * Neither the name of the All-Seeing Interactive nor the\n      names of its contributors may be used to endorse or promote products\n      derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY All-Seeing Interactive ''AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL All-Seeing Interactive BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nA different license may apply to other software included in this package, \nincluding GHUnit and Andrew Donoho's Reachability class. Please consult their \nrespective headers for the terms of their individual licenses.\n```\n\n* [ConciseKit](http://github.com/petejkim/ConciseKit)\n\n```\nCopyright (c) 2010-2012 Peter Jihoon Kim\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n```\n\n* [SBJson](http://stig.github.com/json-framework/)\n\n```\nCopyright (C) 2007-2012 Stig Brautaset. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n* Neither the name of the author nor the names of its contributors may be used\n  to endorse or promote products derived from this software without specific\n  prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n```\n\n* [SSKeychain](http://github.com/samsoffes/sskeychain)\n\n```\nCopyright (c) 2010-2012 Sam Soffes.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n```\n\n* [Specta](http://github.com/petejkim/specta)\n\n```\nCopyright (c) 2012 Peter Jihoon Kim\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n```\n\n* [Expecta](http://github.com/petejkim/expecta)\n\n```\nCopyright (c) 2011-2012 Peter Jihoon Kim\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n```\n\n* [OCMock](http://www.ocmock.org/)\n\n```\nCopyright (c) 2004-2011 by Mulle Kybernetik. All rights reserved.\n\nPermission to use, copy, modify and distribute this software and its documentation\nis hereby granted, provided that both the copyright notice and this permission\nnotice appear in all copies of the software, derivative works or modified versions,\nand any portions thereof, and that both notices appear in supporting documentation,\nand that credit is given to Mulle Kybernetik in all documents and publicity\npertaining to direct or indirect use of this code or its derivatives.\n\nTHIS IS EXPERIMENTAL SOFTWARE AND IT IS KNOWN TO HAVE BUGS, SOME OF WHICH MAY HAVE\nSERIOUS CONSEQUENCES. THE COPYRIGHT HOLDER ALLOWS FREE USE OF THIS SOFTWARE IN ITS\n\"AS IS\" CONDITION. THE COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY\nDAMAGES WHATSOEVER RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE\nOR OF ANY DERIVATIVE WORK.\n```\n\n* [OCHamcrest](https://github.com/jonreid/OCHamcrest)\n\n```\nBSD License\n\nCopyright 2012 hamcrest.org\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this list of\nconditions and the following disclaimer. Redistributions in binary form must reproduce\nthe above copyright notice, this list of conditions and the following disclaimer in\nthe documentation and/or other materials provided with the distribution.\n\nNeither the name of Hamcrest nor the names of its contributors may be used to endorse\nor promote products derived from this software without specific prior written\npermission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY\nWAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n```\n\n"
  },
  {
    "path": "Podfile",
    "content": "platform :osx\n\ndependency 'ASIHTTPRequest', '~> 1.8.1'\ndependency 'ConciseKit',     '~> 0.1.1'\ndependency 'SSKeychain',     '~> 0.1.2'\ndependency 'SBJson',         '~> 3.0.4'\n\ntarget :test, :exclusive => true do\n  dependency 'Specta',       '~> 0.1.4'\n  dependency 'Expecta',      '~> 0.1.3'\n  dependency 'OCMock',       '~> 1.77.1'\n  dependency 'OCHamcrest',   '~> 1.6'\nend\n\npost_install do |installer|\n  installer.project.targets.each do |target|\n    target.buildConfigurations.each do |config|\n      config.buildSettings['ARCHS'] = '$(ARCHS_STANDARD_32_64_BIT)'\n      config.buildSettings['MACOSX_DEPLOYMENT_TARGET'] = '10.6'\n      config.buildSettings['GCC_ENABLE_OBJC_GC'] = 'supported'\n    end\n  end\nend\n"
  },
  {
    "path": "README.md",
    "content": "# Journey - the Unofficial Path Client for Mac OS X\n\nDeveloped purely for **educational purposes only** by\n[@raingrove](http://twitter.com/raingrove) and the\n[@getdenso](http://getdenso.com/) team ([@iamclovin](http://twitter.com/iamclovin), [@ajhit406](http://twitter.com/ajhit406), and [@ntluan](http://twitter.com/ntluan)) at the 2nd Anideo hackathon in Sunny Singapore.\n\n### SCREENSHOT\n\n![Screenshot](https://github.com/petejkim/stuff/raw/master/images/journey-screenshot.png)\n\n\n### DOWNLOAD\n\n[Download v0.1.0](https://github.com/downloads/JourneyForMac/Journey/Journey%200.1.0.dmg)\n\n### BUILD INSTRUCTIONS\n\nThis project requires [Cocoapods](http://github.com/CocoaPods/CocoaPods).\n\nDo `pod install Journey.xcodeproj` to download and install project dependencies, and then open `Journey.xcworkspace`.\n\n### TODO\n\n1. Add missing specs.\n2. Implement database persistence.\n3. Use backbone.\n4. New post/Photo upload.\n\n### LICENSE\n\nCopyright (c) 2012 [Anideo](http://www.anideo.com/) and [DecisiveBits](http://www.decisivebits.com). This software is licensed under the MIT License.\n\nDifferent licenses may apply to other software that this project depends on, please check [LICENSE.md](https://github.com/JourneyForMac/Journey/blob/master/LICENSE.md) for their licenses.\n\nIncludes icons from [Glyphicons](http://glyphicons.com/).\n\n"
  }
]