2
0

Add missing features to new Mac UI: changing password type, setting custom passwords, deleting sites.

This commit is contained in:
Maarten Billemont 2014-06-26 01:19:42 -04:00
parent 150304941c
commit 5056f9e2e4
5 changed files with 320 additions and 279 deletions

View File

@ -30,8 +30,8 @@
@property (nonatomic) NSUInteger counter; @property (nonatomic) NSUInteger counter;
@property (nonatomic) NSDate *lastUsed; @property (nonatomic) NSDate *lastUsed;
@property (nonatomic) id<MPAlgorithm> algorithm; @property (nonatomic) id<MPAlgorithm> algorithm;
@property (nonatomic) NSArray *typeNames; @property (nonatomic) BOOL generated;
@property (nonatomic) NSUInteger typeIndex; @property (nonatomic) BOOL stored;
- (id)initWithEntity:(MPElementEntity *)entity; - (id)initWithEntity:(MPElementEntity *)entity;
- (MPElementEntity *)entityInContext:(NSManagedObjectContext *)moc; - (MPElementEntity *)entityInContext:(NSManagedObjectContext *)moc;

View File

@ -25,7 +25,6 @@
@implementation MPElementModel { @implementation MPElementModel {
NSManagedObjectID *_entityOID; NSManagedObjectID *_entityOID;
NSMutableDictionary *_typesByName;
BOOL _initialized; BOOL _initialized;
} }
@ -56,16 +55,7 @@
self.counter = [entity isKindOfClass:[MPElementGeneratedEntity class]]? [(MPElementGeneratedEntity *)entity counter]: 0; self.counter = [entity isKindOfClass:[MPElementGeneratedEntity class]]? [(MPElementGeneratedEntity *)entity counter]: 0;
// Find all password types and the index of the current type amongst them. // Find all password types and the index of the current type amongst them.
_typesByName = [NSMutableDictionary dictionary]; [entity resolveContentUsingKey:[MPAppDelegate_Shared get].key result:^(NSString *result) {
MPElementType type = self.type;
do {
[_typesByName setObject:@(type) forKey:[self.algorithm shortNameOfType:type]];
} while (self.type != (type = [self.algorithm nextType:type]));
self.typeNames = [_typesByName keysSortedByValueUsingSelector:@selector( compare: )];
self.typeIndex = [[[_typesByName allValues] sortedArrayUsingSelector:@selector( compare: )] indexOfObject:@(self.type)];
[entity.algorithm resolveContentForElement:entity usingKey:[MPAppDelegate_Shared get].key
result:^(NSString *result) {
PearlMainQueue( ^{ self.content = result; } ); PearlMainQueue( ^{ self.content = result; } );
}]; }];
} }
@ -107,20 +97,14 @@
}]; }];
} }
- (void)setTypeIndex:(NSUInteger)typeIndex { - (BOOL)generated {
if (typeIndex == _typeIndex) return self.type & MPElementTypeClassGenerated;
return; }
_typeIndex = typeIndex;
if (!_initialized) - (BOOL)stored {
// This wasn't a change to the entity.
return;
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) { return self.type & MPElementTypeClassStored;
[self setEntity:[[MPAppDelegate_Shared get] changeElement:[self entityInContext:context] saveInContext:context
toType:[_typesByName[self.typeNames[typeIndex]] unsignedIntegerValue]]];
}];
} }
@end @end

View File

@ -1,12 +1,12 @@
/** /**
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com) * Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
* *
* See the enclosed file LICENSE for license information (LGPLv3). If you did * 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 * not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
* *
* @author Maarten Billemont <lhunath@lyndir.com> * @author Maarten Billemont <lhunath@lyndir.com>
* @license http://www.gnu.org/licenses/lgpl-3.0.txt * @license http://www.gnu.org/licenses/lgpl-3.0.txt
*/ */
// //
// MPPasswordWindowController.h // MPPasswordWindowController.h
@ -30,10 +30,8 @@
@property(nonatomic, weak) IBOutlet NSSecureTextField *passwordField; @property(nonatomic, weak) IBOutlet NSSecureTextField *passwordField;
@property(nonatomic, weak) IBOutlet NSTableView *siteTable; @property(nonatomic, weak) IBOutlet NSTableView *siteTable;
@property(nonatomic, weak) IBOutlet NSProgressIndicator *progressView; @property(nonatomic, weak) IBOutlet NSProgressIndicator *progressView;
@property(nonatomic, weak) IBOutlet NSButton *typeButton;
@property(nonatomic, weak) IBOutlet NSButton *loginButton; @property(nonatomic, strong) IBOutlet NSBox *passwordTypesBox;
@property(nonatomic, weak) IBOutlet NSView *counterContainer; @property(nonatomic, weak) IBOutlet NSMatrix *passwordTypesMatrix;
@property(nonatomic, weak) IBOutlet NSStepper *counterStepper;
@property(nonatomic, weak) IBOutlet NSTextField *counterLabel;
@end @end

View File

@ -24,8 +24,12 @@
#import "MPAppDelegate_Key.h" #import "MPAppDelegate_Key.h"
#import "PearlProfiler.h" #import "PearlProfiler.h"
#define MPAlertIncorrectMP @"MPAlertIncorrectMP" #define MPAlertIncorrectMP @"MPAlertIncorrectMP"
#define MPAlertCreateSite @"MPAlertCreateSite" #define MPAlertCreateSite @"MPAlertCreateSite"
#define MPAlertChangeType @"MPAlertChangeType"
#define MPAlertChangeLogin @"MPAlertChangeLogin"
#define MPAlertChangeContent @"MPAlertChangeContent"
#define MPAlertDeleteSite @"MPAlertDeleteSite"
@interface MPPasswordWindowController() @interface MPPasswordWindowController()
@ -73,6 +77,12 @@
NSSearchFieldCell *siteFieldCell = self.siteField.cell; NSSearchFieldCell *siteFieldCell = self.siteField.cell;
siteFieldCell.searchButtonCell = nil; siteFieldCell.searchButtonCell = nil;
siteFieldCell.cancelButtonCell = nil; siteFieldCell.cancelButtonCell = nil;
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.colors = @[ (__bridge id)[NSColor whiteColor].CGColor, (__bridge id)[NSColor clearColor].CGColor ];
gradient.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable;
gradient.frame = self.siteTable.bounds;
self.siteTable.superview.superview.layer.mask = gradient;
} }
#pragma mark - NSResponder #pragma mark - NSResponder
@ -157,13 +167,75 @@
// "Create" button. // "Create" button.
[[MPMacAppDelegate get] addElementNamed:[self.siteField stringValue] completion:^(MPElementEntity *element) { [[MPMacAppDelegate get] addElementNamed:[self.siteField stringValue] completion:^(MPElementEntity *element) {
if (element) if (element)
[self updateElements]; PearlMainQueue( ^{ [self updateElements]; } );
}]; }];
break; break;
} }
case NSAlertThirdButtonReturn: default:
// "Cancel" button.
break; break;
}
}
if (contextInfo == MPAlertChangeType) {
switch (returnCode) {
case NSAlertFirstButtonReturn: {
// "Save" button.
MPElementType type = (MPElementType)[self.passwordTypesMatrix.selectedCell tag];
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPElementEntity *entity = [[MPMacAppDelegate get] changeElement:[self.selectedElement entityInContext:context]
saveInContext:context toType:type];
if ([entity isKindOfClass:[MPElementStoredEntity class]] && ![(MPElementStoredEntity *)entity contentObject].length)
PearlMainQueue( ^{
[self changePassword:nil];
} );
}];
break;
}
default:
break;
}
}
if (contextInfo == MPAlertChangeLogin) {
switch (returnCode) {
case NSAlertFirstButtonReturn: {
// "Save" button.
NSString *loginName = [(NSSecureTextField *)alert.accessoryView stringValue];
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPElementEntity *entity = [self.selectedElement entityInContext:context];
entity.loginName = loginName;
[context saveToStore];
}];
break;
}
default:
break;
}
}
if (contextInfo == MPAlertChangeContent) {
switch (returnCode) {
case NSAlertFirstButtonReturn: {
// "Save" button.
NSString *password = [(NSSecureTextField *)alert.accessoryView stringValue];
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPElementEntity *entity = [self.selectedElement entityInContext:context];
[entity.algorithm saveContent:password toElement:entity usingKey:[MPMacAppDelegate get].key];
[context saveToStore];
}];
break;
}
default:
break;
}
}
if (contextInfo == MPAlertDeleteSite) {
switch (returnCode) {
case NSAlertFirstButtonReturn: {
// "Delete" button.
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
[context deleteObject:[self.selectedElement entityInContext:context]];
[context saveToStore];
}];
break;
}
default: default:
break; break;
} }
@ -192,6 +264,80 @@
return [self.elementsController.selectedObjects firstObject]; return [self.elementsController.selectedObjects firstObject];
} }
#pragma mark - Actions
- (IBAction)deleteElement:(id)sender {
NSAlert *alert = [NSAlert new];
[alert addButtonWithTitle:@"Delete"];
[alert addButtonWithTitle:@"Cancel"];
[alert setMessageText:@"Delete Site?"];
[alert setInformativeText:strf( @"Do you want to delete the site named:\n\n%@", self.selectedElement.siteName )];
[alert beginSheetModalForWindow:self.window modalDelegate:self
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertDeleteSite];
}
- (IBAction)changeLogin:(id)sender {
NSAlert *alert = [NSAlert new];
[alert addButtonWithTitle:@"Save"];
[alert addButtonWithTitle:@"Cancel"];
[alert setMessageText:@"Change Login Name"];
[alert setInformativeText:strf( @"Enter the login name for:\n\n%@", self.selectedElement.siteName )];
NSTextField *loginField = [[NSTextField alloc] initWithFrame:NSMakeRect( 0, 0, 200, 22 )];
loginField.stringValue = self.selectedElement.loginName?: @"";
[loginField selectText:self];
[alert setAccessoryView:loginField];
[alert layout];
[alert beginSheetModalForWindow:self.window modalDelegate:self
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertChangeLogin];
}
- (IBAction)changePassword:(id)sender {
if (!self.selectedElement.stored)
return;
NSAlert *alert = [NSAlert new];
[alert addButtonWithTitle:@"Save"];
[alert addButtonWithTitle:@"Cancel"];
[alert setMessageText:@"Change Password"];
[alert setInformativeText:strf( @"Enter the new password for:\n\n%@", self.selectedElement.siteName )];
[alert setAccessoryView:[[NSSecureTextField alloc] initWithFrame:NSMakeRect( 0, 0, 200, 22 )]];
[alert layout];
[alert beginSheetModalForWindow:self.window modalDelegate:self
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertChangeContent];
}
- (IBAction)changeType:(id)sender {
MPElementModel *element = self.selectedElement;
NSArray *types = [element.algorithm allTypesStartingWith:MPElementTypeGeneratedPIN];
[self.passwordTypesMatrix renewRows:(NSInteger)[types count] columns:1];
for (NSUInteger t = 0; t < [types count]; ++t) {
MPElementType type = [types[t] unsignedIntegerValue];
NSString *title = [element.algorithm nameOfType:type];
if (type & MPElementTypeClassGenerated)
title = [element.algorithm generateContentNamed:element.siteName ofType:type
withCounter:element.counter usingKey:[MPMacAppDelegate get].key];
NSButtonCell *cell = [self.passwordTypesMatrix cellAtRow:(NSInteger)t column:0];
cell.tag = type;
cell.state = type == element.type? NSOnState: NSOffState;
cell.title = title;
}
NSAlert *alert = [NSAlert new];
[alert addButtonWithTitle:@"Save"];
[alert addButtonWithTitle:@"Cancel"];
[alert setMessageText:@"Change Password Type"];
[alert setInformativeText:strf( @"Choose a new password type for:\n\n%@", element.siteName )];
[alert setAccessoryView:self.passwordTypesBox];
[alert layout];
[alert beginSheetModalForWindow:self.window modalDelegate:self
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertChangeType];
}
#pragma mark - Private #pragma mark - Private
- (BOOL)handleCommand:(SEL)commandSelector { - (BOOL)handleCommand:(SEL)commandSelector {
@ -289,6 +435,9 @@
if (siteNameQueryRange.location == 0) if (siteNameQueryRange.location == 0)
self.siteField.currentEditor.selectedRange = NSMakeRange( siteNameQueryRange.length, siteName.length - siteNameQueryRange.length ); self.siteField.currentEditor.selectedRange = NSMakeRange( siteNameQueryRange.length, siteName.length - siteNameQueryRange.length );
NSRect selectedCellFrame = [self.siteTable frameOfCellAtColumn:0 row:((NSInteger)self.elementsController.selectionIndex)];
[[(NSClipView *)self.siteTable.superview animator] setBoundsOrigin:selectedCellFrame.origin];
} }
- (void)useSite { - (void)useSite {
@ -352,11 +501,16 @@
CGWindowID windowID = (CGWindowID)[self.window windowNumber]; CGWindowID windowID = (CGWindowID)[self.window windowNumber];
CGImageRef capturedImage = CGWindowListCreateImage( CGRectInfinite, kCGWindowListOptionOnScreenBelowWindow, windowID, CGImageRef capturedImage = CGWindowListCreateImage( CGRectInfinite, kCGWindowListOptionOnScreenBelowWindow, windowID,
kCGWindowImageBoundsIgnoreFraming ); kCGWindowImageBoundsIgnoreFraming );
if (CGImageGetWidth( capturedImage ) <= 1) {
wrn( @"Failed to capture screen image for window: %d", windowID );
return;
}
[profiler finishJob:@"captured window: %d, on screen: %@", windowID, self.window.screen]; [profiler finishJob:@"captured window: %d, on screen: %@", windowID, self.window.screen];
NSImage *screenImage = [[NSImage alloc] initWithCGImage:capturedImage size:NSMakeSize( NSImage *screenImage = [[NSImage alloc] initWithCGImage:capturedImage size:NSMakeSize(
CGImageGetWidth( capturedImage ) / self.window.backingScaleFactor, CGImageGetWidth( capturedImage ) / self.window.backingScaleFactor,
CGImageGetHeight( capturedImage ) / self.window.backingScaleFactor )]; CGImageGetHeight( capturedImage ) / self.window.backingScaleFactor )];
[profiler finishJob:@"image size: %@, bytes: %ld", NSStringFromSize( screenImage.size ), screenImage.TIFFRepresentation.length ]; [profiler finishJob:@"image size: %@, bytes: %ld", NSStringFromSize( screenImage.size ), screenImage.TIFFRepresentation.length];
NSImage *smallImage = [[NSImage alloc] initWithSize:NSMakeSize( NSImage *smallImage = [[NSImage alloc] initWithSize:NSMakeSize(
CGImageGetWidth( capturedImage ) / 20, CGImageGetWidth( capturedImage ) / 20,

View File

@ -1,23 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6154.17" systemVersion="13D65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5056" systemVersion="13D65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6154.17"/> <deployment defaultVersion="1080" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5056"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPPasswordWindowController"> <customObject id="-2" userLabel="File's Owner" customClass="MPPasswordWindowController">
<connections> <connections>
<outlet property="blurView" destination="Bwc-sd-6gm" id="wNV-0x-LJn"/> <outlet property="blurView" destination="Bwc-sd-6gm" id="wNV-0x-LJn"/>
<outlet property="counterContainer" destination="d3u-Ze-9uf" id="LOe-E4-MBC"/>
<outlet property="counterLabel" destination="NvO-kt-eZ2" id="rjP-S0-i3S"/>
<outlet property="counterStepper" destination="XgA-Vl-CKh" id="BYt-m6-c9i"/>
<outlet property="elementsController" destination="mcS-ik-b0n" id="cdF-BL-lfg"/> <outlet property="elementsController" destination="mcS-ik-b0n" id="cdF-BL-lfg"/>
<outlet property="inputLabel" destination="OnR-s6-d4P" id="p6G-Ut-cdu"/> <outlet property="inputLabel" destination="OnR-s6-d4P" id="p6G-Ut-cdu"/>
<outlet property="loginButton" destination="1Qo-iG-CQt" id="cDg-oK-faG"/>
<outlet property="passwordField" destination="iGR-wo-ual" id="sJN-aE-j7G"/> <outlet property="passwordField" destination="iGR-wo-ual" id="sJN-aE-j7G"/>
<outlet property="passwordTypesBox" destination="bZe-7q-i6q" id="Ai3-pt-i6K"/>
<outlet property="passwordTypesMatrix" destination="3fr-Fd-pxx" id="T8g-mS-lxP"/>
<outlet property="progressView" destination="oSh-Ec-8Nf" id="rob-p0-gr7"/> <outlet property="progressView" destination="oSh-Ec-8Nf" id="rob-p0-gr7"/>
<outlet property="siteField" destination="CnS-iI-dhr" id="nPo-Kb-YM2"/> <outlet property="siteField" destination="CnS-iI-dhr" id="nPo-Kb-YM2"/>
<outlet property="siteTable" destination="xvJ-5c-vDp" id="ClP-j8-DyI"/> <outlet property="siteTable" destination="xvJ-5c-vDp" id="ClP-j8-DyI"/>
<outlet property="typeButton" destination="vES-W5-m4x" id="r9n-pD-J8T"/>
<outlet property="window" destination="QvC-M9-y7g" id="dPy-F3-9rn"/> <outlet property="window" destination="QvC-M9-y7g" id="dPy-F3-9rn"/>
</connections> </connections>
</customObject> </customObject>
@ -52,7 +50,7 @@
</imageView> </imageView>
<secureTextField hidden="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iGR-wo-ual" userLabel="Password Field"> <secureTextField hidden="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iGR-wo-ual" userLabel="Password Field">
<rect key="frame" x="18" y="243" width="612" height="44"/> <rect key="frame" x="18" y="243" width="612" height="44"/>
<shadow key="shadow"> <shadow key="shadow" blurRadius="1">
<size key="offset" width="0.0" height="1"/> <size key="offset" width="0.0" height="1"/>
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/> <color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
</shadow> </shadow>
@ -69,12 +67,13 @@
</connections> </connections>
</secureTextField> </secureTextField>
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="31" horizontalPageScroll="10" verticalLineScroll="31" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bme-XK-MMc" userLabel="Sites Table"> <scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="31" horizontalPageScroll="10" verticalLineScroll="31" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bme-XK-MMc" userLabel="Sites Table">
<rect key="frame" x="68" y="0.0" width="512" height="203"/> <rect key="frame" x="68" y="80" width="512" height="123"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="e11-59-xSS"> <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="e11-59-xSS">
<rect key="frame" x="0.0" y="0.0" width="512" height="203"/> <rect key="frame" x="0.0" y="0.0" width="512" height="123"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="sourceList" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="29" rowSizeStyle="automatic" viewBased="YES" floatsGroupRows="NO" id="xvJ-5c-vDp"> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="sourceList" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="29" rowSizeStyle="automatic" viewBased="YES" floatsGroupRows="NO" id="xvJ-5c-vDp">
<rect key="frame" x="0.0" y="0.0" width="515" height="123"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/> <size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/> <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
@ -128,216 +127,6 @@
<outlet property="textField" destination="ydd-Rv-tra" id="lMV-D4-Ilq"/> <outlet property="textField" destination="ydd-Rv-tra" id="lMV-D4-Ilq"/>
</connections> </connections>
</tableCellView> </tableCellView>
<tableCellView id="hkT-y8-DWp">
<rect key="frame" x="1" y="32" width="512" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="vYa-zb-cyI">
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
<shadow key="shadow" blurRadius="1">
<size key="offset" width="0.0" height="1"/>
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
</shadow>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="yY1-r0-N1g">
<font key="font" size="24" name="HelveticaNeue-Thin"/>
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="hkT-y8-DWp" name="value" keyPath="objectValue.siteName" id="WQp-cM-h4I">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="delegate" destination="-2" id="LIk-1U-Zde"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstItem="vYa-zb-cyI" firstAttribute="top" secondItem="hkT-y8-DWp" secondAttribute="top" id="TdC-dO-fyC"/>
<constraint firstItem="vYa-zb-cyI" firstAttribute="leading" secondItem="hkT-y8-DWp" secondAttribute="leading" id="Wem-9D-r3d"/>
<constraint firstAttribute="bottom" secondItem="vYa-zb-cyI" secondAttribute="bottom" id="YOa-YX-enx"/>
<constraint firstAttribute="trailing" secondItem="vYa-zb-cyI" secondAttribute="trailing" id="mbT-JH-6Vy"/>
</constraints>
<connections>
<outlet property="textField" destination="vYa-zb-cyI" id="b9c-D1-FbZ"/>
</connections>
</tableCellView>
<tableCellView id="Kms-zM-eGe">
<rect key="frame" x="1" y="63" width="512" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="JFE-HN-Lsi">
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
<shadow key="shadow" blurRadius="1">
<size key="offset" width="0.0" height="1"/>
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
</shadow>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="6mS-zG-hgB">
<font key="font" size="24" name="HelveticaNeue-Thin"/>
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="Kms-zM-eGe" name="value" keyPath="objectValue.siteName" id="sYH-29-PCA">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="delegate" destination="-2" id="byp-zk-h1A"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstItem="JFE-HN-Lsi" firstAttribute="top" secondItem="Kms-zM-eGe" secondAttribute="top" id="5tv-2L-iXp"/>
<constraint firstAttribute="bottom" secondItem="JFE-HN-Lsi" secondAttribute="bottom" id="Byo-L3-Mbc"/>
<constraint firstItem="JFE-HN-Lsi" firstAttribute="leading" secondItem="Kms-zM-eGe" secondAttribute="leading" id="CE6-jh-ihK"/>
<constraint firstAttribute="trailing" secondItem="JFE-HN-Lsi" secondAttribute="trailing" id="eFA-Ky-69t"/>
</constraints>
<connections>
<outlet property="textField" destination="JFE-HN-Lsi" id="qzT-DE-5zx"/>
</connections>
</tableCellView>
<tableCellView id="k75-jo-lxr">
<rect key="frame" x="1" y="94" width="512" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="gSt-wm-ZDM">
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
<shadow key="shadow" blurRadius="1">
<size key="offset" width="0.0" height="1"/>
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
</shadow>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="geq-bi-s7L">
<font key="font" size="24" name="HelveticaNeue-Thin"/>
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="k75-jo-lxr" name="value" keyPath="objectValue.siteName" id="Dmf-GT-8RK">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="delegate" destination="-2" id="e9c-2s-wWe"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstItem="gSt-wm-ZDM" firstAttribute="top" secondItem="k75-jo-lxr" secondAttribute="top" id="4NN-16-v02"/>
<constraint firstAttribute="trailing" secondItem="gSt-wm-ZDM" secondAttribute="trailing" id="6TI-mL-sSX"/>
<constraint firstItem="gSt-wm-ZDM" firstAttribute="leading" secondItem="k75-jo-lxr" secondAttribute="leading" id="Hbf-qS-8yD"/>
<constraint firstAttribute="bottom" secondItem="gSt-wm-ZDM" secondAttribute="bottom" id="Q6g-Ia-djo"/>
</constraints>
<connections>
<outlet property="textField" destination="gSt-wm-ZDM" id="fa1-27-mZH"/>
</connections>
</tableCellView>
<tableCellView id="t8U-1Z-h8n">
<rect key="frame" x="1" y="125" width="512" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Cob-wz-Wen">
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
<shadow key="shadow" blurRadius="1">
<size key="offset" width="0.0" height="1"/>
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
</shadow>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="2Fb-pE-m65">
<font key="font" size="24" name="HelveticaNeue-Thin"/>
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="t8U-1Z-h8n" name="value" keyPath="objectValue.siteName" id="p6q-u4-RgE">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="delegate" destination="-2" id="axu-vi-h66"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="Cob-wz-Wen" secondAttribute="trailing" id="Ac3-Es-lgx"/>
<constraint firstAttribute="bottom" secondItem="Cob-wz-Wen" secondAttribute="bottom" id="Bxt-iZ-pl0"/>
<constraint firstItem="Cob-wz-Wen" firstAttribute="leading" secondItem="t8U-1Z-h8n" secondAttribute="leading" id="c2O-67-HlE"/>
<constraint firstItem="Cob-wz-Wen" firstAttribute="top" secondItem="t8U-1Z-h8n" secondAttribute="top" id="dlx-Qm-91r"/>
</constraints>
<connections>
<outlet property="textField" destination="Cob-wz-Wen" id="VbE-Br-LJL"/>
</connections>
</tableCellView>
<tableCellView id="eXo-Xn-hMI">
<rect key="frame" x="1" y="156" width="512" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="C8V-1i-OYe">
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
<shadow key="shadow" blurRadius="1">
<size key="offset" width="0.0" height="1"/>
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
</shadow>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="utk-lr-g1f">
<font key="font" size="24" name="HelveticaNeue-Thin"/>
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="eXo-Xn-hMI" name="value" keyPath="objectValue.siteName" id="LmO-EJ-Xia">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="delegate" destination="-2" id="4Xr-vN-sit"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="C8V-1i-OYe" secondAttribute="trailing" id="6xM-Mp-hXd"/>
<constraint firstItem="C8V-1i-OYe" firstAttribute="top" secondItem="eXo-Xn-hMI" secondAttribute="top" id="IzF-BP-IO2"/>
<constraint firstItem="C8V-1i-OYe" firstAttribute="leading" secondItem="eXo-Xn-hMI" secondAttribute="leading" id="ocn-mx-SJJ"/>
<constraint firstAttribute="bottom" secondItem="C8V-1i-OYe" secondAttribute="bottom" id="ru2-Y1-llM"/>
</constraints>
<connections>
<outlet property="textField" destination="C8V-1i-OYe" id="4gp-Wt-g17"/>
</connections>
</tableCellView>
<tableCellView id="QUf-ad-zO1">
<rect key="frame" x="1" y="187" width="512" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="igh-9a-0bT">
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
<shadow key="shadow" blurRadius="1">
<size key="offset" width="0.0" height="1"/>
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
</shadow>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="MAb-9S-rCJ">
<font key="font" size="24" name="HelveticaNeue-Thin"/>
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="QUf-ad-zO1" name="value" keyPath="objectValue.siteName" id="hX4-29-ubu">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="delegate" destination="-2" id="nfV-K0-dYN"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstItem="igh-9a-0bT" firstAttribute="top" secondItem="QUf-ad-zO1" secondAttribute="top" id="2BF-EK-A5v"/>
<constraint firstAttribute="trailing" secondItem="igh-9a-0bT" secondAttribute="trailing" id="STV-or-HzL"/>
<constraint firstAttribute="bottom" secondItem="igh-9a-0bT" secondAttribute="bottom" id="bcr-hu-uLW"/>
<constraint firstItem="igh-9a-0bT" firstAttribute="leading" secondItem="QUf-ad-zO1" secondAttribute="leading" id="sXz-wW-A1C"/>
</constraints>
<connections>
<outlet property="textField" destination="igh-9a-0bT" id="PE9-9y-aXJ"/>
</connections>
</tableCellView>
</prototypeCellViews> </prototypeCellViews>
</tableColumn> </tableColumn>
</tableColumns> </tableColumns>
@ -356,7 +145,7 @@
</constraints> </constraints>
<animations/> <animations/>
<scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="8wr-pu-1lc"> <scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="8wr-pu-1lc">
<rect key="frame" x="0.0" y="187" width="512" height="16"/> <rect key="frame" x="0.0" y="107" width="512" height="16"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="mcf-ST-XXI"> <scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="mcf-ST-XXI">
@ -394,39 +183,42 @@
<outlet property="delegate" destination="-2" id="2WA-uI-asx"/> <outlet property="delegate" destination="-2" id="2WA-uI-asx"/>
</connections> </connections>
</searchField> </searchField>
<button hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vES-W5-m4x" userLabel="Type Button"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vES-W5-m4x" userLabel="Type Button">
<rect key="frame" x="277" y="19" width="94" height="20"/> <rect key="frame" x="277" y="19" width="94" height="20"/>
<buttonCell key="cell" type="inline" title="Long Password" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Fom-sN-EtZ"> <buttonCell key="cell" type="inline" title="Long Password" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Fom-sN-EtZ">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="11" name="HelveticaNeue-Bold"/> <font key="font" size="11" name="HelveticaNeue-Bold"/>
<string key="keyEquivalent">p</string>
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</buttonCell> </buttonCell>
<connections> <connections>
<action selector="changeType:" target="-2" id="6Jj-7p-da9"/>
<binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="Hat-GU-hcQ"> <binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="Hat-GU-hcQ">
<dictionary key="options"> <dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string> <string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="mcS-ik-b0n" name="title" keyPath="selection.typeName" id="ezf-Bo-UJN"/> <binding destination="mcS-ik-b0n" name="title" keyPath="selection.typeName" id="Omj-MJ-oKy"/>
</connections> </connections>
</button> </button>
<customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="d3u-Ze-9uf" userLabel="Counter Container"> <customView translatesAutoresizingMaskIntoConstraints="NO" id="d3u-Ze-9uf" userLabel="Counter Container">
<rect key="frame" x="379" y="18" width="28" height="23"/> <rect key="frame" x="310" y="47" width="28" height="22"/>
<subviews> <subviews>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XgA-Vl-CKh" userLabel="Counter Stepper"> <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XgA-Vl-CKh" userLabel="Counter Stepper">
<rect key="frame" x="-3" y="-2" width="19" height="27"/> <rect key="frame" x="-3" y="-3" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="ikF-n4-xiI"/> <stepperCell key="cell" continuous="YES" alignment="left" minValue="1" maxValue="1000" doubleValue="1" id="ikF-n4-xiI"/>
<connections> <connections>
<binding destination="mcS-ik-b0n" name="value" keyPath="selection.counter" id="qmm-6z-boy"/> <binding destination="mcS-ik-b0n" name="value" keyPath="selection.counter" id="qmm-6z-boy"/>
</connections> </connections>
</stepper> </stepper>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NvO-kt-eZ2" userLabel="Counter Field"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NvO-kt-eZ2" userLabel="Counter Field">
<rect key="frame" x="19" y="3" width="11" height="17"/> <rect key="frame" x="19" y="2" width="11" height="19"/>
<shadow key="shadow" blurRadius="1"> <shadow key="shadow" blurRadius="1">
<size key="offset" width="0.0" height="1"/> <size key="offset" width="0.0" height="1"/>
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/> <color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
</shadow> </shadow>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="1" id="dhQ-bJ-rn3"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="1" id="dhQ-bJ-rn3">
<font key="font" size="11" name="HelveticaNeue-Medium"/> <font key="font" size="12" name="HelveticaNeue-Medium"/>
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/> <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
</textFieldCell> </textFieldCell>
@ -442,9 +234,7 @@
<constraint firstItem="NvO-kt-eZ2" firstAttribute="leading" secondItem="XgA-Vl-CKh" secondAttribute="trailing" constant="8" symbolic="YES" id="V9l-un-zYj"/> <constraint firstItem="NvO-kt-eZ2" firstAttribute="leading" secondItem="XgA-Vl-CKh" secondAttribute="trailing" constant="8" symbolic="YES" id="V9l-un-zYj"/>
<constraint firstAttribute="centerY" secondItem="XgA-Vl-CKh" secondAttribute="centerY" id="Ye6-AA-god"/> <constraint firstAttribute="centerY" secondItem="XgA-Vl-CKh" secondAttribute="centerY" id="Ye6-AA-god"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="XgA-Vl-CKh" secondAttribute="bottom" id="f3p-gK-Pzg"/> <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="XgA-Vl-CKh" secondAttribute="bottom" id="f3p-gK-Pzg"/>
<constraint firstItem="NvO-kt-eZ2" firstAttribute="top" relation="greaterThanOrEqual" secondItem="d3u-Ze-9uf" secondAttribute="top" id="pdR-fg-9FI"/>
<constraint firstItem="XgA-Vl-CKh" firstAttribute="top" relation="greaterThanOrEqual" secondItem="d3u-Ze-9uf" secondAttribute="top" id="sLs-IG-OES"/> <constraint firstItem="XgA-Vl-CKh" firstAttribute="top" relation="greaterThanOrEqual" secondItem="d3u-Ze-9uf" secondAttribute="top" id="sLs-IG-OES"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="NvO-kt-eZ2" secondAttribute="bottom" id="upD-lF-5lW"/>
<constraint firstItem="XgA-Vl-CKh" firstAttribute="leading" secondItem="d3u-Ze-9uf" secondAttribute="leading" id="vKj-dp-A0D"/> <constraint firstItem="XgA-Vl-CKh" firstAttribute="leading" secondItem="d3u-Ze-9uf" secondAttribute="leading" id="vKj-dp-A0D"/>
</constraints> </constraints>
<connections> <connections>
@ -453,7 +243,7 @@
<string key="NSValueTransformerName">NSNegateBoolean</string> <string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="mcS-ik-b0n" name="hidden2" keyPath="selection.counter" previousBinding="1HU-QK-FXC" id="gbL-I5-7g8"> <binding destination="mcS-ik-b0n" name="hidden2" keyPath="selection.generated" previousBinding="1HU-QK-FXC" id="AyD-tq-Gqc">
<dictionary key="options"> <dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="-1"/> <integer key="NSMultipleValuesPlaceholder" value="-1"/>
<integer key="NSNoSelectionPlaceholder" value="-1"/> <integer key="NSNoSelectionPlaceholder" value="-1"/>
@ -464,13 +254,16 @@
</binding> </binding>
</connections> </connections>
</customView> </customView>
<button hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Qo-iG-CQt" userLabel="Login Button"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Qo-iG-CQt" userLabel="Login Button">
<rect key="frame" x="155" y="19" width="114" height="20"/> <rect key="frame" x="155" y="19" width="114" height="20"/>
<buttonCell key="cell" type="inline" title="lhunath@lyndir.com" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="QFo-9y-aVe"> <buttonCell key="cell" type="inline" title="lhunath@lyndir.com" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="QFo-9y-aVe">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="11" name="HelveticaNeue-Bold"/> <font key="font" size="11" name="HelveticaNeue-Bold"/>
<string key="keyEquivalent">l</string>
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</buttonCell> </buttonCell>
<connections> <connections>
<action selector="changeLogin:" target="-2" id="vj4-nM-j0d"/>
<binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="8yw-hl-jLO"> <binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="8yw-hl-jLO">
<dictionary key="options"> <dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string> <string key="NSValueTransformerName">NSNegateBoolean</string>
@ -486,30 +279,77 @@
<progressIndicator hidden="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="oSh-Ec-8Nf"> <progressIndicator hidden="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="oSh-Ec-8Nf">
<rect key="frame" x="316" y="494" width="16" height="16"/> <rect key="frame" x="316" y="494" width="16" height="16"/>
</progressIndicator> </progressIndicator>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XuF-Sp-6JD" userLabel="Delete Button">
<rect key="frame" x="379" y="19" width="70" height="20"/>
<buttonCell key="cell" type="inline" title="Delete Site" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26m-of-YMQ">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="11" name="HelveticaNeue-Bold"/>
<string key="keyEquivalent">d</string>
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</buttonCell>
<connections>
<action selector="deleteElement:" target="-2" id="mVT-O6-KfN"/>
<binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="eqU-d2-XhQ">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="brI-fg-Kav" userLabel="Password Button">
<rect key="frame" x="270" y="46" width="108" height="20"/>
<buttonCell key="cell" type="inline" title="Change Password" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="FQu-fM-NWY">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="11" name="HelveticaNeue-Bold"/>
<string key="keyEquivalent">d</string>
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</buttonCell>
<connections>
<action selector="changePassword:" target="-2" id="oVC-Od-Ij2"/>
<binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="gxV-co-WNZ">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
<binding destination="mcS-ik-b0n" name="hidden2" keyPath="selection.stored" previousBinding="gxV-co-WNZ" id="CgR-BD-v6H">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
<integer key="NSNoSelectionPlaceholder" value="-1"/>
<integer key="NSNotApplicablePlaceholder" value="-1"/>
<integer key="NSNullPlaceholder" value="-1"/>
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
</connections>
</button>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstAttribute="bottom" secondItem="Bme-XK-MMc" secondAttribute="bottom" id="1kJ-cV-fhc"/> <constraint firstItem="brI-fg-Kav" firstAttribute="centerX" secondItem="vES-W5-m4x" secondAttribute="centerX" id="1tN-p4-2m4"/>
<constraint firstItem="Bme-XK-MMc" firstAttribute="top" secondItem="CnS-iI-dhr" secondAttribute="bottom" constant="40" id="1ta-BC-BdQ"/> <constraint firstItem="Bme-XK-MMc" firstAttribute="top" secondItem="CnS-iI-dhr" secondAttribute="bottom" constant="40" id="1ta-BC-BdQ"/>
<constraint firstAttribute="bottom" secondItem="Bwc-sd-6gm" secondAttribute="bottom" id="3fF-7g-c6C"/> <constraint firstAttribute="bottom" secondItem="Bwc-sd-6gm" secondAttribute="bottom" id="3fF-7g-c6C"/>
<constraint firstItem="vES-W5-m4x" firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="92S-HP-Vk7"/> <constraint firstItem="vES-W5-m4x" firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="92S-HP-Vk7"/>
<constraint firstItem="CnS-iI-dhr" firstAttribute="top" secondItem="OnR-s6-d4P" secondAttribute="bottom" constant="8" symbolic="YES" id="CGj-SL-Qhp"/> <constraint firstItem="CnS-iI-dhr" firstAttribute="top" secondItem="OnR-s6-d4P" secondAttribute="bottom" constant="8" symbolic="YES" id="CGj-SL-Qhp"/>
<constraint firstItem="vES-W5-m4x" firstAttribute="centerY" secondItem="XuF-Sp-6JD" secondAttribute="centerY" id="DPa-1n-QWJ"/>
<constraint firstAttribute="centerY" secondItem="iGR-wo-ual" secondAttribute="centerY" id="GZE-mX-kjj"/> <constraint firstAttribute="centerY" secondItem="iGR-wo-ual" secondAttribute="centerY" id="GZE-mX-kjj"/>
<constraint firstAttribute="centerY" secondItem="CnS-iI-dhr" secondAttribute="centerY" id="HjG-vb-3Qg"/> <constraint firstAttribute="centerY" secondItem="CnS-iI-dhr" secondAttribute="centerY" id="HjG-vb-3Qg"/>
<constraint firstItem="d3u-Ze-9uf" firstAttribute="leading" secondItem="vES-W5-m4x" secondAttribute="trailing" constant="8" symbolic="YES" id="Juf-Q3-pkt"/>
<constraint firstItem="iGR-wo-ual" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="20" symbolic="YES" id="KNz-B2-qfi"/> <constraint firstItem="iGR-wo-ual" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="20" symbolic="YES" id="KNz-B2-qfi"/>
<constraint firstItem="Bwc-sd-6gm" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" id="Kqb-ig-5cP"/> <constraint firstItem="Bwc-sd-6gm" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" id="Kqb-ig-5cP"/>
<constraint firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" constant="20" symbolic="YES" id="LW8-vu-scs"/> <constraint firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" constant="20" symbolic="YES" id="LW8-vu-scs"/>
<constraint firstAttribute="bottom" secondItem="Bme-XK-MMc" secondAttribute="bottom" constant="80" id="MbE-Oa-J9k"/>
<constraint firstAttribute="centerX" secondItem="OnR-s6-d4P" secondAttribute="centerX" id="Pun-kD-jgl"/> <constraint firstAttribute="centerX" secondItem="OnR-s6-d4P" secondAttribute="centerX" id="Pun-kD-jgl"/>
<constraint firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="Qqi-bu-q65"/> <constraint firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="Qqi-bu-q65"/>
<constraint firstItem="vES-W5-m4x" firstAttribute="centerX" secondItem="d3u-Ze-9uf" secondAttribute="centerX" id="YnC-cX-p8p"/>
<constraint firstItem="1Qo-iG-CQt" firstAttribute="centerY" secondItem="vES-W5-m4x" secondAttribute="centerY" id="ZeK-3S-ZWW"/> <constraint firstItem="1Qo-iG-CQt" firstAttribute="centerY" secondItem="vES-W5-m4x" secondAttribute="centerY" id="ZeK-3S-ZWW"/>
<constraint firstAttribute="centerX" secondItem="oSh-Ec-8Nf" secondAttribute="centerX" id="c28-5a-C45"/> <constraint firstAttribute="centerX" secondItem="oSh-Ec-8Nf" secondAttribute="centerX" id="c28-5a-C45"/>
<constraint firstItem="oSh-Ec-8Nf" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="20" symbolic="YES" id="cUB-xF-1Wr"/> <constraint firstItem="oSh-Ec-8Nf" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="20" symbolic="YES" id="cUB-xF-1Wr"/>
<constraint firstItem="vES-W5-m4x" firstAttribute="top" secondItem="d3u-Ze-9uf" secondAttribute="bottom" constant="8" symbolic="YES" id="d3h-VT-ilM"/>
<constraint firstItem="XuF-Sp-6JD" firstAttribute="leading" secondItem="vES-W5-m4x" secondAttribute="trailing" constant="8" symbolic="YES" id="d43-2g-dap"/>
<constraint firstAttribute="bottom" secondItem="vES-W5-m4x" secondAttribute="bottom" constant="20" symbolic="YES" id="eHI-Tn-bYD"/> <constraint firstAttribute="bottom" secondItem="vES-W5-m4x" secondAttribute="bottom" constant="20" symbolic="YES" id="eHI-Tn-bYD"/>
<constraint firstAttribute="trailing" secondItem="Bwc-sd-6gm" secondAttribute="trailing" id="gKu-JH-NDR"/> <constraint firstAttribute="trailing" secondItem="Bwc-sd-6gm" secondAttribute="trailing" id="gKu-JH-NDR"/>
<constraint firstItem="Bme-XK-MMc" firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="i7B-jz-xgm"/> <constraint firstItem="Bme-XK-MMc" firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="i7B-jz-xgm"/>
<constraint firstItem="vES-W5-m4x" firstAttribute="leading" secondItem="1Qo-iG-CQt" secondAttribute="trailing" constant="8" symbolic="YES" id="kTZ-lP-vnR"/> <constraint firstItem="vES-W5-m4x" firstAttribute="leading" secondItem="1Qo-iG-CQt" secondAttribute="trailing" constant="8" symbolic="YES" id="kTZ-lP-vnR"/>
<constraint firstAttribute="centerX" secondItem="iGR-wo-ual" secondAttribute="centerX" id="kXB-yZ-sur"/> <constraint firstAttribute="centerX" secondItem="iGR-wo-ual" secondAttribute="centerX" id="kXB-yZ-sur"/>
<constraint firstItem="d3u-Ze-9uf" firstAttribute="centerY" secondItem="vES-W5-m4x" secondAttribute="centerY" id="oyK-p1-dQM"/> <constraint firstItem="vES-W5-m4x" firstAttribute="top" secondItem="brI-fg-Kav" secondAttribute="bottom" constant="8" symbolic="YES" id="rCP-oh-rWr"/>
<constraint firstItem="Bwc-sd-6gm" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="tea-fv-b1S"/> <constraint firstItem="Bwc-sd-6gm" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="tea-fv-b1S"/>
</constraints> </constraints>
<backgroundFilters> <backgroundFilters>
@ -541,6 +381,71 @@ AAAAAAEGA
<binding destination="-2" name="contentArray" keyPath="elements" id="c96-Dv-HK1"/> <binding destination="-2" name="contentArray" keyPath="elements" id="c96-Dv-HK1"/>
</connections> </connections>
</arrayController> </arrayController>
<box autoresizesSubviews="NO" title="Password Types" borderType="line" titlePosition="noTitle" id="bZe-7q-i6q">
<rect key="frame" x="0.0" y="0.0" width="386" height="186"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<view key="contentView">
<rect key="frame" x="1" y="1" width="384" height="184"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" autorecalculatesCellSize="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3fr-Fd-pxx">
<rect key="frame" x="18" y="14" width="348" height="158"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<size key="cellSize" width="348" height="18"/>
<size key="intercellSpacing" width="4" height="2"/>
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="RW9-c9-I7v">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<cells>
<column>
<buttonCell type="radio" title="7486" imagePosition="left" alignment="left" tag="1" inset="2" id="QMg-MG-Ytg">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="Qux6" imagePosition="left" alignment="left" inset="2" id="KD6-NE-8e3">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="FIN60WCH" imagePosition="left" alignment="left" inset="2" id="e5D-HK-fHj">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="Qux6%Geg" imagePosition="left" alignment="left" inset="2" id="d0t-34-7Fx">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="QuxmDapiJiln3," imagePosition="left" alignment="left" inset="2" id="WD9-cz-7XK">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="F4*DVMC^zs1fEXfCwRyV" imagePosition="left" alignment="left" inset="2" id="mn3-kQ-wzW">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="Personal Password" imagePosition="left" alignment="left" inset="2" id="7qL-si-K4n">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<buttonCell type="radio" title="Device Private Password" imagePosition="left" alignment="left" inset="2" id="mwA-qD-0jD">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</column>
</cells>
</matrix>
</subviews>
</view>
<constraints>
<constraint firstAttribute="trailing" secondItem="3fr-Fd-pxx" secondAttribute="trailing" constant="16" id="Nnp-8v-Zcf"/>
<constraint firstItem="3fr-Fd-pxx" firstAttribute="top" secondItem="bZe-7q-i6q" secondAttribute="top" constant="11" id="VDj-5W-sPg"/>
<constraint firstItem="3fr-Fd-pxx" firstAttribute="leading" secondItem="bZe-7q-i6q" secondAttribute="leading" constant="16" id="phM-M0-PZT"/>
<constraint firstAttribute="bottom" secondItem="3fr-Fd-pxx" secondAttribute="bottom" constant="11" id="z2T-aP-O0g"/>
</constraints>
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</box>
</objects> </objects>
<resources> <resources>
<image name="small-screen" width="25" height="15.5"/> <image name="small-screen" width="25" height="15.5"/>