support the new whitelist

This commit is contained in:
Mitchell Livingston 2008-10-01 22:17:25 +00:00
parent bddf34d7a8
commit a616666541
3 changed files with 91 additions and 261 deletions

View File

@ -56,9 +56,9 @@
IBOutlet NSPopUpButton * fProxyTypePopUp;
IBOutlet NSTextField * fRPCPortField, * fRPCPasswordField;
IBOutlet NSTableView * fRPCAccessTable;
IBOutlet NSTableView * fRPCWhitelistTable;
NSMutableArray * fRPCWhitelistArray;
IBOutlet NSSegmentedControl * fRPCAddRemoveControl;
NSMutableArray * fRPCAccessArray;
}
+ (void) setHandle: (tr_handle *) handle;
@ -131,7 +131,7 @@
- (void) setRPCPassword: (id) sender;
- (void) updateRPCPassword;
- (void) setRPCPort: (id) sender;
- (void) updateRPCAccessList;
- (void) updateRPCWhitelist;
- (void) addRemoveRPCIP: (id) sender;
- (void) helpForPeers: (id) sender;

View File

@ -36,9 +36,6 @@
#define PROXY_SOCKS4 1
#define PROXY_SOCKS5 2
#define RPC_ACCESS_ALLOW 0
#define RPC_ACCESS_DENY 1
#define RPC_IP_ADD_TAG 0
#define RPC_IP_REMOVE_TAG 1
@ -128,14 +125,13 @@ tr_handle * fHandle;
[self updateProxyType];
[self updateProxyPassword];
//update rpc access list
//update rpc whitelist
[self updateRPCPassword];
fRPCAccessArray = [[fDefaults arrayForKey: @"RPCAccessList"] mutableCopy];
if (!fRPCAccessArray)
fRPCAccessArray = [[NSMutableArray arrayWithObject: [NSDictionary dictionaryWithObjectsAndKeys: @"127.0.0.1", @"IP",
[NSNumber numberWithBool: YES], @"Allow", nil]] retain];
[self updateRPCAccessList];
fRPCWhitelistArray = [[fDefaults arrayForKey: @"RPCWhitelist"] mutableCopy];
if (!fRPCWhitelistArray)
fRPCWhitelistArray = [[NSMutableArray arrayWithObject: @"127.0.0.1"] retain];
[self updateRPCWhitelist];
}
return self;
@ -152,7 +148,7 @@ tr_handle * fHandle;
[fPortChecker release];
}
[fRPCAccessArray release];
[fRPCWhitelistArray release];
[super dealloc];
}
@ -876,138 +872,111 @@ tr_handle * fHandle;
tr_sessionSetRPCPort(fHandle, port);
}
- (void) updateRPCAccessList
- (void) updateRPCWhitelist
{
NSMutableArray * components = [NSMutableArray arrayWithCapacity: [fRPCAccessArray count]];
NSEnumerator * enumerator = [fRPCAccessArray objectEnumerator];
NSDictionary * dict;
while ((dict = [enumerator nextObject]))
[components addObject: [NSString stringWithFormat: @"%c%@", [[dict objectForKey: @"Allow"] boolValue] ? '+' : '-',
[dict objectForKey: @"IP"]]];
NSString * string = [components componentsJoinedByString: @","];
tr_sessionSetRPCACL(fHandle, [string UTF8String]);
NSString * string = [fRPCWhitelistArray componentsJoinedByString: @","];
tr_sessionSetRPCWhitelist(fHandle, [string UTF8String]);
}
- (void) addRemoveRPCIP: (id) sender
{
//don't allow add/remove when currently adding - it leads to weird results
if ([fRPCAccessTable editedRow] != -1)
if ([fRPCWhitelistTable editedRow] != -1)
return;
if ([[sender cell] tagForSegment: [sender selectedSegment]] == RPC_IP_REMOVE_TAG)
{
[fRPCAccessArray removeObjectsAtIndexes: [fRPCAccessTable selectedRowIndexes]];
[fRPCAccessTable deselectAll: self];
[fRPCAccessTable reloadData];
[fRPCWhitelistArray removeObjectsAtIndexes: [fRPCWhitelistTable selectedRowIndexes]];
[fRPCWhitelistTable deselectAll: self];
[fRPCWhitelistTable reloadData];
[fDefaults setObject: fRPCAccessArray forKey: @"RPCAccessList"];
[self updateRPCAccessList];
[fDefaults setObject: fRPCWhitelistArray forKey: @"RPCWhitelist"];
[self updateRPCWhitelist];
}
else
{
[fRPCAccessArray addObject: [NSDictionary dictionaryWithObjectsAndKeys: @"", @"IP",
[NSNumber numberWithBool: YES], @"Allow", nil]];
[fRPCAccessTable reloadData];
[fRPCWhitelistArray addObject: @""];
[fRPCWhitelistTable reloadData];
int row = [fRPCAccessArray count] - 1;
[fRPCAccessTable selectRow: row byExtendingSelection: NO];
[fRPCAccessTable editColumn: 0 row: row withEvent: nil select: YES];
int row = [fRPCWhitelistArray count] - 1;
[fRPCWhitelistTable selectRow: row byExtendingSelection: NO];
[fRPCWhitelistTable editColumn: 0 row: row withEvent: nil select: YES];
}
}
- (NSInteger) numberOfRowsInTableView: (NSTableView *) tableView
{
return [fRPCAccessArray count];
return [fRPCWhitelistArray count];
}
- (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) tableColumn row: (NSInteger) row
{
NSDictionary * dict = [fRPCAccessArray objectAtIndex: row];
NSString * ident = [tableColumn identifier];
if ([ident isEqualToString: @"Permission"])
{
int allow = [[dict objectForKey: @"Allow"] boolValue] ? RPC_ACCESS_ALLOW : RPC_ACCESS_DENY;
return [NSNumber numberWithInt: allow];
}
else
return [dict objectForKey: @"IP"];
return [fRPCWhitelistArray objectAtIndex: row];
}
- (void) tableView: (NSTableView *) tableView setObjectValue: (id) object forTableColumn: (NSTableColumn *) tableColumn
row: (NSInteger) row
{
NSDictionary * oldDict = [fRPCAccessArray objectAtIndex: row];
NSString * ident = [tableColumn identifier];
if ([ident isEqualToString: @"Permission"])
{
NSNumber * allow = [NSNumber numberWithBool: [object intValue] == RPC_ACCESS_ALLOW];
NSDictionary * newDict = [NSDictionary dictionaryWithObjectsAndKeys: [oldDict objectForKey: @"IP"], @"IP", allow, @"Allow", nil];
[fRPCAccessArray replaceObjectAtIndex: row withObject: newDict];
}
else
{
NSArray * components = [object componentsSeparatedByString: @"."];
NSMutableArray * newComponents = [NSMutableArray arrayWithCapacity: 4];
NSArray * components = [object componentsSeparatedByString: @"."];
NSMutableArray * newComponents = [NSMutableArray arrayWithCapacity: 4];
//create better-formatted ip string
BOOL valid = false;
if ([components count] == 4)
//create better-formatted ip string
BOOL valid = false;
if ([components count] == 4)
{
valid = true;
NSEnumerator * enumerator = [components objectEnumerator];
NSString * component;
while ((component = [enumerator nextObject]))
{
valid = true;
NSEnumerator * enumerator = [components objectEnumerator];
NSString * component;
while ((component = [enumerator nextObject]))
if ([component isEqualToString: @"*"])
[newComponents addObject: component];
else
{
if ([component isEqualToString: @"*"])
[newComponents addObject: component];
int num = [component intValue];
if (num >= 0 && num < 256)
[newComponents addObject: [[NSNumber numberWithInt: num] stringValue]];
else
{
int num = [component intValue];
if (num >= 0 && num < 256)
[newComponents addObject: [[NSNumber numberWithInt: num] stringValue]];
else
{
valid = false;
break;
}
valid = false;
break;
}
}
}
if (valid)
{
NSString * newIP = [newComponents componentsJoinedByString: @"."];
NSDictionary * newDict = [NSDictionary dictionaryWithObjectsAndKeys: newIP, @"IP",
[oldDict objectForKey: @"Allow"], @"Allow", nil];
[fRPCAccessArray replaceObjectAtIndex: row withObject: newDict];
NSSortDescriptor * descriptor = [[[NSSortDescriptor alloc] initWithKey: @"IP" ascending: YES
selector: @selector(compareNumeric:)] autorelease];
[fRPCAccessArray sortUsingDescriptors: [NSArray arrayWithObject: descriptor]];
}
else
{
NSBeep();
if ([[oldDict objectForKey: @"IP"] isEqualToString: @""])
[fRPCAccessArray removeObjectAtIndex: row];
}
[fRPCAccessTable deselectAll: self];
[fRPCAccessTable reloadData];
}
[fDefaults setObject: fRPCAccessArray forKey: @"RPCAccessList"];
[self updateRPCAccessList];
NSString * newIP;
if (valid)
{
newIP = [newComponents componentsJoinedByString: @"."];
//don't allow the same ip address
if ([fRPCWhitelistArray containsObject: newIP] && ![[fRPCWhitelistArray objectAtIndex: row] isEqualToString: newIP])
valid = false;
}
if (valid)
{
[fRPCWhitelistArray replaceObjectAtIndex: row withObject: newIP];
[fRPCWhitelistArray sortUsingSelector: @selector(compareNumeric:)];
}
else
{
NSBeep();
if ([[fRPCWhitelistArray objectAtIndex: row] isEqualToString: @""])
[fRPCWhitelistArray removeObjectAtIndex: row];
}
[fRPCWhitelistTable deselectAll: self];
[fRPCWhitelistTable reloadData];
[fDefaults setObject: fRPCWhitelistArray forKey: @"RPCWhitelist"];
[self updateRPCWhitelist];
}
- (void) tableViewSelectionDidChange: (NSNotification *) notification
{
[fRPCAddRemoveControl setEnabled: [fRPCAccessTable numberOfSelectedRows] > 0 forSegment: RPC_IP_REMOVE_TAG];
[fRPCAddRemoveControl setEnabled: [fRPCWhitelistTable numberOfSelectedRows] > 0 forSegment: RPC_IP_REMOVE_TAG];
}
- (void) helpForPeers: (id) sender

View File

@ -3,11 +3,12 @@
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">9E17</string>
<string key="IBDocument.InterfaceBuilderVersion">670</string>
<string key="IBDocument.InterfaceBuilderVersion">672</string>
<string key="IBDocument.AppKitVersion">949.33</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1523"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -34,7 +35,7 @@
<object class="NSMutableString" key="NSViewClass">
<characters key="NS.bytes">View</characters>
</object>
<string key="NSWindowContentMaxSize">{10000, 10000}</string>
<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
<object class="NSView" key="NSWindowView" id="334064964">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
@ -2573,7 +2574,7 @@ AAABAAAAAQ</bytes>
<string key="NSExtension">NSResponder</string>
</object>
<object class="NSCustomView" id="204700639">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -2582,7 +2583,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{497, 12}, {21, 23}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="893670578">
<int key="NSCellFlags">67239424</int>
@ -2606,7 +2606,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{42, 34}, {90, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="514153614">
<int key="NSCellFlags">67239424</int>
@ -2623,7 +2622,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{135, 33}, {357, 18}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="127446013">
<int key="NSCellFlags">67239424</int>
@ -2647,7 +2645,6 @@ AAABAAAAAQ</bytes>
<object class="NSPSMatrix" key="NSDrawMatrix"/>
<string key="NSFrame">{{319, 279}, {16, 16}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<int key="NSpiFlags">28938</int>
<double key="NSMaxValue">1.000000e+02</double>
</object>
@ -2668,7 +2665,6 @@ AAABAAAAAQ</bytes>
</object>
<string key="NSFrame">{{320, 280}, {14, 14}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="270102740">
<int key="NSCellFlags">130560</int>
@ -2689,7 +2685,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{134, 279}, {124, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="941628063">
<int key="NSCellFlags">67239424</int>
@ -2706,7 +2701,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{135, 255}, {171, 18}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="633401664">
<int key="NSCellFlags">67239424</int>
@ -2729,7 +2723,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{135, 200}, {271, 18}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="20752657">
<int key="NSCellFlags">67239424</int>
@ -2752,7 +2745,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{263, 277}, {50, 22}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="453443006">
<int key="NSCellFlags">-1804468671</int>
@ -2819,7 +2811,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{205, 145}, {50, 22}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1001442911">
<int key="NSCellFlags">-1804468671</int>
@ -2886,7 +2877,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{134, 239}, {238, 14}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="67017561">
<int key="NSCellFlags">67239424</int>
@ -2903,7 +2893,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{339, 279}, {179, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="931894024">
<int key="NSCellFlags">67239424</int>
@ -2920,7 +2909,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{71, 279}, {61, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="475516915">
<int key="NSCellFlags">67239424</int>
@ -2937,7 +2925,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{88, 201}, {44, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="582281809">
<int key="NSCellFlags">67239424</int>
@ -2954,7 +2941,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{205, 171}, {259, 22}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1051431853">
<int key="NSCellFlags">-1804468671</int>
@ -2972,7 +2958,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{176, 73}, {68, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="954130018">
<int key="NSCellFlags">67239424</int>
@ -2989,7 +2974,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{173, 99}, {71, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="108838744">
<int key="NSCellFlags">67239424</int>
@ -3006,7 +2990,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{153, 173}, {47, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="677732006">
<int key="NSCellFlags">67239424</int>
@ -3023,7 +3006,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{166, 147}, {34, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="63707525">
<int key="NSCellFlags">67239424</int>
@ -3040,7 +3022,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{266, 147}, {60, 17}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="502542662">
<int key="NSCellFlags">67239424</int>
@ -3057,7 +3038,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{154, 123}, {187, 18}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="296153825">
<int key="NSCellFlags">67239424</int>
@ -3080,7 +3060,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{249, 71}, {184, 22}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSecureTextFieldCell" key="NSCell" id="669471795">
<int key="NSCellFlags">343014976</int>
@ -3102,7 +3081,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{249, 97}, {184, 22}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="731460553">
<int key="NSCellFlags">-1804468671</int>
@ -3120,7 +3098,6 @@ AAABAAAAAQ</bytes>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{328, 141}, {99, 26}}</string>
<reference key="NSSuperview" ref="204700639"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="326179066">
<int key="NSCellFlags">-2076049856</int>
@ -3183,13 +3160,11 @@ AAABAAAAAQ</bytes>
</object>
</object>
<string key="NSFrameSize">{535, 319}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<string key="NSClassName">NSView</string>
<string key="NSExtension">NSResponder</string>
</object>
<object class="NSCustomView" id="810116101">
<nil key="NSNextResponder"/>
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -3437,7 +3412,7 @@ AAABAAAAAQ</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTableColumn" id="419711322">
<string key="NSIdentifier">IP</string>
<double key="NSWidth">2.460000e+02</double>
<double key="NSWidth">3.280000e+02</double>
<double key="NSMinWidth">4.000000e+01</double>
<double key="NSMaxWidth">1.000000e+03</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
@ -3445,11 +3420,11 @@ AAABAAAAAQ</bytes>
<int key="NSCellFlags2">0</int>
<string key="NSContents">IP Address</string>
<reference key="NSSupport" ref="26"/>
<object class="NSColor" key="NSBackgroundColor" id="245857249">
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
</object>
<object class="NSColor" key="NSTextColor" id="1020040622">
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">headerTextColor</string>
@ -3470,70 +3445,6 @@ AAABAAAAAQ</bytes>
<bool key="NSIsEditable">YES</bool>
<reference key="NSTableView" ref="173651346"/>
</object>
<object class="NSTableColumn" id="618951019">
<string key="NSIdentifier">Permission</string>
<double key="NSWidth">7.900000e+01</double>
<double key="NSMinWidth">4.000000e+01</double>
<double key="NSMaxWidth">1.000000e+03</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<int key="NSCellFlags">75628032</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Permission</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="245857249"/>
<reference key="NSTextColor" ref="1020040622"/>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="946327133">
<int key="NSCellFlags">-2076049856</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="173651346"/>
<int key="NSButtonFlags">100679935</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
<object class="NSMenuItem" key="NSMenuItem" id="879941939">
<reference key="NSMenu" ref="23202450"/>
<string key="NSTitle">Allow</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
<reference key="NSOnImage" ref="550412468"/>
<reference key="NSMixedImage" ref="32510707"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="946327133"/>
</object>
<bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="23202450">
<string key="NSTitle">OtherViews</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="879941939"/>
<object class="NSMenuItem" id="790371608">
<reference key="NSMenu" ref="23202450"/>
<string key="NSTitle">Deny</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="550412468"/>
<reference key="NSMixedImage" ref="32510707"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="946327133"/>
</object>
</object>
</object>
<int key="NSPreferredEdge">3</int>
<bool key="NSUsesItemFromMenu">YES</bool>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
<int key="NSResizingMask">3</int>
<bool key="NSIsResizeable">YES</bool>
<bool key="NSIsEditable">YES</bool>
<reference key="NSTableView" ref="173651346"/>
</object>
</object>
<double key="NSIntercellSpacingWidth">3.000000e+00</double>
<double key="NSIntercellSpacingHeight">2.000000e+00</double>
@ -3722,6 +3633,7 @@ AAABAAAAAQ</bytes>
</object>
</object>
<string key="NSFrameSize">{535, 444}</string>
<reference key="NSSuperview"/>
<string key="NSClassName">NSView</string>
<string key="NSExtension">NSResponder</string>
</object>
@ -5439,14 +5351,6 @@ AAABAAAAAQ</bytes>
</object>
<int key="connectionID">1537</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fRPCAccessTable</string>
<reference key="source" ref="511492310"/>
<reference key="destination" ref="173651346"/>
</object>
<int key="connectionID">1538</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">addRemoveRPCIP:</string>
@ -6591,6 +6495,14 @@ AAABAAAAAQ</bytes>
</object>
<int key="connectionID">1745</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fRPCWhitelistTable</string>
<reference key="source" ref="511492310"/>
<reference key="destination" ref="173651346"/>
</object>
<int key="connectionID">1746</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@ -8354,7 +8266,6 @@ AAABAAAAAQ</bytes>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="419711322"/>
<reference ref="618951019"/>
</object>
<reference key="parent" ref="122119447"/>
</object>
@ -8372,44 +8283,6 @@ AAABAAAAAQ</bytes>
<reference key="object" ref="927132215"/>
<reference key="parent" ref="419711322"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1524</int>
<reference key="object" ref="618951019"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="946327133"/>
</object>
<reference key="parent" ref="173651346"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1528</int>
<reference key="object" ref="946327133"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="23202450"/>
</object>
<reference key="parent" ref="618951019"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1529</int>
<reference key="object" ref="23202450"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="879941939"/>
<reference ref="790371608"/>
</object>
<reference key="parent" ref="946327133"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1530</int>
<reference key="object" ref="879941939"/>
<reference key="parent" ref="23202450"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1531</int>
<reference key="object" ref="790371608"/>
<reference key="parent" ref="23202450"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1522</int>
<reference key="object" ref="520862816"/>
@ -9082,17 +8955,11 @@ AAABAAAAAQ</bytes>
<string>1521.IBPluginDependency</string>
<string>1522.IBPluginDependency</string>
<string>1523.IBPluginDependency</string>
<string>1524.IBPluginDependency</string>
<string>1526.IBPluginDependency</string>
<string>1528.IBPluginDependency</string>
<string>1529.IBEditorWindowLastContentRect</string>
<string>1529.IBPluginDependency</string>
<string>153.IBEditorWindowLastContentRect</string>
<string>153.IBPluginDependency</string>
<string>153.ImportedFromIB2</string>
<string>153.editorWindowContentRectSynchronizationRect</string>
<string>1530.IBPluginDependency</string>
<string>1531.IBPluginDependency</string>
<string>1534.IBPluginDependency</string>
<string>1534.IBSegmentedControlTracker.RoundRobinState</string>
<string>1534.IBSegmentedControlTracker.WasGrowing</string>
@ -9484,17 +9351,11 @@ AAABAAAAAQ</bytes>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{499, 504}, {327, 37}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{289, 658}, {535, 226}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="761722050"/>
<string>{{149, 524}, {539, 226}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="8"/>
<reference ref="8"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -9801,7 +9662,7 @@ AAABAAAAAQ</bytes>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">1745</int>
<int key="maxID">1746</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -10018,10 +9879,10 @@ AAABAAAAAQ</bytes>
<string>fProxyTypePopUp</string>
<string>fQueueDownloadField</string>
<string>fQueueSeedField</string>
<string>fRPCAccessTable</string>
<string>fRPCAddRemoveControl</string>
<string>fRPCPasswordField</string>
<string>fRPCPortField</string>
<string>fRPCWhitelistTable</string>
<string>fRatioStopField</string>
<string>fRemoteView</string>
<string>fSpeedLimitDownloadField</string>
@ -10056,10 +9917,10 @@ AAABAAAAAQ</bytes>
<string>NSPopUpButton</string>
<string>NSTextField</string>
<string>NSTextField</string>
<string>NSTableView</string>
<string>NSSegmentedControl</string>
<string>NSTextField</string>
<string>NSTextField</string>
<string>NSTableView</string>
<string>NSTextField</string>
<string>NSView</string>
<string>NSTextField</string>