UI improvements & security.
[ADDED] Settings for remembering and storing the master password. [ADDED] KeyChain used to store master password & hash. [IMPROVED] Remember whether help is hidden. [FIXED] Making passwords stored. [ADDED] Generated password counter. Edit stored passwords. [IMPROVED] UI prettier and better documented. [ADDED] Warnings when changing a site's password.
							
								
								
									
										2
									
								
								External/Pearl
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
							
								
								
									
										
											BIN
										
									
								
								OnePassword.sketch/Data
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								OnePassword.sketch/QuickLook/Preview.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								OnePassword.sketch/QuickLook/Thumbnail.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 20 KiB  | 
@@ -11,6 +11,7 @@
 | 
			
		||||
		DA007F5514B25EE100251337 /* ciphers.plist in Resources */ = {isa = PBXBuildFile; fileRef = DA007F5414B25EE100251337 /* ciphers.plist */; };
 | 
			
		||||
		DA007F5614B26EFA00251337 /* Pearl.strings in Resources */ = {isa = PBXBuildFile; fileRef = DAC77CD41482AAD600BCF976 /* Pearl.strings */; };
 | 
			
		||||
		DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; };
 | 
			
		||||
		DA0A848C14C4DFCB0090EA8E /* OPElementGeneratedEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0A848B14C4DFCB0090EA8E /* OPElementGeneratedEntity.m */; };
 | 
			
		||||
		DA0B951114C2D69E001D4EB1 /* help.html in Resources */ = {isa = PBXBuildFile; fileRef = DA0B951014C2D69E001D4EB1 /* help.html */; };
 | 
			
		||||
		DA0B966914C37487001D4EB1 /* addressbook-person@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0B951314C37486001D4EB1 /* addressbook-person@2x.png */; };
 | 
			
		||||
		DA0B966A14C37487001D4EB1 /* addressbook.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0B951414C37486001D4EB1 /* addressbook.png */; };
 | 
			
		||||
@@ -372,7 +373,8 @@
 | 
			
		||||
		DA5BFA67147E415C00F98B1E /* OPMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA66147E415C00F98B1E /* OPMainViewController.m */; };
 | 
			
		||||
		DA5DB7A614BE4B19002DD256 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A514BE4B19002DD256 /* Default.png */; };
 | 
			
		||||
		DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A714BE4B4B002DD256 /* Default@2x.png */; };
 | 
			
		||||
		DABF7DA514BE54E4007F3557 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA414BE54E4007F3557 /* Default.png */; };
 | 
			
		||||
		DA7659AF14C5E22E00769249 /* Square-bottom.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7659AD14C5E22E00769249 /* Square-bottom.png */; };
 | 
			
		||||
		DA7659B014C5E22E00769249 /* Square-top.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7659AE14C5E22E00769249 /* Square-top.png */; };
 | 
			
		||||
		DAC6325E1486805C0075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
 | 
			
		||||
		DAC6326D148680650075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
 | 
			
		||||
		DAC63277148680700075AEA5 /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; };
 | 
			
		||||
@@ -452,6 +454,7 @@
 | 
			
		||||
		DAC781321482AAD800BCF976 /* WebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC780EF1482AAD700BCF976 /* WebViewController.h */; };
 | 
			
		||||
		DAC781331482AAD800BCF976 /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC780F01482AAD700BCF976 /* WebViewController.m */; };
 | 
			
		||||
		DAC781361482E67300BCF976 /* OPRecentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC781351482E67300BCF976 /* OPRecentViewController.m */; };
 | 
			
		||||
		DADC3C4D14C62B350091CB4D /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DADC3C4C14C62B350091CB4D /* Settings.bundle */; };
 | 
			
		||||
		DAE2C648148247E500BA6B10 /* OPTypeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE2C646148247E500BA6B10 /* OPTypeViewController.m */; };
 | 
			
		||||
		DAE998D214C1D2A0002D7C22 /* Content-Backdrop.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE9987914C1D2A0002D7C22 /* Content-Backdrop.png */; };
 | 
			
		||||
		DAE998D314C1D2A0002D7C22 /* Content-Backdrop@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAE9987A14C1D2A0002D7C22 /* Content-Backdrop@2x.png */; };
 | 
			
		||||
@@ -616,6 +619,8 @@
 | 
			
		||||
		DA007F5114B24DCD00251337 /* OPConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPConfig.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA007F5414B25EE100251337 /* ciphers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ciphers.plist; sourceTree = "<group>"; };
 | 
			
		||||
		DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		DA0A848A14C4DFCB0090EA8E /* OPElementGeneratedEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPElementGeneratedEntity.h; sourceTree = "<group>"; };
 | 
			
		||||
		DA0A848B14C4DFCB0090EA8E /* OPElementGeneratedEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPElementGeneratedEntity.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA0B951014C2D69E001D4EB1 /* help.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = help.html; path = Resources/help.html; sourceTree = "<group>"; };
 | 
			
		||||
		DA0B951314C37486001D4EB1 /* addressbook-person@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "addressbook-person@2x.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DA0B951414C37486001D4EB1 /* addressbook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = addressbook.png; sourceTree = "<group>"; };
 | 
			
		||||
@@ -987,7 +992,8 @@
 | 
			
		||||
		DA5BFA66147E415C00F98B1E /* OPMainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OPMainViewController.m; sourceTree = "<group>"; };
 | 
			
		||||
		DA5DB7A514BE4B19002DD256 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = ../Default.png; sourceTree = "<group>"; };
 | 
			
		||||
		DA5DB7A714BE4B4B002DD256 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "../Default@2x.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DABF7DA414BE54E4007F3557 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = SOURCE_ROOT; };
 | 
			
		||||
		DA7659AD14C5E22E00769249 /* Square-bottom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Square-bottom.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DA7659AE14C5E22E00769249 /* Square-top.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Square-top.png"; sourceTree = "<group>"; };
 | 
			
		||||
		DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libuicolor-utilities.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DAC6326C148680650075AEA5 /* libjrswizzle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjrswizzle.a; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		DAC632791486809A0075AEA5 /* JRSwizzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JRSwizzle.h; path = External/Pearl/External/jrswizzle/JRSwizzle.h; sourceTree = SOURCE_ROOT; };
 | 
			
		||||
@@ -2070,6 +2076,7 @@
 | 
			
		||||
		DAC780F01482AAD700BCF976 /* WebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewController.m; sourceTree = "<group>"; };
 | 
			
		||||
		DAC781341482E67300BCF976 /* OPRecentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPRecentViewController.h; sourceTree = "<group>"; };
 | 
			
		||||
		DAC781351482E67300BCF976 /* OPRecentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPRecentViewController.m; sourceTree = "<group>"; };
 | 
			
		||||
		DADC3C4C14C62B350091CB4D /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
 | 
			
		||||
		DAE2C645148247E500BA6B10 /* OPTypeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPTypeViewController.h; sourceTree = "<group>"; };
 | 
			
		||||
		DAE2C646148247E500BA6B10 /* OPTypeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OPTypeViewController.m; sourceTree = "<group>"; };
 | 
			
		||||
		DAE9987914C1D2A0002D7C22 /* Content-Backdrop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Content-Backdrop.png"; path = "Resources/Content-Backdrop.png"; sourceTree = "<group>"; };
 | 
			
		||||
@@ -2658,6 +2665,7 @@
 | 
			
		||||
				DA34DA1514B1BEA100F721C1 /* OPTypes.m */,
 | 
			
		||||
				DA007F5014B24DCC00251337 /* OPConfig.h */,
 | 
			
		||||
				DA007F5114B24DCD00251337 /* OPConfig.m */,
 | 
			
		||||
				DADC3C4C14C62B350091CB4D /* Settings.bundle */,
 | 
			
		||||
			);
 | 
			
		||||
			path = OnePassword;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
@@ -2704,6 +2712,8 @@
 | 
			
		||||
			children = (
 | 
			
		||||
				DA34DA0F14B1BC7E00F721C1 /* OPElementEntity.h */,
 | 
			
		||||
				DA34DA1014B1BC7E00F721C1 /* OPElementEntity.m */,
 | 
			
		||||
				DA0A848A14C4DFCB0090EA8E /* OPElementGeneratedEntity.h */,
 | 
			
		||||
				DA0A848B14C4DFCB0090EA8E /* OPElementGeneratedEntity.m */,
 | 
			
		||||
				DA34DA0B14B1BC7D00F721C1 /* OPElementStoredEntity.h */,
 | 
			
		||||
				DA34DA0C14B1BC7D00F721C1 /* OPElementStoredEntity.m */,
 | 
			
		||||
			);
 | 
			
		||||
@@ -2789,7 +2799,6 @@
 | 
			
		||||
		DAC77CD31482AAD600BCF976 /* Resources */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DABF7DA414BE54E4007F3557 /* Default.png */,
 | 
			
		||||
				DAC77CD41482AAD600BCF976 /* Pearl.strings */,
 | 
			
		||||
			);
 | 
			
		||||
			path = Resources;
 | 
			
		||||
@@ -3878,6 +3887,8 @@
 | 
			
		||||
		DAE9987B14C1D2A0002D7C22 /* Dividers */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				DA7659AD14C5E22E00769249 /* Square-bottom.png */,
 | 
			
		||||
				DA7659AE14C5E22E00769249 /* Square-top.png */,
 | 
			
		||||
				DAE9987C14C1D2A0002D7C22 /* Bold_Lines.png */,
 | 
			
		||||
				DAE9987D14C1D2A0002D7C22 /* Box.png */,
 | 
			
		||||
				DAE9987E14C1D2A0002D7C22 /* Dashed_Divider.png */,
 | 
			
		||||
@@ -4192,7 +4203,6 @@
 | 
			
		||||
				DA007F5614B26EFA00251337 /* Pearl.strings in Resources */,
 | 
			
		||||
				DA5DB7A614BE4B19002DD256 /* Default.png in Resources */,
 | 
			
		||||
				DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */,
 | 
			
		||||
				DABF7DA514BE54E4007F3557 /* Default.png in Resources */,
 | 
			
		||||
				DAE998D214C1D2A0002D7C22 /* Content-Backdrop.png in Resources */,
 | 
			
		||||
				DAE998D314C1D2A0002D7C22 /* Content-Backdrop@2x.png in Resources */,
 | 
			
		||||
				DAE998D414C1D2A0002D7C22 /* Bold_Lines.png in Resources */,
 | 
			
		||||
@@ -4668,6 +4678,9 @@
 | 
			
		||||
				DA0B97BC14C37487001D4EB1 /* volume-mute@2x.png in Resources */,
 | 
			
		||||
				DA0B97BD14C37487001D4EB1 /* wrench.png in Resources */,
 | 
			
		||||
				DA0B97BE14C37487001D4EB1 /* wrench@2x.png in Resources */,
 | 
			
		||||
				DA7659AF14C5E22E00769249 /* Square-bottom.png in Resources */,
 | 
			
		||||
				DA7659B014C5E22E00769249 /* Square-top.png in Resources */,
 | 
			
		||||
				DADC3C4D14C62B350091CB4D /* Settings.bundle in Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
@@ -4690,6 +4703,7 @@
 | 
			
		||||
				DA007F5214B24DCD00251337 /* OPConfig.m in Sources */,
 | 
			
		||||
				DA55B29E14B38272001131B7 /* OPContentViewController.m in Sources */,
 | 
			
		||||
				DA55B2A214B4EB47001131B7 /* OPSearchDelegate.m in Sources */,
 | 
			
		||||
				DA0A848C14C4DFCB0090EA8E /* OPElementGeneratedEntity.m in Sources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@
 | 
			
		||||
@property (strong, nonatomic) NSString *keyPhrase;
 | 
			
		||||
 | 
			
		||||
+ (OPAppDelegate *)get;
 | 
			
		||||
+ (NSManagedObjectContext *)managedObjectContext;
 | 
			
		||||
 | 
			
		||||
- (void)saveContext;
 | 
			
		||||
- (NSURL *)applicationDocumentsDirectory;
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,13 @@
 | 
			
		||||
 | 
			
		||||
#import "OPMainViewController.h"
 | 
			
		||||
 | 
			
		||||
@interface OPAppDelegate ()
 | 
			
		||||
 | 
			
		||||
+ (NSDictionary *)keyPhraseQuery;
 | 
			
		||||
+ (NSDictionary *)keyPhraseHashQuery;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
@implementation OPAppDelegate
 | 
			
		||||
 | 
			
		||||
@synthesize managedObjectContext = __managedObjectContext;
 | 
			
		||||
@@ -22,26 +29,63 @@
 | 
			
		||||
    [Logger get].autoprintLevel = LogLevelDebug;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)applicationWillResignActive:(UIApplication *)application {
 | 
			
		||||
+ (NSDictionary *)keyPhraseQuery {
 | 
			
		||||
    
 | 
			
		||||
    if (![[OPConfig get].rememberKeyPhrase boolValue])
 | 
			
		||||
        self.keyPhrase = nil;
 | 
			
		||||
    static NSDictionary *OPKeyPhraseQuery = nil;
 | 
			
		||||
    if (!OPKeyPhraseQuery)
 | 
			
		||||
        OPKeyPhraseQuery = [KeyChain createQueryForClass:kSecClassGenericPassword
 | 
			
		||||
                                              attributes:[NSDictionary dictionaryWithObject:@"MasterKeyPhrase"
 | 
			
		||||
                                                                                     forKey:(__bridge id)kSecAttrService]
 | 
			
		||||
                                                 matches:nil];
 | 
			
		||||
    
 | 
			
		||||
    return OPKeyPhraseQuery;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
+ (NSDictionary *)keyPhraseHashQuery {
 | 
			
		||||
    
 | 
			
		||||
    static NSDictionary *OPKeyPhraseHashQuery = nil;
 | 
			
		||||
    if (!OPKeyPhraseHashQuery)
 | 
			
		||||
        OPKeyPhraseHashQuery = [KeyChain createQueryForClass:kSecClassGenericPassword
 | 
			
		||||
                                                  attributes:[NSDictionary dictionaryWithObject:@"MasterKeyPhraseHash"
 | 
			
		||||
                                                                                         forKey:(__bridge id)kSecAttrService]
 | 
			
		||||
                                                     matches:nil];
 | 
			
		||||
    
 | 
			
		||||
    return OPKeyPhraseHashQuery;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)applicationDidBecomeActive:(UIApplication *)application {
 | 
			
		||||
    
 | 
			
		||||
    if (!self.keyPhrase)
 | 
			
		||||
    if ([[OPConfig get].storeKeyPhrase boolValue]) {
 | 
			
		||||
        // Key phrase is stored in keychain.  Load it.
 | 
			
		||||
        dbg(@"Loading master key phrase from key chain.");
 | 
			
		||||
        NSData *keyPhraseData = [KeyChain dataOfItemForQuery:[OPAppDelegate keyPhraseQuery]];
 | 
			
		||||
        dbg(@" -> Master key phrase %@.", keyPhraseData? @"found": @"NOT found");
 | 
			
		||||
        
 | 
			
		||||
        self.keyPhrase = keyPhraseData? [[NSString alloc] initWithBytes:keyPhraseData.bytes length:keyPhraseData.length
 | 
			
		||||
                                                               encoding:NSUTF8StringEncoding]: nil;
 | 
			
		||||
    } else {
 | 
			
		||||
        // Key phrase should not be stored in keychain.  Delete it.
 | 
			
		||||
        dbg(@"Deleting master key phrase from key chain.");
 | 
			
		||||
        [KeyChain deleteItemForQuery:[OPAppDelegate keyPhraseQuery]];
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if (!self.keyPhrase) {
 | 
			
		||||
        // Key phrase is not known.  Ask user to set/specify it.
 | 
			
		||||
        dbg(@"Key phrase not known.  Will ask user.");
 | 
			
		||||
        
 | 
			
		||||
        dispatch_async(dispatch_get_main_queue(), ^{
 | 
			
		||||
            NSString *keyPhraseHash = [OPConfig get].keyPhraseHash;
 | 
			
		||||
            NSData *keyPhraseHash = [KeyChain dataOfItemForQuery:[OPAppDelegate keyPhraseHashQuery]];
 | 
			
		||||
            dbg(@"Key phrase hash %@.", keyPhraseHash? @"known": @"NOT known");
 | 
			
		||||
            
 | 
			
		||||
            AlertViewController *keyPhraseAlert = [[AlertViewController alloc] initQuestionWithTitle:@"One Password"
 | 
			
		||||
                                                                                             message:keyPhraseHash? @"Unlock with your master password:": @"Choose your master password:"
 | 
			
		||||
                                                                                   tappedButtonBlock:
 | 
			
		||||
                                                   ^(NSInteger buttonIndex, NSString *answer) {
 | 
			
		||||
                                                       if (buttonIndex == 0)
 | 
			
		||||
                                                       if (!buttonIndex)
 | 
			
		||||
                                                           exit(0);
 | 
			
		||||
                                                       
 | 
			
		||||
                                                       if (![answer length]) {
 | 
			
		||||
                                                           // User didn't enter a key phrase.
 | 
			
		||||
                                                           [AlertViewController showAlertWithTitle:[PearlStrings get].commonTitleError
 | 
			
		||||
                                                                                           message:@"No master password entered."
 | 
			
		||||
                                                                                 tappedButtonBlock:
 | 
			
		||||
@@ -50,9 +94,13 @@
 | 
			
		||||
                                                            } cancelTitle:@"Quit" otherTitles:nil];
 | 
			
		||||
                                                       }
 | 
			
		||||
                                                       
 | 
			
		||||
                                                       NSString *answerHash = [[answer hashWith:PearlDigestSHA1] encodeHex];
 | 
			
		||||
                                                       if (keyPhraseHash) {
 | 
			
		||||
                                                           if (![keyPhraseHash isEqualToString:answerHash]) {
 | 
			
		||||
                                                       NSData *answerHash = [answer hashWith:PearlDigestSHA512];
 | 
			
		||||
                                                       if (keyPhraseHash)
 | 
			
		||||
                                                           // A key phrase hash is known -> a key phrase is set.
 | 
			
		||||
                                                           // Make sure the user's entered key phrase matches it.
 | 
			
		||||
                                                           if (![keyPhraseHash isEqual:answerHash]) {
 | 
			
		||||
                                                               dbg(@"Key phrase hash mismatch. Expected: %@, answer: %@.", keyPhraseHash, answerHash);
 | 
			
		||||
                                                               
 | 
			
		||||
                                                               [AlertViewController showAlertWithTitle:[PearlStrings get].commonTitleError
 | 
			
		||||
                                                                                               message:@"Incorrect master password."
 | 
			
		||||
                                                                                     tappedButtonBlock:
 | 
			
		||||
@@ -62,16 +110,23 @@
 | 
			
		||||
                                                               
 | 
			
		||||
                                                               return;
 | 
			
		||||
                                                           }
 | 
			
		||||
                                                       } else
 | 
			
		||||
                                                           [OPConfig get].keyPhraseHash = answerHash;
 | 
			
		||||
                                                       
 | 
			
		||||
                                                       self.keyPhrase = answer;
 | 
			
		||||
                                                   } cancelTitle:@"Quit" otherTitles:@"Unlock", nil];
 | 
			
		||||
            keyPhraseAlert.alertField.autocapitalizationType = UITextAutocapitalizationTypeNone;
 | 
			
		||||
            keyPhraseAlert.alertField.autocorrectionType = UITextAutocorrectionTypeNo;
 | 
			
		||||
            keyPhraseAlert.alertField.enablesReturnKeyAutomatically = YES;
 | 
			
		||||
            keyPhraseAlert.alertField.returnKeyType = UIReturnKeyGo;
 | 
			
		||||
            keyPhraseAlert.alertField.secureTextEntry = YES;
 | 
			
		||||
            [keyPhraseAlert showAlert];
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)applicationWillResignActive:(UIApplication *)application {
 | 
			
		||||
    
 | 
			
		||||
    if (![[OPConfig get].rememberKeyPhrase boolValue])
 | 
			
		||||
        self.keyPhrase = nil;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)applicationWillTerminate:(UIApplication *)application
 | 
			
		||||
@@ -85,6 +140,11 @@
 | 
			
		||||
    return (OPAppDelegate *)[super get];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
+ (NSManagedObjectContext *)managedObjectContext{
 | 
			
		||||
    
 | 
			
		||||
    return [(OPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectContext];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)saveContext
 | 
			
		||||
{
 | 
			
		||||
    NSError *error = nil;
 | 
			
		||||
@@ -99,6 +159,25 @@
 | 
			
		||||
    } 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)setKeyPhrase:(NSString *)keyPhrase {
 | 
			
		||||
    
 | 
			
		||||
    _keyPhrase = keyPhrase;
 | 
			
		||||
    
 | 
			
		||||
    if (keyPhrase) {
 | 
			
		||||
        NSData *keyPhraseHash = [keyPhrase hashWith:PearlDigestSHA512];
 | 
			
		||||
        dbg(@"Updating master key phrase hash to: %@.", keyPhraseHash);
 | 
			
		||||
        [KeyChain addOrUpdateItemForQuery:[OPAppDelegate keyPhraseHashQuery]
 | 
			
		||||
                           withAttributes:[NSDictionary dictionaryWithObject:keyPhraseHash
 | 
			
		||||
                                                                      forKey:(__bridge id)kSecValueData]];
 | 
			
		||||
        if ([[OPConfig get].storeKeyPhrase boolValue]) {
 | 
			
		||||
            dbg(@"Storing master key phrase in key chain.");
 | 
			
		||||
            [KeyChain addOrUpdateItemForQuery:[OPAppDelegate keyPhraseQuery]
 | 
			
		||||
                               withAttributes:[NSDictionary dictionaryWithObject:[keyPhrase dataUsingEncoding:NSUTF8StringEncoding]
 | 
			
		||||
                                                                          forKey:(__bridge id)kSecValueData]];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#pragma mark - Core Data stack
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -9,8 +9,9 @@
 | 
			
		||||
@interface OPConfig : Config
 | 
			
		||||
 | 
			
		||||
@property (nonatomic, retain) NSNumber *dataStoreError;
 | 
			
		||||
@property (nonatomic, retain) NSString *keyPhraseHash;
 | 
			
		||||
@property (nonatomic, retain) NSNumber *storeKeyPhrase;
 | 
			
		||||
@property (nonatomic, retain) NSNumber *rememberKeyPhrase;
 | 
			
		||||
@property (nonatomic, retain) NSNumber *helpHidden;
 | 
			
		||||
 | 
			
		||||
+ (OPConfig *)get;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,18 +10,19 @@
 | 
			
		||||
 | 
			
		||||
@implementation OPConfig
 | 
			
		||||
 | 
			
		||||
@dynamic dataStoreError, keyPhraseHash, rememberKeyPhrase;
 | 
			
		||||
@dynamic dataStoreError, storeKeyPhrase, rememberKeyPhrase, helpHidden;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-(id) init {
 | 
			
		||||
- (id)init {
 | 
			
		||||
    
 | 
			
		||||
    if(!(self = [super init]))
 | 
			
		||||
        return self;
 | 
			
		||||
    
 | 
			
		||||
    [self.defaults registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:
 | 
			
		||||
                                     [NSNumber numberWithBool:NO],                                  NSStringFromSelector(@selector(dataStoreError)),
 | 
			
		||||
                                     [NSNumber numberWithBool:NO],                                  NSStringFromSelector(@selector(storeKeyPhrase)),
 | 
			
		||||
                                     [NSNumber numberWithBool:NO],                                  NSStringFromSelector(@selector(rememberKeyPhrase)),
 | 
			
		||||
                                     
 | 
			
		||||
                                     [NSNumber numberWithBool:NO],                                  NSStringFromSelector(@selector(helpHidden)),
 | 
			
		||||
                                     nil]];
 | 
			
		||||
    
 | 
			
		||||
    return self;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "OPElementEntity.h"
 | 
			
		||||
#import "OPAppDelegate.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@implementation OPElementEntity
 | 
			
		||||
@@ -27,14 +26,7 @@
 | 
			
		||||
 | 
			
		||||
- (id)content {
 | 
			
		||||
    
 | 
			
		||||
    if (![self.name length])
 | 
			
		||||
        return nil;
 | 
			
		||||
    
 | 
			
		||||
    if (self.type & OPElementTypeCalculated)
 | 
			
		||||
        return OPCalculateContent(self.type, self.name, [OPAppDelegate get].keyPhrase);
 | 
			
		||||
 | 
			
		||||
    @throw [NSException exceptionWithName:NSInternalInconsistencyException
 | 
			
		||||
                                   reason:[NSString stringWithFormat:@"Unsupported type: %d", self.type] userInfo:nil];
 | 
			
		||||
    @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Content implementation missing." userInfo:nil];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (NSString *)contentDescription {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								OnePassword/OPElementGeneratedEntity.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,18 @@
 | 
			
		||||
//
 | 
			
		||||
//  OPElementGeneratedEntity.h
 | 
			
		||||
//  OnePassword
 | 
			
		||||
//
 | 
			
		||||
//  Created by Maarten Billemont on 16/01/12.
 | 
			
		||||
//  Copyright (c) 2012 Lyndir. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import <Foundation/Foundation.h>
 | 
			
		||||
#import <CoreData/CoreData.h>
 | 
			
		||||
#import "OPElementEntity.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@interface OPElementGeneratedEntity : OPElementEntity
 | 
			
		||||
 | 
			
		||||
@property (nonatomic) int16_t counter;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
							
								
								
									
										29
									
								
								OnePassword/OPElementGeneratedEntity.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,29 @@
 | 
			
		||||
//
 | 
			
		||||
//  OPElementGeneratedEntity.m
 | 
			
		||||
//  OnePassword
 | 
			
		||||
//
 | 
			
		||||
//  Created by Maarten Billemont on 16/01/12.
 | 
			
		||||
//  Copyright (c) 2012 Lyndir. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "OPElementGeneratedEntity.h"
 | 
			
		||||
#import "OPAppDelegate.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@implementation OPElementGeneratedEntity
 | 
			
		||||
 | 
			
		||||
@dynamic counter;
 | 
			
		||||
 | 
			
		||||
- (id)content {
 | 
			
		||||
 | 
			
		||||
    if (![self.name length])
 | 
			
		||||
        return nil;
 | 
			
		||||
    
 | 
			
		||||
    if (self.type & OPElementTypeCalculated)
 | 
			
		||||
        return OPCalculateContent(self.type, self.name, [OPAppDelegate get].keyPhrase, self.counter);
 | 
			
		||||
    
 | 
			
		||||
    @throw [NSException exceptionWithName:NSInternalInconsistencyException
 | 
			
		||||
                                   reason:[NSString stringWithFormat:@"Unsupported type: %d", self.type] userInfo:nil];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
@@ -20,9 +20,14 @@
 | 
			
		||||
@property (weak, nonatomic) IBOutlet UILabel *siteName;
 | 
			
		||||
@property (weak, nonatomic) IBOutlet UILabel *passwordCounter;
 | 
			
		||||
@property (weak, nonatomic) IBOutlet UIButton *passwordIncrementer;
 | 
			
		||||
@property (weak, nonatomic) IBOutlet UIButton *passwordEdit;
 | 
			
		||||
@property (weak, nonatomic) IBOutlet UIView *contentContainer;
 | 
			
		||||
@property (weak, nonatomic) IBOutlet UIView *helpContainer;
 | 
			
		||||
 | 
			
		||||
- (IBAction)didChangeContentType:(UISegmentedControl *)sender;
 | 
			
		||||
- (IBAction)didTriggerContent;
 | 
			
		||||
- (IBAction)didIncrementPasswordCounter;
 | 
			
		||||
- (IBAction)copyContent;
 | 
			
		||||
- (IBAction)incrementPasswordCounter;
 | 
			
		||||
- (IBAction)editPassword;
 | 
			
		||||
- (IBAction)toggleHelp;
 | 
			
		||||
- (void)toggleHelp:(BOOL)hidden;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,8 @@
 | 
			
		||||
#import "OPMainViewController.h"
 | 
			
		||||
#import "OPAppDelegate.h"
 | 
			
		||||
#import "OPContentViewController.h"
 | 
			
		||||
#import "OPElementGeneratedEntity.h"
 | 
			
		||||
#import "OPElementStoredEntity.h"
 | 
			
		||||
 | 
			
		||||
#import <MobileCoreServices/MobileCoreServices.h>
 | 
			
		||||
 | 
			
		||||
@@ -28,6 +30,9 @@
 | 
			
		||||
@synthesize siteName = _siteName;
 | 
			
		||||
@synthesize passwordCounter = _passwordCounter;
 | 
			
		||||
@synthesize passwordIncrementer = _passwordIncrementer;
 | 
			
		||||
@synthesize passwordEdit = _passwordEdit;
 | 
			
		||||
@synthesize contentContainer = _contentContainer;
 | 
			
		||||
@synthesize helpContainer = _helpContainer;
 | 
			
		||||
@synthesize contentField = _contentField;
 | 
			
		||||
 | 
			
		||||
#pragma mark - View lifecycle
 | 
			
		||||
@@ -49,6 +54,7 @@
 | 
			
		||||
    
 | 
			
		||||
    [super viewWillAppear:animated];
 | 
			
		||||
    
 | 
			
		||||
    [self toggleHelp:[[OPConfig get].helpHidden boolValue]];
 | 
			
		||||
    [self updateAnimated:NO];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -69,6 +75,9 @@
 | 
			
		||||
    [self setSiteName:nil];
 | 
			
		||||
    [self setPasswordCounter:nil];
 | 
			
		||||
    [self setPasswordIncrementer:nil];
 | 
			
		||||
    [self setPasswordEdit:nil];
 | 
			
		||||
    [self setContentContainer:nil];
 | 
			
		||||
    [self setHelpContainer:nil];
 | 
			
		||||
    [super viewDidUnload];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -95,24 +104,23 @@
 | 
			
		||||
    
 | 
			
		||||
    NSUInteger chapter = self.activeElement? 2: 1;
 | 
			
		||||
    [self.helpView loadRequest:
 | 
			
		||||
            [NSURLRequest requestWithURL:
 | 
			
		||||
                    [NSURL URLWithString:[NSString stringWithFormat:@"#%d", chapter] relativeToURL:
 | 
			
		||||
                            [[NSBundle mainBundle] URLForResource:@"help" withExtension:@"html"]]]];
 | 
			
		||||
     [NSURLRequest requestWithURL:
 | 
			
		||||
      [NSURL URLWithString:[NSString stringWithFormat:@"#%d", chapter] relativeToURL:
 | 
			
		||||
       [[NSBundle mainBundle] URLForResource:@"help" withExtension:@"html"]]]];
 | 
			
		||||
    
 | 
			
		||||
    [self.navigationItem setRightBarButtonItem:self.activeElement.type & OPElementTypeStored? self.editButtonItem: nil animated:animated];
 | 
			
		||||
    
 | 
			
		||||
    self.searchDisplayController.searchBar.placeholder = self.activeElement.name;
 | 
			
		||||
    self.siteName.text = self.activeElement.name;
 | 
			
		||||
    
 | 
			
		||||
    self.passwordCounter.alpha = self.activeElement.type & OPElementTypeCalculated? 1: 0;
 | 
			
		||||
    self.passwordIncrementer.alpha = self.activeElement.type & OPElementTypeCalculated? 1: 0;
 | 
			
		||||
    self.passwordCounter.alpha = self.activeElement.type & OPElementTypeCalculated? 0.5f: 0;
 | 
			
		||||
    self.passwordIncrementer.alpha = self.activeElement.type & OPElementTypeCalculated? 0.5f: 0;
 | 
			
		||||
    self.passwordEdit.alpha = self.activeElement.type & OPElementTypeStored? 0.5f: 0;
 | 
			
		||||
    
 | 
			
		||||
    [self.typeButton setTitle:NSStringFromOPElementType(self.activeElement.type)
 | 
			
		||||
                     forState:UIControlStateNormal];
 | 
			
		||||
    self.typeButton.alpha = NSStringFromOPElementType(self.activeElement.type).length? 1: 0;
 | 
			
		||||
    
 | 
			
		||||
    self.contentField.enabled = self.editing && self.activeElement.type & OPElementTypeStored;
 | 
			
		||||
    self.contentField.clearButtonMode = self.contentField.enabled? UITextFieldViewModeAlways: UITextFieldViewModeNever;
 | 
			
		||||
    self.contentField.text = @"...";
 | 
			
		||||
    self.contentField.enabled = NO;
 | 
			
		||||
    
 | 
			
		||||
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
 | 
			
		||||
        NSString *contentDescription = self.activeElement.contentDescription;
 | 
			
		||||
@@ -124,34 +132,103 @@
 | 
			
		||||
 | 
			
		||||
#pragma mark - Protocols
 | 
			
		||||
 | 
			
		||||
- (IBAction)didChangeContentType:(UISegmentedControl *)sender {
 | 
			
		||||
    
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (IBAction)didTriggerContent:(id)sender {
 | 
			
		||||
- (IBAction)copyContent {
 | 
			
		||||
    
 | 
			
		||||
    [[UIPasteboard generalPasteboard] setValue:self.activeElement.content
 | 
			
		||||
                             forPasteboardType:self.activeElement.contentUTI];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (IBAction)didIncrementPasswordCounter {
 | 
			
		||||
- (IBAction)incrementPasswordCounter {
 | 
			
		||||
    
 | 
			
		||||
    if ([self.activeElement isKindOfClass:[OPElementGeneratedEntity class]])
 | 
			
		||||
        [AlertViewController showAlertWithTitle:@"Change Password"
 | 
			
		||||
                                        message:l(@"Setting a new password for %@.\n"
 | 
			
		||||
                                                  @"Don't forget to update your password on the site as well!", self.activeElement.name)
 | 
			
		||||
                              tappedButtonBlock:^(NSInteger buttonIndex) {
 | 
			
		||||
                                  if (!buttonIndex)
 | 
			
		||||
                                      return;
 | 
			
		||||
                                  
 | 
			
		||||
                                  // Update password counter.
 | 
			
		||||
                                  if ([self.activeElement isKindOfClass:[OPElementGeneratedEntity class]]) {
 | 
			
		||||
                                      ++((OPElementGeneratedEntity *) self.activeElement).counter;
 | 
			
		||||
                                      [self updateAnimated:YES];
 | 
			
		||||
                                  }
 | 
			
		||||
                              } cancelTitle:[PearlStrings get].commonButtonAbort otherTitles:[PearlStrings get].commonButtonThanks, nil];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (IBAction)editPassword {
 | 
			
		||||
    
 | 
			
		||||
    if (self.activeElement.type & OPElementTypeStored) {
 | 
			
		||||
        self.contentField.enabled = YES;
 | 
			
		||||
        [self.contentField becomeFirstResponder];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (IBAction)toggleHelp {
 | 
			
		||||
    
 | 
			
		||||
    [UIView animateWithDuration:0.3f animations:^{
 | 
			
		||||
        if (self.helpContainer.frame.origin.y < 400)
 | 
			
		||||
            [self toggleHelp:YES];
 | 
			
		||||
        else
 | 
			
		||||
            [self toggleHelp:NO];
 | 
			
		||||
    }];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)toggleHelp:(BOOL)hidden {
 | 
			
		||||
    
 | 
			
		||||
        if (hidden) {
 | 
			
		||||
            self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 373);
 | 
			
		||||
            //self.helpContainer.frame = CGRectSetHeight(self.helpContainer.frame, 0);
 | 
			
		||||
            self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 414);
 | 
			
		||||
            [OPConfig get].helpHidden = [NSNumber numberWithBool:YES];
 | 
			
		||||
        } else {
 | 
			
		||||
            self.contentContainer.frame = CGRectSetHeight(self.contentContainer.frame, 155);
 | 
			
		||||
            //self.helpContainer.frame = CGRectSetHeight(self.helpContainer.frame, 219);
 | 
			
		||||
            self.helpContainer.frame = CGRectSetY(self.helpContainer.frame, 196);
 | 
			
		||||
            [OPConfig get].helpHidden = [NSNumber numberWithBool:NO];
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)didSelectType:(OPElementType)type {
 | 
			
		||||
    
 | 
			
		||||
    self.activeElement.type = type;
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
    [AlertViewController showAlertWithTitle:@"Change Password Type"
 | 
			
		||||
                                    message:l(@"Changing the type of %@'s password.\n"
 | 
			
		||||
                                              @"Don't forget to update your password on the site as well!", self.activeElement.name)
 | 
			
		||||
                          tappedButtonBlock:^(NSInteger buttonIndex) {
 | 
			
		||||
                              if (!buttonIndex)
 | 
			
		||||
                                  return;
 | 
			
		||||
                              
 | 
			
		||||
                              // Update password type.
 | 
			
		||||
                              if (ClassForOPElementType(type) != ClassForOPElementType(self.activeElement.type)) {
 | 
			
		||||
                                  // Type requires a different class of element.  Recreate the element.
 | 
			
		||||
                                  OPElementEntity *newElement = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass(ClassForOPElementType(type))
 | 
			
		||||
                                                                                              inManagedObjectContext:[OPAppDelegate managedObjectContext]];
 | 
			
		||||
                                  
 | 
			
		||||
                                  newElement.name = self.activeElement.name;
 | 
			
		||||
                                  newElement.uses = self.activeElement.uses;
 | 
			
		||||
                                  newElement.lastUsed = self.activeElement.lastUsed;
 | 
			
		||||
                                  newElement.contentUTI = self.activeElement.contentUTI;
 | 
			
		||||
                                  newElement.contentType = self.activeElement.contentType;
 | 
			
		||||
                                  
 | 
			
		||||
                                  [[OPAppDelegate managedObjectContext] deleteObject:self.activeElement];
 | 
			
		||||
                                  self.activeElement = newElement;
 | 
			
		||||
                              }
 | 
			
		||||
                              self.activeElement.type = type;
 | 
			
		||||
                              
 | 
			
		||||
                              // Redraw.
 | 
			
		||||
                              [self updateAnimated:YES];
 | 
			
		||||
                          } cancelTitle:[PearlStrings get].commonButtonAbort otherTitles:[PearlStrings get].commonButtonThanks, nil];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)didSelectElement:(OPElementEntity *)element {
 | 
			
		||||
    
 | 
			
		||||
    self.activeElement = element;
 | 
			
		||||
    [self.activeElement use];
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
    
 | 
			
		||||
    self.searchDisplayController.searchBar.text = @"";
 | 
			
		||||
    [self.searchDisplayController setActive:NO animated:YES];
 | 
			
		||||
    self.searchDisplayController.searchBar.text = self.activeElement.name;
 | 
			
		||||
    
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
 | 
			
		||||
@@ -159,4 +236,32 @@
 | 
			
		||||
    [self updateAnimated:YES];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
 | 
			
		||||
    
 | 
			
		||||
    if (textField == self.contentField)
 | 
			
		||||
        [self.contentField resignFirstResponder];
 | 
			
		||||
    
 | 
			
		||||
    return YES;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)textFieldDidEndEditing:(UITextField *)textField {
 | 
			
		||||
    
 | 
			
		||||
    if (textField == self.contentField) {
 | 
			
		||||
        self.contentField.enabled = NO;
 | 
			
		||||
        [AlertViewController showAlertWithTitle:@"Change Password"
 | 
			
		||||
                                        message:l(@"Setting a new password for %@.\n"
 | 
			
		||||
                                                  @"Don't forget to update your password on the site as well!", self.activeElement.name)
 | 
			
		||||
                              tappedButtonBlock:^(NSInteger buttonIndex) {
 | 
			
		||||
                                  if (buttonIndex) {
 | 
			
		||||
                                      // Update password content.
 | 
			
		||||
                                      if ([self.activeElement isKindOfClass:[OPElementStoredEntity class]])
 | 
			
		||||
                                          ((OPElementStoredEntity *) self.activeElement).contentObject = self.contentField.text;
 | 
			
		||||
                                  }
 | 
			
		||||
                                  
 | 
			
		||||
                                  // Redraw.
 | 
			
		||||
                                  [self updateAnimated:YES];
 | 
			
		||||
                              } cancelTitle:[PearlStrings get].commonButtonAbort otherTitles:[PearlStrings get].commonButtonThanks, nil];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,10 @@
 | 
			
		||||
 | 
			
		||||
#import "OPSearchDelegate.h"
 | 
			
		||||
#import "OPAppDelegate.h"
 | 
			
		||||
#import "OPElementGeneratedEntity.h"
 | 
			
		||||
 | 
			
		||||
@interface OPSearchDelegate (Private)
 | 
			
		||||
 | 
			
		||||
- (NSManagedObjectContext *)managedObjectContext;
 | 
			
		||||
- (void)update;
 | 
			
		||||
 | 
			
		||||
@end
 | 
			
		||||
@@ -21,17 +21,23 @@
 | 
			
		||||
@synthesize delegate;
 | 
			
		||||
@synthesize searchDisplayController;
 | 
			
		||||
 | 
			
		||||
- (NSManagedObjectContext *)managedObjectContext {
 | 
			
		||||
 | 
			
		||||
    return [(OPAppDelegate *)[UIApplication sharedApplication].delegate managedObjectContext];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
 | 
			
		||||
    
 | 
			
		||||
    [self.searchDisplayController.searchResultsTableView setEditing:self.searchDisplayController.searchContentsController.editing animated:NO];
 | 
			
		||||
    self.searchDisplayController.searchBar.text = @"";
 | 
			
		||||
    self.searchDisplayController.searchBar.prompt = @"Enter the site's domain name (eg. apple.com):";
 | 
			
		||||
    [self update];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller {
 | 
			
		||||
    
 | 
			
		||||
    self.searchDisplayController.searchBar.prompt = nil;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
 | 
			
		||||
    
 | 
			
		||||
    [tableView setEditing:self.searchDisplayController.searchContentsController.editing animated:NO];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
 | 
			
		||||
    
 | 
			
		||||
    [self update];
 | 
			
		||||
@@ -47,12 +53,12 @@
 | 
			
		||||
    
 | 
			
		||||
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([OPElementEntity class])];
 | 
			
		||||
    [fetchRequest setSortDescriptors:
 | 
			
		||||
            [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"uses" ascending:NO]]];
 | 
			
		||||
     [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"uses" ascending:NO]]];
 | 
			
		||||
    [fetchRequest setPredicate:
 | 
			
		||||
            [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] %@", text]];
 | 
			
		||||
     [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] %@", text]];
 | 
			
		||||
    
 | 
			
		||||
    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
 | 
			
		||||
                                                                        managedObjectContext:[self managedObjectContext]
 | 
			
		||||
                                                                        managedObjectContext:[OPAppDelegate managedObjectContext]
 | 
			
		||||
                                                                          sectionNameKeyPath:nil cacheName:nil];
 | 
			
		||||
    self.fetchedResultsController.delegate = self;
 | 
			
		||||
    
 | 
			
		||||
@@ -162,8 +168,8 @@
 | 
			
		||||
    OPElementEntity *element;
 | 
			
		||||
    indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section - 1];
 | 
			
		||||
    if (indexPath.section == -1) {
 | 
			
		||||
        element = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([OPElementEntity class])
 | 
			
		||||
                                                inManagedObjectContext:[self managedObjectContext]];
 | 
			
		||||
        element = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([OPElementGeneratedEntity class])
 | 
			
		||||
                                                inManagedObjectContext:[OPAppDelegate managedObjectContext]];
 | 
			
		||||
        element.name = self.searchDisplayController.searchBar.text;
 | 
			
		||||
    } else
 | 
			
		||||
        element = [self.fetchedResultsController objectAtIndexPath:indexPath];
 | 
			
		||||
@@ -196,7 +202,7 @@
 | 
			
		||||
    if (editingStyle == UITableViewCellEditingStyleDelete) {
 | 
			
		||||
        OPElementEntity *element = [self.fetchedResultsController objectAtIndexPath:indexPath];
 | 
			
		||||
        
 | 
			
		||||
        [[self managedObjectContext] deleteObject:element];
 | 
			
		||||
        [[OPAppDelegate managedObjectContext] deleteObject:element];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -31,4 +31,5 @@ typedef enum {
 | 
			
		||||
} OPElementType;
 | 
			
		||||
 | 
			
		||||
NSString *NSStringFromOPElementType(OPElementType type);
 | 
			
		||||
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase);
 | 
			
		||||
Class ClassForOPElementType(OPElementType type);
 | 
			
		||||
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase, int counter);
 | 
			
		||||
@@ -7,6 +7,8 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#import "OPTypes.h"
 | 
			
		||||
#import "OPElementGeneratedEntity.h"
 | 
			
		||||
#import "OPElementStoredEntity.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
NSString *NSStringFromOPElementType(OPElementType type) {
 | 
			
		||||
@@ -41,8 +43,40 @@ NSString *NSStringFromOPElementType(OPElementType type) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Class ClassForOPElementType(OPElementType type) {
 | 
			
		||||
    
 | 
			
		||||
    if (!type)
 | 
			
		||||
        return nil;
 | 
			
		||||
    
 | 
			
		||||
    switch (type) {
 | 
			
		||||
        case OPElementTypeCalculatedLong:
 | 
			
		||||
            return [OPElementGeneratedEntity class];
 | 
			
		||||
            
 | 
			
		||||
        case OPElementTypeCalculatedMedium:
 | 
			
		||||
            return [OPElementGeneratedEntity class];
 | 
			
		||||
            
 | 
			
		||||
        case OPElementTypeCalculatedShort:
 | 
			
		||||
            return [OPElementGeneratedEntity class];
 | 
			
		||||
            
 | 
			
		||||
        case OPElementTypeCalculatedBasic:
 | 
			
		||||
            return [OPElementGeneratedEntity class];
 | 
			
		||||
            
 | 
			
		||||
        case OPElementTypeCalculatedPIN:
 | 
			
		||||
            return [OPElementGeneratedEntity class];
 | 
			
		||||
            
 | 
			
		||||
        case OPElementTypeStoredPersonal:
 | 
			
		||||
            return [OPElementStoredEntity class];
 | 
			
		||||
            
 | 
			
		||||
        case OPElementTypeStoredDevicePrivate:
 | 
			
		||||
            return [OPElementStoredEntity class];
 | 
			
		||||
            
 | 
			
		||||
        default:
 | 
			
		||||
            [NSException raise:NSInternalInconsistencyException format:@"Type not supported: %d", type];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static NSDictionary *OPTypes_ciphers = nil;
 | 
			
		||||
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase) {
 | 
			
		||||
NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPhrase, int counter) {
 | 
			
		||||
    
 | 
			
		||||
    assert(type & OPElementTypeCalculated);
 | 
			
		||||
    
 | 
			
		||||
@@ -52,7 +86,7 @@ NSString *OPCalculateContent(OPElementType type, NSString *name, NSString *keyPh
 | 
			
		||||
    
 | 
			
		||||
    // Determine the hash whose bytes will be used for calculating a password: md4(name-keyPhrase)
 | 
			
		||||
    assert(name && keyPhrase);
 | 
			
		||||
    NSData *keyHash = [[NSString stringWithFormat:@"%@-%@", name, keyPhrase] hashWith:PearlDigestMD4];
 | 
			
		||||
    NSData *keyHash = [[NSString stringWithFormat:@"%@-%@-%d", name, keyPhrase, counter] hashWith:PearlDigestMD4];
 | 
			
		||||
    const char *keyBytes = keyHash.bytes;
 | 
			
		||||
    
 | 
			
		||||
    // Determine the cipher from the first hash byte.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 | 
			
		||||
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="872" systemVersion="11C74" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
 | 
			
		||||
    <entity name="OPElementEntity" representedClassName="OPElementEntity" syncable="YES">
 | 
			
		||||
    <entity name="OPElementEntity" representedClassName="OPElementEntity" isAbstract="YES" syncable="YES">
 | 
			
		||||
        <attribute name="contentType" optional="YES" attributeType="Integer 16" defaultValueString="0" syncable="YES"/>
 | 
			
		||||
        <attribute name="contentUTI" attributeType="String" defaultValueString="public.plain-text" syncable="YES"/>
 | 
			
		||||
        <attribute name="lastUsed" attributeType="Date" syncable="YES"/>
 | 
			
		||||
@@ -8,12 +8,16 @@
 | 
			
		||||
        <attribute name="type" attributeType="Integer 16" defaultValueString="257" syncable="YES"/>
 | 
			
		||||
        <attribute name="uses" attributeType="Integer 16" defaultValueString="0" syncable="YES"/>
 | 
			
		||||
    </entity>
 | 
			
		||||
    <entity name="OPElementGeneratedEntity" representedClassName="OPElementGeneratedEntity" parentEntity="OPElementEntity" syncable="YES">
 | 
			
		||||
        <attribute name="counter" optional="YES" attributeType="Integer 16" defaultValueString="1" syncable="YES"/>
 | 
			
		||||
    </entity>
 | 
			
		||||
    <entity name="OPElementStoredEntity" representedClassName="OPElementStoredEntity" parentEntity="OPElementEntity" syncable="YES">
 | 
			
		||||
        <attribute name="contentObject" attributeType="Transformable" storedInTruthFile="YES" syncable="YES"/>
 | 
			
		||||
        <attribute name="contentObject" optional="YES" attributeType="Transformable" storedInTruthFile="YES" syncable="YES"/>
 | 
			
		||||
    </entity>
 | 
			
		||||
    <fetchRequest name="OPSearchElement" entity="OPElementEntity" predicateString="name BEGINSWITH "$query""/>
 | 
			
		||||
    <elements>
 | 
			
		||||
        <element name="OPElementEntity" positionX="160" positionY="192" width="128" height="135"/>
 | 
			
		||||
        <element name="OPElementStoredEntity" positionX="160" positionY="192" width="128" height="75"/>
 | 
			
		||||
        <element name="OPElementGeneratedEntity" positionX="160" positionY="192" width="128" height="60"/>
 | 
			
		||||
        <element name="OPElementStoredEntity" positionX="160" positionY="192" width="128" height="60"/>
 | 
			
		||||
    </elements>
 | 
			
		||||
</model>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 60 KiB  | 
| 
		 Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 475 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Resources/Dividers/Square-bottom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 8.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Resources/Dividers/Square-top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 20 KiB  | 
| 
		 Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB  | 
| 
		 Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB  | 
| 
		 Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB  | 
@@ -8,17 +8,22 @@
 | 
			
		||||
                text-shadow: 0 1px black;
 | 
			
		||||
                font: 16px "Baskerville";
 | 
			
		||||
            }
 | 
			
		||||
            h1 {
 | 
			
		||||
            h1, h2 {
 | 
			
		||||
                margin-top: 1em;
 | 
			
		||||
                padding-top: 1em;
 | 
			
		||||
 | 
			
		||||
                font: inherit;
 | 
			
		||||
                font-family: inherit;
 | 
			
		||||
                font-weight: bold;
 | 
			
		||||
            }
 | 
			
		||||
            h2 {
 | 
			
		||||
                font-size: inherit;
 | 
			
		||||
            }
 | 
			
		||||
        </style>
 | 
			
		||||
    </head>
 | 
			
		||||
    <body>
 | 
			
		||||
        <h1 id="1">— 1 —</h1>
 | 
			
		||||
        <h1>One Password</h1>
 | 
			
		||||
        <h2>by Lyndir</h2>
 | 
			
		||||
 | 
			
		||||
        <h2 id="1">— 1 —</h2>
 | 
			
		||||
        <p>
 | 
			
		||||
            <b>Find the site</b> that you need a password for by entering it into the <i>search field</i>.
 | 
			
		||||
        </p>
 | 
			
		||||
@@ -27,19 +32,20 @@
 | 
			
		||||
            The counter shows how many times you've generated a password for the site.
 | 
			
		||||
        </p>
 | 
			
		||||
        
 | 
			
		||||
        <h1 id="2">— 2 —</h1>
 | 
			
		||||
        <h2 id="2">— 2 —</h2>
 | 
			
		||||
        <p>
 | 
			
		||||
            <b>Your site</b>'s password is now displayed.
 | 
			
		||||
            <b>The site</b>'s password is now displayed.
 | 
			
		||||
        </p>
 | 
			
		||||
        <p>
 | 
			
		||||
            <b>Below it</b> you can set the <i>password type</i>.  Some types <i>auto-generate</i> passwords,
 | 
			
		||||
            <b>Below it</b> you can set the site's <i>password type</i>.  Some types <i>auto-generate</i> a password,
 | 
			
		||||
            others let you <i>choose your own</i>.
 | 
			
		||||
        </p>
 | 
			
		||||
        <p>
 | 
			
		||||
            <b>If your new password</b> is not deemed <q>valid</q> by the site, try changing the password type.
 | 
			
		||||
        </p>
 | 
			
		||||
        <p>
 | 
			
		||||
            <b>To generate a new password</b> for the site, you can increment its <i>password counter</i>.
 | 
			
		||||
            <b>To generate a new password</b> for the site, you can increment the site's <i>password counter</i>.
 | 
			
		||||
            Do this when, for instance, you've had to share the password with somebody else.
 | 
			
		||||
        </p>
 | 
			
		||||
        
 | 
			
		||||
    </body>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								OnePassword/Settings.bundle/Root.plist
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,61 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
<plist version="1.0">
 | 
			
		||||
<dict>
 | 
			
		||||
	<key>PreferenceSpecifiers</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSTitleValueSpecifier</string>
 | 
			
		||||
			<key>Title</key>
 | 
			
		||||
			<string>Version</string>
 | 
			
		||||
			<key>Key</key>
 | 
			
		||||
			<string>version</string>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSTitleValueSpecifier</string>
 | 
			
		||||
			<key>Title</key>
 | 
			
		||||
			<string>Build</string>
 | 
			
		||||
			<key>Key</key>
 | 
			
		||||
			<string>build</string>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSTitleValueSpecifier</string>
 | 
			
		||||
			<key>Title</key>
 | 
			
		||||
			<string>Copyright</string>
 | 
			
		||||
			<key>Key</key>
 | 
			
		||||
			<string>copyright</string>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSGroupSpecifier</string>
 | 
			
		||||
			<key>Title</key>
 | 
			
		||||
			<string>Security</string>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>DefaultValue</key>
 | 
			
		||||
			<false/>
 | 
			
		||||
			<key>Key</key>
 | 
			
		||||
			<string>storeKeyPhrase</string>
 | 
			
		||||
			<key>Title</key>
 | 
			
		||||
			<string>Store master password</string>
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSToggleSwitchSpecifier</string>
 | 
			
		||||
		</dict>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>Type</key>
 | 
			
		||||
			<string>PSToggleSwitchSpecifier</string>
 | 
			
		||||
			<key>Title</key>
 | 
			
		||||
			<string>Remember master password</string>
 | 
			
		||||
			<key>Key</key>
 | 
			
		||||
			<string>rememberKeyPhrase</string>
 | 
			
		||||
			<key>DefaultValue</key>
 | 
			
		||||
			<false/>
 | 
			
		||||
		</dict>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>StringsTable</key>
 | 
			
		||||
	<string>Root</string>
 | 
			
		||||
</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								OnePassword/Settings.bundle/en.lproj/Root.strings
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -5,141 +5,182 @@
 | 
			
		||||
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="933"/>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
    <scenes>
 | 
			
		||||
        <scene sceneID="nft-Wn-UXE">
 | 
			
		||||
        <scene sceneID="WkW-SR-cr2">
 | 
			
		||||
            <objects>
 | 
			
		||||
                <placeholder placeholderIdentifier="IBFirstResponder" id="XMe-hC-QeR" userLabel="First Responder" sceneMemberID="firstResponder"/>
 | 
			
		||||
                <tableViewController id="EH5-VR-7ME" customClass="OPTypeViewController" sceneMemberID="viewController">
 | 
			
		||||
                    <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="singleLineEtched" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="5fE-iM-7hQ">
 | 
			
		||||
                <placeholder placeholderIdentifier="IBFirstResponder" id="jZj-N1-rhF" userLabel="First Responder" sceneMemberID="firstResponder"/>
 | 
			
		||||
                <tableViewController id="NKe-nv-566" customClass="OPTypeViewController" sceneMemberID="viewController">
 | 
			
		||||
                    <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="btl-G4-V0S">
 | 
			
		||||
                        <rect key="frame" x="0.0" y="64" width="320" height="416"/>
 | 
			
		||||
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                        <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
 | 
			
		||||
                        <color key="backgroundColor" red="0.12549020350000001" green="0.1411764771" blue="0.14901961389999999" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                        <sections>
 | 
			
		||||
                            <tableViewSection headerTitle="Calculated" footerTitle="Passwords of this type require no storage.  You just need to remember the algorithm and the master password." id="5c3-j4-B1u">
 | 
			
		||||
                            <tableViewSection id="gUv-FU-O36">
 | 
			
		||||
                                <cells>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="jcy-wR-4m8" detailTextLabel="Wub-2m-j8S" style="IBUITableViewCellStyleSubtitle" id="BgN-Tv-ljC">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="46" width="320" height="45"/>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="144" id="NCB-rX-weq">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="0.0" width="320" height="144"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="10" y="1" width="300" height="43"/>
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="143"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Long" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="jcy-wR-4m8">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="2" width="44" height="22"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Generated" lineBreakMode="tailTruncation" minimumFontSize="10" id="azh-GA-KA1">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="20" width="280" height="21"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Bold" family="Gill Sans" pointSize="17"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                    <color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Word-like, 14 characters, contains symbols." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Wub-2m-j8S">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="24" width="271" height="18"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_first.png" highlightedImage="list_first_active.png" id="WXs-ZQ-JuJ">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="100" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Long" lineBreakMode="tailTruncation" minimumFontSize="10" id="QIm-RX-xY7">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="100" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 14 characters, contains symbols." lineBreakMode="tailTruncation" minimumFontSize="10" id="6iu-aM-lJA">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="124" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="These types need only your master password. Nothing is stored, so nothing to loose or have stolen." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="E4a-XS-Qlz">
 | 
			
		||||
                                                    <rect key="frame" x="23" y="49" width="280" height="43"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-LightItalic" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                    <color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </view>
 | 
			
		||||
                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                    </tableViewCell>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="iIk-OH-TES" detailTextLabel="ReE-4p-4QZ" style="IBUITableViewCellStyleSubtitle" id="x9Q-MJ-FBh">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="91" width="320" height="44"/>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="re0-ZT-bnP">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="144" width="320" height="44"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="10" y="1" width="300" height="43"/>
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Medium" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="iIk-OH-TES">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="2" width="69" height="22"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_middle.png" highlightedImage="list_middle_active.png" id="EWy-Eb-L5p">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="0.0" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Medium" lineBreakMode="tailTruncation" minimumFontSize="10" id="5NA-XX-th4">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="0.0" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Word-like, 8 characters." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ReE-4p-4QZ">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="24" width="148" height="18"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 8 characters." lineBreakMode="tailTruncation" minimumFontSize="10" id="MI2-JM-j4b">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="24" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </view>
 | 
			
		||||
                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                    </tableViewCell>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="PT4-ef-gLz" detailTextLabel="UUf-NB-sXL" style="IBUITableViewCellStyleSubtitle" id="1cu-IG-tcm">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="135" width="320" height="44"/>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="4pb-c9-i2D">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="188" width="320" height="44"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="10" y="1" width="300" height="43"/>
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Short" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="PT4-ef-gLz">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="2" width="47" height="22"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_middle.png" highlightedImage="list_middle_active.png" id="Jqw-h1-g2X">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="0.0" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Short" lineBreakMode="tailTruncation" minimumFontSize="10" id="iqW-mf-H1R">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="0.0" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Word-like, 4 characters." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="UUf-NB-sXL">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="24" width="148" height="18"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Word-like, 4 characters." lineBreakMode="tailTruncation" minimumFontSize="10" id="Zi3-26-3iq">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="24" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </view>
 | 
			
		||||
                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                    </tableViewCell>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="6UM-nv-bxT" detailTextLabel="EgK-4z-FiS" style="IBUITableViewCellStyleSubtitle" id="REJ-kM-5fD">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="179" width="320" height="44"/>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ywW-4w-Wej">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="232" width="320" height="44"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="10" y="1" width="300" height="43"/>
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Basic" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="6UM-nv-bxT">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="2" width="49" height="22"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_middle.png" highlightedImage="list_middle_active.png" id="Son-EL-Drx">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="0.0" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Basic" lineBreakMode="tailTruncation" minimumFontSize="10" id="Pim-A8-aib">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="0.0" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="8 characters." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="EgK-4z-FiS">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="24" width="81" height="18"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="8 characters." lineBreakMode="tailTruncation" minimumFontSize="10" id="CYQ-D8-vNS">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="24" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </view>
 | 
			
		||||
                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                    </tableViewCell>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="Bg6-Wr-csR" detailTextLabel="gOV-2T-gk5" style="IBUITableViewCellStyleSubtitle" id="L9G-Jl-syJ">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="223" width="320" height="45"/>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="5p5-OD-zpn">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="276" width="320" height="44"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="10" y="1" width="300" height="43"/>
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="PIN" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Bg6-Wr-csR">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="2" width="31" height="22"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_last.png" highlightedImage="list_last_active.png" id="5nI-rL-CoO">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="0.0" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="PIN" lineBreakMode="tailTruncation" minimumFontSize="10" id="Yu2-5k-AwW">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="0.0" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="4 numbers." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="gOV-2T-gk5">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="24" width="71" height="18"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="4 numbers." lineBreakMode="tailTruncation" minimumFontSize="10" id="5Zm-AH-bAe">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="24" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
@@ -148,55 +189,162 @@
 | 
			
		||||
                                    </tableViewCell>
 | 
			
		||||
                                </cells>
 | 
			
		||||
                            </tableViewSection>
 | 
			
		||||
                            <tableViewSection headerTitle="Stored" id="ItS-Cm-TBz">
 | 
			
		||||
                                <string key="footerTitle">Passwords of this type are encrypted and stored.  They are not tied to a certain algorithm but if you loose the storage, you loose the passwords.</string>
 | 
			
		||||
                            <tableViewSection id="Jqk-Jl-vVm">
 | 
			
		||||
                                <cells>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="Bco-yP-qms" detailTextLabel="NXj-vT-H4k" style="IBUITableViewCellStyleSubtitle" id="GA7-CK-MnU">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="373" width="320" height="45"/>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="144" id="OK2-fa-fDw">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="320" width="320" height="144"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="10" y="1" width="300" height="43"/>
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="143"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Personal" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Bco-yP-qms">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="2" width="77" height="22"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Keychain" lineBreakMode="tailTruncation" minimumFontSize="10" id="146-3h-mdD">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="20" width="280" height="21"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Bold" family="Gill Sans" pointSize="17"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                    <color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="AES-encrypted." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="NXj-vT-H4k">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="24" width="99" height="18"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="These types store a user-specified password in your device's keychain." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="Bbk-lL-BeB">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="49" width="280" height="43"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-LightItalic" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                    <color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_first.png" highlightedImage="list_first_active.png" id="fxL-ee-UVP">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="100" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Personal" lineBreakMode="tailTruncation" minimumFontSize="10" id="kzc-rQ-74F">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="100" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Keychain storage, AES-encrypted." lineBreakMode="tailTruncation" minimumFontSize="10" id="vNa-Yq-XIJ">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="124" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </view>
 | 
			
		||||
                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                    </tableViewCell>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="gdC-Zp-VYP" detailTextLabel="c5J-6k-O49" style="IBUITableViewCellStyleSubtitle" id="Qll-7W-FvO">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="418" width="320" height="45"/>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="ePk-a9-aNi">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="464" width="320" height="44"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="10" y="1" width="300" height="43"/>
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Device-private" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="gdC-Zp-VYP">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="2" width="124" height="22"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_last.png" highlightedImage="list_last_active.png" id="PUy-Qk-CeF">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="0.0" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Device Private" lineBreakMode="tailTruncation" minimumFontSize="10" id="2kB-0P-FeR">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="0.0" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="AES-encrypted, excluded from backups." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="c5J-6k-O49">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="24" width="250" height="18"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Keychain storage, AES-encrypted, not backed up." lineBreakMode="tailTruncation" minimumFontSize="10" id="6S8-9Y-pzj">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="24" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </view>
 | 
			
		||||
                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                    </tableViewCell>
 | 
			
		||||
                                </cells>
 | 
			
		||||
                            </tableViewSection>
 | 
			
		||||
                            <tableViewSection id="gSo-5f-umo">
 | 
			
		||||
                                <cells>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="144" id="w3P-Kp-ThX">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="508" width="320" height="144"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="143"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Google® Authenticator" lineBreakMode="tailTruncation" minimumFontSize="10" id="UQV-0l-m1n">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="20" width="280" height="21"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Bold" family="Gill Sans" pointSize="17"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                    <color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Useful for logging into your Google account or another application that supports the Google authenticator." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="jYS-eD-SvL">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="49" width="280" height="43"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-LightItalic" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                    <color key="shadowColor" cocoaTouchSystemColor="lightTextColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_first.png" highlightedImage="list_first_active.png" id="IEv-rr-FYK">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="100" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Time Based" lineBreakMode="tailTruncation" minimumFontSize="10" id="TsD-2p-06X">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="100" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Single-use, short-lived, no storage." lineBreakMode="tailTruncation" minimumFontSize="10" id="gdJ-yU-Nq1">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="124" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </view>
 | 
			
		||||
                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                    </tableViewCell>
 | 
			
		||||
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="mNd-Mf-m7b">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="652" width="320" height="44"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
 | 
			
		||||
                                            <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
 | 
			
		||||
                                            <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                                            <subviews>
 | 
			
		||||
                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="list_last.png" highlightedImage="list_last_active.png" id="d68-HV-PnO">
 | 
			
		||||
                                                    <rect key="frame" x="10" y="0.0" width="300" height="44"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                                    <rect key="contentStretch" x="0.050000000000000003" y="0.050000000000000003" width="0.89999999999999991" height="0.89999999999999991"/>
 | 
			
		||||
                                                </imageView>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Counter Based" lineBreakMode="tailTruncation" minimumFontSize="10" id="voz-p2-qnL">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="0.0" width="280" height="24"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="18"/>
 | 
			
		||||
                                                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Single-use, requires storage." lineBreakMode="tailTruncation" minimumFontSize="10" id="gL8-Rf-kqz">
 | 
			
		||||
                                                    <rect key="frame" x="20" y="24" width="280" height="20"/>
 | 
			
		||||
                                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                                    <fontDescription key="fontDescription" name="GillSans-Light" family="Gill Sans" pointSize="14"/>
 | 
			
		||||
                                                    <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                                    <nil key="highlightedColor"/>
 | 
			
		||||
                                                </label>
 | 
			
		||||
                                            </subviews>
 | 
			
		||||
                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
@@ -207,11 +355,11 @@
 | 
			
		||||
                            </tableViewSection>
 | 
			
		||||
                        </sections>
 | 
			
		||||
                        <connections>
 | 
			
		||||
                            <outlet property="dataSource" destination="EH5-VR-7ME" id="Ut7-iv-UFs"/>
 | 
			
		||||
                            <outlet property="delegate" destination="EH5-VR-7ME" id="qgY-zg-QOQ"/>
 | 
			
		||||
                            <outlet property="dataSource" destination="NKe-nv-566" id="5yH-j4-f9c"/>
 | 
			
		||||
                            <outlet property="delegate" destination="NKe-nv-566" id="O5k-hI-7Tf"/>
 | 
			
		||||
                        </connections>
 | 
			
		||||
                    </tableView>
 | 
			
		||||
                    <navigationItem key="navigationItem" title="Type" id="LY1-XK-usc"/>
 | 
			
		||||
                    <navigationItem key="navigationItem" id="rak-Td-wu1"/>
 | 
			
		||||
                </tableViewController>
 | 
			
		||||
            </objects>
 | 
			
		||||
            <point key="canvasLocation" x="962" y="182"/>
 | 
			
		||||
@@ -224,30 +372,33 @@
 | 
			
		||||
                        <rect key="frame" x="0.0" y="64" width="320" height="416"/>
 | 
			
		||||
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                        <subviews>
 | 
			
		||||
                            <searchBar contentMode="redraw" placeholder="apple.com" id="qeo-n2-WVh">
 | 
			
		||||
                                <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
 | 
			
		||||
                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                <gestureRecognizers/>
 | 
			
		||||
                                <color key="tintColor" red="0.18039215689999999" green="0.20000000000000001" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                <textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL"/>
 | 
			
		||||
                                <connections>
 | 
			
		||||
                                    <outlet property="delegate" destination="PQa-Xl-A3x" id="oXp-0r-Gkl"/>
 | 
			
		||||
                                </connections>
 | 
			
		||||
                            </searchBar>
 | 
			
		||||
                            <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="MiF-It-p1O">
 | 
			
		||||
                                <rect key="frame" x="0.0" y="44" width="320" height="372"/>
 | 
			
		||||
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="top" image="Content-Backdrop.png" id="0hY-LL-ITu">
 | 
			
		||||
                                <rect key="frame" x="0.0" y="0.0" width="320" height="416"/>
 | 
			
		||||
                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                            </imageView>
 | 
			
		||||
                            <view contentMode="scaleToFill" id="g9q-4d-ZgJ">
 | 
			
		||||
                                <rect key="frame" x="0.0" y="43" width="320" height="155"/>
 | 
			
		||||
                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                <subviews>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="Content-Backdrop.png" id="0hY-LL-ITu">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="0.0" width="320" height="165"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="top" image="Content-Backdrop.png" id="enb-OH-DVZ">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="0.0" width="320" height="155"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <button opaque="NO" alpha="0.80000000000000004" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Zji-Vg-VwX">
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="top" image="Square-top.png" id="qWn-td-zdb">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="0.0" width="320" height="155"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="scaleToFill" image="display.png" id="0Yh-Py-lB6">
 | 
			
		||||
                                        <rect key="frame" x="11" y="20" width="298" height="86"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <rect key="contentStretch" x="0.050000000000000003" y="0.10000000000000001" width="0.89999999999999991" height="0.79999999999999982"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="Zji-Vg-VwX">
 | 
			
		||||
                                        <rect key="frame" x="11" y="20" width="298" height="86"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" type="boldSystem" size="button"/>
 | 
			
		||||
                                        <state key="normal" backgroundImage="display.png">
 | 
			
		||||
                                        <state key="normal">
 | 
			
		||||
                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </state>
 | 
			
		||||
@@ -255,7 +406,7 @@
 | 
			
		||||
                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </state>
 | 
			
		||||
                                        <connections>
 | 
			
		||||
                                            <action selector="didTriggerContent" destination="PQa-Xl-A3x" eventType="touchUpInside" id="fET-Qd-wzg"/>
 | 
			
		||||
                                            <action selector="copyContent" destination="PQa-Xl-A3x" eventType="touchUpInside" id="9tS-J5-wlx"/>
 | 
			
		||||
                                        </connections>
 | 
			
		||||
                                    </button>
 | 
			
		||||
                                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.50000000000000011" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" id="gSK-aB-wNI">
 | 
			
		||||
@@ -265,16 +416,19 @@
 | 
			
		||||
                                        <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        <nil key="highlightedColor"/>
 | 
			
		||||
                                    </label>
 | 
			
		||||
                                    <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="S3cre7^Pa$swcrD" textAlignment="center" minimumFontSize="17" clearButtonMode="always" id="fiX-10-fif">
 | 
			
		||||
                                        <rect key="frame" x="20" y="43" width="280" height="63"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                    <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="S3cre7^Pa$swcrD" textAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" id="fiX-10-fif">
 | 
			
		||||
                                        <rect key="frame" x="20" y="46" width="280" height="60"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <color key="textColor" red="0.47450980390000003" green="0.86666666670000003" blue="0.98431372549999996" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" name="Optima-ExtraBlack" family="Optima" pointSize="26"/>
 | 
			
		||||
                                        <textInputTraits key="textInputTraits" autocorrectionType="no"/>
 | 
			
		||||
                                        <connections>
 | 
			
		||||
                                            <outlet property="delegate" destination="PQa-Xl-A3x" id="qOM-gq-c6g"/>
 | 
			
		||||
                                        </connections>
 | 
			
		||||
                                    </textField>
 | 
			
		||||
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Cei-5z-uWE">
 | 
			
		||||
                                        <rect key="frame" x="10" y="130" width="299" height="35"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <rect key="frame" x="11" y="119" width="299" height="35"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
 | 
			
		||||
                                        <state key="normal" title="Long" backgroundImage="list_first.png">
 | 
			
		||||
                                            <color key="titleColor" cocoaTouchSystemColor="lightTextColor"/>
 | 
			
		||||
@@ -284,20 +438,21 @@
 | 
			
		||||
                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </state>
 | 
			
		||||
                                        <connections>
 | 
			
		||||
                                            <segue destination="EH5-VR-7ME" kind="push" identifier="OP_Main_ChooseType" id="u9c-ed-Wn9"/>
 | 
			
		||||
                                            <segue destination="NKe-nv-566" kind="push" identifier="OP_Main_ChooseType" id="vw4-Vd-O6q"/>
 | 
			
		||||
                                        </connections>
 | 
			
		||||
                                    </button>
 | 
			
		||||
                                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.50000000000000011" contentMode="left" text="1" textAlignment="right" lineBreakMode="tailTruncation" minimumFontSize="10" id="Iuf-np-e9C">
 | 
			
		||||
                                        <rect key="frame" x="240" y="26" width="40" height="22"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <rect key="frame" x="240" y="27" width="40" height="20"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" name="Optima-ExtraBlack" family="Optima" pointSize="17"/>
 | 
			
		||||
                                        <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        <nil key="highlightedColor"/>
 | 
			
		||||
                                    </label>
 | 
			
		||||
                                    <button opaque="NO" alpha="0.50000000000000011" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jec-mu-nPt">
 | 
			
		||||
                                        <rect key="frame" x="281" y="25" width="24" height="24"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <rect key="frame" x="276" y="20" width="34" height="34"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
 | 
			
		||||
                                        <inset key="contentEdgeInsets" minX="5" minY="5" maxX="5" maxY="5"/>
 | 
			
		||||
                                        <state key="normal" image="plus.png">
 | 
			
		||||
                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
@@ -306,28 +461,82 @@
 | 
			
		||||
                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </state>
 | 
			
		||||
                                        <connections>
 | 
			
		||||
                                            <action selector="didIncrementPasswordCounter" destination="PQa-Xl-A3x" eventType="touchUpInside" id="xCQ-hF-pLc"/>
 | 
			
		||||
                                            <action selector="incrementPasswordCounter" destination="PQa-Xl-A3x" eventType="touchUpInside" id="hMc-kb-yFA"/>
 | 
			
		||||
                                        </connections>
 | 
			
		||||
                                    </button>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="center" image="Square.png" id="qWn-td-zdb">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="0.0" width="320" height="222"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                    <button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="9FS-fS-xH6">
 | 
			
		||||
                                        <rect key="frame" x="276" y="20" width="34" height="34"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
 | 
			
		||||
                                        <inset key="contentEdgeInsets" minX="5" minY="5" maxX="5" maxY="5"/>
 | 
			
		||||
                                        <state key="normal" image="edit.png">
 | 
			
		||||
                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </state>
 | 
			
		||||
                                        <state key="highlighted">
 | 
			
		||||
                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                        </state>
 | 
			
		||||
                                        <connections>
 | 
			
		||||
                                            <action selector="editPassword" destination="PQa-Xl-A3x" eventType="touchUpInside" id="jZC-Jm-ZZ0"/>
 | 
			
		||||
                                        </connections>
 | 
			
		||||
                                    </button>
 | 
			
		||||
                                </subviews>
 | 
			
		||||
                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                            </view>
 | 
			
		||||
                            <view clipsSubviews="YES" alpha="0.60000000000000009" contentMode="scaleToFill" id="61G-By-qLB">
 | 
			
		||||
                                <rect key="frame" x="0.0" y="196" width="320" height="220"/>
 | 
			
		||||
                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                <subviews>
 | 
			
		||||
                                    <imageView userInteractionEnabled="NO" contentMode="bottom" image="Square-bottom.png" id="lbm-A0-3PK">
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="0.0" width="320" height="58"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                    </imageView>
 | 
			
		||||
                                    <webView opaque="NO" contentMode="scaleToFill" id="8FQ-x4-lR9">
 | 
			
		||||
                                        <rect key="frame" x="20" y="165" width="280" height="207"/>
 | 
			
		||||
                                        <rect key="frame" x="0.0" y="1" width="320" height="219"/>
 | 
			
		||||
                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                    </webView>
 | 
			
		||||
                                </subviews>
 | 
			
		||||
                            </scrollView>
 | 
			
		||||
                                <color key="backgroundColor" cocoaTouchSystemColor="scrollViewTexturedBackgroundColor"/>
 | 
			
		||||
                            </view>
 | 
			
		||||
                            <searchBar contentMode="redraw" barStyle="blackOpaque" placeholder="Site" id="qeo-n2-WVh">
 | 
			
		||||
                                <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
 | 
			
		||||
                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                <gestureRecognizers/>
 | 
			
		||||
                                <textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL"/>
 | 
			
		||||
                                <connections>
 | 
			
		||||
                                    <outlet property="delegate" destination="PQa-Xl-A3x" id="oXp-0r-Gkl"/>
 | 
			
		||||
                                </connections>
 | 
			
		||||
                            </searchBar>
 | 
			
		||||
                        </subviews>
 | 
			
		||||
                        <color key="backgroundColor" red="0.14901960784313725" green="0.16470588235294117" blue="0.1803921568627451" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                    </view>
 | 
			
		||||
                    <navigationItem key="navigationItem" title="One Password" id="hB9-S6-KHC"/>
 | 
			
		||||
                    <navigationItem key="navigationItem" title="One Password" id="hB9-S6-KHC">
 | 
			
		||||
                        <barButtonItem key="leftBarButtonItem" id="2Bg-ut-2K4">
 | 
			
		||||
                            <button key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="infoLight" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="C1k-kx-Gcx">
 | 
			
		||||
                                <rect key="frame" x="5" y="12" width="18" height="19"/>
 | 
			
		||||
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
 | 
			
		||||
                                <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
 | 
			
		||||
                                <state key="normal">
 | 
			
		||||
                                    <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                                    <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                </state>
 | 
			
		||||
                                <state key="highlighted">
 | 
			
		||||
                                    <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
 | 
			
		||||
                                </state>
 | 
			
		||||
                                <connections>
 | 
			
		||||
                                    <action selector="toggleHelp" destination="PQa-Xl-A3x" eventType="touchUpInside" id="BpO-gU-wS3"/>
 | 
			
		||||
                                </connections>
 | 
			
		||||
                            </button>
 | 
			
		||||
                        </barButtonItem>
 | 
			
		||||
                    </navigationItem>
 | 
			
		||||
                    <connections>
 | 
			
		||||
                        <outlet property="contentContainer" destination="g9q-4d-ZgJ" id="Hgw-Hp-FHB"/>
 | 
			
		||||
                        <outlet property="contentField" destination="fiX-10-fif" id="b2c-gv-qMp"/>
 | 
			
		||||
                        <outlet property="helpContainer" destination="61G-By-qLB" id="Jwt-0d-ZAV"/>
 | 
			
		||||
                        <outlet property="helpView" destination="8FQ-x4-lR9" id="MOg-5s-kvK"/>
 | 
			
		||||
                        <outlet property="passwordCounter" destination="Iuf-np-e9C" id="KHv-8K-K0s"/>
 | 
			
		||||
                        <outlet property="passwordEdit" destination="9FS-fS-xH6" id="YeB-HF-ZPk"/>
 | 
			
		||||
                        <outlet property="passwordIncrementer" destination="jec-mu-nPt" id="i9B-lX-zzX"/>
 | 
			
		||||
                        <outlet property="searchDisplayController" destination="P8c-gf-nN3" id="CLs-YI-7NC"/>
 | 
			
		||||
                        <outlet property="searchResultsController" destination="0QO-2P-OhD" id="xEC-gV-lHp"/>
 | 
			
		||||
@@ -359,10 +568,9 @@
 | 
			
		||||
                <navigationController id="KZF-fe-y9n" sceneMemberID="viewController">
 | 
			
		||||
                    <toolbarItems/>
 | 
			
		||||
                    <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/>
 | 
			
		||||
                    <navigationBar key="navigationBar" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="sif-x3-Fol">
 | 
			
		||||
                    <navigationBar key="navigationBar" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" barStyle="blackOpaque" id="sif-x3-Fol">
 | 
			
		||||
                        <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
 | 
			
		||||
                        <autoresizingMask key="autoresizingMask"/>
 | 
			
		||||
                        <color key="tintColor" red="0.18039215689999999" green="0.20000000000000001" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
 | 
			
		||||
                    </navigationBar>
 | 
			
		||||
                    <nil name="viewControllers"/>
 | 
			
		||||
                    <connections>
 | 
			
		||||
@@ -374,12 +582,50 @@
 | 
			
		||||
        </scene>
 | 
			
		||||
    </scenes>
 | 
			
		||||
    <resources>
 | 
			
		||||
        <image name="Content-Backdrop.png" width="320" height="166"/>
 | 
			
		||||
        <image name="Square.png" width="551" height="222"/>
 | 
			
		||||
        <image name="Content-Backdrop.png" width="480" height="480"/>
 | 
			
		||||
        <image name="Square-bottom.png" width="551" height="58"/>
 | 
			
		||||
        <image name="Square-top.png" width="551" height="164"/>
 | 
			
		||||
        <image name="display.png" width="298" height="86"/>
 | 
			
		||||
        <image name="edit.png" width="32" height="32"/>
 | 
			
		||||
        <image name="list_first.png" width="299" height="35"/>
 | 
			
		||||
        <image name="list_first_active.png" width="299" height="35"/>
 | 
			
		||||
        <image name="list_last.png" width="299" height="35"/>
 | 
			
		||||
        <image name="list_last_active.png" width="299" height="36"/>
 | 
			
		||||
        <image name="list_middle.png" width="299" height="34"/>
 | 
			
		||||
        <image name="list_middle_active.png" width="299" height="34"/>
 | 
			
		||||
        <image name="plus.png" width="32" height="32"/>
 | 
			
		||||
    </resources>
 | 
			
		||||
    <classes>
 | 
			
		||||
        <class className="OPMainViewController" superclassName="UIViewController">
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/OPMainViewController.h"/>
 | 
			
		||||
            <relationships>
 | 
			
		||||
                <relationship kind="action" name="copyContent"/>
 | 
			
		||||
                <relationship kind="action" name="editPassword"/>
 | 
			
		||||
                <relationship kind="action" name="incrementPasswordCounter"/>
 | 
			
		||||
                <relationship kind="action" name="toggleHelp"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentContainer" candidateClass="UIView"/>
 | 
			
		||||
                <relationship kind="outlet" name="contentField" candidateClass="UITextField"/>
 | 
			
		||||
                <relationship kind="outlet" name="helpContainer" candidateClass="UIView"/>
 | 
			
		||||
                <relationship kind="outlet" name="helpView" candidateClass="UIWebView"/>
 | 
			
		||||
                <relationship kind="outlet" name="passwordCounter" candidateClass="UILabel"/>
 | 
			
		||||
                <relationship kind="outlet" name="passwordEdit" candidateClass="UIButton"/>
 | 
			
		||||
                <relationship kind="outlet" name="passwordIncrementer" candidateClass="UIButton"/>
 | 
			
		||||
                <relationship kind="outlet" name="searchResultsController" candidateClass="OPSearchDelegate"/>
 | 
			
		||||
                <relationship kind="outlet" name="siteName" candidateClass="UILabel"/>
 | 
			
		||||
                <relationship kind="outlet" name="typeButton" candidateClass="UIButton"/>
 | 
			
		||||
            </relationships>
 | 
			
		||||
        </class>
 | 
			
		||||
        <class className="OPSearchDelegate" superclassName="NSObject">
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/OPSearchDelegate.h"/>
 | 
			
		||||
            <relationships>
 | 
			
		||||
                <relationship kind="outlet" name="delegate"/>
 | 
			
		||||
                <relationship kind="outlet" name="searchDisplayController" candidateClass="UISearchDisplayController"/>
 | 
			
		||||
            </relationships>
 | 
			
		||||
        </class>
 | 
			
		||||
        <class className="OPTypeViewController" superclassName="UITableViewController">
 | 
			
		||||
            <source key="sourceIdentifier" type="project" relativePath="./Classes/OPTypeViewController.h"/>
 | 
			
		||||
        </class>
 | 
			
		||||
    </classes>
 | 
			
		||||
    <simulatedMetricsContainer key="defaultSimulatedMetrics">
 | 
			
		||||
        <simulatedStatusBarMetrics key="statusBar"/>
 | 
			
		||||
        <simulatedOrientationMetrics key="orientation"/>
 | 
			
		||||
 
 | 
			
		||||