diff --git a/ApplicationController.h b/ApplicationController.h
index 33f981a..fa316ca 100644
--- a/ApplicationController.h
+++ b/ApplicationController.h
@@ -11,12 +11,11 @@
@interface ApplicationController : NSObject
{
- IBOutlet NSWindow *window;
- IBOutlet PBGitRepository* repository;
+ IBOutlet NSWindow *window;
IBOutlet id firstResponder;
- NSPersistentStoreCoordinator *persistentStoreCoordinator;
- NSManagedObjectModel *managedObjectModel;
- NSManagedObjectContext *managedObjectContext;
+ NSPersistentStoreCoordinator *persistentStoreCoordinator;
+ NSManagedObjectModel *managedObjectModel;
+ NSManagedObjectContext *managedObjectContext;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator;
diff --git a/ApplicationController.m b/ApplicationController.m
index 4f15879..3441103 100644
--- a/ApplicationController.m
+++ b/ApplicationController.m
@@ -9,41 +9,41 @@
#import "ApplicationController.h"
#import "PBGitRevisionCell.h"
#import "PBDetailController.h"
+#import "PBRepositoryDocumentController.h"
@implementation ApplicationController
-@synthesize repository;
-
-- (ApplicationController*) init
+- (ApplicationController*)init
{
#ifndef NDEBUG
[NSApp activateIgnoringOtherApps:YES];
#endif
- if([[NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/QuickLookUI.framework"] load])
- NSLog(@"Quick Look loaded!");
-
- // Find the current repository
- char* a = getenv("PWD");
- NSString* path;
- if (a != nil)
- path = [NSString stringWithCString:a];
- else {
- // Show an open dialog
- NSOpenPanel* openDlg = [NSOpenPanel openPanel];
- [openDlg setCanChooseFiles:NO];
- [openDlg setCanChooseDirectories:YES];
- if ( [openDlg runModalForDirectory:nil file:nil] == NSOKButton )
- path = [openDlg filename];
- else
- exit(1);
+ if(self = [super init]) {
+ if([[NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/QuickLookUI.framework"] load])
+ NSLog(@"Quick Look loaded!");
}
-
- self.repository = [PBGitRepository repositoryWithPath:path];
- [[PBDetailController alloc] initWithRepository:self.repository];
+
return self;
}
+- (void)applicationDidFinishLaunching:(NSNotification*)notification
+{
+ // Only try to open a default document if there are no documents open already.
+ // For example, the application might have been launched by double-clicking a .git repository,
+ // or by dragging a folder to the app icon
+ if ([[[PBRepositoryDocumentController sharedDocumentController] documents] count] == 0) {
+ // Try to open the current directory as a git repository
+ NSURL *url = [NSURL fileURLWithPath:[[NSFileManager defaultManager] currentDirectoryPath]];
+ NSError *error = nil;
+ if (!url || [[PBRepositoryDocumentController sharedDocumentController] openDocumentWithContentsOfURL:url display:YES error:&error] == NO) {
+ // The current directory could not be opened (most likely it’s not a git repository)
+ // so show an open panel for the user to select a repository to view
+ [[PBRepositoryDocumentController sharedDocumentController] openDocument:self];
+ }
+ }
+}
+
- (void) windowWillClose: sender
{
[firstResponder terminate: sender];
diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib
index 54c255a..099b19a 100644
--- a/English.lproj/MainMenu.xib
+++ b/English.lproj/MainMenu.xib
@@ -8,7 +8,7 @@
352.00
@@ -1835,6 +1851,7 @@
848.IBPluginDependency
851.IBPluginDependency
852.IBPluginDependency
+ 908.IBPluginDependency
YES
@@ -1996,7 +2013,7 @@
- {{478, 761}, {199, 203}}
+ {{413, 533}, {199, 203}}
@@ -2005,6 +2022,7 @@
+ com.apple.InterfaceBuilder.CocoaPlugin
@@ -2027,11 +2045,99 @@
- 906
+ 908
YES
+
+ ApplicationController
+ NSObject
+
+ YES
+
+ YES
+ saveAction:
+ switchBranch:
+
+
+ YES
+ id
+
+
+
+
+ YES
+
+ YES
+ firstResponder
+ repository
+ window
+
+
+ YES
+
+ PBGitRepository
+ NSWindow
+
+
+
+ IBProjectSource
+ ApplicationController.h
+
+
+
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ IBUserSource
+
+
+
+
+ PBGitRepository
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
+
+
+
PBGitRepository
NSDocument
@@ -2054,13 +2160,45 @@
- IBProjectSource
+
PBGitRepository.h
- PBGitRepository
- NSObject
+
+
+
+ YES
+
+ YES
+
+
+
+
+
+ YES
+ id
+
+
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
+
+
+
+
+ PBRepositoryDocumentController
+ NSDocumentController
YES
@@ -2080,26 +2218,20 @@
- IBUserSource
-
+
+ PBRepositoryDocumentController.h
-
-
+ PBRepositoryDocumentController
+ NSDocumentController
YES
-
+
YES
-
-
-
YES
- id
-
-
@@ -2116,68 +2248,6 @@
-
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
-
-
-
-
-
- ApplicationController
-
-
- YES
-
- YES
- saveAction:
- switchBranch:
-
-
- YES
- id
-
-
-
-
- YES
-
- YES
- firstResponder
- repository
- window
-
-
- YES
-
- PBGitRepository
- NSWindow
-
-
-
-
- ApplicationController.h
-
-
0
@@ -2185,300 +2255,304 @@
3
YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA
-AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxECBQALAAwAMQA1ADkAQABD
-AEQASABMAHUAewCLAJAAkQCSAJcAmACZAJwAoAChAKQApQCpAK0AtAC4ALkAugC+AMUAywDMAM0AzgDS
-ANkA2gDbAN8A6ADsAO0A7gDvAPMA+gD7APwA/QEBAQkBCgELAQ8BFgEaARsBHAEdASEBKAEpASoBKwEv
-ATYBOgE7ATwBQgFJAU4BTwFQAVEBVgFZAVoBWwFeAWIBaQFqAWsBbAFwAXcBeAF5AXoBfgGFAYYBhwGI
-AYwBkwGUAZUBmQGgAaEBogGjAacBrwGwAbEBtQG8Ab0BvgHDAcQByAHQAdEB0gHTAdcB3gHjAeQB5QHq
-AfEB8gHzAfcB/gH/AgACAQIGAg0CDgIPAhQCGwIcAh0CIQIoAiwCLQIuAi8CMwI6AjsCPAI9AkECSAJJ
-AkoCSwJPAlYCVwJYAlkCXQJkAmUCZgJqAnICcwJ0AngCfwKAAoECggKHAo4CjwKQApEClQKcAqACoQKi
-AqMCpwKuAq8CsAKxArYCvQK+Ar8CwALEAssCzALNAs4C0gMnAy4DLwMwAzEDNQM3A0IDQwNEA0kDSwNO
-A08DWgNdA2UDbgN3A3wDQwN9A38DjwOYA6EDXANDA6oDswNDA7QDuwPCA8MDzANDA80D0QPXA94D3wPm
-A+cD7gPvA/gDQwP5A/4EBwNDBAgEFgQfBCYEJwQoBDEEOgQ7A0MERARNA0METgRXADgEWgRjA0MEZARm
-BGoEawR0A0MEdQR3BH4EhwSIBI8EkASRBJQEogSpBKoEqwS0BLsEvATFBMYEzwSTA0ME2ATZBNsFMAWG
-BdwF3QXeBd8F4AXhBeIF4wXkBeUF5gXnBegF6QXqBesF7AXtBe4F7wXwBfEF8gXzBfQF9QX2BfcF+AX5
-BfoF+wX8Bf0F/gX/BgAGAQYCBgMGBAYFBgYGBwYIBgkGCgYLBgwGDQYOBg8GEAYRBhIGEwYUBhUGFgYX
-BhgGGQYaBhsGHAYdBh4GHwYgBiEGIgYjBiQGJQYmBicGKAYpBioGKwYsBi0GMAYzBq8HKwcsBy0HLgcv
-BzAHMQcyBzMHNAc1BzYHNwc4BzkHOgc7BzwHPQc+Bz8HQAdBB0IHQwdEB0UHRgdHB0gHSQdKB0sHTAdN
-B04HTwdQB1EHUgdTB1QHVQdWB1cHWAdZB1oHWwdcB10HXgdfB2AHYQdiB2MHZAdlB2YHZwdoB2kHagdr
-B2wHbQduB28HcAdxB3IHcwd0B3UHdgd3B3gHeQd6B3sHfAd9B34HfweAB4EHggeDB4QHhQeGB4cHiAeJ
-B4oHiweMB40HjgePB5AHkQeSB5MHlAeVB5YHlweYB5kHmgebB5wHnQeeB58HoAehB6IHowekB6cHqget
-VSRudWxs3xASAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUA
-JgAnACgAKQAqACsALAAtAC4ALwAwVk5TUm9vdFYkY2xhc3NdTlNPYmplY3RzS2V5c18QD05TQ2xhc3Nl
-c1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eU9pZHNWYWx1ZXNdTlNDb25uZWN0aW9uc1tOU05hbWVzS2V5
-c1tOU0ZyYW1ld29ya11OU0NsYXNzZXNLZXlzWk5TT2lkc0tleXNdTlNOYW1lc1ZhbHVlc18QGU5TQWNj
-ZXNzaWJpbGl0eUNvbm5lY3RvcnNdTlNGb250TWFuYWdlcl8QEE5TVmlzaWJsZVdpbmRvd3NfEA9OU09i
-amVjdHNWYWx1ZXNfEBdOU0FjY2Vzc2liaWxpdHlPaWRzS2V5c1lOU05leHRPaWRcTlNPaWRzVmFsdWVz
-gAKBAgSAy4EBhYECA4AJgQExgAaBAYSBAYaBATKBAgGAAIAHgQEwgQICEQOMgQGH0gAOADIAMwA0W05T
-Q2xhc3NOYW1lgAWAA9IADgA2ADcAOFlOUy5zdHJpbmeABF1OU0FwcGxpY2F0aW9u0gA6ADsAPAA9WCRj
-bGFzc2VzWiRjbGFzc25hbWWjAD0APgA/XxAPTlNNdXRhYmxlU3RyaW5nWE5TU3RyaW5nWE5TT2JqZWN0
-0gA6ADsAQQBCogBCAD9eTlNDdXN0b21PYmplY3RfEBBJQkNvY29hRnJhbWV3b3Jr0gAOAEUARgBHWk5T
-Lm9iamVjdHOACKDSADoAOwBJAEqjAEoASwA/XE5TTXV0YWJsZVNldFVOU1NldNIADgBFAE0AToDKrxAm
-AE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBs
-AG0AbgBvAHAAcQByAHMAdIAKgBiAHYAjgCeALYAygDaAPIBBgEaATIBRgFaAW4BggGSAaYBtgHGAc4B4
-gH2AgYCGgIqAjoCUgJmAnoCjgKeAq4CwgLWAu4DAgMXTAA4AdgB3AHgAeQB6WE5TU291cmNlV05TTGFi
-ZWyAF4ALgBbYAA4AfAB9AH4AfwCAAIEAggCDAIQAhQCGAIcAiACJAIpXTlNUaXRsZV8QEU5TS2V5RXF1
-aXZNb2RNYXNrWk5TS2V5RXF1aXZdTlNNbmVtb25pY0xvY1lOU09uSW1hZ2VcTlNNaXhlZEltYWdlVk5T
-TWVudYAVgA0SABAAAIAOEn////+AD4ATgAzTAA4AfACMAI0AjgCPW05TTWVudUl0ZW1zgNGA4YDiVkRl
-bGV0ZVDTAA4AMgCTAJQAlQCWXk5TUmVzb3VyY2VOYW1lgBKAEIARV05TSW1hZ2VfEA9OU01lbnVDaGVj
-a21hcmvSADoAOwCaAJuiAJsAP18QEE5TQ3VzdG9tUmVzb3VyY2XTAA4AMgCTAJQAlQCfgBKAEIAUXxAQ
-TlNNZW51TWl4ZWRTdGF0ZdIAOgA7AKIAo6IAowA/Wk5TTWVudUl0ZW1XZGVsZXRlOtIAOgA7AKYAp6MA
-pwCoAD9fEBVOU05pYkNvbnRyb2xDb25uZWN0b3JeTlNOaWJDb25uZWN0b3LTAA4AdgB3AHgAqwCsgBeA
-GYAc2AAOAHwAfQB+AH8AgACBAIIAgwCvAIUAhgCHAIgAiQCzgBWAG4AOgA+AE4Aa0wAOAHwAjACNALYA
-t4DRgOmA618QG0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZ18QHnRvZ2dsZUNvbnRpbnVvdXNTcGVs
-bENoZWNraW5nOtMADgB2AHcAeAC8AL2AF4AegCLYAA4AfAB9AH4AfwCAAIEAggCDAMAAhQDBAIcAiACJ
-AMSAFYAggCGAD4ATgB/UAA4AfADGAIwAjQDIAMkAylZOU05hbWWA0YEBGYEBHIEBGlhNaW5pbWl6ZVFt
-XxATcGVyZm9ybU1pbmlhdHVyaXplOtMADgB2AHcAeADQANGAF4AkgCbYAA4AfAB9AH4AfwCAAIEAggCD
-ANQAhQCGAIcAiACJAMSAFYAlgA6AD4ATgB9UWm9vbVxwZXJmb3JtWm9vbTrTAA4AdgB3AHgA3QDegBeA
-KIAs2QAOAHwAfQB+AH8AgACBAIIA4ACDAOIAhQDjAIcAiACJAOYA51VOU1RhZ4AVgCqAK4APgBOAKRAC
-0wAOAHwAjACNAOoA64DRgNqA21lGaW5kIE5leHRRZ18QF3BlcmZvcm1GaW5kUGFuZWxBY3Rpb2460wAO
-AHYAdwB4APEA8oAXgC6AMdgADgB8AH0AfgB/AIAAgQCCAIMA9QCFAPYAhwCIAIkAioAVgC+AMIAPgBOA
-DFRDb3B5UWNVY29weTrTAA4AdgB3AHgA/wDegBeAM4As2QAOAHwAfQB+AH8AgACBAIIA4ACDAQMAhQEE
-AIcAiACJAOYBCIAVgDSANYAPgBOAKRADXUZpbmQgUHJldmlvdXNRR9MADgB2AHcAeAENAQ6AF4A3gDvY
-AA4AfAB9AH4AfwCAAIEAggCDAREAhQESAIcAiACJARWAFYA5gDqAD4ATgDjTAA4AfACMAI0BGAEZgNGB
-AQuBAQ1ZVHJlZSBWaWV3UTNcc2V0VHJlZVZpZXc60wAOAHYAdwB4AR8BIIAXgD2AQNgADgB8AH0AfgB/
-AIAAgQCCAIMBIwCFASQAhwCIAIkAioAVgD6AP4APgBOADFVQYXN0ZVF2VnBhc3RlOtMADgB2AHcAeAEt
-AS6AF4BCgEXXAA4AfAB+AH8AgACBAIIAgwExAIYAhwCIAIkBNYAVgESADoAPgBOAQ9MADgB8AIwAjQE4
-ATmA0YD6gPxdU3RvcCBTcGVha2luZ11zdG9wU3BlYWtpbmc61AAOAT0AdgB3AHgAHwFAAUFdTlNEZXN0
-aW5hdGlvboAXgAKAR4BL2AAOAHwAfQB+AH8AgACBAIIAgwFEAIUBRQCHAIgAiQFIgBWASYBKgA+AE4BI
-1AAOAHwAxgCMAI0BSwFMAU2A0YD+gQEHgQEAXEhpZGUgR2l0VGVzdFFoVWhpZGU61AAOAT0AdgB3AVIA
-HwFUAVWAUIACgE2AT9IADgAyADMBWIAFgE5fEBVBcHBsaWNhdGlvbkNvbnRyb2xsZXJeZmlyc3RSZXNw
-b25kZXLSADoAOwFcAV2jAV0AqAA/XxAUTlNOaWJPdXRsZXRDb25uZWN0b3LTAA4AdgB3AHgBYAFhgBeA
-UoBV2AAOAHwAfQB+AH8AgACBAIIAgwFkAIUBZQCHAIgAiQCKgBWAU4BUgA+AE4AMVFVuZG9RelV1bmRv
-OtMADgB2AHcAeAFuAW+AF4BXgFrYAA4AfAB9AH4AfwCAAIEAggCDAXIAhQFzAIcAiACJAIqAFYBYgFmA
-D4ATgAxaU2VsZWN0IEFsbFFhWnNlbGVjdEFsbDrTAA4AdgB3AHgBfAF9gBeAXIBf2AAOAHwAfQB+AH8A
-gACBAIIAgwGAAIUBgQCHAIgAiQDmgBWAXYBegA+AE4ApXxARSnVtcCB0byBTZWxlY3Rpb25Ral8QHWNl
-bnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE60wAOAHYAdwB4AYoBi4AXgGGAY9gADgB8AH0AfgB/AIAA
-gQCCAIMBjgCFAIYAhwCIAIkAxIAVgGKADoAPgBOAH18QEkJyaW5nIEFsbCB0byBGcm9udF8QD2FycmFu
-Z2VJbkZyb250OtMADgB2AHcAeAGXAZiAF4BlgGjYAA4AfAB9AH4AfwCAAIEAggCDAZsAhQGcAIcAiACJ
-ARWAFYBmgGeAD4ATgDhdRGV0YWlsZWQgVmlld1ExXxAQc2V0RGV0YWlsZWRWaWV3OtMADgB2AHcAeAGl
-AN6AF4BqgCzZAA4AfAB9AH4AfwCAAIEAggDgAIMBqQCFAaoAhwCIAIkA5gGugBWAa4BsgA+AE4ApEAdf
-EBZVc2UgU2VsZWN0aW9uIGZvciBGaW5kUWXTAA4AdgB3AHgBswG0gBeAboBw1wAOAHwAfgB/AIAAgQCC
-AIMBtwCGAIcAiACJATWAFYBvgA6AD4ATgENeU3RhcnQgU3BlYWtpbmdec3RhcnRTcGVha2luZzrUAA4B
-PQB2AHcBUgFUAB8BwoBQgE2AAoByWGRlbGVnYXRl0wAOAHYAdwB4AcYBx4AXgHSAd9gADgB8AH0AfgB/
-AIAAgQCCAIMBygHLAcwAhwCIAIkBFYAVgHUSABgAAIB2gA+AE4A4XFNob3cgVG9vbGJhclF0XxATdG9n
-Z2xlVG9vbGJhclNob3duOtMADgB2AHcAeAHVAdaAF4B5gHzYAA4AfAB9AH4AfwCAAIEAggCDAdkAhQCG
-AIcAiACJAd2AFYB7gA6AD4ATgHrUAA4AfADGAIwAjQHgAeEB4oDRgQETgQEVgQEUWkNsZWFyIE1lbnVf
-EBVjbGVhclJlY2VudERvY3VtZW50czrUAA4BPQB2AHcAeAAfAegB6YAXgAKAfoCA1wAOAHwAfgB/AIAA
-gQCCAIMB7ACGAIcAiACJAUiAFYB/gA6AD4ATgEhaQWJvdXQgR2l0WF8QHW9yZGVyRnJvbnRTdGFuZGFy
-ZEFib3V0UGFuZWw60wAOAHYAdwB4AfUB9oAXgIKAhdgADgB8AH0AfgB/AIAAgQCCAIMB+QCFAfoAhwCI
-AIkBFYAVgIOAhIAPgBOAOFhSYXcgVmlld1EyW3NldFJhd1ZpZXc61AAOAT0AdgB3AHgAHwIEAgWAF4AC
-gIeAidgADgB8AH0AfgB/AIAAgQCCAIMCCAHLAUUAhwCIAIkBSIAVgIiASoAPgBOASFtIaWRlIE90aGVy
-c18QFmhpZGVPdGhlckFwcGxpY2F0aW9uczrUAA4BPQB2AHcAeAAfAhICE4AXgAKAi4CN2AAOAHwAfQB+
-AH8AgACBAIIAgwIWAIUAhgCHAIgAiQFIgBWAjIAOgA+AE4BIWFNob3cgQWxsXxAWdW5oaWRlQWxsQXBw
-bGljYXRpb25zOtMADgB2AHcAeAIfAiCAF4CPgJPYAA4AfAB9AH4AfwCAAIEAggCDAiMAhQIkAIcAiACJ
-AieAFYCRgJKAD4ATgJDTAA4AfACMAI0CKgIrgNGBASCBASFVQ2xvc2VRd11wZXJmb3JtQ2xvc2U60wAO
-AHYAdwB4AjECMoAXgJWAmNgADgB8AH0AfgB/AIAAgQCCAIMCNQCFAjYAhwCIAIkCJ4AVgJaAl4APgBOA
-kGYAUAByAGkAbgB0ICZRcFZwcmludDrTAA4AdgB3AHgCPwJAgBeAmoCd2AAOAHwAfQB+AH8AgACBAIIA
-gwJDAIUCRACHAIgAiQCzgBWAm4CcgA+AE4AabgBTAGgAbwB3ACAAUwBwAGUAbABsAGkAbgBnICZROl8Q
-D3Nob3dHdWVzc1BhbmVsOtMADgB2AHcAeAJNAk6AF4CfgKLYAA4AfAB9AH4AfwCAAIEAggCDAlEAhQJS
-AIcAiACJAIqAFYCggKGAD4ATgAxUUmVkb1FaVXJlZG860wAOAHYAdwB4AlsCXIAXgKSAptgADgB8AH0A
-fgB/AIAAgQCCAIMCXwCFAIYAhwCIAIkBFYAVgKWADoAPgBOAOG8QEgBDAHUAcwB0AG8AbQBpAHoAZQAg
-AFQAbwBvAGwAYgBhAHIgJl8QH3J1blRvb2xiYXJDdXN0b21pemF0aW9uUGFsZXR0ZTrTAA4AdgB3AHgC
-aADegBeAqIAs2QAOAHwAfQB+AH8AgACBAIIA4ACDAmwAhQJtAIcAiACJAOYCcYAVgKmAqoAPgBOAKRAB
-ZQBGAGkAbgBkICZRZtMADgB2AHcAeAJ2AneAF4CsgK/YAA4AfAB9AH4AfwCAAIEAggCDAnoAhQJ7AIcA
-iACJAIqAFYCtgK6AD4ATgAxTQ3V0UXhUY3V0OtQADgE9AHYAdwB4AVQChQKGgBeATYCxgLTYAA4AfAB9
-AH4AfwCAAIEAggCDAokAhQKKAIcAiACJAieAFYCygLOAD4ATgJBUU2F2ZVFzW3NhdmVBY3Rpb2460wAO
-AHYAdwB4ApMClIAXgLaAutgADgB8AH0AfgB/AIAAgQCCAIMClwCFApgAhwCIAIkCm4AVgLiAuYAPgBOA
-t9MADgB8AIwAjQKeAp+A0YDPgNBcR2l0VGVzdCBIZWxwUT9Zc2hvd0hlbHA60wAOAHYAdwB4AqUCpoAX
-gLyAv9gADgB8AH0AfgB/AIAAgQCCAIMCqQCFAqoAhwCIAIkAs4AVgL2AvoAPgBOAGl5DaGVjayBTcGVs
-bGluZ1E7XmNoZWNrU3BlbGxpbmc61AAOAT0AdgB3AHgAHwK0ArWAF4ACgMGAxNgADgB8AH0AfgB/AIAA
-gQCCAIMCuACFArkAhwCIAIkBSIAVgMKAw4APgBOASFlRdWl0IEdpdFhRcVp0ZXJtaW5hdGU60wAOAHYA
-dwB4AsICw4AXgMaAydgADgB8AH0AfgB/AIAAgQCCAIMCxgCFAscAhwCIAIkCJ4AVgMeAyIAPgBOAkGsA
-UABhAGcAZQAgAFMAZQB0AHUAcCAmUVBecnVuUGFnZUxheW91dDrSADoAOwLPAtCjAtAC0QA/Xk5TTXV0
-YWJsZUFycmF5V05TQXJyYXnSAA4ARQLTAtSBAS+vEFIC1QKbAsIC2AFAAdUBigLcAOYC3gDdAuAC4QDx
-AW4ChQLlAuYBNQLoAIoC6gLrAegC7QLuAu8C8ALxAvIC8wKlAh8C9gB5AXwA0AC8AfUCtAGlAmgBVAHd
-AwECMQMDAwQCTQEtAicCdgI/AcYDCwMMAw0AqwMPAlsBHwMSAxMDFAMVAxYCkwIEAZcBswD/AMQBYAMe
-AhIDIAFIAyIAswENARUDJoDMgLeAxoDSgEeAeYBhgNmAKYDcgCiA3YD9gC6AV4CxgQEIgOyAQ4EBCoAM
-gPWA84B+gQEFgOOBAQ6BARCA7oD5gQEWgLyAj4EBHYALgFyAJIAegIKAwYBqgKiATYB6gOWAlYDVgOiA
-n4BCgJCArICagHSBASaBAQaA3oAZgQEbgKSAPYDxgQErgQElgOSBAQGAtoCHgGWAboAzgB+AUoEBAoCL
-gQEigEiBASiAGoA3gDiA99gADgB8AH0AfgB/AIAAgQCCAIMDKQCFAyoAhwCIAIkCJ4AVgM2AzoAPgBOA
-kGgAUwBhAHYAZQAgAEEAcyAmUVNUSGVscNIADgBFAE0DM4DKoQKTgLbSADoAOwM2AIKiAIIAP9oADgM4
-AHwAfQB+AH8AgACBAIIDOQCDAwMDPACFAIYAhwCIAIkBSANBWU5TU3VibWVudVhOU0FjdGlvboAVgNWA
-04AOgA+AE4BIgNRYU2VydmljZXNec3VibWVudUFjdGlvbjrUAA4AfADGAIwAjQNGA0cDSIDRgNaA2IDX
-0gAOADYANwNCgATSAA4ARQBNA02AyqBfEA9fTlNTZXJ2aWNlc01lbnXaAA4AfAB9A1AAfgNRAH8AgACB
-AIIAgwCGAIUDVACGA1QAhwCIAIkBSF1OU0lzU2VwYXJhdG9yXE5TSXNEaXNhYmxlZIAVgA4JgA4JgA+A
-E4BI0gAOADYANwNcgARURmluZNIADgBFAE0DX4DKpQJoAN0A/wGlAXyAqIAogDOAaoBc2gAOAHwAfQNQ
-AH4DUQB/AIAAgQCCAIMAhgCFA1QAhgNUAIcAiACJARWAFYAOCYAOCYAPgBOAONoADgM4AHwAfQB+AH8A
-gACBAIIDOQCDAIoDcQCFAIYAhwCIAIkDDQN2gBWADIDfgA6AD4ATgN6A4NQADgB8AMYAjACNA3kDegN7
-gNGBASmBAS6BASpURWRpdNIADgA2ADcDfIAE0gAOAEUATQOBgMqtAWACTQLuAnYA8QEfAHkBbgMVAwED
-BALxAvKAUoCfgOOArIAugD2AC4BXgOSA5YDogO6A+doADgB8AH0DUAB+A1EAfwCAAIEAggCDAIYAhQNU
-AIYDVACHAIgAiQCKgBWADgmADgmAD4ATgAzaAA4AfAB9A1AAfgNRAH8AgACBAIIAgwCGAIUDVACGA1QA
-hwCIAIkAioAVgA4JgA4JgA+AE4AM2gAOAzgAfAB9AH4AfwCAAIEAggM5AIMA5gOkAIUAhgCHAIgAiQCK
-A6mAFYApgOaADoAPgBOADIDn2gAOAzgAfAB9AH4AfwCAAIEAggM5AIMAswC2AIUAhgCHAIgAiQCKA7KA
-FYAagOmADoAPgBOADIDqXxAUU3BlbGxpbmcgYW5kIEdyYW1tYXLSAA4ARQBNA7aAyqQCPwKlAKsC5oCa
-gLyAGYDs2AAOAHwAfQB+AH8AgACBAIIAgwO9AIUAhgCHAIgAiQCzgBWA7YAOgA+AE4AaXxAbQ2hlY2sg
-R3JhbW1hciBXaXRoIFNwZWxsaW5n2gAOAzgAfAB9AH4AfwCAAIEAggM5AIMDEgPGAIUAhgCHAIgAiQCK
-A8uAFYDxgO+ADoAPgBOADIDwXVN1YnN0aXR1dGlvbnPTAA4AfACMAI0DxgPQgNGA74Dy0gAOAEUATQPT
-gMqjAusC6gMmgPOA9YD32AAOAHwAfQB+AH8AgACBAIIAgwPZAIUCbQCHAIgAiQMSgBWA9ICqgA+AE4Dx
-XxAQU21hcnQgQ29weS9QYXN0ZdgADgB8AH0AfgB/AIAAgQCCAIMD4QCFAOMAhwCIAIkDEoAVgPaAK4AP
-gBOA8VxTbWFydCBRdW90ZXPYAA4AfAB9AH4AfwCAAIEAggCDA+kAhQEEAIcAiACJAxKAFYD4gDWAD4AT
-gPFbU21hcnQgTGlua3PaAA4DOAB8AH0AfgB/AIAAgQCCAzkAgwE1ATgAhQCGAIcAiACJAIoD94AVgEOA
-+oAOgA+AE4AMgPtWU3BlZWNo0gAOAEUATQP7gMqiAbMBLYBugELaAA4DOAB8AH0AfgB/AIAAgQCCAzkA
-gwFIAUsAhQCGAIcAiACJAw0EBoAVgEiA/oAOgA+AE4DegP9UR2l0WNIADgBFAE0ECoDKqwHoAxYDHgLt
-AtgDDAFAAgQCEgLcArSAfoEBAYEBAoEBBYDSgQEGgEeAh4CLgNmAwdoADgB8AH0DUAB+A1EAfwCAAIEA
-ggCDAIYAhQNUAIYDVACHAIgAiQFIgBWADgmADgmAD4ATgEjYAA4AfAB9AH4AfwCAAIEAggCDBCEAhQQi
-AIcAiACJAUiAFYEBA4EBBIAPgBOASGwAUAByAGUAZgBlAHIAZQBuAGMAZQBzICZRLNoADgB8AH0DUAB+
-A1EAfwCAAIEAggCDAIYAhQNUAIYDVACHAIgAiQFIgBWADgmADgmAD4ATgEjaAA4AfAB9A1AAfgNRAH8A
-gACBAIIAgwCGAIUDVACGA1QAhwCIAIkBSIAVgA4JgA4JgA+AE4BIXF9OU0FwcGxlTWVuddoADgM4AHwA
-fQB+AH8AgACBAIIDOQCDApsCngCFAIYAhwCIAIkDDQRDgBWAt4DPgA6AD4ATgN6BAQnaAA4DOAB8AH0A
-fgB/AIAAgQCCAzkAgwEVARgAhQCGAIcAiACJAw0ETIAVgDiBAQuADoAPgBOA3oEBDFRWaWV30gAOAEUA
-TQRQgMqmAcYCWwLeAZcB9QENgHSApIDcgGWAgoA30gAOADIAMwRZgAWBAQ/aAA4DOAB8AH0AfgB/AIAA
-gQCCAzkAgwHdBF0AhQCGAIcAiACJAicEYoAVgHqBARGADoAPgBOAkIEBEltPcGVuIFJlY2VudNIADgA2
-ADcEY4AE0gAOAEUATQRogMqhAdWAeV8QFl9OU1JlY2VudERvY3VtZW50c01lbnXaAA4DOAB8AH0AfgB/
-AIAAgQCCAzkAgwDEBG4AhQCGAIcAiACJAw0Ec4AVgB+BAReADoAPgBOA3oEBGFZXaW5kb3fSAA4ANgA3
-BHSABNIADgBFAE0EeYDKpAC8ANADDwGKgB6AJIEBG4Bh2gAOAHwAfQNQAH4DUQB/AIAAgQCCAIMAhgCF
-A1QAhgNUAIcAiACJAMSAFYAOCYAOCYAPgBOAH15fTlNXaW5kb3dzTWVuddgADgB8AH0AfgB/AIAAgQCC
-AIMEigCFBIsAhwCIAIkCJ4AVgQEegQEfgA+AE4CQU05ld1Fu0gAOADYANwSTgARURmlsZdIADgBFAE0E
-loDKqwL2AyAC8AMUAh8ChQLVAwsDIgLCAjGBAR2BASKBARCBASWAj4CxgMyBASaBASiAxoCV2AAOAHwA
-fQB+AH8AgACBAIIAgwSkAIUEpQCHAIgAiQIngBWBASOBASSAD4ATgJBXT3Blbi4uLlFv2gAOAHwAfQNQ
-AH4DUQB/AIAAgQCCAIMAhgCFA1QAhgNUAIcAiACJAieAFYAOCYAOCYAPgBOAkNcADgB8AH4AfwCAAIEA
-ggCDBLYAhgCHAIgAiQIngBWBASeADoAPgBOAkF8QD1JldmVydCB0byBTYXZlZNoADgB8AH0DUAB+A1EA
-fwCAAIEAggCDAIYAhQNUAIYDVACHAIgAiQIngBWADgmADgmAD4ATgJBYTWFpbk1lbnXSAA4ARQBNBMiA
-yqYC4QMTAuAC6ALzAuWA/YEBK4DdgQEKgQEWgQEI2gAOAzgAfAB9AH4AfwCAAIEAggM5AIMCJwTSAIUA
-hgCHAIgAiQMNBNeAFYCQgQEsgA6AD4ATgN6BAS1bX05TTWFpbk1lbnXSADoAOwTaAtGiAtEAP9IADgBF
-AtME3YEBL68QUgInAuUCJwFIAUgB3QDEAUgDAQEVAOYDDQMNAIoAigInAw0AswLyAw0C4AMSAxIBSAFI
-AIoAHwInAIoAigMNALMCJwInAIoA5gDEAMQBFQFIAOYA5gAfAvAAigInAtgAigCKATUDEwCKALMBFQIn
-AUgAHwCzAMQBFQCKAvEDDQInAIoBSAKbAUgBFQE1AOYC8wCKAUgBSAInAuECJwMEARUC6AMSgJCBAQiA
-kIBIgEiAeoAfgEiA5YA4gCmA3oDegAyADICQgN6AGoD5gN6A3YDxgPGASIBIgAyAAoCQgAyADIDegBqA
-kICQgAyAKYAfgB+AOIBIgCmAKYACgQEQgAyAkIDSgAyADIBDgQErgAyAGoA4gJCASIACgBqAH4A4gAyA
-7oDegJCADIBIgLeASIA4gEOAKYEBFoAMgEiASICQgP2AkIDogDiBAQqA8dIADgBFAtMFMoEBL68QUwKb
-AtUCwgLYAUAB1QGKAtwA5gLeAN0C4ALhAPEBbgKFAuUC6AE1AuYAigLqAusC7gLyAB8C7wFUAvMC8QHo
-Au0A0AC8AHkC8AIfAfUC9gK0AXwBpQJoAqUDAQHdAcYCMQMEAk0DAwInAnYBLQI/AwsDDAMNAKsDDwJb
-AR8DEgMTAxUDFAMWApMCBAGXAbMA/wDEAWADHgISAyABSAMiALMBDQEVAyaAt4DMgMaA0oBHgHmAYYDZ
-gCmA3IAogN2A/YAugFeAsYEBCIEBCoBDgOyADID1gPOA44D5gAKBAQ6ATYEBFoDugH6BAQWAJIAegAuB
-ARCAj4CCgQEdgMGAXIBqgKiAvIDlgHqAdICVgOiAn4DVgJCArIBCgJqBASaBAQaA3oAZgQEbgKSAPYDx
-gQErgOSBASWBAQGAtoCHgGWAboAzgB+AUoEBAoCLgQEigEiBASiAGoA3gDiA99IADgBFAtMFiIEBL68Q
-UwWJBYoFiwWMBY0FjgWPBZAFkQWSBZMFlAWVBZYFlwWYBZkFmgWbBZwFnQWeBZ8FoAWhBaIFowFYBaUF
-pgWnBagFqQWqBasFrAWtBa4FrwWwBbEFsgWzBbQFtQW2BbcFuAW5BboFuwW8Bb0FvgW/BcAFwQN5BcMF
-xAXFBcYFxwXIBckFygXLBcwFzQXOBc8F0AXRBdIF0wXUBdUF1gXXBdgF2QXaBduBATOBATSBATWBATaB
-ATeBATiBATmBATqBATuBATyBAT2BAT6BAT+BAUCBAUGBAUKBAUOBAUSBAUWBAUaBAUeBAUiBAUmBAUqB
-AUuBAUyBAU2AToEBToEBT4EBUIEBUYEBUoEBU4EBVIEBVYEBVoEBV4EBWIEBWYEBWoEBW4EBXIEBXYEB
-XoEBX4EBYIEBYYEBYoEBY4EBZIEBZYEBZoEBZ4EBaIEBaYEBaoEBKYEBa4EBbIEBbYEBboEBb4EBcIEB
-cYEBcoEBc4EBdIEBdYEBdoEBd4EBeIEBeYEBeoEBe4EBfIEBfYEBfoEBf4EBgIEBgYEBgoEBg1tNZW51
-IChIZWxwKW8QFABNAGUAbgB1ACAASQB0AGUAbQAgACgAUwBhAHYAZQAgAEEAcyAmAClvEBcATQBlAG4A
-dQAgAEkAdABlAG0AIAAoAFAAYQBnAGUAIABTAGUAdAB1AHAgJgApXxAUTWVudSBJdGVtIChTZXJ2aWNl
-cylfEBhNZW51IEl0ZW0gKEhpZGUgR2l0VGVzdClfEBZNZW51IEl0ZW0gKENsZWFyIE1lbnUpXxAeTWVu
-dSBJdGVtIChCcmluZyBBbGwgdG8gRnJvbnQpW1NlcGFyYXRvci0yW01lbnUgKEZpbmQpW1NlcGFyYXRv
-ci02XxAVTWVudSBJdGVtIChGaW5kIE5leHQpXxAQTWVudSBJdGVtIChFZGl0KV8QEE1lbnUgSXRlbSAo
-R2l0WClfEBBNZW51IEl0ZW0gKENvcHkpXxAWTWVudSBJdGVtIChTZWxlY3QgQWxsKV8QEE1lbnUgSXRl
-bSAoU2F2ZSlfEBBNZW51IEl0ZW0gKEhlbHApXxAQTWVudSBJdGVtIChWaWV3KV1NZW51IChTcGVlY2gp
-XxAnTWVudSBJdGVtIChDaGVjayBHcmFtbWFyIFdpdGggU3BlbGxpbmcpW01lbnUgKEVkaXQpXxAYTWVu
-dSBJdGVtIChTbWFydCBRdW90ZXMpXxAcTWVudSBJdGVtIChTbWFydCBDb3B5L1Bhc3RlKVlTZXBhcmF0
-b3JfEBJNZW51IEl0ZW0gKFNwZWVjaClcRmlsZSdzIE93bmVyW0FwcGxpY2F0aW9uXxASTWVudSBJdGVt
-IChXaW5kb3cpXxAZTWVudSBJdGVtIChTdWJzdGl0dXRpb25zKV8QFk1lbnUgSXRlbSAoQWJvdXQgR2l0
-WClbU2VwYXJhdG9yLTNfEBBNZW51IEl0ZW0gKFpvb20pXxAUTWVudSBJdGVtIChNaW5pbWl6ZSlfEBJN
-ZW51IEl0ZW0gKERlbGV0ZSlfEBdNZW51IEl0ZW0gKE9wZW4gUmVjZW50KV8QEU1lbnUgSXRlbSAoQ2xv
-c2UpXxAUTWVudSBJdGVtIChSYXcgVmlldylfEA9NZW51IEl0ZW0gKE5ldylfEBVNZW51IEl0ZW0gKFF1
-aXQgR2l0WClfEB1NZW51IEl0ZW0gKEp1bXAgdG8gU2VsZWN0aW9uKV8QIk1lbnUgSXRlbSAoVXNlIFNl
-bGVjdGlvbiBmb3IgRmluZClvEBEATQBlAG4AdQAgAEkAdABlAG0AIAAoAEYAaQBuAGQgJgApXxAaTWVu
-dSBJdGVtIChDaGVjayBTcGVsbGluZylfEBBNZW51IEl0ZW0gKEZpbmQpXxASTWVudSAoT3BlbiBSZWNl
-bnQpXxAYTWVudSBJdGVtIChTaG93IFRvb2xiYXIpbxASAE0AZQBuAHUAIABJAHQAZQBtACAAKABQAHIA
-aQBuAHQgJgApXxAgTWVudSBJdGVtIChTcGVsbGluZyBhbmQgR3JhbW1hcilfEBBNZW51IEl0ZW0gKFJl
-ZG8pXxAPTWVudSAoU2VydmljZXMpW01lbnUgKEZpbGUpXxAPTWVudSBJdGVtIChDdXQpXxAZTWVudSBJ
-dGVtIChTdG9wIFNwZWFraW5nKW8QGgBNAGUAbgB1ACAASQB0AGUAbQAgACgAUwBoAG8AdwAgAFMAcABl
-AGwAbABpAG4AZyAmAClfEBtNZW51IEl0ZW0gKFJldmVydCB0byBTYXZlZClbU2VwYXJhdG9yLTRfECdN
-ZW51IEl0ZW0gKENoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZylbU2VwYXJhdG9yLTdvEB4ATQBlAG4A
-dQAgAEkAdABlAG0AIAAoAEMAdQBzAHQAbwBtAGkAegBlACAAVABvAG8AbABiAGEAciAmAClfEBFNZW51
-IEl0ZW0gKFBhc3RlKV8QFE1lbnUgKFN1YnN0aXR1dGlvbnMpXxAQTWVudSBJdGVtIChGaWxlKVtTZXBh
-cmF0b3ItMVtTZXBhcmF0b3ItOFtTZXBhcmF0b3ItNV8QGE1lbnUgSXRlbSAoR2l0VGVzdCBIZWxwKV8Q
-F01lbnUgSXRlbSAoSGlkZSBPdGhlcnMpXxAZTWVudSBJdGVtIChEZXRhaWxlZCBWaWV3KV8QGk1lbnUg
-SXRlbSAoU3RhcnQgU3BlYWtpbmcpXxAZTWVudSBJdGVtIChGaW5kIFByZXZpb3VzKV1NZW51IChXaW5k
-b3cpXxAQTWVudSBJdGVtIChVbmRvKW8QGABNAGUAbgB1ACAASQB0AGUAbQAgACgAUAByAGUAZgBlAHIA
-ZQBuAGMAZQBzICYAKV8QFE1lbnUgSXRlbSAoU2hvdyBBbGwpXxATTWVudSBJdGVtIChPcGVuLi4uKVtN
-ZW51IChHaXRYKVtTZXBhcmF0b3ItOV8QG01lbnUgKFNwZWxsaW5nIGFuZCBHcmFtbWFyKV8QFU1lbnUg
-SXRlbSAoVHJlZSBWaWV3KVtNZW51IChWaWV3KV8QF01lbnUgSXRlbSAoU21hcnQgTGlua3Mp0gAOAEUC
-0wYvgQEvoNIADgBFAtMGMoEBL6DSAA4ARQLTBjWBAS+vEHkC1QBSAGQC2AFAAGIC3gDdAGYA8QBaAuUC
-5gLoAFYC6gHoAu0BVALvAvMAagC8AqUCHwF8AHkCtABhAHMAbAIxAwMBxgBcAFUCJwBwAwsAYABtAKsA
-WwBdAw8CWwMTAxQDFQBrAbMAbwFgAx4CEgCzAQ0BFQBXApsCwgBYAdUBigLcAOYAZwLgAuEBbgBTAoUA
-XgE1AF8AigBlAusC7gLyAB8C8QLwANAC9gBUAfUAYwBxAaUCaABPAHIB3QMBAHQDBAJNAS0CdgI/AwwA
-aQMNAG4AUQEfAxIDFgKTAgQBlwBQAP8AxAMgAUgDIgBZAGgDJoDMgCOAeIDSgEeAcYDcgCiAgYAugEyB
-AQiA7IEBCoA2gPWAfoEBBYBNgQEOgQEWgJSAHoC8gI+AXIALgMGAbYDAgJ6AlYDVgHSAVoAygJCAsIEB
-JoBpgKOAGYBRgFuBARuApIEBK4EBJYDkgJmAboCrgFKBAQKAi4AagDeAOIA8gLeAxoBBgHmAYYDZgCmA
-hoDdgP2AV4AngLGAYIBDgGSADIB9gPOA44D5gAKA7oEBEIAkgQEdgC2AgoBzgLWAaoCogAqAu4B6gOWA
-xYDogJ+AQoCsgJqBAQaAjoDegKeAHYA9gPGBAQGAtoCHgGWAGIAzgB+BASKASIEBKIBGgIqA99IADgBF
-AtMGsYEBL68QeQayBrMGtAa1BrYGtwa4BrkGuga7BrwGvQa+Br8GwAbBBsIGwwbEBsUGxgbHBsgGyQbK
-BssGzAbNBs4GzwbQBtEG0gbTBtQG1QbWBtcG2AbZBtoG2wbcBt0G3gbfBuAG4QbiBuMG5AblBuYG5wbo
-BukG6gbrBuwG7QbuBu8G8AbxBvIG8wb0BvUG9gb3BvgG+Qb6BvsG/Ab9Bv4G/wcABwEHAgcDBwQHBQcG
-BwcHCAcJBwoHCwcMBw0HDgcPBxAHEQcSBxMHFAcVBxYHFwcYBxkHGgcbBxwHHQceBx8HIAchByIHIwck
-ByUHJgcnBygHKQcqgQGIgQGJgQGKgQGLgQGMgQGNgQGOgQGPgQGQgQGRgQGSgQGTgQGUgQGVgQGWgQGX
-gQGYgQGZgQGagQGbgQGcgQGdgQGegQGfgQGggQGhgQGigQGjgQGkgQGlgQGmgQGngQGogQGpgQGqgQGr
-gQGsgQGtgQGugQGvgQGwgQGxgQGygQGzgQG0gQG1gQG2gQG3gQG4gQG5gQG6gQG7gQG8gQG9gQG+gQG/
-gQHAgQHBgQHCgQHDgQHEgQHFgQHGgQHHgQHIgQHJgQHKgQHLgQHMgQHNgQHOgQHPgQHQgQHRgQHSgQHT
-gQHUgQHVgQHWgQHXgQHYgQHZgQHagQHbgQHcgQHdgQHegQHfgQHggQHhgQHigQHjgQHkgQHlgQHmgQHn
-gQHogQHpgQHqgQHrgQHsgQHtgQHugQHvgQHwgQHxgQHygQHzgQH0gQH1gQH2gQH3gQH4gQH5gQH6gQH7
-gQH8gQH9gQH+gQH/gQIAEFAQ+BB/EIMQhhDOEQNPEKcRA4kQnREDZBBnENQRAVIRA4oQ2xA6EI8QzRP/
-/////////RDxEFYQ9hC9EEkQmxCkEIgRAQEQixCyEE4QghEBVRCzEMkQURDTEHAQyhEBVxC/ELQQyxDz
-EQFUEFMQTxCuELwQ4xCvEJ4QgRCWELkRA1QRAVMQsBBqEE0RAQIQfhD1EJUQnxCSEKMQOBCsEMgQSxD5
-EOERA4gQqRCOENoQnBDgEQOLENYQfBD0EFIQtREDUxEBVhB6EKEQmhDDEL4QfRCoEFcQuBCtEOQQoBC7
-EJAQwRAdEMcQ9xCrENcQxBBvEJERA1AQwBCiEPIQSBA5EEoQmBCZENjSAA4ARQBNB6aAyqDSAA4ARQLT
-B6mBAS+g0gAOAEUC0wesgQEvoNIAOgA7B64Hr6IHrwA/Xk5TSUJPYmplY3REYXRhAAgAGQAiACcAMQA6
-AD8ARABSAFQAZgR0BHoExQTMBNME4QTzBQ8FHQUpBTUFQwVOBVwFeAWGBZkFqwXFBc8F3AXeBeEF4wXm
-BekF6wXuBfAF8wX2BfkF/AX+BgAGAwYGBgkGDAYVBiEGIwYlBi4GOAY6BkgGUQZaBmUGbAZ+BocGkAaZ
-Bp4GrQbABskG1AbWBtcG4AbnBvQG+gcDBwUHVAdWB1gHWgdcB14HYAdiB2QHZgdoB2oHbAduB3AHcgd0
-B3YHeAd6B3wHfgeAB4IHhAeGB4gHigeMB44HkAeSB5QHlgeYB5oHnAeeB6AHrQe2B74HwAfCB8QH5Qft
-CAEIDAgaCCQIMQg4CDoIPAhBCEMISAhKCEwITghbCGcIaQhrCG0IdAh1CIIIkQiTCJUIlwifCLEIugi/
-CNII3wjhCOMI5Qj4CQEJBgkRCRkJIgkpCUEJUAldCV8JYQljCYQJhgmICYoJjAmOCZAJnQmfCaEJownB
-CeIJ7wnxCfMJ9QoWChgKGgocCh4KIAoiCjMKOgo8Cj8KQgpFCk4KUApmCnMKdQp3CnkKmgqcCp4KoAqi
-CqQKpgqrCrgKxQrHCskKywrwCvYK+Ar6CvwK/gsACwILBAsRCxMLFQsXCyELIws9C0oLTAtOC1ALcQtz
-C3ULdwt5C3sLfQuCC4QLiguXC5kLmwudC8ILxAvGC8gLygvMC84L0AveC+AL7QvvC/EL8wwUDBYMGAwa
-DBwMHgwgDC0MLwwyDDUMPwxBDE4MWwxdDF8MYQyCDIQMhgyIDIoMjAyODJQMlgydDKoMrAyuDLAMzQzP
-DNEM0wzVDNcM2QzmDOgM6gzsDPoNCA0ZDScNKQ0rDS0NLw1QDVINVA1WDVgNWg1cDW0Nbw1xDXQNdw2E
-DYYNjA2dDZ8NoQ2jDaUNrg2wDbINyg3ZDeIN6Q4ADg0ODw4RDhMONA42DjgOOg48Dj4OQA5FDkcOTQ5a
-DlwOXg5gDoEOgw6FDocOiQ6LDo0OmA6aDqUOsg60DrYOuA7ZDtsO3Q7fDuEO4w7lDvkO+w8bDygPKg8s
-Dy4PTw9RD1MPVQ9XD1kPWw9wD4IPjw+RD5MPlQ+2D7gPug+8D74PwA/CD9AP0g/lD/IP9A/2D/gQHRAf
-ECEQIxAlECcQKRArEEQQRhBTEFUQVxBZEHYQeBB6EHwQfhCAEIIQkRCgELEQsxC1ELcQuRDCEM8Q0RDT
-ENUQ9hD4EPoQ/xEBEQMRBREHERQRFhEsETkROxE9ET8RYBFiEWQRZhFoEWoRbBF9EX8RghGFEYgRkxGr
-EbwRvhHAEcIRxBHhEeMR5RHnEekR6xHtEfgSGBIlEicSKRIrEkwSThJQElISVBJWElgSYRJjEm8SgBKC
-EoQShhKIEqkSqxKtEq8SsRKzErUSwRLaEusS7RLvEvES8xMUExYTGBMaExwTHhMgEykTQhNPE1ETUxNV
-E3YTeBN6E3wTfhOAE4ITjxORE5QTlxOdE58TrRO6E7wTvhPAE+ET4xPlE+cT6RPrE+0T+hP8FAMUEBQS
-FBQUFhQ3FDkUOxQ9FD8UQRRDFGAUYhR0FIEUgxSFFIcUqBSqFKwUrhSwFLIUtBS5FLsUwRTOFNAU0hTU
-FPUU9xT5FPsU/RT/FQEVKBVKFVcVWRVbFV0VghWEFYYViBWKFYwVjhWQFZsVnRWqFawVrhWwFdEV0xXV
-FdcV2RXbFd0V4RXjFegV+RX7Ff0V/xYBFiIWJBYmFigWKhYsFi4WMxY1FkEWThZQFlIWVBZ1FncWeRZ7
-Fn0WfxaBFo4WkBaSFpQWoRajFq0Wuha8Fr4WwBbhFuMW5RbnFukW6xbtFvwW/hcNFx4XIBciFyQXJhdH
-F0kXSxdNF08XURdTF10XXxdqF3cXeRd7F30XnhegF6IXpBemF6gXqhfBF8MX0hfbF+IX8Rf5GAIYBRis
-GK4YsBiyGLQYthi4GLoYvBi+GMAYwhjEGMYYyBjKGMwYzxjRGNMY1hjYGNoY3BjeGOEY4xjmGOkY6xjt
-GPAY8hj0GPcY+Rj7GP0Y/xkBGQMZBRkHGQkZCxkNGQ8ZERkTGRUZFxkZGRsZHRkfGSIZJRknGSkZLBku
-GTAZMhk1GTgZOhk9GT8ZQRlDGUUZRxlJGUsZThlQGVMZVRlYGVoZXBleGWAZgRmDGYUZhxmJGYsZjRme
-GaAZpRmuGbAZsxm1Gb4ZwxnsGfYZ/xoBGgMaBRoHGgkaCxoNGg8aGBonGjgaOho8Gj4aQBpJGksaVBpW
-GlcaaRqSGqAarRqvGrEashq0GrUatxq5GrsaxBrGGssa1BrWGuEa4xrlGuca6RrrGxQbFhsYGxkbGxsc
-Gx4bIBsiG0sbTRtPG1EbUxtVG1cbWRtbG2wbbhtxG3Qbdxt8G4UbhxuQG5IbrRuvG7Ebsxu1G7cbuRu7
-G70bvxvBG8MbxRvHG/Ab8hv0G/Ub9xv4G/ob/Bv+HCccKRwrHCwcLhwvHDEcMxw1HF4cYBxiHGQcZhxo
-HGocbBxuHJccmRybHJ0cnxyhHKMcpRynHL4cxxzJHNIc1BzWHNgc2hz7HP0c/x0BHQMdBR0HHSUdTh1Q
-HVIdVB1WHVgdWh1cHV4dbB15HXsdfR1/HYgdih2RHZMdlR2XHbgduh28Hb4dwB3CHcQd1x34Hfod/B3+
-HgAeAh4EHhEeMh40HjYeOB46HjwePh5KHnMedR53Hnkeex59Hn8egR6DHooekx6VHpoenB6eHsceyR7L
-Hs0ezx7RHtMe1R7XHtwe5R7nHv4fAB8DHwYfCR8LHw4fEB8SHxQfFh8YH0EfQx9FH0YfSB9JH0sfTR9P
-H3Afch91H3gfeh98H34flx+ZH8IfxB/GH8cfyR/KH8wfzh/QH/kf+x/9H/4gACABIAMgBSAHIBQgPSA/
-IEEgQyBFIEcgSSBLIE4gdyB5IHsgfiCAIIIghCCGIIkgjiCXIJkgpiCoIKogrCCuILAgsiC7IL0gwCDp
-IOsg7SDwIPIg9CD2IPgg+yEHIRAhEiEbIR0hICEiITshZCFmIWghayFtIW8hcSFzIXYhfSGGIYghkSGT
-IZwhniGgIaMhpSHOIdAh0iHTIdUh1iHYIdoh3CHrIgwiDiIRIhQiFiIYIhoiHiIgIikiKyIwIjkiOyJS
-IlUiWCJbIl4iYCJiImQiZyJqImwibiKPIpEilCKXIpkimyKdIqUipyLQItIi1CLVItci2CLaItwi3iL7
-Iv0jACMCIwQjBiMIIxojQyNFI0cjSCNKI0sjTSNPI1EjWiNjI2UjciN0I3cjeSN8I38jgiOrI60jryOy
-I7QjtiO4I7ojvSPJI9Ij1yPgI+MkiiSMJI8kkSSTJJUklySZJJsknSSfJKEkoySlJKckqSSrJK0krySx
-JLMktSS3JLkkuyS9JL8kwSTDJMUkxyTJJMskzSTPJNEk0yTVJNck2STbJN0k3yThJOQk5iToJOok7CTu
-JPAk8yT1JPck+ST7JP0k/yUBJQMlBSUHJQklCyUNJQ8lESUTJRUlFyUZJRslHiUgJSIlJCUmJSglKiUs
-JS4lMSUzJTwlPyXoJeol7CXuJfAl8iX0JfYl+CX6Jfwl/iYAJgImBCYGJggmCyYOJhAmEiYUJhYmGCYa
-JhwmHiYhJiMmJiYoJiomLSYvJjEmMyY2JjgmOiY9Jj8mQSZDJkUmRyZJJksmTSZPJlEmUyZVJlcmWSZb
-Jl0mYCZjJmUmZyZqJmwmbiZwJnMmdSZ4JnsmfSZ/JoEmgyaFJocmiSaMJo4mkSaTJpYmmCaaJpwmnian
-JqonUydWJ1knXCdfJ2InZSdoJ2snbidxJ3Qndyd6J30ngCeDJ4YniSeMJ48nkieVJ5gnmyeeJ6EnpCem
-J6knrCevJ7IntSe4J7snvifBJ8QnxyfKJ80n0CfTJ9Yn2SfcJ98n4iflJ+gn6yfuJ/En9Cf3J/on/SgA
-KAMoBigJKAwoDygSKBUoGCgbKB4oISgkKCcoKigtKDAoMyg2KDkoPCg/KEIoRShIKEsoVyiCKLMoyijl
-KP4pHykrKTcpQylbKW4pgSmUKa0pwCnTKeYp9CoeKioqRSpkKm4qgyqQKpwqsSrNKuYq8isFKxwrMStL
-K18rdiuIK6ArwCvlLAosJyw6LE8saiyRLLQsxyzZLOUs9y0TLUotaC10LZ4tqi3pLf0uFC4nLjMuPy5L
-LmYugC6cLrku1S7jLvYvKS9AL1YvYi9uL4wvpC+wL8ov0y/WL9cv4C/jL+Qv7S/wMOUw5zDpMOsw7TDv
-MPEw8zD1MPcw+TD7MP4xADEDMQUxBzEJMQwxDjERMRQxFjEYMRoxHDEeMSAxIjEkMSYxKDEqMSwxLjEw
-MTIxNDE2MTkxOzE9MT8xQTFDMUYxSDFLMU4xUDFSMVQxVjFYMVsxXTFfMWExYzFlMWcxaTFrMW0xbzFx
-MXMxdTF3MXkxezF9MX8xgTGDMYUxhzGJMYsxjTGPMZExkzGWMZgxmzGdMZ8xoTGjMaUxpzGpMasxrTGv
-MbExszG1MbcxuTG7Mb4xwDHCMcQxxjHIMcoxzTHPMdEx0zHVMdcx2THcMd4x4THjMeUx5zHwMfMy6DLr
-Mu4y8TL0Mvcy+jL9MwAzAzMGMwkzDDMPMxIzFTMYMxszHjMhMyQzJzMqMy0zMDMzMzYzOTM8Mz8zQjNF
-M0gzSzNOM1EzVDNXM1ozXTNgM2MzZjNpM2wzbzNyM3UzeDN7M34zgTOEM4czijONM5AzkzOWM5kznDOf
-M6IzpTOoM6szrjOxM7QztzO6M70zwDPDM8YzyTPMM88z0jPVM9gz2zPeM+Ez5DPnM+oz7TPwM/Mz9jP5
-M/wz/zQCNAU0CDQLNA40ETQUNBc0GjQdNCA0IzQmNCk0LDQvNDI0NTQ4NDs0PjRBNEQ0RzRKNE00UDRT
-NFU0VzRZNFs0XTRfNGI0ZDRnNGk0bDRuNHA0czR2NHg0ejR8NH40hzSJNIs0jTSPNJE0kzSVNJc0mjSc
-NJ40oDSiNKU0pzSpNKs0rTSvNLE0tDS2NLg0ujS8NL80wTTDNMU0xzTJNMs0zTTPNNE00zTWNNk02zTd
-NN804jTkNOY06DTqNOw07jTwNPI09DT2NPg0+jT9NP81ATUDNQU1BzUKNQw1DjUQNRI1FDUXNRo1HDUe
-NSA1IjUkNSY1KDUqNSw1LjUwNTI1NDU2NTg1OjU8NT41QDVCNUQ1RjVINUs1TTVPNVE1UzVVNVc1WTVb
-NV01ZjVoNWk1cjV1NXY1fzWCNYM1jDWRAAAAAAAAAgIAAAAAAAAHsAAAAAAAAAAAAAAAAAAANaA
+AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxECDAALAAwAMQA1ADkAQABD
+AEQASABMAHYAfACMAJEAkgCTAJgAmQCaAJ0AoQCiAKUApgCqAK4AtQC5ALoAuwC8AMAAxwDNAM4AzwDQ
+ANYA3gDjAOQA5QDmAOoA8wD3APgA+QD6AP4BBQEJAQoBCwEMARABFwEYARkBHQEkASgBKQEqASsBLwE2
+ATcBOAE5AT0BRAFJAUoBSwFMAVABWAFZAVoBXgFlAWYBZwFoAW0BdAF1AXYBegGBAYIBgwGEAYgBjwGQ
+AZEBkgGWAZ0BngGfAaABpQGsAa0BrgGxAbIBswG3Ab4BvwHAAcEBxQHMAc0BzgHPAdMB2gHeAd8B4AHk
+AesB7AHtAfEB+QH6AfsB/wIHAggCCQINAhQCFQIWAhcCHAIjAiQCJQImAisCLAIvAjQCNQI6AkECQgJD
+AkcCTgJSAlMCVAJVAlkCYAJhAmICYwJnAm4CbwJwAnUCfAJ9An4CggKJAooCiwKPApYClwKYApkCnQKk
+AqUCpgKqArECsgKzArcCvgK/AsACwQLFAswCzQLOAs8C0wLaAtsC3ALdAuEDNwM+Az8DQANHA0gDTwNT
+A1QDVQNaA1wDZwNsA20DbgNwA3cDggODA4wDlQOcA50DngOnA20DqAOqA7oDwwPMA20DzQPPA9cD4ANt
+A+ED6APvA/AD+QNtA/oEAAQHBAgEDwQQA20EGQQgBCEEIgQrA20ELAQuBDwERQNtBEYESARMBE0EVgRf
+BGgDbQRpBG0AOARwBHEEegSDA20EhASSBJsEpANtBKUEqgSsBK8EsAS5BMIEwwTMA20EzQTWBN8E4ATj
+BOQE5gU8BZMF6gXrBewF7QXuBe8F8AXxBfIF8wX0BfUF9gX3BfgF+QX6BfsF/AX9Bf4F/wYABgEGAgYD
+BgQGBQYGBgcGCAYJBgoGCwYMBg0GDgYPBhAGEQYSBhMGFAYVBhYGFwYYBhkGGgYbBhwGHQYeBh8GIAYh
+BiIGIwYkBiUGJgYnBigGKQYqBisGLAYtBi4GLwYwBjEGMgYzBjQGNQY2BjcGOAY5BjoGOwY8Bj8GQgbA
+Bz4HPwdAB0EHQgdDB0QHRQdGB0cHSAdJB0oHSwdMB00HTgdPB1AHUQdSB1MHVAdVB1YHVwdYB1kHWgdb
+B1wHXQdeB18HYAdhB2IHYwdkB2UHZgdnB2gHaQdqB2sHbAdtB24HbwdwB3EHcgdzB3QHdQd2B3cHeAd5
+B3oHewd8B30Hfgd/B4AHgQeCB4MHhAeFB4YHhweIB4kHigeLB4wHjQeOB48HkAeRB5IHkweUB5UHlgeX
+B5gHmQeaB5sHnAedB54HnwegB6EHogejB6QHpQemB6cHqAepB6oHqwesB60HrgevB7AHsQeyB7MHtAe1
+B7YHtwe4B7kHvAe/B8JVJG51bGzfEBIADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4A
+HwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADBWTlNSb290ViRjbGFzc11OU09iamVjdHNL
+ZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5T2lkc1ZhbHVlc11OU0Nvbm5lY3Rp
+b25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xhc3Nlc0tleXNaTlNPaWRzS2V5c11OU05hbWVz
+VmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9yc11OU0ZvbnRNYW5hZ2VyXxAQTlNWaXNpYmxl
+V2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNjZXNzaWJpbGl0eU9pZHNLZXlzWU5TTmV4dE9p
+ZFxOU09pZHNWYWx1ZXOAAoECC4DQgQGKgQIKgAmBATWABoEBiYEBi4EBNoECCIAAgAeBATSBAgkRA46B
+AYzSAA4AMgAzADRbTlNDbGFzc05hbWWABYAD0gAOADYANwA4WU5TLnN0cmluZ4AEXU5TQXBwbGljYXRp
+b27SADoAOwA8AD1YJGNsYXNzZXNaJGNsYXNzbmFtZaMAPQA+AD9fEA9OU011dGFibGVTdHJpbmdYTlNT
+dHJpbmdYTlNPYmplY3TSADoAOwBBAEKiAEIAP15OU0N1c3RvbU9iamVjdF8QEElCQ29jb2FGcmFtZXdv
+cmvSAA4ARQBGAEdaTlMub2JqZWN0c4AIoNIAOgA7AEkASqMASgBLAD9cTlNNdXRhYmxlU2V0VU5TU2V0
+0gAOAEUATQBOgM+vECcATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZABl
+AGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHWACoAYgB6AJIAqgDCANoA6gECARYBLgE+AVIBY
+gF2AYoBngG6Ac4B4gH2AgYCFgImAjoCTgJaAmICcgKKAp4CrgK+As4C4gLyAwIDFgMrTAA4AdwB4AHkA
+egB7WE5TU291cmNlV05TTGFiZWyAF4ALgBbYAA4AfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAItX
+TlNUaXRsZV8QEU5TS2V5RXF1aXZNb2RNYXNrWk5TS2V5RXF1aXZdTlNNbmVtb25pY0xvY1lOU09uSW1h
+Z2VcTlNNaXhlZEltYWdlVk5TTWVudYAVgA0SABAAAIAOEn////+AD4ATgAzTAA4AfQCNAI4AjwCQW05T
+TWVudUl0ZW1zgNuA9YD3XkNoZWNrIFNwZWxsaW5nUTvTAA4AMgCUAJUAlgCXXk5TUmVzb3VyY2VOYW1l
+gBKAEIARV05TSW1hZ2VfEA9OU01lbnVDaGVja21hcmvSADoAOwCbAJyiAJwAP18QEE5TQ3VzdG9tUmVz
+b3VyY2XTAA4AMgCUAJUAlgCggBKAEIAUXxAQTlNNZW51TWl4ZWRTdGF0ZdIAOgA7AKMApKIApAA/Wk5T
+TWVudUl0ZW1eY2hlY2tTcGVsbGluZzrSADoAOwCnAKijAKgAqQA/XxAVTlNOaWJDb250cm9sQ29ubmVj
+dG9yXk5TTmliQ29ubmVjdG9y0wAOAHcAeAB5AKwArYAXgBmAHdgADgB9AH4AfwCAAIEAggCDAIQAsACG
+ALEAiACJAIoAtIAVgBuAHIAPgBOAGtMADgB9AI0AjgC3ALiA24DsgO1TQ3V0UXhUY3V0OtMADgB3AHgA
+eQC+AL+AF4AfgCPYAA4AfQB+AH8AgACBAIIAgwCEAMIAhgDDAIgAiQCKAMaAFYAhgCKAD4ATgCDUAA4A
+fQDIAI0AjgDKAMsAzFZOU05hbWWA24EBD4EBEYEBEFpDbGVhciBNZW51UF8QFWNsZWFyUmVjZW50RG9j
+dW1lbnRzOtQADgDRAHcAeAB5AB8A1ADVXU5TRGVzdGluYXRpb26AF4ACgCWAKdgADgB9AH4AfwCAAIEA
+ggCDAIQA2ADZANoAiACJAIoA3YAVgCcSABgAAIAogA+AE4Am1AAOAH0AyACNAI4A4ADhAOKA24EBHYEB
+KoEBH1tIaWRlIE90aGVyc1FoXxAWaGlkZU90aGVyQXBwbGljYXRpb25zOtMADgB3AHgAeQDoAOmAF4Ar
+gC/ZAA4AfQB+AH8AgACBAIIAgwDrAIQA7QCGAO4AiACJAIoA8QDyVU5TVGFngBWALYAugA+AE4AsEAPT
+AA4AfQCNAI4A9QD2gNuA8oDzXUZpbmQgUHJldmlvdXNRR18QF3BlcmZvcm1GaW5kUGFuZWxBY3Rpb246
+0wAOAHcAeAB5APwA/YAXgDGANdgADgB9AH4AfwCAAIEAggCDAIQBAACGAQEAiACJAIoBBIAVgDOANIAP
+gBOAMtMADgB9AI0AjgEHAQiA24EBLIEBLl1EZXRhaWxlZCBWaWV3UTFfEBBzZXREZXRhaWxlZFZpZXc6
+0wAOAHcAeAB5AQ4BD4AXgDeAOdgADgB9AH4AfwCAAIEAggCDAIQBEgCGAMMAiACJAIoAi4AVgDiAIoAP
+gBOADF8QG0NoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZ18QHnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENo
+ZWNraW5nOtMADgB3AHgAeQEbARyAF4A7gD/YAA4AfQB+AH8AgACBAIIAgwCEAR8AhgEgAIgAiQCKASOA
+FYA9gD6AD4ATgDzTAA4AfQCNAI4BJgEngNuBAQqBAQtXT3Blbi4uLlFvXW9wZW5Eb2N1bWVudDrTAA4A
+dwB4AHkBLQEugBeAQYBE2AAOAH0AfgB/AIAAgQCCAIMAhAExANkBMgCIAIkAigEEgBWAQoBDgA+AE4Ay
+XFNob3cgVG9vbGJhclF0XxATdG9nZ2xlVG9vbGJhclNob3duOtMADgB3AHgAeQE7ATyAF4BGgErYAA4A
+fQB+AH8AgACBAIIAgwCEAT8AhgFAAIgAiQCKAUOAFYBIgEmAD4ATgEfUAA4AfQDIAI0AjgFGAUcBSIDb
+gOCA44DhWE1pbmltaXplUW1fEBNwZXJmb3JtTWluaWF0dXJpemU60wAOAHcAeAB5AU4A6YAXgEyAL9kA
+DgB9AH4AfwCAAIEAggCDAOsAhAFSAIYBUwCIAIkAigDxAVeAFYBNgE6AD4ATgCwQAWUARgBpAG4AZCAm
+UWbTAA4AdwB4AHkBXAFdgBeAUIBT2AAOAH0AfgB/AIAAgQCCAIMAhAFgAIYBYQCIAIkAigEjgBWAUYBS
+gA+AE4A8ZgBQAHIAaQBuAHQgJlFwVnByaW50OtQADgDRAHcAeAB5AB8BawFsgBeAAoBVgFfYAA4AfQB+
+AH8AgACBAIIAgwCEAW8AhgDDAIgAiQCKAN2AFYBWgCKAD4ATgCZYU2hvdyBBbGxfEBZ1bmhpZGVBbGxB
+cHBsaWNhdGlvbnM60wAOAHcAeAB5AXgBeYAXgFmAXNgADgB9AH4AfwCAAIEAggCDAIQBfACGAX0AiACJ
+AIoBBIAVgFqAW4APgBOAMlhSYXcgVmlld1EyW3NldFJhd1ZpZXc60wAOAHcAeAB5AYYBh4AXgF6AYdgA
+DgB9AH4AfwCAAIEAggCDAIQBigCGAYsAiACJAIoAtIAVgF+AYIAPgBOAGlVQYXN0ZVF2VnBhc3RlOtMA
+DgB3AHgAeQGUAZWAF4BjgGbYAA4AfQB+AH8AgACBAIIAgwCEAZgAhgGZAIgAiQCKALSAFYBkgGWAD4AT
+gBpUVW5kb1F6VXVuZG861AAOANEAdwB4AHkBogGjAaSAF4BrgGiAbdgADgB9AH4AfwCAAIEAggCDAIQB
+pwCGAagAiACJAIoBI4AVgGmAaoAPgBOAPFRTYXZlUXPSAA4AMgAzAbCABYBsXxAVQXBwbGljYXRpb25D
+b250cm9sbGVyW3NhdmVBY3Rpb2460wAOAHcAeAB5AbUBtoAXgG+ActgADgB9AH4AfwCAAIEAggCDAIQB
+uQCGAboAiACJAIoBI4AVgHCAcYAPgBOAPFVDbG9zZVF3XXBlcmZvcm1DbG9zZTrTAA4AdwB4AHkBwwHE
+gBeAdIB32AAOAH0AfgB/AIAAgQCCAIMAhAHHAIYByACIAIkAigEEgBWAdYB2gA+AE4AyWVRyZWUgVmll
+d1EzXHNldFRyZWVWaWV3OtMADgB3AHgAeQHRAdKAF4B5gHzXAA4AfQB/AIAAgQCCAIMAhAHVAMMAiACJ
+AIoB2YAVgHuAIoAPgBOAetMADgB9AI0AjgHcAd2A24DZgNpeU3RhcnQgU3BlYWtpbmdec3RhcnRTcGVh
+a2luZzrTAA4AdwB4AHkB4gHjgBeAfoCA2AAOAH0AfgB/AIAAgQCCAIMAhAHmAIYAwwCIAIkAigC0gBWA
+f4AigA+AE4AaVkRlbGV0ZVdkZWxldGU60wAOAHcAeAB5Ae8A6YAXgIKAL9kADgB9AH4AfwCAAIEAggCD
+AOsAhAHzAIYB9ACIAIkAigDxAfiAFYCDgISAD4ATgCwQAllGaW5kIE5leHRRZ9MADgB3AHgAeQH9AOmA
+F4CGgC/ZAA4AfQB+AH8AgACBAIIAgwDrAIQCAQCGAgIAiACJAIoA8QIGgBWAh4CIgA+AE4AsEAdfEBZV
+c2UgU2VsZWN0aW9uIGZvciBGaW5kUWXTAA4AdwB4AHkCCwIMgBeAioCN2AAOAH0AfgB/AIAAgQCCAIMA
+hAIPAIYCEACIAIkAigC0gBWAi4CMgA+AE4AaVFJlZG9RWlVyZWRvOtQADgDRAHcAeAB5AB8CGgIbgBeA
+AoCPgJLYAA4AfQB+AH8AgACBAIIAgwCEAh4AhgIfAIgAiQCKAN2AFYCQgJGAD4ATgCZZUXVpdCBHaXRY
+UXFadGVybWluYXRlOtQADgDRAHcAeAInAaIAHwIqgJWAa4ACgJRYZGVsZWdhdGXSADoAOwItAi6jAi4A
+qQA/XxAUTlNOaWJPdXRsZXRDb25uZWN0b3LUAA4A0QB3AHgCJwAfAaICM4CVgAKAa4CXXmZpcnN0UmVz
+cG9uZGVy1AAOANEAdwB4AHkAHwI4AjmAF4ACgJmAm9cADgB9AH8AgACBAIIAgwCEAjwAwwCIAIkAigDd
+gBWAmoAigA+AE4AmWkFib3V0IEdpdFhfEB1vcmRlckZyb250U3RhbmRhcmRBYm91dFBhbmVsOtMADgB3
+AHgAeQJFAkaAF4CdgKHYAA4AfQB+AH8AgACBAIIAgwCEAkkAhgJKAIgAiQCKAk2AFYCfgKCAD4ATgJ7T
+AA4AfQCNAI4CUAJRgNuBARWBARdcR2l0VGVzdCBIZWxwUT9Zc2hvd0hlbHA60wAOAHcAeAB5AlcCWIAX
+gKOAptgADgB9AH4AfwCAAIEAggCDAIQCWwCGAlwAiACJAIoA8YAVgKSApYAPgBOALF8QEUp1bXAgdG8g
+U2VsZWN0aW9uUWpfEB1jZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOtMADgB3AHgAeQJlAmaAF4Co
+gKrYAA4AfQB+AH8AgACBAIIAgwCEAmkAhgDDAIgAiQCKAQSAFYCpgCKAD4ATgDJvEBIAQwB1AHMAdABv
+AG0AaQB6AGUAIABUAG8AbwBsAGIAYQByICZfEB9ydW5Ub29sYmFyQ3VzdG9taXphdGlvblBhbGV0dGU6
+1AAOANEAdwB4AHkAHwJzAnSAF4ACgKyArtgADgB9AH4AfwCAAIEAggCDAIQCdwCGANoAiACJAIoA3YAV
+gK2AKIAPgBOAJlxIaWRlIEdpdFRlc3RVaGlkZTrTAA4AdwB4AHkCgAKBgBeAsICy1wAOAH0AfwCAAIEA
+ggCDAIQChADDAIgAiQCKAdmAFYCxgCKAD4ATgHpdU3RvcCBTcGVha2luZ11zdG9wU3BlYWtpbmc60wAO
+AHcAeAB5Ao0CjoAXgLSAt9gADgB9AH4AfwCAAIEAggCDAIQCkQCGApIAiACJAIoAi4AVgLWAtoAPgBOA
+DG4AUwBoAG8AdwAgAFMAcABlAGwAbABpAG4AZyAmUTpfEA9zaG93R3Vlc3NQYW5lbDrTAA4AdwB4AHkC
+mwKcgBeAuYC72AAOAH0AfgB/AIAAgQCCAIMAhAKfAIYAwwCIAIkAigFDgBWAuoAigA+AE4BHXxASQnJp
+bmcgQWxsIHRvIEZyb250XxAPYXJyYW5nZUluRnJvbnQ60wAOAHcAeAB5AqgCqYAXgL2Av9gADgB9AH4A
+fwCAAIEAggCDAIQCrACGAMMAiACJAIoBQ4AVgL6AIoAPgBOAR1Rab29tXHBlcmZvcm1ab29tOtMADgB3
+AHgAeQK1AraAF4DBgMTYAA4AfQB+AH8AgACBAIIAgwCEArkAhgK6AIgAiQCKALSAFYDCgMOAD4ATgBpa
+U2VsZWN0IEFsbFFhWnNlbGVjdEFsbDrTAA4AdwB4AHkCwwLEgBeAxoDJ2AAOAH0AfgB/AIAAgQCCAIMA
+hALHAIYCyACIAIkAigC0gBWAx4DIgA+AE4AaVENvcHlRY1Vjb3B5OtMADgB3AHgAeQLRAtKAF4DLgM7Y
+AA4AfQB+AH8AgACBAIIAgwCEAtUAhgLWAIgAiQCKASOAFYDMgM2AD4ATgDxrAFAAYQBnAGUAIABTAGUA
+dAB1AHAgJlFQXnJ1blBhZ2VMYXlvdXQ60gA6ADsC3gLfowLfAuAAP15OU011dGFibGVBcnJheVdOU0Fy
+cmF50gAOAEUC4gLjgQEzrxBTAaMCtQLmAucC6AHZAdEC6wKbAu0BwwGGAtEC8QLyAvMAvgL1AWsC9wL4
+AmUCRQJzAvwCwwIaAv8DAACsAwIAxgMEAwUAiwILAHoBQwKAAU4BBAMNAS0B/QMQAPwDEgDxALQBeAKo
+AxcCjQGiAxoDGwEjAQ4DHgMfAlcDIQFcAe8CTQMlAOgDJwMoATsDKgI4AywA1AMuAy8DMAHiAZQDMwDd
+ARsBtYBogMGA0YDUgNaAeoB5gNyAuYDkgHSAXoDLgOWA5oDigB+A6YBVgQEEgQEHgKiAnYCsgQESgMaA
+j4EBE4EBFIAZgQEYgCCA3YEBK4AMgIqAC4BHgLCATIAygQEggEGAhoEBL4AxgQEcgCyAGoBZgL2BAQyA
+tIBrgQEhgQEkgDyAN4DXgPiAo4D0gFCAgoCegP6AK4DugQExgEaBASiAmYEBAoAlgQEAgQEpgPqAfoBj
+gO+AJoA7gG/YAA4AfQB+AH8AgACBAIIAgwCEAzkAhgM6AIgAiQCKAN2AFYDSgNOAD4ATgCZsAFAAcgBl
+AGYAZQByAGUAbgBjAGUAcyAmUSzXAA4AfQB/AIAAgQCCAIMAhANCAMMAiACJAIoBI4AVgNWAIoAPgBOA
+PF8QD1JldmVydCB0byBTYXZlZNgADgB9AH4AfwCAAIEAggCDAIQDSgCGAVMAiACJAIoDHoAVgNiAToAP
+gBOA19MADgB9AI0AjgNRA1KA24D7gP1fEBBTbWFydCBDb3B5L1Bhc3RlVlNwZWVjaNIADgBFAE0DV4DP
+ogHRAoCAeYCw0gA6ADsDWwCDogCDAD/aAA4DXQB9AH4AfwCAAIEAggCDA14AhAFDA2EAhgDDAIgAiQCK
+AwQDZllOU1N1Ym1lbnVYTlNBY3Rpb26AFYBHgN6AIoAPgBOA3YDf1AAOAH0AyACNAI4DaQNqA2uA24EB
+GoEBMIEBG1ZXaW5kb3dec3VibWVudUFjdGlvbjrSAA4ANgA3A2yABNIADgBFAE0DcoDPpAE7AqgC8wKb
+gEaAvYDigLnaAA4AfQB+A3gAfwN5AIAAgQCCAIMAhADDAIYDfADDA3wAiACJAIoBQ11OU0lzU2VwYXJh
+dG9yXE5TSXNEaXNhYmxlZIAVgCIJgCIJgA+AE4BHXl9OU1dpbmRvd3NNZW512gAOAH0AfgN4AH8DeQCA
+AIEAggCDAIQAwwCGA3wAwwN8AIgAiQCKALSAFYAiCYAiCYAPgBOAGtoADgB9AH4DeAB/A3kAgACBAIIA
+gwCEAMMAhgN8AMMDfACIAIkAigDdgBWAIgmAIgmAD4ATgCbYAA4AfQB+AH8AgACBAIIAgwCEA5cAhgOY
+AIgAiQCKASOAFYDngOiAD4ATgDxTTmV3UW7aAA4DXQB9AH4AfwCAAIEAggCDA14AhAC0A6EAhgDDAIgA
+iQCKAwQDpoAVgBqA6oAigA+AE4DdgOtURWRpdNIADgA2ADcDp4AE0gAOAEUATQOsgM+tAZQCCwLtAKwC
+wwGGAeICtQMnAzMDIQMwAyyAY4CKgOSAGYDGgF6AfoDBgO6A74D0gPqBAQLaAA4AfQB+A3gAfwN5AIAA
+gQCCAIMAhADDAIYDfADDA3wAiACJAIoAtIAVgCIJgCIJgA+AE4Aa2gAOA10AfQB+AH8AgACBAIIAgwNe
+AIQA8QPGAIYAwwCIAIkAigC0A8uAFYAsgPCAIoAPgBOAGoDxVEZpbmTSAA4ANgA3A8yABNIADgBFAE0D
+0YDPpQFOAe8A6AH9AleATICCgCuAhoCj2gAOA10AfQB+AH8AgACBAIIAgwNeAIQAiwCPAIYAwwCIAIkA
+igC0A9+AFYAMgPWAIoAPgBOAGoD2XxAUU3BlbGxpbmcgYW5kIEdyYW1tYXLSAA4ARQBNA+OAz6QCjQB6
+AQ4DH4C0gAuAN4D42AAOAH0AfgB/AIAAgQCCAIMAhAPqAIYAwwCIAIkAigCLgBWA+YAigA+AE4AMXxAb
+Q2hlY2sgR3JhbW1hciBXaXRoIFNwZWxsaW5n2gAOA10AfQB+AH8AgACBAIIAgwNeAIQDHgNRAIYAwwCI
+AIkAigC0A/iAFYDXgPuAIoAPgBOAGoD8XVN1YnN0aXR1dGlvbnPSAA4ARQBNA/yAz6MC6AMlAy6A1oD+
+gQEA2AAOAH0AfgB/AIAAgQCCAIMAhAQCAIYB9ACIAIkAigMegBWA/4CEgA+AE4DXXFNtYXJ0IFF1b3Rl
+c9gADgB9AH4AfwCAAIEAggCDAIQECgCGAO4AiACJAIoDHoAVgQEBgC6AD4ATgNdbU21hcnQgTGlua3Pa
+AA4DXQB9AH4AfwCAAIEAggCDA14AhAHZAdwAhgDDAIgAiQCKALQEGIAVgHqA2YAigA+AE4AagQED2AAO
+AH0AfgB/AIAAgQCCAIMAhAQbAIYEHACIAIkAigEjgBWBAQWBAQaAD4ATgDxoAFMAYQB2AGUAIABBAHMg
+JlFT2gAOA10AfQB+AH8AgACBAIIAgwNeAIQBIwQlAIYAwwCIAIkAigMEBCqAFYA8gQEIgCKAD4ATgN2B
+AQlURmlsZdIADgA2ADcEK4AE0gAOAEUATQQwgM+rAvIBGwMXAvwBtQGjAvcC5wL/AtEBXIDmgDuBAQyB
+ARKAb4BogQEEgNSBAROAy4BQ2gAOA10AfQB+AH8AgACBAIIAgwNeAIQAxgQ/AIYAwwCIAIkAigEjBESA
+FYAggQENgCKAD4ATgDyBAQ5bT3BlbiBSZWNlbnTSAA4ANgA3BEWABNIADgBFAE0ESoDPoQC+gB9fEBZf
+TlNSZWNlbnREb2N1bWVudHNNZW512gAOAH0AfgN4AH8DeQCAAIEAggCDAIQAwwCGA3wAwwN8AIgAiQCK
+ASOAFYAiCYAiCYAPgBOAPNoADgB9AH4DeAB/A3kAgACBAIIAgwCEAMMAhgN8AMMDfACIAIkAigEjgBWA
+IgmAIgmAD4ATgDzaAA4DXQB9AH4AfwCAAIEAggCDA14AhAJNAlAAhgDDAIgAiQCKAwQEZ4AVgJ6BARWA
+IoAPgBOA3YEBFlRIZWxw0gAOAEUATQRrgM+hAkWAndIADgAyADMEb4AFgQEZWE1haW5NZW510gAOAEUA
+TQRzgM+mAxIC+AL1AwUC6wMAgQEcgQEHgOmBASuA3IEBFNoADgNdAH0AfgB/AIAAgQCCAIMDXgCEAN0A
+4ACGAMMAiACJAIoDBASCgBWAJoEBHYAigA+AE4DdgQEeVEdpdFjSAA4ARQBNBIaAz6sCOAMNAuYC8QMa
+AyoCcwDUAWsDLwIagJmBASCA0YDlgQEhgQEogKyAJYBVgQEpgI/aAA4AfQB+A3gAfwN5AIAAgQCCAIMA
+hADDAIYDfADDA3wAiACJAIoA3YAVgCIJgCIJgA+AE4Am2gAOA10AfQB+AH8AgACBAIIAgwNeAIQDGwSe
+AIYAwwCIAIkAigDdBKOAFYEBJIEBIoAigA+AE4AmgQEjWFNlcnZpY2Vz1AAOAH0AyACNAI4EpwSoBKmA
+24EBJYEBJ4EBJtIADgA2ADcEpIAE0gAOAEUATQSugM+gXxAPX05TU2VydmljZXNNZW512gAOAH0AfgN4
+AH8DeQCAAIEAggCDAIQAwwCGA3wAwwN8AIgAiQCKAN2AFYAiCYAiCYAPgBOAJtoADgB9AH4DeAB/A3kA
+gACBAIIAgwCEAMMAhgN8AMMDfACIAIkAigDdgBWAIgmAIgmAD4ATgCZcX05TQXBwbGVNZW512gAOA10A
+fQB+AH8AgACBAIIAgwNeAIQBBAEHAIYAwwCIAIkAigMEBMuAFYAygQEsgCKAD4ATgN2BAS1UVmlld9IA
+DgBFAE0Ez4DPpgEtAmUDEAD8AXgBw4BBgKiBAS+AMYBZgHTaAA4AfQB+A3gAfwN5AIAAgQCCAIMAhADD
+AIYDfADDA3wAiACJAIoBBIAVgCIJgCIJgA+AE4AyW19OU01haW5NZW510gAOADIAMwTigAWBATJfEB5Q
+QlJlcG9zaXRvcnlEb2N1bWVudENvbnRyb2xsZXLSADoAOwTlAuCiAuAAP9IADgBFAuIE6IEBM68QUwEj
+ALQA3QEjAx4DLAHZAwQBQwC0AQQAtAEjAN0BIwFDAMYDBADdASMDBAEEAk0A3QEjALQA3QEjAwQAtAAf
+AxcAHwMEAyEAtACLAusB2QDxAwUA3QEEAPEBBAEEAwQDMwL1AQQBQwEjAIsAHwDdAxoC+ACLAzAAiwDx
+ALQBIwDxAwADHgDxALQAHwFDAN0A3QC0AN0DHgDdALQAtAC0ALQDEgEjASOAPIAagCaAPIDXgQECgHqA
+3YBHgBqAMoAagDyAJoA8gEeAIIDdgCaAPIDdgDKAnoAmgDyAGoAmgDyA3YAagAKBAQyAAoDdgPSAGoAM
+gNyAeoAsgQErgCaAMoAsgDKAMoDdgO+A6YAygEeAPIAMgAKAJoEBIYEBB4AMgPqADIAsgBqAPIAsgQEU
+gNeALIAagAKAR4AmgCaAGoAmgNeAJoAagBqAGoAagQEcgDyAPNIADgBFAuIFPoEBM68QVAMzAaMC5gLn
+Ay8B2QHRAusC6ALtAy4BhgLRAvEC8wLyAvUAvgL3AWsC+AJlAsMCRQL8AnMCGgMAAKwC/wMFAwIDBADG
+AIsCCwFDAHoBBAKAAU4BLQMNAf0DEAD8AxIA8QC0AXgCqAGiAxcCjQEjAxoDHgMbAQ4DHwJXAyEBXAHv
+Ak0DJQAfAOgDJwMoATsDKgI4AywCmwDUAzABwwHiARsBtQDdArUBlIDvgGiA0YDUgQEpgHqAeYDcgNaA
+5IEBAIBegMuA5YDigOaA6YAfgQEEgFWBAQeAqIDGgJ2BARKArICPgQEUgBmBAROBASuBARiA3YAggAyA
+ioBHgAuAMoCwgEyAQYEBIICGgQEvgDGBARyALIAagFmAvYBrgQEMgLSAPIEBIYDXgQEkgDeA+ICjgPSA
+UICCgJ6A/oACgCuA7oEBMYBGgQEogJmBAQKAuYAlgPqAdIB+gDuAb4AmgMGAY9IADgBFAuIFlYEBM68Q
+VAWWBZcFmAWZBZoFmwWcBZ0FngWfBaAFoQWiBaMFpAWlBaYFpwWoBakFqgWrBawFrQWuBa8FsAWxBbIF
+swW0BbUDaQW3BbgFuQW6BbsFvAW9Bb4FvwXABcEFwgXDBcQFxQXGBccFyAGwBcoFywXMBc0FzgXPBdAF
+0QXSBdMF1AXVBdYF1wXYBdkF2gXbBdwF3QXeBd8F4AXhBeIF4wXkBeUF5gXnBegF6YEBN4EBOIEBOYEB
+OoEBO4EBPIEBPYEBPoEBP4EBQIEBQYEBQoEBQ4EBRIEBRYEBRoEBR4EBSIEBSYEBSoEBS4EBTIEBTYEB
+ToEBT4EBUIEBUYEBUoEBU4EBVIEBVYEBVoEBGoEBV4EBWIEBWYEBWoEBW4EBXIEBXYEBXoEBX4EBYIEB
+YYEBYoEBY4EBZIEBZYEBZoEBZ4EBaIBsgQFpgQFqgQFrgQFsgQFtgQFugQFvgQFwgQFxgQFygQFzgQF0
+gQF1gQF2gQF3gQF4gQF5gQF6gQF7gQF8gQF9gQF+gQF/gQGAgQGBgQGCgQGDgQGEgQGFgQGGgQGHgQGI
+XxAQTWVudSBJdGVtIChGaW5kKV8QEE1lbnUgSXRlbSAoU2F2ZSlvEBgATQBlAG4AdQAgAEkAdABlAG0A
+IAAoAFAAcgBlAGYAZQByAGUAbgBjAGUAcyAmAClfEBtNZW51IEl0ZW0gKFJldmVydCB0byBTYXZlZClb
+U2VwYXJhdG9yLTldTWVudSAoU3BlZWNoKV8QGk1lbnUgSXRlbSAoU3RhcnQgU3BlYWtpbmcpXxASTWVu
+dSBJdGVtIChXaW5kb3cpXxAcTWVudSBJdGVtIChTbWFydCBDb3B5L1Bhc3RlKVtTZXBhcmF0b3ItMV8Q
+F01lbnUgSXRlbSAoU21hcnQgTGlua3MpXxARTWVudSBJdGVtIChQYXN0ZSlvEBcATQBlAG4AdQAgAEkA
+dABlAG0AIAAoAFAAYQBnAGUAIABTAGUAdAB1AHAgJgApW1NlcGFyYXRvci02WVNlcGFyYXRvcl8QD01l
+bnUgSXRlbSAoTmV3KV8QEE1lbnUgSXRlbSAoRWRpdClfEBZNZW51IEl0ZW0gKENsZWFyIE1lbnUpbxAU
+AE0AZQBuAHUAIABJAHQAZQBtACAAKABTAGEAdgBlACAAQQBzICYAKV8QFE1lbnUgSXRlbSAoU2hvdyBB
+bGwpXxAQTWVudSBJdGVtIChGaWxlKW8QHgBNAGUAbgB1ACAASQB0AGUAbQAgACgAQwB1AHMAdABvAG0A
+aQB6AGUAIABUAG8AbwBsAGIAYQByICYAKV8QEE1lbnUgSXRlbSAoQ29weSlfEBhNZW51IEl0ZW0gKEdp
+dFRlc3QgSGVscClbU2VwYXJhdG9yLTNfEBhNZW51IEl0ZW0gKEhpZGUgR2l0VGVzdClfEBVNZW51IEl0
+ZW0gKFF1aXQgR2l0WClfEBBNZW51IEl0ZW0gKEhlbHApXxAPTWVudSBJdGVtIChDdXQpW1NlcGFyYXRv
+ci00XxAQTWVudSBJdGVtIChWaWV3KVtBcHBsaWNhdGlvbl8QEk1lbnUgKE9wZW4gUmVjZW50KV8QG01l
+bnUgKFNwZWxsaW5nIGFuZCBHcmFtbWFyKV8QEE1lbnUgSXRlbSAoUmVkbyldTWVudSAoV2luZG93KV8Q
+Gk1lbnUgSXRlbSAoQ2hlY2sgU3BlbGxpbmcpW01lbnUgKFZpZXcpXxAZTWVudSBJdGVtIChTdG9wIFNw
+ZWFraW5nKW8QEQBNAGUAbgB1ACAASQB0AGUAbQAgACgARgBpAG4AZCAmAClfEBhNZW51IEl0ZW0gKFNo
+b3cgVG9vbGJhcilbU2VwYXJhdG9yLTdfECJNZW51IEl0ZW0gKFVzZSBTZWxlY3Rpb24gZm9yIEZpbmQp
+W1NlcGFyYXRvci01XxAZTWVudSBJdGVtIChEZXRhaWxlZCBWaWV3KV8QEE1lbnUgSXRlbSAoR2l0WClb
+TWVudSAoRmluZClbTWVudSAoRWRpdClfEBRNZW51IEl0ZW0gKFJhdyBWaWV3KV8QEE1lbnUgSXRlbSAo
+Wm9vbSlfEBdNZW51IEl0ZW0gKE9wZW4gUmVjZW50KW8QGgBNAGUAbgB1ACAASQB0AGUAbQAgACgAUwBo
+AG8AdwAgAFMAcABlAGwAbABpAG4AZyAmAClbTWVudSAoRmlsZSlfEBRNZW51IEl0ZW0gKFNlcnZpY2Vz
+KV8QFE1lbnUgKFN1YnN0aXR1dGlvbnMpXxAPTWVudSAoU2VydmljZXMpXxAnTWVudSBJdGVtIChDaGVj
+ayBTcGVsbGluZyBXaGlsZSBUeXBpbmcpXxAnTWVudSBJdGVtIChDaGVjayBHcmFtbWFyIFdpdGggU3Bl
+bGxpbmcpXxAdTWVudSBJdGVtIChKdW1wIHRvIFNlbGVjdGlvbilfECBNZW51IEl0ZW0gKFNwZWxsaW5n
+IGFuZCBHcmFtbWFyKW8QEgBNAGUAbgB1ACAASQB0AGUAbQAgACgAUAByAGkAbgB0ICYAKV8QFU1lbnUg
+SXRlbSAoRmluZCBOZXh0KVtNZW51IChIZWxwKV8QGE1lbnUgSXRlbSAoU21hcnQgUXVvdGVzKVxGaWxl
+J3MgT3duZXJfEBlNZW51IEl0ZW0gKEZpbmQgUHJldmlvdXMpW1NlcGFyYXRvci0yXxAeUmVwb3NpdG9y
+eSBEb2N1bWVudCBDb250cm9sbGVyXxAUTWVudSBJdGVtIChNaW5pbWl6ZSlbU2VwYXJhdG9yLThfEBZN
+ZW51IEl0ZW0gKEFib3V0IEdpdFgpXxASTWVudSBJdGVtIChTcGVlY2gpXxAeTWVudSBJdGVtIChCcmlu
+ZyBBbGwgdG8gRnJvbnQpXxAXTWVudSBJdGVtIChIaWRlIE90aGVycylfEBlNZW51IEl0ZW0gKFN1YnN0
+aXR1dGlvbnMpXxAVTWVudSBJdGVtIChUcmVlIFZpZXcpXxASTWVudSBJdGVtIChEZWxldGUpXxATTWVu
+dSBJdGVtIChPcGVuLi4uKV8QEU1lbnUgSXRlbSAoQ2xvc2UpW01lbnUgKEdpdFgpXxAWTWVudSBJdGVt
+IChTZWxlY3QgQWxsKV8QEE1lbnUgSXRlbSAoVW5kbynSAA4ARQLiBj6BATOg0gAOAEUC4gZBgQEzoNIA
+DgBFAuIGRIEBM68QewLmAugC6wLtAFgC0QBpAGYBawLDAG4C/wMAAKwAawBeAMYDBQBzAHoBTgB0AS0B
+/QBZAG0DEgC0AFsDGgEjAQ4DHgMhAFoB7wJNAGcAagBiAB8AYQE7AjgAcQMsAy4B2QHDAy8DMAHiAZQD
+MwGjAN0BtQBcAucAYwBlAFEAXwGGAvEAUALyAvMAvgL1AFIAZAL3AvgCZQJFAnMC/ABPAhoAVwBvAwID
+BABwAIsCCwBsAUMAXQKAAQQAdQMNAxAA/ADxAXgCqAMXAo0BogMbAFQAVgBgAx8CVwBoAFMBXAMlAOgD
+JwMoAHIDKgKbANQCtQEbAdEAVYDRgNaA3IDkgEWAy4CWgImAVYDGgKuBAROBARSAGYCcgGKAIIEBK4DA
+gAuATIDFgEGAhoBLgKeBARyAGoBUgQEhgDyAN4DXgPSAT4CCgJ6AjoCYgHiAAoBzgEaAmYC4gQECgQEA
+gHqAdIEBKYD6gH6AY4DvgGiAJoBvgFiA1IB9gIWAHoBngF6A5YAYgOaA4oAfgOmAJICBgQEEgQEHgKiA
+nYCsgQESgAqAj4BAgK+BARiA3YCzgAyAioCigEeAXYCwgDKAyoEBIIEBL4AxgCyAWYC9gQEMgLSAa4EB
+JIAwgDqAboD4gKOAk4AqgFCA/oArgO6BATGAvIEBKIC5gCWAwYA7gHmANtIADgBFAuIGwoEBM68QewbD
+BsQGxQbGBscGyAbJBsoGywbMBs0GzgbPBtAG0QbSBtMG1AbVBtYG1wbYBtkG2gbbBtwG3QbeBt8G4Abh
+BuIG4wbkBuUG5gbnBugG6QbqBusG7AbtBu4G7wbwBvEG8gbzBvQG9Qb2BvcG+Ab5BvoG+wb8Bv0G/gb/
+BwAHAQcCBwMHBAcFBwYHBwcIBwkHCgcLBwwHDQcOBw8HEAcRBxIHEwcUBxUHFgcXBxgHGQcaBxsHHAcd
+Bx4HHwcgByEHIgcjByQHJQcmBycHKAcpByoHKwcsBy0HLgcvBzAHMQcyBzMHNAc1BzYHNwc4BzkHOgc7
+BzwHPYEBjYEBjoEBj4EBkIEBkYEBkoEBk4EBlIEBlYEBloEBl4EBmIEBmYEBmoEBm4EBnIEBnYEBnoEB
+n4EBoIEBoYEBooEBo4EBpIEBpYEBpoEBp4EBqIEBqYEBqoEBq4EBrIEBrYEBroEBr4EBsIEBsYEBsoEB
+s4EBtIEBtYEBtoEBt4EBuIEBuYEBuoEBu4EBvIEBvYEBvoEBv4EBwIEBwYEBwoEBw4EBxIEBxYEBxoEB
+x4EByIEByYEByoEBy4EBzIEBzYEBzoEBz4EB0IEB0YEB0oEB04EB1IEB1YEB1oEB14EB2IEB2YEB2oEB
+24EB3IEB3YEB3oEB34EB4IEB4YEB4oEB44EB5IEB5YEB5oEB54EB6IEB6YEB6oEB64EB7IEB7YEB7oEB
+74EB8IEB8YEB8oEB84EB9IEB9YEB9oEB94EB+IEB+YEB+oEB+4EB/IEB/YEB/oEB/4ECAIECAYECAoEC
+A4ECBIECBYECBoECBxCBENoQ8RCcEPcQTREDZBCyEJYQnRCYEEoQZxCgEHoQtBB9EQFSELMQvRCaELUR
+AVUQoRDHEQFXEDgQqRCZEIMQURC/ENcQuBBWEKcQahCLEI4RAQERA40RA4oQ9hA6EPkQ4BDYEOERA1QQ
+lRDWEKQQnhCoEEsQORBJEQOJEHAQwxDKEH8Q0xCrEI8QrxBSEPMQfhCjEJIQyBBQEFMRAVQQbxCGEE8Q
+vhCIEQFWEQECE//////////9EB0QvBC5EK0QyxDyELAQ5BEBUxBXEMQRA08RA1AQnxEDUxD0EHwQuxDN
+EIIRA4gRA4sQwRDUEJsQzhDJEE4Q2xCiEK4RA4wQ+BCQEPUQkRCsEEgQ4xDA0gAOAEUATQe7gM+g0gAO
+AEUC4ge+gQEzoNIADgBFAuIHwYEBM6DSADoAOwfDB8SiB8QAP15OU0lCT2JqZWN0RGF0YQAIABkAIgAn
+ADEAOgA/AEQAUgBUAGYEggSIBNME2gThBO8FAQUdBSsFNwVDBVEFXAVqBYYFlAWnBbkF0wXdBeoF7AXv
+BfEF9AX3BfkF/AX+BgEGBAYHBgoGDAYOBhEGFAYXBhoGIwYvBjEGMwY8BkYGSAZWBl8GaAZzBnoGjAaV
+Bp4GpwasBrsGzgbXBuIG5AblBu4G9QcCBwgHEQcTB2QHZgdoB2oHbAduB3AHcgd0B3YHeAd6B3wHfgeA
+B4IHhAeGB4gHigeMB44HkAeSB5QHlgeYB5oHnAeeB6AHogekB6YHqAeqB6wHrgewB7IHvwfIB9AH0gfU
+B9YH9wf/CBMIHggsCDYIQwhKCEwITghTCFUIWghcCF4IYAhtCHkIewh9CH8IjgiQCJ0IrAiuCLAIsgi6
+CMwI1QjaCO0I+gj8CP4JAAkTCRwJIQksCTsJRAlLCWMJcgl/CYEJgwmFCaYJqAmqCawJrgmwCbIJvwnB
+CcMJxQnJCcsJ0AndCd8J4QnjCgQKBgoICgoKDAoOChAKIQooCioKLQowCjMKPgo/ClcKaAp2CngKegp8
+Cn4KnwqhCqMKqAqqCqwKrgqwCsEKwwrGCskKzArYCtoK8wsACwILBAsGCysLMQszCzULNws5CzsLPQs/
+C0wLTgtQC1ILYAtiC3wLiQuLC40LjwuwC7ILtAu2C7gLugu8C8kLywvOC9EL3wvhC/QMAQwDDAUMBwwo
+DCoMLAwuDDAMMgw0DFIMcwyADIIMhAyGDKcMqQyrDK0MrwyxDLMMwAzCDMUMyAzQDNIM4AztDO8M8Qzz
+DRQNFg0YDRoNHA0eDSANLQ0vDUUNUg1UDVYNWA15DXsNfQ1/DYENgw2FDZYNmA2aDZwNng2nDakNvw3M
+Dc4N0A3SDfcN+Q37Df0N/w4BDgMOBQ4QDhIOHw4hDiMOJQ5GDkgOSg5MDk4OUA5SDl8OYQ5oDnkOew59
+Dn8OgQ6iDqQOpg6oDqoOrA6uDrcO0A7dDt8O4Q7jDwQPBg8IDwoPDA8ODxAPGQ8bDycPNA82DzgPOg9b
+D10PXw9hD2MPZQ9nD20Pbw92D4MPhQ+HD4kPqg+sD64PsA+yD7QPtg+7D70Pww/UD9YP2A/aD9wP/Q//
+EAEQAxAFEAcQCRAOEBAQGRAbEB0QNRBBEE4QUBBSEFQQdRB3EHkQexB9EH8QgRCHEIkQlxCkEKYQqBCq
+EMsQzRDPENEQ0xDVENcQ4RDjEPAQ/RD/EQERAxEgESIRJBEmESgRKhEsETkROxE9ET8RThFdEWoRbBFu
+EXARkRGTEZURlxGZEZsRnRGkEawRuRG7Eb0RvxHkEeYR6BHqEewR7hHwEfIR/BH+EgsSDRIPEhESNhI4
+EjoSPBI+EkASQhJEEl0SXxJsEm4ScBJyEpMSlRKXEpkSmxKdEp8SpBKmEqwSvRK/EsESwxLFEuYS6BLq
+EuwS7hLwEvIS/BL+EwkTGhMcEx4TIBMiEysTNBM7E1ITYxNlE2cTaRNrE3oTixONE48TkROTE7ATshO0
+E7YTuBO6E7wTxxPnE/QT9hP4E/oUGxQdFB8UIRQjFCUUJxQ0FDYUORQ8FEkUSxRVFGIUZBRmFGgUiRSL
+FI0UjxSRFJMUlRSpFKsUyxTYFNoU3BTeFP8VARUDFQUVBxUJFQsVMhVUFWUVZxVpFWsVbRWOFZAVkhWU
+FZYVmBWaFacVrRW6FbwVvhXAFd0V3xXhFeMV5RXnFekV9xYFFhIWFBYWFhgWORY7Fj0WPxZBFkMWRRZi
+FmQWdhaDFoUWhxaJFqoWrBauFrAWsha0FrYWyxbdFuoW7BbuFvAXERcTFxUXFxcZFxsXHRciFy8XPBc+
+F0AXQhdjF2UXZxdpF2sXbRdvF3oXfBeHF5QXlheYF5oXuxe9F78XwRfDF8UXxxfMF84X1BfhF+MX5Rfn
+GAgYChgMGA4YEBgSGBQYKxgtGDwYRRhMGFsYYxhsGG8ZGBkaGRwZHhkgGSIZJBkmGSgZKhksGS4ZMBky
+GTQZNhk4GToZPBk+GUEZRBlGGUgZShlNGU8ZURlUGVcZWRlcGV4ZYBljGWUZZxlpGWsZbRlvGXEZdBl2
+GXgZexl9GYAZghmEGYYZiBmLGY0ZjxmSGZUZlxmZGZsZnRmfGaEZoxmlGacZqRmrGa0ZsBmyGbUZtxm6
+GbwZvxnCGcQZxhnIGcoZzBnOGdAZ8RnzGfUZ9xn5GfsZ/RoWGhgaNRo3GjkaOxo9Gj8aQRpTGnQadhp4
+GnoafBp+GoAajRqPGpEakxqmGq0athq4Gr0avxrBGsoazxr4GwIbCxsNGw8bERsTGxUbFxsZGxsbLBsu
+GzEbNBs3Gz4bTRtWG1gbYRtjG2wbbhtwG3IbdBudG6sbuBu6G7wbvRu/G8AbwhvEG8Yb1Rv+HAAcAhwD
+HAUcBhwIHAocDBw1HDccORw6HDwcPRw/HEEcQxxkHGYcaBxqHGwcbhxwHHQcdhyfHKEcoxylHKccqRyr
+HK0crxy0HL0cvxzIHMoc5RznHOkc6xztHO8c8RzzHPUc9xz5HPsc/R0AHSkdKx0tHS4dMB0xHTMdNR03
+HWAdYh1kHWYdaB1qHWwdbh1wHXUdfh2AHYkdix2WHZgdmh2cHZ4doB3JHcsdzR3PHdEd0x3VHdcd2R3w
+Hfkd+x4EHgYeCB4KHgweLR4vHjEeMx41HjceOR5XHoAegh6EHoYeiB6KHowejh6QHp4epx6pHrAesh60
+Hrce2B7aHtwe3h7gHuIe5B7xHxIfFB8XHxkfGx8dHx8fKx9UH1YfWB9aH1wfXh9gH2IfZR+GH4gfix+O
+H5Afkh+UH6Ufpx/QH9If1B/XH9kf2x/dH98f4h/nH/Af8h/7H/0gFCAWIBggGyAeICAgIiAlICcgKiAs
+IC4gVyBZIFsgXiBgIGIgZCBmIGkgdSB+IIAgiSCLII4gkCCpINIg1CDWINcg2SDaINwg3iDgIQkhCyEN
+IQ4hECERIRMhFSEXIUAhQiFEIUchSSFLIU0hTyFSIVchYCFiIWUhZyFwIXIhdSF+IYchiSGWIZkhnCGe
+IaEhoyGmIc8h0SHTIdYh2CHaIdwh3iHhIeYh7yHxIggiCiINIg8iESIUIhciGSIbIh0iICIiIksiTSJP
+IlAiUiJTIlUiVyJZIoIihCKHIooijCKOIpAikiKVIp4iryKxIrQityK6IsMixSLOItAi0SLjIwwjDiMQ
+IxEjEyMUIxYjGCMaI0MjRSNHI0gjSiNLI00jTyNRI14jhyOJI4sjjiOQI5IjlCOWI5kjniOnI6kjtiO4
+I7ojvSO/I8EjwyPsI+4j8CPxI/Mj9CP2I/gj+iQGJA8kESQUJDUkPiRDJEwkTyT4JPok/CT+JQAlAiUF
+JQclCSULJQ0lDyURJRMlFSUXJRklGyUdJR8lISUjJSUlJyUpJSslLSUvJTElMyU1JTclOiU8JT4lQCVC
+JUQlRiVIJUolTSVPJVElUyVVJVclWSVbJV0lXyVhJWMlZSVnJWklbCVvJXElcyV1JXcleSV7JX0lgCWC
+JYQlhiWIJYoljCWOJZAlkiWUJZYlmCWaJZwlniWhJaMlpSWuJbEmXCZeJmAmYiZkJmcmaSZrJm0mbyZx
+JnQmdiZ4JnomfCZ+JoAmgiaFJocmiiaMJo4mkCaTJpUmlyaaJpwmnyaiJqUmpyapJqsmrSavJrEmsya1
+JrcmuSa8Jr4mwSbDJsYmyCbKJswmzibQJtMm1SbXJtom3CbfJuEm4yblJucm6SbrJu0m7ybxJvMm9Sb4
+Jvom/Sb/JwInBCcGJwgnCicMJw4nECcSJxQnFicfJyInzSfQJ9Mn1ifZJ9wn3yfiJ+Un6CfrJ+4n8Sf0
+J/cn+if9KAAoAygGKAkoDCgPKBIoFSgYKBsoHighKCQoJygqKC0oMCgzKDYoOSg8KD8oQihFKEgoSyhO
+KFEoVChXKFooXShgKGMoZihoKGsobihxKHQodyh6KH0ogCiDKIYoiSiMKI8okiiVKJgomyieKKEopCin
+KKoorSiwKLMotii5KLwovyjCKMUoyCjbKO4pISk/KUspWSl2KYspqim2KdAp5CoVKiEqKyo9KlAqaSqU
+Kqsqvir9KxArKys3K1Irait9K48rmyuuK7orzyvtLAAsDiwrLDcsUyx4LJMsnyzELNAs7Cz/LQstFy0u
+LUEtWy2SLZ4ttS3MLd4uCC4yLlIudS6cLrQuwC7bLugvBC8QLzEvSC9UL20vgi+jL70v2S/xMAYwHDAw
+MDwwVTBoMHEwdDB1MH4wgTCCMIswjjGHMYkxizGNMY8xkTGTMZUxlzGZMZsxnTGgMaMxpTGnMakxqzGu
+MbAxsjG0MbYxuDG6MbwxvjHBMcMxxTHIMcoxzDHOMdAx0jHUMdYx2DHaMdwx3jHgMeIx5DHmMekx7DHu
+MfAx8zH1Mfcx+TH7Mf0x/zIBMgMyBTIHMgkyCzINMg8yETITMhUyFzIZMhsyHTIfMiIyJTInMikyKzIu
+MjAyMjI0MjYyOTI7Mj0yPzJBMkMyRTJHMkkySzJNMlAyUzJVMlcyWTJbMl4yYDJiMmUyZzJpMmsybTJv
+MnEyczJ1MncyeTJ7Mn4ygDKDMoUyhzKJMosyjTKPMpgymzOUM5czmjOdM6AzozOmM6kzrDOvM7IztTO4
+M7szvjPBM8QzxzPKM80z0DPTM9Yz2TPcM98z4jPlM+gz6zPuM/Ez9DP3M/oz/TQANAM0BjQJNAw0DzQS
+NBU0GDQbNB40ITQkNCc0KjQtNDA0MzQ2NDk0PDQ/NEI0RTRINEs0TjRRNFQ0VzRaNF00YDRjNGY0aTRs
+NG80cjR1NHg0ezR+NIE0hDSHNIo0jTSQNJM0ljSZNJw0nzSiNKU0qDSrNK40sTS0NLc0ujS9NMA0wzTG
+NMk0zDTPNNI01TTYNNs03jThNOQ05zTqNO008DTzNPY0+TT8NP81AjUFNQc1CTULNQ01DzURNRQ1FjUY
+NRo1HDUeNSA1IjUkNSY1KDUrNS01LzUxNTM1NjU4NTo1PTU/NUE1QzVFNUc1STVLNU01TzVRNVM1VTVX
+NVo1XTVgNWI1ZDVmNWg1ajVsNW81cTVzNXU1dzV5NXs1fTV/NYI1hDWGNYg1ijWMNY41kDWSNZQ1ljWY
+NZo1nDWeNaA1ojWlNac1qTWrNa01rzWyNbU1vjXANcI1xDXGNcg1yjXMNc410TXTNdU12DXbNd014DXi
+NeQ15jXoNeo17TXwNfI19DX2Nfg1+jX8Nf42ADYCNgU2BzYJNgs2DTYPNhE2EzYVNh42IDYhNio2LTYu
+Njc2OjY7NkQ2SQAAAAAAAAICAAAAAAAAB8UAAAAAAAAAAAAAAAAAADZYA
diff --git a/GitX.xcodeproj/project.pbxproj b/GitX.xcodeproj/project.pbxproj
index 7dc275b..64affbb 100644
--- a/GitX.xcodeproj/project.pbxproj
+++ b/GitX.xcodeproj/project.pbxproj
@@ -13,6 +13,7 @@
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
911111E20E58BD5A00BF76B4 /* RepositoryWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 911111E00E58BD5A00BF76B4 /* RepositoryWindow.xib */; };
+ 911111F80E594F3F00BF76B4 /* PBRepositoryDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = 911111F70E594F3F00BF76B4 /* PBRepositoryDocumentController.m */; };
F50FE0E30E07BE9600854FCD /* PBGitRevisionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F50FE0E20E07BE9600854FCD /* PBGitRevisionCell.m */; };
F513085B0E0740F2000C8BCD /* PBQLOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = F513085A0E0740F2000C8BCD /* PBQLOutlineView.m */; };
F561727F0E056A11001DCD79 /* diff_style.css in Resources */ = {isa = PBXBuildFile; fileRef = F561727C0E056A11001DCD79 /* diff_style.css */; };
@@ -49,6 +50,8 @@
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
8D1107320486CEB800E47090 /* GitX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GitX.app; sourceTree = BUILT_PRODUCTS_DIR; };
911111E10E58BD5A00BF76B4 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/RepositoryWindow.xib; sourceTree = ""; };
+ 911111F60E594F3F00BF76B4 /* PBRepositoryDocumentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBRepositoryDocumentController.h; sourceTree = ""; };
+ 911111F70E594F3F00BF76B4 /* PBRepositoryDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBRepositoryDocumentController.m; sourceTree = ""; };
F50FE0E10E07BE9600854FCD /* PBGitRevisionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitRevisionCell.h; sourceTree = ""; };
F50FE0E20E07BE9600854FCD /* PBGitRevisionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitRevisionCell.m; sourceTree = ""; };
F51308590E0740F2000C8BCD /* PBQLOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBQLOutlineView.h; sourceTree = ""; };
@@ -209,6 +212,8 @@
77C8280C06725ACE000B614F /* ApplicationController.m */,
F57CC43F0E05E496000472E2 /* PBDetailController.h */,
F57CC4400E05E496000472E2 /* PBDetailController.m */,
+ 911111F60E594F3F00BF76B4 /* PBRepositoryDocumentController.h */,
+ 911111F70E594F3F00BF76B4 /* PBRepositoryDocumentController.m */,
);
name = Controllers;
sourceTree = "";
@@ -321,6 +326,7 @@
F5DFFA6C0E075D8800617813 /* PBEasyFS.m in Sources */,
F50FE0E30E07BE9600854FCD /* PBGitRevisionCell.m in Sources */,
F5FF4E180E0829C20006317A /* PBGitRevList.m in Sources */,
+ 911111F80E594F3F00BF76B4 /* PBRepositoryDocumentController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/PBGitRepository.h b/PBGitRepository.h
index 2011e17..0bf884c 100644
--- a/PBGitRepository.h
+++ b/PBGitRepository.h
@@ -9,6 +9,8 @@
#import
#import "PBGitRevList.h"
+extern NSString* PBGitRepositoryErrorDomain;
+
@interface PBGitRepository : NSDocument {
NSString* path;
PBGitRevList* revisionList;
diff --git a/PBGitRepository.m b/PBGitRepository.m
index d59c8bb..f1939e3 100644
--- a/PBGitRepository.m
+++ b/PBGitRepository.m
@@ -8,10 +8,13 @@
#import "PBGitRepository.h"
#import "PBGitCommit.h"
+#import "PBDetailController.h"
#import "NSFileHandleExt.h"
#import "PBEasyPipe.h"
+NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain";
+
@implementation PBGitRepository
@synthesize path, revisionList;
@@ -43,9 +46,63 @@ static NSString* gitPath;
NSLog(@"Could not find a git binary!");
}
+- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
+{
+ if (outError) {
+ *outError = [NSError errorWithDomain:PBGitRepositoryErrorDomain
+ code:0
+ userInfo:[NSDictionary dictionaryWithObject:@"Reading files is not supported." forKey:NSLocalizedFailureReasonErrorKey]];
+ }
+ return NO;
+}
+
+- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError
+{
+ self.path = nil;
+
+ if (![fileWrapper isDirectory]) {
+ if (outError) {
+ NSDictionary* userInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Reading files is not supported.", [fileWrapper filename]]
+ forKey:NSLocalizedRecoverySuggestionErrorKey];
+ *outError = [NSError errorWithDomain:PBGitRepositoryErrorDomain code:0 userInfo:userInfo];
+ }
+ } else {
+ NSString* repositoryPath = [[self fileURL] path];
+
+ if ([repositoryPath hasSuffix:@".git"]) {
+ self.path = repositoryPath;
+ } else {
+ // Use rev-parse to find the .git dir for the repository being opened
+ NSString* newPath = [PBEasyPipe outputForCommand:gitPath withArgs:[NSArray arrayWithObjects:@"rev-parse", @"--git-dir", nil] inDir:repositoryPath];
+ if ([newPath isEqualToString:@".git"]) {
+ self.path = [repositoryPath stringByAppendingPathComponent:@".git"];
+ } else if ([newPath length] > 0) {
+ self.path = newPath;
+ } else if (outError) {
+ NSDictionary* userInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%@ does not appear to be a git repository.", [fileWrapper filename]]
+ forKey:NSLocalizedRecoverySuggestionErrorKey];
+ *outError = [NSError errorWithDomain:PBGitRepositoryErrorDomain code:0 userInfo:userInfo];
+ }
+ }
+
+ if (self.path) {
+ revisionList = [[PBGitRevList alloc] initWithRepository:self andRevListParameters:[NSArray array]];
+ }
+ }
+
+ return self.path != nil;
+}
+
+// Overridden to create our custom window controller
+- (void)makeWindowControllers
+{
+ PBDetailController* controller = [[PBDetailController alloc] initWithRepository:self];
+ [self addWindowController:controller];
+ [controller release];
+}
+
+ (PBGitRepository*) repositoryWithPath:(NSString*) path
{
-
PBGitRepository* repo = [[PBGitRepository alloc] initWithPath: path];
return repo;
}
diff --git a/PBRepositoryDocumentController.h b/PBRepositoryDocumentController.h
new file mode 100644
index 0000000..8c9c040
--- /dev/null
+++ b/PBRepositoryDocumentController.h
@@ -0,0 +1,17 @@
+//
+// PBRepositoryDocumentController.h
+// GitX
+//
+// Created by Ciarán Walsh on 15/08/2008.
+// Copyright 2008 __MyCompanyName__. All rights reserved.
+//
+
+#import
+
+
+@interface PBRepositoryDocumentController : NSDocumentController
+{
+
+}
+
+@end
diff --git a/PBRepositoryDocumentController.m b/PBRepositoryDocumentController.m
new file mode 100644
index 0000000..9f13c57
--- /dev/null
+++ b/PBRepositoryDocumentController.m
@@ -0,0 +1,21 @@
+//
+// PBRepositoryDocumentController.mm
+// GitX
+//
+// Created by Ciarán Walsh on 15/08/2008.
+// Copyright 2008 __MyCompanyName__. All rights reserved.
+//
+
+#import "PBRepositoryDocumentController.h"
+
+
+@implementation PBRepositoryDocumentController
+// This method is overridden to configure the open panel to only allow
+// selection of directories
+- (NSInteger)runModalOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)extensions
+{
+ [openPanel setCanChooseFiles:NO];
+ [openPanel setCanChooseDirectories:YES];
+ return [openPanel runModalForDirectory:nil file:nil types:nil];
+}
+@end