2
0

Delete site WIP.

This commit is contained in:
Maarten Billemont 2014-05-10 21:42:11 -04:00
parent b53de7a648
commit 943c378206
8 changed files with 310 additions and 185 deletions

View File

@ -22,6 +22,7 @@
#import "MPPasswordLargeGeneratedCell.h" #import "MPPasswordLargeGeneratedCell.h"
#import "MPPasswordLargeStoredCell.h" #import "MPPasswordLargeStoredCell.h"
#import "MPPasswordTypesCell.h" #import "MPPasswordTypesCell.h"
#import "MPPasswordLargeDeleteCell.h"
@implementation MPPasswordLargeCell @implementation MPPasswordLargeCell
@ -31,7 +32,9 @@
atIndexPath:(NSIndexPath *)indexPath { atIndexPath:(NSIndexPath *)indexPath {
NSString *reuseIdentifier; NSString *reuseIdentifier;
if (type & MPElementTypeClassGenerated) if (indexPath.item == 0)
reuseIdentifier = NSStringFromClass( [MPPasswordLargeDeleteCell class] );
else if (type & MPElementTypeClassGenerated)
reuseIdentifier = NSStringFromClass( [MPPasswordLargeGeneratedCell class] ); reuseIdentifier = NSStringFromClass( [MPPasswordLargeGeneratedCell class] );
else if (type & MPElementTypeClassStored) else if (type & MPElementTypeClassStored)
reuseIdentifier = NSStringFromClass( [MPPasswordLargeStoredCell class] ); reuseIdentifier = NSStringFromClass( [MPPasswordLargeStoredCell class] );

View File

@ -0,0 +1,24 @@
/**
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
*
* See the enclosed file LICENSE for license information (LGPLv3). If you did
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
*
* @author Maarten Billemont <lhunath@lyndir.com>
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
*/
//
// MPPasswordLargeDeleteCell.h
// MPPasswordLargeDeleteCell
//
// Created by lhunath on 2014-03-19.
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "MPPasswordLargeCell.h"
@interface MPPasswordLargeDeleteCell : MPPasswordLargeCell
@end

View File

@ -0,0 +1,33 @@
/**
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
*
* See the enclosed file LICENSE for license information (LGPLv3). If you did
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
*
* @author Maarten Billemont <lhunath@lyndir.com>
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
*/
//
// MPPasswordLargeDeleteCell.h
// MPPasswordLargeDeleteCell
//
// Created by lhunath on 2014-03-19.
// Copyright, lhunath (Maarten Billemont) 2014. All rights reserved.
//
#import "MPPasswordLargeDeleteCell.h"
#import "MPiOSAppDelegate.h"
#import "MPAppDelegate_Store.h"
#import "MPPasswordElementCell.h"
@implementation MPPasswordLargeDeleteCell
#pragma mark - Lifecycle
- (MPElementEntity *)saveContentTypeWithElement:(MPElementEntity *)element saveInContext:(NSManagedObjectContext *)context {
return element;
}
@end

View File

@ -26,6 +26,7 @@
@property(nonatomic, strong) IBOutlet UICollectionView *contentCollectionView; @property(nonatomic, strong) IBOutlet UICollectionView *contentCollectionView;
@property(nonatomic, strong) id<MPAlgorithm> algorithm; @property(nonatomic, strong) id<MPAlgorithm> algorithm;
@property(nonatomic) MPElementType activeType;
+ (instancetype)dequeueCellForElement:(MPElementEntity *)element + (instancetype)dequeueCellForElement:(MPElementEntity *)element
fromCollectionView:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath; fromCollectionView:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath;
+ (instancetype)dequeueCellForTransientSite:(NSString *)siteName + (instancetype)dequeueCellForTransientSite:(NSString *)siteName

View File

@ -57,6 +57,7 @@
- (void)prepareForReuse { - (void)prepareForReuse {
_activeType = 0;
_algorithm = MPAlgorithmDefault; _algorithm = MPAlgorithmDefault;
[super prepareForReuse]; [super prepareForReuse];
@ -66,10 +67,10 @@
[super applyLayoutAttributes:layoutAttributes]; [super applyLayoutAttributes:layoutAttributes];
NSIndexPath *visibleIndexPath = [self.contentCollectionView.indexPathsForVisibleItems firstObject];
[self.contentCollectionView.collectionViewLayout invalidateLayout]; [self.contentCollectionView.collectionViewLayout invalidateLayout];
[self.contentCollectionView scrollToItemAtIndexPath:visibleIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally if (self.activeType)
animated:YES]; [self.contentCollectionView scrollToItemAtIndexPath:[self contentIndexPathForType:self.activeType]
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
} }
- (void)reloadWithTransientSite:(NSString *)siteName { - (void)reloadWithTransientSite:(NSString *)siteName {
@ -77,10 +78,7 @@
[super reloadWithTransientSite:siteName]; [super reloadWithTransientSite:siteName];
[self.contentCollectionView reloadData]; [self.contentCollectionView reloadData];
NSIndexPath *visibleIndexPath = [self contentIndexPathForType: self.activeType = IfElse( [[MPiOSAppDelegate get] activeUserForMainThread].defaultType, MPElementTypeGeneratedLong );
IfElse([[MPiOSAppDelegate get] activeUserForMainThread].defaultType, MPElementTypeGeneratedLong)];
[self.contentCollectionView scrollToItemAtIndexPath:visibleIndexPath
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
} }
- (void)reloadWithElement:(MPElementEntity *)mainElement { - (void)reloadWithElement:(MPElementEntity *)mainElement {
@ -90,9 +88,7 @@
self.algorithm = IfNotNilElse( [self mainElement].algorithm, MPAlgorithmDefault ); self.algorithm = IfNotNilElse( [self mainElement].algorithm, MPAlgorithmDefault );
[self.contentCollectionView reloadData]; [self.contentCollectionView reloadData];
NSIndexPath *visibleIndexPath = [self contentIndexPathForType:mainElement.type]; self.activeType = mainElement.type;
[self.contentCollectionView scrollToItemAtIndexPath:visibleIndexPath
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
} }
#pragma mark - UICollectionViewDataSource #pragma mark - UICollectionViewDataSource
@ -108,13 +104,7 @@
if (!self.algorithm) if (!self.algorithm)
dbg_return_tr( 0, @, @(section) ); dbg_return_tr( 0, @, @(section) );
NSInteger types = 1; dbg_return_tr( [[self.algorithm allTypes] count] + 1, @, @(section) );
MPElementType type = [self typeForContentIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
for (MPElementType nextType = type; type != (nextType = [self.algorithm nextType:nextType]);)
++types;
dbg_return_tr(types, @, @(section));
} }
- (MPPasswordLargeCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - (MPPasswordLargeCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
@ -133,8 +123,89 @@
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionView *passwordCollectionView = [UICollectionView findAsSuperviewOf:self]; NSString *newSiteName = self.transientSite;
[passwordCollectionView.delegate collectionView:passwordCollectionView didSelectItemAtIndexPath:[passwordCollectionView indexPathForCell:self]]; if (newSiteName) {
[PearlAlert showAlertWithTitle:@"Create Site"
message:strf( @"Do you want to create a new site named:\n%@", newSiteName )
viewStyle:UIAlertViewStyleDefault
initAlert:nil tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
if (buttonIndex == [alert cancelButtonIndex]) {
// Cancel
// NSIndexPath *indexPath_ = [collectionView indexPathForCell:cell];
// [collectionView selectItemAtIndexPath:indexPath animated:NO
// scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
// [collectionView deselectItemAtIndexPath:indexPath animated:YES];
for (NSIndexPath *selectedIndexPath in [collectionView indexPathsForSelectedItems])
[collectionView deselectItemAtIndexPath:selectedIndexPath animated:YES];
return;
}
// Create
[[MPiOSAppDelegate get] addElementNamed:newSiteName completion:^(MPElementEntity *element) {
PearlMainQueue( ^{
[PearlOverlay showTemporaryOverlayWithTitle:strf( @"Added %@", newSiteName ) dismissAfter:2];
PearlMainQueueAfter( 0.2f, ^{
// NSIndexPath *indexPath_ = [collectionView indexPathForCell:cell];
// [collectionView selectItemAtIndexPath:indexPath animated:NO
// scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
// [collectionView deselectItemAtIndexPath:indexPath animated:YES];
for (NSIndexPath *selectedIndexPath in [collectionView indexPathsForSelectedItems])
[collectionView deselectItemAtIndexPath:selectedIndexPath animated:YES];
} );
} );
}];
} cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:[PearlStrings get].commonButtonYes, nil];
return;
}
MPElementEntity *element = [self mainElement];
if (!element) {
// [collectionView selectItemAtIndexPath:indexPath animated:NO
// scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
// [collectionView deselectItemAtIndexPath:indexPath animated:YES];
for (NSIndexPath *selectedIndexPath in [collectionView indexPathsForSelectedItems])
[collectionView deselectItemAtIndexPath:selectedIndexPath animated:YES];
return;
}
inf( @"Copying password for: %@", element.name );
MPCheckpoint( MPCheckpointCopyToPasteboard, @{
@"type" : NilToNSNull( element.typeName ),
@"version" : @(element.version),
@"emergency" : @NO
} );
[element resolveContentUsingKey:[MPAppDelegate_Shared get].key result:^(NSString *result) {
if (![result length]) {
PearlMainQueue( ^{
// NSIndexPath *indexPath_ = [collectionView indexPathForCell:cell];
// [collectionView selectItemAtIndexPath:indexPath animated:NO
// scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
// [collectionView deselectItemAtIndexPath:indexPath animated:YES];
for (NSIndexPath *selectedIndexPath in [collectionView indexPathsForSelectedItems])
[collectionView deselectItemAtIndexPath:selectedIndexPath animated:YES];
} );
return;
}
[UIPasteboard generalPasteboard].string = result;
PearlMainQueue( ^{
[PearlOverlay showTemporaryOverlayWithTitle:@"Password Copied" dismissAfter:2];
PearlMainQueueAfter( 0.2f, ^{
// NSIndexPath *indexPath_ = [collectionView indexPathForCell:cell];
// [collectionView selectItemAtIndexPath:indexPath animated:NO
// scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
// [collectionView deselectItemAtIndexPath:indexPath animated:YES];
for (NSIndexPath *selectedIndexPath in [collectionView indexPathsForSelectedItems])
[collectionView deselectItemAtIndexPath:selectedIndexPath animated:YES];
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
[[self elementInContext:context] use];
[context saveToStore];
}];
} );
} );
}];
} }
#pragma mark - UIScrollViewDelegate #pragma mark - UIScrollViewDelegate
@ -166,24 +237,20 @@
- (MPElementType)typeForContentIndexPath:(NSIndexPath *)indexPath { - (MPElementType)typeForContentIndexPath:(NSIndexPath *)indexPath {
MPElementType type = MPElementTypeGeneratedPIN; if (indexPath.item == 0)
return (MPElementType)NSNotFound;
for (NSUInteger i = 0; i < indexPath.item; ++i) return [[self.algorithm allTypesStartingWith:MPElementTypeGeneratedPIN][indexPath.item - 1] unsignedIntegerValue];
type = [self.algorithm nextType:type];
return type;
} }
- (NSIndexPath *)contentIndexPathForType:(MPElementType)type { - (NSIndexPath *)contentIndexPathForType:(MPElementType)type {
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0]; NSArray *types = [self.algorithm allTypesStartingWith:MPElementTypeGeneratedPIN];
while ([self typeForContentIndexPath:indexPath] != type) { for (NSInteger t = 0; t < [types count]; ++t)
indexPath = [NSIndexPath indexPathForItem:indexPath.item + 1 inSection:indexPath.section]; if ([types[t] unsignedIntegerValue] == type)
NSAssert1(indexPath.item < [self.contentCollectionView numberOfItemsInSection:0], return [NSIndexPath indexPathForItem:t + 1 inSection:0];
@"No item found for type: %@", [self.algorithm nameOfType:type]);
}
return indexPath; Throw(@"Unsupported type: %d", type);
} }
- (void)saveContentType { - (void)saveContentType {
@ -193,6 +260,7 @@
CGPoint centerPoint = CGPointFromCGRectCenter( self.contentCollectionView.bounds ); CGPoint centerPoint = CGPointFromCGRectCenter( self.contentCollectionView.bounds );
NSIndexPath *centerIndexPath = [self.contentCollectionView indexPathForItemAtPoint:centerPoint]; NSIndexPath *centerIndexPath = [self.contentCollectionView indexPathForItemAtPoint:centerPoint];
self.activeType = [self typeForContentIndexPath:centerIndexPath];
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) { [MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPPasswordLargeCell *cell = (MPPasswordLargeCell *)[self.contentCollectionView cellForItemAtIndexPath:centerIndexPath]; MPPasswordLargeCell *cell = (MPPasswordLargeCell *)[self.contentCollectionView cellForItemAtIndexPath:centerIndexPath];
@ -210,7 +278,15 @@
}]; }];
} }
#pragma mark - Properties #pragma mark - State
- (void)setActiveType:(MPElementType)activeType {
_activeType = activeType;
[self.contentCollectionView scrollToItemAtIndexPath:[self contentIndexPathForType:activeType]
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
}
- (void)setSelected:(BOOL)selected { - (void)setSelected:(BOOL)selected {

View File

@ -58,7 +58,6 @@
_coachmark = [MPCoachmark coachmarkForClass:[self class] version:0]; _coachmark = [MPCoachmark coachmarkForClass:[self class] version:0];
self.view.backgroundColor = [UIColor clearColor]; self.view.backgroundColor = [UIColor clearColor];
self.passwordCollectionView.contentInset = UIEdgeInsetsMake( 108, 0, 0, 0 );
[self.passwordCollectionView automaticallyAdjustInsetsForKeyboard]; [self.passwordCollectionView automaticallyAdjustInsetsForKeyboard];
} }
@ -107,6 +106,12 @@
#pragma mark - UICollectionViewDelegateFlowLayout #pragma mark - UICollectionViewDelegateFlowLayout
- (CGSize) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout
referenceSizeForHeaderInSection:(NSInteger)section {
return CGSizeMake( collectionView.bounds.size.width, CGPointFromCGRectBottom( self.passwordsSearchBar.frame ).y );
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath { sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
@ -160,90 +165,12 @@
cell = [MPPasswordTypesCell dequeueCellForTransientSite:self.query fromCollectionView:collectionView atIndexPath:indexPath]; cell = [MPPasswordTypesCell dequeueCellForTransientSite:self.query fromCollectionView:collectionView atIndexPath:indexPath];
[UIView setAnimationsEnabled:YES]; [UIView setAnimationsEnabled:YES];
return cell; dbg_return(cell, indexPath);
} }
Throw(@"Unexpected collection view: %@", collectionView); Throw(@"Unexpected collection view: %@", collectionView);
} }
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
MPPasswordElementCell *cell = (MPPasswordElementCell *)[collectionView cellForItemAtIndexPath:indexPath];
NSString *newSiteName = cell.transientSite;
if (newSiteName) {
[PearlAlert showAlertWithTitle:@"Create Site"
message:strf( @"Do you want to create a new site named:\n%@", newSiteName )
viewStyle:UIAlertViewStyleDefault
initAlert:nil tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
if (buttonIndex == [alert cancelButtonIndex]) {
// Cancel
NSIndexPath *indexPath_ = [collectionView indexPathForCell:cell];
[collectionView selectItemAtIndexPath:indexPath_ animated:NO
scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
[collectionView deselectItemAtIndexPath:indexPath_ animated:YES];
return;
}
// Create
[[MPiOSAppDelegate get] addElementNamed:newSiteName completion:^(MPElementEntity *element) {
PearlMainQueue( ^{
[PearlOverlay showTemporaryOverlayWithTitle:strf( @"Added %@", newSiteName ) dismissAfter:2];
PearlMainQueueAfter( 0.2f, ^{
NSIndexPath *indexPath_ = [collectionView indexPathForCell:cell];
[collectionView selectItemAtIndexPath:indexPath_ animated:NO
scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
[collectionView deselectItemAtIndexPath:indexPath_ animated:YES];
} );
} );
}];
} cancelTitle:[PearlStrings get].commonButtonCancel otherTitles:[PearlStrings get].commonButtonYes, nil];
return;
}
MPElementEntity *element = [cell mainElement];
if (!element) {
[collectionView selectItemAtIndexPath:indexPath animated:NO
scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
[collectionView deselectItemAtIndexPath:indexPath animated:YES];
return;
}
inf(@"Copying password for: %@", element.name);
MPCheckpoint( MPCheckpointCopyToPasteboard, @{
@"type" : NilToNSNull(element.typeName),
@"version" : @(element.version),
@"emergency" : @NO
} );
[element resolveContentUsingKey:[MPAppDelegate_Shared get].key result:^(NSString *result) {
if (![result length]) {
PearlMainQueue( ^{
NSIndexPath *indexPath_ = [collectionView indexPathForCell:cell];
[collectionView selectItemAtIndexPath:indexPath_ animated:NO
scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
[collectionView deselectItemAtIndexPath:indexPath_ animated:YES];
} );
return;
}
[UIPasteboard generalPasteboard].string = result;
PearlMainQueue( ^{
[PearlOverlay showTemporaryOverlayWithTitle:@"Password Copied" dismissAfter:2];
PearlMainQueueAfter( 0.2f, ^{
NSIndexPath *indexPath_ = [collectionView indexPathForCell:cell];
[collectionView selectItemAtIndexPath:indexPath_ animated:NO
scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
[collectionView deselectItemAtIndexPath:indexPath_ animated:YES];
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
[[cell elementInContext:context] use];
[context saveToStore];
}];
} );
} );
}];
}
#pragma mark - NSFetchedResultsControllerDelegate #pragma mark - NSFetchedResultsControllerDelegate
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { - (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {

View File

@ -33,6 +33,7 @@
93D396D8B67DA6522CDBA142 /* MPCoachmarkViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3995B1D4DCE5A30D882BA /* MPCoachmarkViewController.m */; }; 93D396D8B67DA6522CDBA142 /* MPCoachmarkViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3995B1D4DCE5A30D882BA /* MPCoachmarkViewController.m */; };
93D397952F5635C793C24DF1 /* NSError+PearlFullDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */; }; 93D397952F5635C793C24DF1 /* NSError+PearlFullDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */; };
93D3980046016EFD05B35BC5 /* PearlUICollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39B1D8177A86C5B9EDDE3 /* PearlUICollectionView.h */; }; 93D3980046016EFD05B35BC5 /* PearlUICollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D39B1D8177A86C5B9EDDE3 /* PearlUICollectionView.h */; };
93D398BD8B83FEE8BE4EFFFC /* MPPasswordLargeDeleteCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39EFBC4D6BA3C8581865F /* MPPasswordLargeDeleteCell.m */; };
93D398ECD7D1A0DEDDADF516 /* MPEmergencyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39ACBA9F4878B6A1CC33B /* MPEmergencyViewController.m */; }; 93D398ECD7D1A0DEDDADF516 /* MPEmergencyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39ACBA9F4878B6A1CC33B /* MPEmergencyViewController.m */; };
93D399246DC90F50913A1287 /* UIResponder+PearlFirstResponder.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */; }; 93D399246DC90F50913A1287 /* UIResponder+PearlFirstResponder.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A1DDFA09AE2E14D26DC /* UIResponder+PearlFirstResponder.m */; };
93D399278165FD6D950F0025 /* MPPasswordTypesCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39097C0AAE62C1C321BFC /* MPPasswordTypesCell.m */; }; 93D399278165FD6D950F0025 /* MPPasswordTypesCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39097C0AAE62C1C321BFC /* MPPasswordTypesCell.m */; };
@ -548,6 +549,7 @@
93D3952CC60991B97D69F26A /* MPPasswordSmallCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordSmallCell.m; sourceTree = "<group>"; }; 93D3952CC60991B97D69F26A /* MPPasswordSmallCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordSmallCell.m; sourceTree = "<group>"; };
93D3956915634581E737B38C /* PearlNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlNavigationController.m; sourceTree = "<group>"; }; 93D3956915634581E737B38C /* PearlNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlNavigationController.m; sourceTree = "<group>"; };
93D395BA6B2CFF5F49A4D25F /* MPPasswordLargeStoredCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordLargeStoredCell.h; sourceTree = "<group>"; }; 93D395BA6B2CFF5F49A4D25F /* MPPasswordLargeStoredCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordLargeStoredCell.h; sourceTree = "<group>"; };
93D3966B527CA47A0A661CE2 /* MPPasswordLargeDeleteCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordLargeDeleteCell.h; sourceTree = "<group>"; };
93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = "<group>"; }; 93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = "<group>"; };
93D3971FE104BB4052484151 /* MPUsersViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUsersViewController.h; sourceTree = "<group>"; }; 93D3971FE104BB4052484151 /* MPUsersViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUsersViewController.h; sourceTree = "<group>"; };
93D39730673227EFF6DEFF19 /* MPSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSetupViewController.h; sourceTree = "<group>"; }; 93D39730673227EFF6DEFF19 /* MPSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSetupViewController.h; sourceTree = "<group>"; };
@ -593,6 +595,7 @@
93D39DEA995041A13DC9CAF7 /* MPPasswordCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordCell.m; sourceTree = "<group>"; }; 93D39DEA995041A13DC9CAF7 /* MPPasswordCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordCell.m; sourceTree = "<group>"; };
93D39E02F69CACAB61C056F8 /* MPPasswordLargeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordLargeCell.h; sourceTree = "<group>"; }; 93D39E02F69CACAB61C056F8 /* MPPasswordLargeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordLargeCell.h; sourceTree = "<group>"; };
93D39E7A12CC352B2825AA66 /* MPPasswordsSegue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordsSegue.m; sourceTree = "<group>"; }; 93D39E7A12CC352B2825AA66 /* MPPasswordsSegue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordsSegue.m; sourceTree = "<group>"; };
93D39EFBC4D6BA3C8581865F /* MPPasswordLargeDeleteCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordLargeDeleteCell.m; sourceTree = "<group>"; };
93D39F556F2F142740A65E59 /* MPWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPWebViewController.h; sourceTree = "<group>"; }; 93D39F556F2F142740A65E59 /* MPWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPWebViewController.h; sourceTree = "<group>"; };
93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlEMail.h; sourceTree = "<group>"; }; 93D39F7C9F47BF6387FBC5C3 /* PearlEMail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlEMail.h; sourceTree = "<group>"; };
93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+PearlFullDescription.m"; sourceTree = "<group>"; }; 93D39F9106F2CCFB94283188 /* NSError+PearlFullDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+PearlFullDescription.m"; sourceTree = "<group>"; };
@ -1708,6 +1711,8 @@
DACA22121705DDC5002C6C22 /* External */, DACA22121705DDC5002C6C22 /* External */,
DA5BFA47147E415C00F98B1E /* Frameworks */, DA5BFA47147E415C00F98B1E /* Frameworks */,
DA5BFA45147E415C00F98B1E /* Products */, DA5BFA45147E415C00F98B1E /* Products */,
93D3966B527CA47A0A661CE2 /* MPPasswordLargeDeleteCell.h */,
93D39EFBC4D6BA3C8581865F /* MPPasswordLargeDeleteCell.m */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@ -3868,6 +3873,7 @@
93D391C07818F4C2DC1B6956 /* MPPasswordsCoachmarkViewController.m in Sources */, 93D391C07818F4C2DC1B6956 /* MPPasswordsCoachmarkViewController.m in Sources */,
93D39EAA4D064193074D3021 /* MPFixable.m in Sources */, 93D39EAA4D064193074D3021 /* MPFixable.m in Sources */,
93D394982CBD25D46692DD7C /* MPWebViewController.m in Sources */, 93D394982CBD25D46692DD7C /* MPWebViewController.m in Sources */,
93D398BD8B83FEE8BE4EFFFC /* MPPasswordLargeDeleteCell.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -882,13 +882,13 @@
<inset key="scrollIndicatorInsets" minX="0.0" minY="108" maxX="0.0" maxY="0.0"/> <inset key="scrollIndicatorInsets" minX="0.0" minY="108" maxX="0.0" maxY="0.0"/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="Mv1-29-TWx"> <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="Mv1-29-TWx">
<size key="itemSize" width="300" height="100"/> <size key="itemSize" width="300" height="100"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/> <size key="headerReferenceSize" width="50" height="108"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/> <size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="10" minY="10" maxX="10" maxY="10"/> <inset key="sectionInset" minX="10" minY="10" maxX="10" maxY="10"/>
</collectionViewFlowLayout> </collectionViewFlowLayout>
<cells> <cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordTypesCell" id="vMF-fk-FYX" userLabel="Large" customClass="MPPasswordTypesCell"> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordTypesCell" id="vMF-fk-FYX" userLabel="Large" customClass="MPPasswordTypesCell">
<rect key="frame" x="10" y="10" width="300" height="100"/> <rect key="frame" x="10" y="118" width="300" height="100"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="300" height="100"/> <rect key="frame" x="0.0" y="0.0" width="300" height="100"/>
@ -905,31 +905,28 @@
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout> </collectionViewFlowLayout>
<cells> <cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordLargeStoredCell" id="GAB-fT-EFv" userLabel="Stored" customClass="MPPasswordLargeStoredCell"> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordLargeDeleteCell" id="GAB-fT-EFv" userLabel="Delete" customClass="MPPasswordLargeDeleteCell">
<rect key="frame" x="0.0" y="0.0" width="300" height="100"/> <rect key="frame" x="0.0" y="0.0" width="300" height="100"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="300" height="100"/> <rect key="frame" x="0.0" y="0.0" width="300" height="100"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.029999999999999999" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Personal Password" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AAG-mH-nNg" userLabel="Type"> <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.029999999999999999" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Delete" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AAG-mH-nNg" userLabel="Type">
<rect key="frame" x="-10" y="19" width="763" height="101"/> <rect key="frame" x="-10" y="19" width="763" height="101"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="Exo2.0-Bold" family="Exo 2.0" pointSize="84"/> <fontDescription key="fontDescription" name="Exo2.0-Bold" family="Exo 2.0" pointSize="84"/>
<color key="textColor" cocoaTouchSystemColor="lightTextColor"/> <color key="textColor" cocoaTouchSystemColor="lightTextColor"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="SadwGafy7^Sidu" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="ig3-Gj-BQO" userLabel="Content"> <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Delete Site" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y9p-dE-unH" userLabel="Delete">
<rect key="frame" x="8" y="20" width="284" height="31"/> <rect key="frame" x="8" y="20" width="284" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/> <fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/>
<textInputTraits key="textInputTraits"/> <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<connections> <nil key="highlightedColor"/>
<outlet property="delegate" destination="GAB-fT-EFv" id="yvC-d8-wxn"/> </label>
</connections> <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" ambiguous="YES" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="VNc-fL-Vfa" userLabel="Site Name">
</textField>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="VNc-fL-Vfa" userLabel="Site Name">
<rect key="frame" x="8" y="71" width="284" height="14"/> <rect key="frame" x="8" y="71" width="284" height="14"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label=""> <accessibility key="accessibilityConfiguration" label="">
@ -941,13 +938,67 @@
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> <color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<size key="shadowOffset" width="0.0" height="1"/> <size key="shadowOffset" width="0.0" height="1"/>
</label> </label>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VK7-hX-lfg" userLabel="Upgrade"> </subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<color key="backgroundColor" red="0.50196081399917603" green="0.0" blue="0.0" alpha="0.5" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="y9p-dE-unH" firstAttribute="leading" secondItem="GAB-fT-EFv" secondAttribute="leading" constant="8" id="1pO-PG-Rci"/>
<constraint firstItem="AAG-mH-nNg" firstAttribute="leading" secondItem="GAB-fT-EFv" secondAttribute="leading" constant="-10" id="4XF-xn-KAY"/>
<constraint firstItem="y9p-dE-unH" firstAttribute="top" secondItem="GAB-fT-EFv" secondAttribute="top" constant="20" id="6Nq-f6-G38"/>
<constraint firstItem="VNc-fL-Vfa" firstAttribute="leading" secondItem="GAB-fT-EFv" secondAttribute="leading" constant="8" id="6xg-dp-fSn"/>
<constraint firstAttribute="trailing" secondItem="y9p-dE-unH" secondAttribute="trailing" constant="8" id="CCh-3r-ImT"/>
<constraint firstAttribute="bottom" secondItem="AAG-mH-nNg" secondAttribute="bottom" constant="-20" id="btx-g1-Jei"/>
<constraint firstAttribute="trailing" secondItem="VNc-fL-Vfa" secondAttribute="trailing" constant="8" id="k3u-1Q-cKf"/>
</constraints>
<connections>
<outlet property="nameLabel" destination="VNc-fL-Vfa" id="kMh-xS-U1W"/>
<outlet property="typeLabel" destination="AAG-mH-nNg" id="bBz-CA-Frx"/>
</connections>
</collectionViewCell>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordLargeStoredCell" id="W2g-yv-V3V" userLabel="Stored" customClass="MPPasswordLargeStoredCell">
<rect key="frame" x="310" y="0.0" width="300" height="100"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="300" height="100"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.029999999329447746" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Personal Password" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ESK-hm-pVB" userLabel="Type">
<rect key="frame" x="-10" y="19" width="763" height="101"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="Exo2.0-Bold" family="Exo 2.0" pointSize="84"/>
<color key="textColor" cocoaTouchSystemColor="lightTextColor"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="SadwGafy7^Sidu" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="blw-Ou-8I8" userLabel="Content">
<rect key="frame" x="8" y="20" width="284" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/>
<textInputTraits key="textInputTraits"/>
<connections>
<outlet property="delegate" destination="W2g-yv-V3V" id="YKp-IE-zEQ"/>
</connections>
</textField>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.5" contentMode="left" text="apple.com" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="OwP-sb-Wxl" userLabel="Site Name">
<rect key="frame" x="8" y="71" width="284" height="14"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" label="">
<accessibilityTraits key="traits" none="YES" staticText="YES" summaryElement="YES"/>
</accessibility>
<fontDescription key="fontDescription" name="Copperplate" family="Copperplate" pointSize="12"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
<color key="shadowColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<size key="shadowOffset" width="0.0" height="1"/>
</label>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KLg-Jf-XRN" userLabel="Upgrade">
<rect key="frame" x="221" y="56" width="44" height="44"/> <rect key="frame" x="221" y="56" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/> <accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="44" id="E7V-hA-BF3"/> <constraint firstAttribute="width" constant="44" id="jRK-Pe-SFL"/>
<constraint firstAttribute="width" constant="44" id="kOU-wM-VIE"/> <constraint firstAttribute="height" constant="44" id="mD9-bz-EEd"/>
</constraints> </constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/> <inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
@ -959,16 +1010,16 @@
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state> </state>
<connections> <connections>
<action selector="doUpgrade:" destination="GAB-fT-EFv" eventType="touchUpInside" id="cya-3E-5WH"/> <action selector="doUpgrade:" destination="W2g-yv-V3V" eventType="touchUpInside" id="ALE-Na-KIS"/>
</connections> </connections>
</button> </button>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="UAg-Fn-Iph" userLabel="Edit"> <button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="b7E-cU-HB7" userLabel="Edit">
<rect key="frame" x="221" y="56" width="44" height="44"/> <rect key="frame" x="221" y="56" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Edits the password."/> <accessibility key="accessibilityConfiguration" hint="Edits the password."/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="44" id="XuT-bg-5F8"/> <constraint firstAttribute="height" constant="44" id="dfA-95-6Om"/>
<constraint firstAttribute="height" constant="44" id="u1V-i8-dpk"/> <constraint firstAttribute="width" constant="44" id="pQu-rk-Nay"/>
</constraints> </constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/> <inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
@ -980,16 +1031,16 @@
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state> </state>
<connections> <connections>
<action selector="doEditContent:" destination="GAB-fT-EFv" eventType="touchUpInside" id="XnF-cN-Z2j"/> <action selector="doEditContent:" destination="W2g-yv-V3V" eventType="touchUpInside" id="N6m-Ib-LQO"/>
</connections> </connections>
</button> </button>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="T1f-JH-Ppw" userLabel="User"> <button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SfG-nt-NyC" userLabel="User">
<rect key="frame" x="256" y="56" width="44" height="44"/> <rect key="frame" x="256" y="56" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<accessibility key="accessibilityConfiguration" hint="Upgrades the password."/> <accessibility key="accessibilityConfiguration" hint="Upgrades the password."/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="44" id="HEE-GY-PLK"/> <constraint firstAttribute="height" constant="44" id="Am1-08-Pzm"/>
<constraint firstAttribute="height" constant="44" id="ZsS-fw-xC4"/> <constraint firstAttribute="width" constant="44" id="Jnj-oo-enC"/>
</constraints> </constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/> <inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
@ -1001,40 +1052,40 @@
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state> </state>
<connections> <connections>
<action selector="doUser:" destination="GAB-fT-EFv" eventType="touchUpInside" id="xCm-vG-Hvp"/> <action selector="doUser:" destination="W2g-yv-V3V" eventType="touchUpInside" id="jAs-zj-Nf9"/>
</connections> </connections>
</button> </button>
</subviews> </subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view> </view>
<color key="backgroundColor" red="0.18823529411764706" green="0.15686274509803921" blue="0.15686274509803921" alpha="0.5" colorSpace="calibratedRGB"/> <color key="backgroundColor" red="0.18823529410000001" green="0.15686274510000001" blue="0.15686274510000001" alpha="0.5" colorSpace="calibratedRGB"/>
<constraints> <constraints>
<constraint firstItem="AAG-mH-nNg" firstAttribute="leading" secondItem="GAB-fT-EFv" secondAttribute="leading" constant="-10" id="4XF-xn-KAY"/> <constraint firstItem="b7E-cU-HB7" firstAttribute="centerX" secondItem="KLg-Jf-XRN" secondAttribute="centerX" id="34H-Ho-xNc"/>
<constraint firstItem="VNc-fL-Vfa" firstAttribute="leading" secondItem="GAB-fT-EFv" secondAttribute="leading" constant="8" id="6xg-dp-fSn"/> <constraint firstItem="ESK-hm-pVB" firstAttribute="leading" secondItem="W2g-yv-V3V" secondAttribute="leading" constant="-10" id="A0R-lu-9BO"/>
<constraint firstItem="VNc-fL-Vfa" firstAttribute="centerY" secondItem="T1f-JH-Ppw" secondAttribute="centerY" id="AyR-HZ-NlG"/> <constraint firstItem="b7E-cU-HB7" firstAttribute="centerY" secondItem="SfG-nt-NyC" secondAttribute="centerY" id="ARa-xU-exW"/>
<constraint firstItem="T1f-JH-Ppw" firstAttribute="leading" secondItem="UAg-Fn-Iph" secondAttribute="trailing" constant="-9" id="Gg8-aq-N5i"/> <constraint firstItem="OwP-sb-Wxl" firstAttribute="centerY" secondItem="SfG-nt-NyC" secondAttribute="centerY" id="BcZ-r6-Kxd"/>
<constraint firstItem="ig3-Gj-BQO" firstAttribute="top" secondItem="GAB-fT-EFv" secondAttribute="top" constant="20" id="K8T-Cj-QcR"/> <constraint firstAttribute="trailing" secondItem="OwP-sb-Wxl" secondAttribute="trailing" constant="8" id="GGB-WN-PVI"/>
<constraint firstAttribute="trailing" secondItem="ig3-Gj-BQO" secondAttribute="trailing" constant="8" id="Q49-bU-waK"/> <constraint firstAttribute="trailing" secondItem="SfG-nt-NyC" secondAttribute="trailing" id="N2W-3R-jtc"/>
<constraint firstItem="UAg-Fn-Iph" firstAttribute="centerX" secondItem="VK7-hX-lfg" secondAttribute="centerX" id="RFD-Nw-OJO"/> <constraint firstItem="b7E-cU-HB7" firstAttribute="centerY" secondItem="KLg-Jf-XRN" secondAttribute="centerY" id="RAk-vW-n5T"/>
<constraint firstAttribute="bottom" secondItem="T1f-JH-Ppw" secondAttribute="bottom" id="T3G-Pa-eDv"/> <constraint firstItem="blw-Ou-8I8" firstAttribute="leading" secondItem="W2g-yv-V3V" secondAttribute="leading" constant="8" id="SNn-Z2-i9J"/>
<constraint firstItem="ig3-Gj-BQO" firstAttribute="leading" secondItem="GAB-fT-EFv" secondAttribute="leading" constant="8" id="TyD-3r-HO4"/> <constraint firstAttribute="bottom" secondItem="ESK-hm-pVB" secondAttribute="bottom" constant="-20" id="UNw-PQ-JMk"/>
<constraint firstItem="UAg-Fn-Iph" firstAttribute="centerY" secondItem="T1f-JH-Ppw" secondAttribute="centerY" id="Vm3-2V-69e"/> <constraint firstItem="blw-Ou-8I8" firstAttribute="top" secondItem="W2g-yv-V3V" secondAttribute="top" constant="20" id="d5v-RM-TKj"/>
<constraint firstAttribute="bottom" secondItem="AAG-mH-nNg" secondAttribute="bottom" constant="-20" id="btx-g1-Jei"/> <constraint firstItem="OwP-sb-Wxl" firstAttribute="leading" secondItem="W2g-yv-V3V" secondAttribute="leading" constant="8" id="mWV-lg-EAZ"/>
<constraint firstAttribute="trailing" secondItem="T1f-JH-Ppw" secondAttribute="trailing" id="gs2-po-9D2"/> <constraint firstAttribute="trailing" secondItem="blw-Ou-8I8" secondAttribute="trailing" constant="8" id="qKQ-q9-lWu"/>
<constraint firstAttribute="trailing" secondItem="VNc-fL-Vfa" secondAttribute="trailing" constant="8" id="k3u-1Q-cKf"/> <constraint firstAttribute="bottom" secondItem="SfG-nt-NyC" secondAttribute="bottom" id="v0g-dJ-tbc"/>
<constraint firstItem="UAg-Fn-Iph" firstAttribute="centerY" secondItem="VK7-hX-lfg" secondAttribute="centerY" id="t2J-rG-JlV"/> <constraint firstItem="SfG-nt-NyC" firstAttribute="leading" secondItem="b7E-cU-HB7" secondAttribute="trailing" constant="-9" id="zdQ-SJ-Cff"/>
</constraints> </constraints>
<connections> <connections>
<outlet property="contentField" destination="ig3-Gj-BQO" id="jhX-hf-14L"/> <outlet property="contentField" destination="blw-Ou-8I8" id="bov-At-Wpd"/>
<outlet property="editButton" destination="UAg-Fn-Iph" id="VLe-Hk-a9T"/> <outlet property="editButton" destination="b7E-cU-HB7" id="0de-kq-frx"/>
<outlet property="loginButton" destination="T1f-JH-Ppw" id="KJN-iM-QFu"/> <outlet property="loginButton" destination="SfG-nt-NyC" id="hAn-7S-u9n"/>
<outlet property="nameLabel" destination="VNc-fL-Vfa" id="kMh-xS-U1W"/> <outlet property="nameLabel" destination="OwP-sb-Wxl" id="Q6M-zX-g1z"/>
<outlet property="typeLabel" destination="AAG-mH-nNg" id="bBz-CA-Frx"/> <outlet property="typeLabel" destination="ESK-hm-pVB" id="w6J-OT-wfC"/>
<outlet property="upgradeButton" destination="VK7-hX-lfg" id="Neg-6Q-Mfa"/> <outlet property="upgradeButton" destination="KLg-Jf-XRN" id="YtO-4G-lml"/>
</connections> </connections>
</collectionViewCell> </collectionViewCell>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordLargeGeneratedCell" id="302-fI-maQ" userLabel="Generated" customClass="MPPasswordLargeGeneratedCell"> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordLargeGeneratedCell" id="302-fI-maQ" userLabel="Generated" customClass="MPPasswordLargeGeneratedCell">
<rect key="frame" x="310" y="0.0" width="300" height="100"/> <rect key="frame" x="620" y="0.0" width="300" height="100"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="300" height="100"/> <rect key="frame" x="0.0" y="0.0" width="300" height="100"/>
@ -1190,7 +1241,7 @@
</connections> </connections>
</collectionViewCell> </collectionViewCell>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordSmallGeneratedCell" id="yRD-Rk-pNt" userLabel="Small Generated" customClass="MPPasswordSmallGeneratedCell"> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordSmallGeneratedCell" id="yRD-Rk-pNt" userLabel="Small Generated" customClass="MPPasswordSmallGeneratedCell">
<rect key="frame" x="10" y="120" width="145" height="44"/> <rect key="frame" x="10" y="228" width="145" height="44"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="145" height="44"/> <rect key="frame" x="0.0" y="0.0" width="145" height="44"/>
@ -1223,7 +1274,7 @@
</connections> </connections>
</collectionViewCell> </collectionViewCell>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordSmallStoredCell" id="sBj-8o-NKh" userLabel="Small Stored" customClass="MPPasswordSmallStoredCell"> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MPPasswordSmallStoredCell" id="sBj-8o-NKh" userLabel="Small Stored" customClass="MPPasswordSmallStoredCell">
<rect key="frame" x="165" y="120" width="145" height="44"/> <rect key="frame" x="165" y="228" width="145" height="44"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="145" height="44"/> <rect key="frame" x="0.0" y="0.0" width="145" height="44"/>
@ -1256,6 +1307,10 @@
</connections> </connections>
</collectionViewCell> </collectionViewCell>
</cells> </cells>
<collectionReusableView key="sectionHeaderView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="yzh-hh-YjZ">
<rect key="frame" x="0.0" y="0.0" width="320" height="108"/>
<autoresizingMask key="autoresizingMask"/>
</collectionReusableView>
<connections> <connections>
<outlet property="dataSource" destination="nkY-z6-8jd" id="5DW-tc-rAp"/> <outlet property="dataSource" destination="nkY-z6-8jd" id="5DW-tc-rAp"/>
<outlet property="delegate" destination="nkY-z6-8jd" id="xhr-Qn-SBe"/> <outlet property="delegate" destination="nkY-z6-8jd" id="xhr-Qn-SBe"/>
@ -2097,15 +2152,15 @@ However, it means that anyone who finds your device unlocked can do the same.</s
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/> <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews> <subviews>
<view contentMode="scaleToFill" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="G6q-gV-ttC" userLabel="Passwords Root" customClass="PearlUIView"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="G6q-gV-ttC" userLabel="Passwords Root" customClass="PearlUIView">
<rect key="frame" x="0.0" y="0.0" width="321" height="568"/> <rect key="frame" x="0.0" y="0.0" width="321" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews> <subviews>
<view contentMode="scaleToFill" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="APQ-r2-UhH" userLabel="Passwords Container"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="APQ-r2-UhH" userLabel="Passwords Container">
<rect key="frame" x="0.0" y="0.0" width="321" height="568"/> <rect key="frame" x="0.0" y="0.0" width="321" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews> <subviews>
<collectionView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" misplaced="YES" minimumZoomScale="0.0" maximumZoomScale="0.0" keyboardDismissMode="onDrag" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="scR-fD-I84" userLabel="Password Collection"> <collectionView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" minimumZoomScale="0.0" maximumZoomScale="0.0" keyboardDismissMode="onDrag" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="scR-fD-I84" userLabel="Password Collection">
<rect key="frame" x="0.0" y="0.0" width="321" height="568"/> <rect key="frame" x="0.0" y="0.0" width="321" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
@ -2334,7 +2389,7 @@ However, it means that anyone who finds your device unlocked can do the same.</s
<constraint firstAttribute="bottom" secondItem="scR-fD-I84" secondAttribute="bottom" id="uIa-K7-YgH"/> <constraint firstAttribute="bottom" secondItem="scR-fD-I84" secondAttribute="bottom" id="uIa-K7-YgH"/>
</constraints> </constraints>
</view> </view>
<navigationBar opaque="NO" contentMode="scaleToFill" verticalHuggingPriority="251" misplaced="YES" barStyle="black" translatesAutoresizingMaskIntoConstraints="NO" id="H1q-gJ-4fo" userLabel="Navigation" customClass="PearlUINavigationBar"> <navigationBar opaque="NO" contentMode="scaleToFill" verticalHuggingPriority="251" barStyle="black" translatesAutoresizingMaskIntoConstraints="NO" id="H1q-gJ-4fo" userLabel="Navigation" customClass="PearlUINavigationBar">
<rect key="frame" x="0.0" y="0.0" width="321" height="64"/> <rect key="frame" x="0.0" y="0.0" width="321" height="64"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<items> <items>
@ -2369,12 +2424,12 @@ However, it means that anyone who finds your device unlocked can do the same.</s
<userDefinedRuntimeAttribute type="boolean" keyPath="ignoreTouches" value="YES"/> <userDefinedRuntimeAttribute type="boolean" keyPath="ignoreTouches" value="YES"/>
</userDefinedRuntimeAttributes> </userDefinedRuntimeAttributes>
</navigationBar> </navigationBar>
<toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" misplaced="YES" barStyle="black" translatesAutoresizingMaskIntoConstraints="NO" id="hqP-FG-C0l"> <toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" barStyle="black" translatesAutoresizingMaskIntoConstraints="NO" id="hqP-FG-C0l">
<rect key="frame" x="0.0" y="64" width="321" height="44"/> <rect key="frame" x="0.0" y="64" width="321" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<items/> <items/>
</toolbar> </toolbar>
<searchBar contentMode="redraw" misplaced="YES" barStyle="black" searchBarStyle="minimal" placeholder="eg. apple.com" translatesAutoresizingMaskIntoConstraints="NO" id="Pl5-3l-hZm"> <searchBar contentMode="redraw" barStyle="black" searchBarStyle="minimal" placeholder="eg. apple.com" translatesAutoresizingMaskIntoConstraints="NO" id="Pl5-3l-hZm">
<rect key="frame" x="0.0" y="64" width="321" height="44"/> <rect key="frame" x="0.0" y="64" width="321" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL"/> <textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL"/>
@ -2382,7 +2437,7 @@ However, it means that anyone who finds your device unlocked can do the same.</s
<outlet property="delegate" destination="a4U-1y-he6" id="xck-3c-AoG"/> <outlet property="delegate" destination="a4U-1y-he6" id="xck-3c-AoG"/>
</connections> </connections>
</searchBar> </searchBar>
<view contentMode="scaleToFill" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="kmo-c1-5dK" userLabel="Shade"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kmo-c1-5dK" userLabel="Shade">
<rect key="frame" x="0.0" y="0.0" width="321" height="568"/> <rect key="frame" x="0.0" y="0.0" width="321" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews> <subviews>
@ -2407,7 +2462,7 @@ However, it means that anyone who finds your device unlocked can do the same.</s
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="182" translatesAutoresizingMaskIntoConstraints="NO" id="0Qe-Pv-mvu"> <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="182" translatesAutoresizingMaskIntoConstraints="NO" id="0Qe-Pv-mvu">
<rect key="frame" x="49" y="170" width="182" height="41"/> <rect key="frame" x="49" y="170" width="182" height="41"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<string key="text">Site counter, <string key="text">Site counter,
@ -2416,7 +2471,7 @@ tap for a new password</string>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="197" translatesAutoresizingMaskIntoConstraints="NO" id="sE1-UW-xsu"> <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="197" translatesAutoresizingMaskIntoConstraints="NO" id="sE1-UW-xsu">
<rect key="frame" x="74" y="280" width="197" height="41"/> <rect key="frame" x="74" y="280" width="197" height="41"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<string key="text">Login name, <string key="text">Login name,
@ -2434,14 +2489,14 @@ to change password type</string>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Tap to dismiss coachmarks" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="147" translatesAutoresizingMaskIntoConstraints="NO" id="Ow6-UF-yHx"> <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tap to dismiss coachmarks" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="147" translatesAutoresizingMaskIntoConstraints="NO" id="Ow6-UF-yHx">
<rect key="frame" x="87" y="533" width="147" height="15"/> <rect key="frame" x="87" y="533" width="147" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="12"/> <fontDescription key="fontDescription" name="Exo2.0-Regular" family="Exo 2.0" pointSize="12"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hqT-j3-SlJ" userLabel="Close Button"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hqT-j3-SlJ" userLabel="Close Button">
<rect key="frame" x="0.0" y="0.0" width="321" height="568"/> <rect key="frame" x="0.0" y="0.0" width="321" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal"> <state key="normal">