diff --git a/Application/PlaybackController.m b/Application/PlaybackController.m
index 9cdf26df0..512812e18 100644
--- a/Application/PlaybackController.m
+++ b/Application/PlaybackController.m
@@ -198,7 +198,7 @@ double linearToLogarithmic(double linear)
- (IBAction)prev:(id)sender
{
- if ([playlistController prev] == nil)
+ if ([playlistController prev] == NO)
return;
[self stop:self];
diff --git a/Playlist/PlaylistController.h b/Playlist/PlaylistController.h
index fc2601041..3a49098fc 100644
--- a/Playlist/PlaylistController.h
+++ b/Playlist/PlaylistController.h
@@ -41,6 +41,9 @@
- (void)setRepeat:(BOOL)r;
- (BOOL)repeat;
+- (PlaylistEntry *)getNextEntry:(PlaylistEntry *)pe;
+- (PlaylistEntry *)getPrevEntry:(PlaylistEntry *)pe;
+
/* Methods for undoing various actions */
- (NSUndoManager *)undoManager;
diff --git a/Spotlight/SpotlightPanel.xib b/Spotlight/SpotlightPanel.xib
index 53d77ce98..8ff071e14 100644
--- a/Spotlight/SpotlightPanel.xib
+++ b/Spotlight/SpotlightPanel.xib
@@ -8,7 +8,7 @@
352.00
6
- System
+ System
headerTextColor
3
@@ -130,12 +130,12 @@
337772096
2048
- Text Cell
+ Text Cell
6
-
+
controlBackgroundColor
3
@@ -144,7 +144,7 @@
6
-
+
controlTextColor
@@ -165,7 +165,7 @@
6
-
+
headerColor
3
@@ -177,7 +177,7 @@
337772096
2048
-
+
@@ -203,7 +203,7 @@
337772096
2048
-
+
@@ -310,7 +310,7 @@
337772096
67110912
-
+
@@ -326,7 +326,7 @@
6
-
+
gridColor
3
@@ -363,7 +363,7 @@
-2147483392
- {{0, 213}, {440, 15}}
+ {{-100, -100}, {440, 15}}
1
@@ -392,7 +392,7 @@
- 560
+ 528
@@ -417,7 +417,7 @@
1
6
-
+
textBackgroundColor
@@ -482,7 +482,7 @@
6
-
+
controlColor
@@ -781,29 +781,29 @@
161
+
+
+ addToPlaylist:
+
+
+
+ 163
+
- contentArray: query.results
+ contentArray: query.results
-
+
contentArray
query.results
2
- 162
-
-
-
- addToPlaylist:
-
-
-
- 163
+ 166
@@ -1209,14 +1209,35 @@
- 163
+ 166
YES
- NSObject
-
+ PlaylistLoader
+ NSObject
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ playlistController
+ PlaylistController
+
+
+ IBProjectSource
+ Playlist/PlaylistLoader.h
+
+
+
+ SpotlightPlaylistView
+ PlaylistView
YES
@@ -1236,8 +1257,160 @@
- IBProjectSource
- ThirdParty/UKKQueue/UKFileWatcher.h
+
+ Spotlight/SpotlightPlaylistView.h
+
+
+
+ PlaylistController
+ DNDArrayController
+
+ YES
+
+ YES
+ clear:
+ clearFilterPredicate:
+ showEntryInFinder:
+ takeRepeatFromObject:
+ takeShuffleFromObject:
+
+
+ YES
+ id
+
+
+
+
+
+
+
+ YES
+
+ YES
+ entriesController
+ playlistLoader
+
+
+ YES
+ EntriesController
+ PlaylistLoader
+
+
+
+
+ Playlist/PlaylistController.h
+
+
+
+ TrackingSlider
+ NSSlider
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
+ Utils/TrackingSlider.h
+
+
+
+ SpotlightPlaylistController
+ PlaylistController
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ spotlightWindowController
+ SpotlightWindowController
+
+
+
+ Spotlight/SpotlightPlaylistController.h
+
+
+
+ SpotlightWindowController
+ NSWindowController
+
+ addToPlaylist:
+
+
+
+ YES
+
+ YES
+ pathControl
+ playlistController
+ playlistLoader
+
+
+ YES
+ NSPathControl
+ NSArrayController
+ PlaylistLoader
+
+
+
+
+ Spotlight/SpotlightWindowController.h
+
+
+
+ PlaylistView
+ NSTableView
+
+ YES
+
+ YES
+ scrollToCurrentEntry:
+ shufflePlaylist:
+ sortByPath:
+ toggleColumn:
+
+
+ YES
+
+
+
+
+
+
+
+ YES
+
+ YES
+ playbackController
+ playlistController
+
+
+ YES
+ PlaybackController
+ PlaylistController
+
+
+
+
+ Playlist/PlaylistView.h
@@ -1262,85 +1435,7 @@
-
- ThirdParty/UKKQueue/UKMainThreadProxy.h
-
-
-
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
-
- ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h
-
-
-
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
-
- ThirdParty/NDHotKeys/NDHotKeyEvent.h
-
-
-
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
-
+
ThirdParty/AppleRemote/AppleRemote.h
@@ -1366,256 +1461,114 @@
-
+
+ ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h
+
+
+
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
+ ThirdParty/UKKQueue/UKMainThreadProxy.h
+
+
+
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
+ ThirdParty/NDHotKeys/NDHotKeyEvent.h
+
+
+
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
+ ThirdParty/UKKQueue/UKFileWatcher.h
+
+
+
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
ThirdParty/UKKQueue/UKKQueue.h
-
- DNDArrayController
- NSArrayController
-
- YES
-
- YES
-
-
- YES
-
-
-
- tableView
- NSTableView
-
-
-
- Playlist/DNDArrayController.h
-
-
-
- PlaylistView
- NSTableView
-
- YES
-
- YES
- scrollToCurrentEntry:
- shufflePlaylist:
- sortByPath:
- toggleColumn:
-
-
- YES
- id
-
-
-
-
-
-
- YES
-
- YES
- playbackController
- playlistController
-
-
- YES
- PlaybackController
- PlaylistController
-
-
-
-
- Playlist/PlaylistView.h
-
-
-
- TrackingSlider
- NSSlider
-
- YES
-
- YES
-
-
- YES
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
-
- Utils/TrackingSlider.h
-
-
-
- SpotlightWindowController
- NSWindowController
-
-
-
-
-
- YES
-
- YES
- pathControl
- playlistController
- playlistLoader
-
-
- YES
- NSPathControl
- NSArrayController
- PlaylistLoader
-
-
-
-
- Spotlight/SpotlightWindowController.h
-
-
-
- SpotlightPlaylistView
- PlaylistView
-
- YES
-
- YES
-
-
- YES
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
-
- Spotlight/SpotlightPlaylistView.h
-
-
-
- PlaylistLoader
-
-
- YES
-
- YES
-
-
- YES
-
-
-
- playlistController
- PlaylistController
-
-
-
- Playlist/PlaylistLoader.h
-
-
-
- EntriesController
-
-
- YES
-
- YES
-
-
- YES
-
-
-
- YES
-
- YES
-
-
- YES
-
-
-
-
- Playlist/EntriesController.h
-
-
-
- PlaylistController
- DNDArrayController
-
- YES
-
- YES
- clear:
- clearFilterPredicate:
- showEntryInFinder:
- takeRepeatFromObject:
- takeShuffleFromObject:
-
-
- YES
-
-
-
-
-
-
-
-
- YES
-
- YES
- entriesController
- playlistLoader
-
-
- YES
- EntriesController
- PlaylistLoader
-
-
-
-
- Playlist/PlaylistController.h
-
-
-
- SpotlightPlaylistController
- PlaylistController
-
- YES
-
- YES
-
-
- YES
-
-
-
- spotlightWindowController
- SpotlightWindowController
-
-
-
- Spotlight/SpotlightPlaylistController.h
-
-
PlaybackController
@@ -1637,27 +1590,31 @@
prev:
resume:
seek:
+ skipToNextAlbum:
+ skipToPreviousAlbum:
stop:
toggleShowTimeRemaining:
YES
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1684,10 +1641,57 @@
-
+
Application/PlaybackController.h
+
+ DNDArrayController
+ NSArrayController
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ tableView
+ NSTableView
+
+
+
+ Playlist/DNDArrayController.h
+
+
+
+ EntriesController
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
+ Playlist/EntriesController.h
+
+
0
@@ -1701,19 +1705,19 @@ ASIBKQEqAS0BNwFKAUsBUwFUAVkBXgFhAWkBagFrAW4BcgF7AXwBgQGCAYUBigGLAY0BkAGZAZoBoAGh
AaYBpwGqAbEBugG7AcEBwgHJAdQB1QHcAd0BewHlAe8B8AH2AfcB/gIHAggCDgIPAhYCHwIgAiYCJwIu
AjICNwI4AjsCPAI/AkACQwJPAlACUQJUAl0CXgEeAmICYwJmAm8CcAKCAocCiAKTApQClQKeAp8CowKs
Aq0CrgD8Aq8CswK0ArcCuwLEAsUCzgLPAtQC1QLXAuEC5gLnAugC7ALtAvgC+wL+AwEACwMCAwQDBQMG
-AwkDHgMmAzwDPQM+A0kDSgNMA04DTwNTA1gDWQNeA18DZANlA2oDawNuA3MDdAN5A3oDfwOAA4oDiwOM
-A40DkAOXA5gDmQOaA6MDpAOlA6sDrAOuA7YDtwO4A74DxgPHA8gDzgPWA9cD2APeA+YD5wPoA+4D9gP3
-A/gD/gQGBAcECAQOBBYEFwQYBB4EHwQgBEIERQRGBEgEagSNBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7
-BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNUE2gUPBUQFRQVGBUcFSAFm
-BUkFSgVLBUwFTQBXBU4FTwVQBVEFUgVTAJAFVAVVBVYFVwVYBVkFWgVbBVwFXQVeBV8AVgVgBWEFYgVj
-BWQFZQVmBWcFaAVpBWoFawVsBW0FbgVvBXAFcQV0BXcFelUkbnVsbN8QEgANAA4ADwAQABEAEgATABQA
+AwkDHgMmAycDKwMwAzEDNAM5A08DUANRA1wDXQNfA2EDYgNnA2gDbQNuA3MDdAN5A3oDfwOAA4wDjQOO
+A48DlQOWA5gDmwOjA6QDpQOrA7MDtAO1A7sDwwPEA8UDywPTA9QD1QPbA+ID4wPkA+wD7QPuA/QD+wP8
+A/0D/gQGBAcECAQOBA8EEAQYBBkEGgQgBEIERQRGBEgEagSNBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7
+BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNUE2gUPBUQFRQVGBUcFSAVJ
+BUoFSwVMBU0AVgVOAWYFTwVQBVEFUgVTBVQAkAVVBVYFVwVYBVkFWgVbBVwFXQVeBV8FYAVhBWIFYwVk
+BWUFZgVnBWgFaQVqAFcFawVsBW0FbgVvBXAFcQV0BXcFelUkbnVsbN8QEgANAA4ADwAQABEAEgATABQA
FQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMFZOU1Jv
b3RWJGNsYXNzXU5TT2JqZWN0c0tleXNfEA9OU0NsYXNzZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlP
aWRzVmFsdWVzXU5TQ29ubmVjdGlvbnNbTlNOYW1lc0tleXNbTlNGcmFtZXdvcmtdTlNDbGFzc2VzS2V5
c1pOU09pZHNLZXlzXU5TTmFtZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlDb25uZWN0b3JzXU5TRm9u
dE1hbmFnZXJfEBBOU1Zpc2libGVXaW5kb3dzXxAPTlNPYmplY3RzVmFsdWVzXxAXTlNBY2Nlc3NpYmls
aXR5T2lkc0tleXNZTlNOZXh0T2lkXE5TT2lkc1ZhbHVlc4ACgQFDgOSBAQyBAUKAnYDpgAWBAQuBAQ2A
-6oEBQIAAgAaA6IEBQRClgQEO0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA18QGVNwb3RsaWdodFdpbmRv
+6oEBQIAAgAaA6IEBQRCogQEO0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA18QGVNwb3RsaWdodFdpbmRv
d0NvbnRyb2xsZXLSADcAOAA5ADpYJGNsYXNzZXNaJGNsYXNzbmFtZaIAOgA7Xk5TQ3VzdG9tT2JqZWN0
WE5TT2JqZWN0XxAQSUJDb2NvYUZyYW1ld29ya9IADgA+AD8AQFpOUy5vYmplY3RzgJGhAEGAB9wAQwAO
AEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYACtcTlNXaW5kb3dWaWV3XE5T
@@ -1735,7 +1739,7 @@ pQA7Vk5TRm9udFDSADcAOACoAKmkAKkAqgB2ADtcTlNCdXR0b25DZWxsXE5TQWN0aW9uQ2VsbNIANwA4
AKwAraUArQCuAK8AsAA7WE5TQnV0dG9uWU5TQ29udHJvbFZOU1ZpZXdbTlNSZXNwb25kZXLfEA8AXwCy
AA4AdQCzALQAtQBgALYAYQBjAGQAtwC4ALkATgC7ALwAvQC+AL8AwADBAMIAwwBlAE4AxgDHAMdbTlNI
U2Nyb2xsZXJYTlNzRmxhZ3NcTlNDb3JuZXJWaWV3XxAQTlNIZWFkZXJDbGlwVmlld1xOU1Njcm9sbEFt
-dHNbTlNWU2Nyb2xsZXJdTlNOZXh0S2V5Vmlld11OU0NvbnRlbnRWaWV3gAyAbIBxgHARAjCAJYAigBpP
+dHNbTlNWU2Nyb2xsZXJdTlNOZXh0S2V5Vmlld11OU0NvbnRlbnRWaWV3gAyAbIBxgHARAhCAJYAigBpP
EBAAAAAAAAAAAEGYAABBmAAAEQESgA2ADIBogBuAG9IADgA+AG0Ay4BgpQDHAMYAuwDAAL+AG4BogGyA
IoAl2wBfAA4AdQDSAGAAYQDTAGMA1ABkALgAcADWANcAVgDYANkA2gBlANwAcADaWU5TY3ZGbGFnc1lO
U0RvY1ZpZXdZTlNCR0NvbG9ygBmAZ4BmgBwRCQCAHYANgDeAGYAd0gAOAD4AbQDhgGChANqAHd8QFwBf
@@ -1789,155 +1793,155 @@ d2FwcGVyXxAVe3swLCAxN30sIHs0NDAsIDIxMX190gA3ADgCQQJCpAJCAK8AsAA7Wk5TQ2xpcFZpZXfZ
AF8CRAAOAHUAYQBjAkUAZAJGAHAAcAJJAkoBJgBlAkwAcAJOWE5TVGFyZ2V0WE5TQWN0aW9uWU5TUGVy
Y2VudIAZgBmAa4BpgA2AaoAZIz/qN4SgAAAAXxAUe3s4NSwgMTd9LCB7MTUsIDY4fX1cX2RvU2Nyb2xs
ZXI60gA3ADgCUgJTpQJTAK4ArwCwADtaTlNTY3JvbGxlctoAXwJEAA4AdQCzAGEAYwJFAGQCRgBwAHAC
-SQJYAPwBJgBlAkwAcAJcgBmAGYBrgG2ADYBqgBkjP+2kYQAAAABfEBV7ezAsIDIxM30sIHs0NDAsIDE1
-fX3SAA4APgBtAmCAYKEA94AhXxAWe3syMCwgNDR9LCB7NDQwLCAyMjh9fdIANwA4AmQCZaQCZQCvALAA
-O1xOU1Njcm9sbFZpZXfYAF8ADgB1AHYAYQB3AGMAZABOAmgCaQJqAmsAfQBlAE6ADICFgHOAdBEBCgmA
-DYAMXxAWe3syMCwgMjgyfSwgezMxMywgMjJ9fd0AggAOAnEA6ACHAIgAiQCLAnICcwJ0AnUBTAJ2AncC
-eAJ5AI8AlABxAn0A/AB9An8CgAF6XxASTlNDYW5jZWxCdXR0b25DZWxsXxAQTlNUZXh0QmV6ZWxTdHls
-ZV8QEU5TRHJhd3NCYWNrZ3JvdW5kXxASTlNTZWFyY2hCdXR0b25DZWxsXxAQTlNNYXhpbXVtUmVjZW50
-cxIUcf5AgISAeoB1gBaAE4ByEhAABAAJgHcQ/4A61QAOAWABWgFiAWMBXAGjAWYChQFogC+ARIB2gDFf
-EBN0ZXh0QmFja2dyb3VuZENvbG9y3AJEAIIADgCEAIUAhgCHAIkAigCLAkUAjAJqAooAjgKMAPMAjwKO
-AHECkADzApECkoB0EgAB/gCAFxBLgBaAeIByEQGQgHkSCERA/1ZzZWFyY2hfEBNfc2VhcmNoRmllbGRT
-ZWFyY2g63QJEAIIADgCEAIUAhgKWAIcAiQCKAIsCRQCMAmoCigCOAowA8wCPApoCmwBxApAA8wKdApJf
-ECNOU0FjY2Vzc2liaWxpdHlPdmVycmlkZGVuQXR0cmlidXRlc4B0gBeAFoB8gHuAcoCDVWNsZWFy0gAO
-AD4AbQKhgGChAqKAfdMADgKkAD4CpQKmAqlXTlMua2V5c4CCogKnAqiAfoB/ogKqAquAgICBXUFYRGVz
-Y3JpcHRpb25fEClOU0FjY2Vzc2liaWxpdHlFbmNvZGVkQXR0cmlidXRlc1ZhbHVlVHlwZVZjYW5jZWzS
-ADcAOAKwArGjArECsgA7XxATTlNNdXRhYmxlRGljdGlvbmFyeVxOU0RpY3Rpb25hcnlfEBNfc2VhcmNo
-RmllbGRDYW5jZWw60gA3ADgCtQK2pQK2AXEAqgB2ADtfEBFOU1NlYXJjaEZpZWxkQ2VsbNIANwA4ArgC
-uaYCuQK6AK4ArwCwADtdTlNTZWFyY2hGaWVsZFtOU1RleHRGaWVsZNgAXwAOAHUAdgBhAHcAYwBkAE4C
-vQK+Ar8CwAB9AGUAToAMgIyAh4CIEQEhCYANgAxfEBR7ezg4LCAxNH0sIHs5NiwgMTd9fdgAggAOAOgA
-hwCIAIkAiwFMAsYBdALIAskAlAByAswBehIEAf5AgDyAioCJgBOAhhIQQAQAgDpcU2VhcmNoIFBhdGg6
-1QAOAWABWgFiAWMBXAF+AWYC0gFogC+AOYCLgDFcY29udHJvbENvbG9y0gA3ADgC1gK6pQK6AK4ArwCw
-ADvZAF8ADgB1AHYC2ABhAHcAYwBkAE4C2gLbAtwC3QLAAH0AZQBOW05TRHJhZ1R5cGVzgAyAloCSgJOA
-jgmADYAM0gAOAD4APwLjgJGiAuQC5YCPgJBfEBlBcHBsZSBVUkwgcGFzdGVib2FyZCB0eXBlXxAVTlNG
-aWxlbmFtZXNQYm9hcmRUeXBl0gA3ADgC6QLqowLqAusAO1xOU011dGFibGVTZXRVTlNTZXRfEBZ7ezE4
-OSwgMTB9LCB7MjcxLCAyNn192ALuAIIADgCIAIkAiwLvAvAAVgLxAvIAlABzAvUC9gBzW05TUGF0aFN0
-eWxlXxAUTlNQYXRoQ29tcG9uZW50Q2VsbHNaTlNEZWxlZ2F0ZRIUIf4BgJWAE4CNEYAAgJSAjdIADgA+
-AG0C+oBgoNIANwA4AvwC/aQC/QCqAHYAO1pOU1BhdGhDZWxs0gA3ADgC/wMApQMAAK4ArwCwADtdTlNQ
-YXRoQ29udHJvbFp7NDgwLCAzMjB90gA3ADgDAwCvowCvALAAO18QFXt7MCwgMH0sIHsxMjgwLCA3Nzh9
-fVp7NDAwLCAyNzZ90gA3ADgDBwMIogMIADtfEBBOU1dpbmRvd1RlbXBsYXRl0gAOAD4AbQMLgGCvEBID
-DAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx2AnoCogKqArICugLGAs4C1gLeAvIDAgMaA
-yoDOgNKA1oDagN7UAA4DHwMgAyEDIgMjANoDJV1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyA
-p4CfgB2AptwDJwAOAygA5gMpAyoDKwMsAy0AMgMuAy8AfQD0AH0DMwB9AzUDNgM3AH0DOQB9AH1fEBpO
-U0ZpbHRlclJlc3RyaWN0c0luc2VydGlvbl8QFE5TUHJlc2VydmVzU2VsZWN0aW9uWk5TRWRpdGFibGVf
-EA9fTlNNYW5hZ2VkUHJveHlfEBFOU09iamVjdENsYXNzTmFtZV5OU0RlY2xhcmVkS2V5c18QIk5TQ2xl
-YXJzRmlsdGVyUHJlZGljYXRlT25JbnNlcnRpb25fEBhOU1NlbGVjdHNJbnNlcnRlZE9iamVjdHNfEBZO
-U0F2b2lkc0VtcHR5U2VsZWN0aW9uCYBlCYChCYCkgKOAogmAoAkJXxAbU3BvdGxpZ2h0UGxheWxpc3RD
-b250cm9sbGVyXxARTlNBcnJheUNvbnRyb2xsZXLSAA4APgBtA0CAYKgBUAFDAekBlAG1AgIBzgIagCyA
-KoBSgD+AR4BXgEyAXF1QbGF5bGlzdEVudHJ50QAOA0uApdIANwA4A00DKqIDKgA7WmRhdGFTb3VyY2XS
-ADcAOANQA1GjA1EDUgA7XxAUTlNOaWJPdXRsZXRDb25uZWN0b3JeTlNOaWJDb25uZWN0b3LUAA4DHwMg
-AyEDIgDaAyMDV4CngB2An4CpWXRhYmxlVmlld9QADgMfAyADIQMiAyMAHwNdgKeAn4ACgKtfEBJwbGF5
-bGlzdENvbnRyb2xsZXLUAA4DHwMgAyEDIgBxAEEDY4CngHKAB4CtXxAVaW5pdGlhbEZpcnN0UmVzcG9u
-ZGVy1AAOAx8DIAMhA2YAHwBvA2mAsIACgA+Ar15hZGRUb1BsYXlsaXN0OtIANwA4A2wDbaMDbQNSADtf
-EBVOU05pYkNvbnRyb2xDb25uZWN0b3LUAA4DHwMgAyEDIgAfAyMDcoCngAKAn4CyXxAZc3BvdGxpZ2h0
-V2luZG93Q29udHJvbGxlctQADgMfAyADIQMiAHMAHwN4gKeAjYACgLRbcGF0aENvbnRyb2zUAA4DHwMg
-AyEDIgBBAB8DfoCngAeAAoC2VndpbmRvd9cADgMfA4EDggMgAyEDgwOEAB8DhgOHAHEDiQBWWU5TS2V5
-UGF0aFlOU0JpbmRpbmdfEBxOU05pYkJpbmRpbmdDb25uZWN0b3JWZXJzaW9ugLuAAoC6gLmAcoC4XxAT
-dmFsdWU6IHNlYXJjaFN0cmluZ1V2YWx1ZVxzZWFyY2hTdHJpbmfSADcAOAOOA4+jA48DUgA7XxAVTlNO
-aWJCaW5kaW5nQ29ubmVjdG9y1wAOAx8DgQOCAyADIQODA4QAHwOTA5QDIwOWAFaAu4ACgL+AvoCfgL1f
-EBtjb250ZW50QXJyYXk6IHF1ZXJ5LnJlc3VsdHNcY29udGVudEFycmF5XXF1ZXJ5LnJlc3VsdHPYAA4D
-HwOBA4IDIAMhA5sDgwOEAyMDngOHATYDoQOiAFZZTlNPcHRpb25zgLuAn4DCgLmAW4DBgMNfEBx2YWx1
-ZTogYXJyYW5nZWRPYmplY3RzLnRyYWNrXxAVYXJyYW5nZWRPYmplY3RzLnRyYWNr0wAOAqQAPgOmA6cD
-qYDFoQOogMShAquAgV8QG05TQ29uZGl0aW9uYWxseVNldHNFZGl0YWJsZdIANwA4A60CsqICsgA72AAO
-Ax8DgQOCAyADIQObA4MDhAMjA7EDhwEwA7QDtQBWgLuAn4DIgLmAKYDHgMlfEBx2YWx1ZTogYXJyYW5n
-ZWRPYmplY3RzLnRpdGxlXxAVYXJyYW5nZWRPYmplY3RzLnRpdGxl0wAOAqQAPgOmA7oDvIDFoQOogMSh
-AquAgdgADgMfA4EDggMgAyEDmwODA4QDIwPBA4cBMwPEA8UAVoC7gJ+AzIC5gEuAy4DNXxAddmFsdWU6
-IGFycmFuZ2VkT2JqZWN0cy5sZW5ndGhfEBZhcnJhbmdlZE9iamVjdHMubGVuZ3Ro0wAOAqQAPgOmA8oD
-zIDFoQOogMShAquAgdgADgMfA4EDggMgAyEDmwODA4QDIwPRA4cBMQPUA9UAVoC7gJ+A0IC5gD6Az4DR
-XxAddmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5hcnRpc3RfEBZhcnJhbmdlZE9iamVjdHMuYXJ0aXN00wAO
-AqQAPgOmA9oD3IDFoQOogMShAquAgdgADgMfA4EDggMgAyEDmwODA4QDIwPhA4cBNAPkA+UAVoC7gJ+A
-1IC5gFGA04DVXxAbdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy55ZWFyXxAUYXJyYW5nZWRPYmplY3RzLnll
-YXLTAA4CpAA+A6YD6gPsgMWhA6iAxKECq4CB2AAOAx8DgQOCAyADIQObA4MDhAMjA/EDhwE1A/QD9QBW
-gLuAn4DYgLmAVoDXgNlfEBx2YWx1ZTogYXJyYW5nZWRPYmplY3RzLmdlbnJlXxAVYXJyYW5nZWRPYmpl
-Y3RzLmdlbnJl0wAOAqQAPgOmA/oD/IDFoQOogMShAquAgdgADgMfA4EDggMgAyEDmwODA4QDIwQBA4cB
-MgQEBAUAVoC7gJ+A3IC5gEaA24DdXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5hbGJ1bV8QFWFycmFu
-Z2VkT2JqZWN0cy5hbGJ1bdMADgKkAD4DpgQKBAyAxaEDqIDEoQKrgIHYAA4DHwOBA4IDIAMhA5sDgwOE
-AB8EEQOHAHMEFAQVAFaAu4ACgOCAuYCNgN+A4V8QGnZhbHVlOiBzcG90bGlnaHRTZWFyY2hQYXRoXxAT
-c3BvdGxpZ2h0U2VhcmNoUGF0aNMADgKkAD4DpgQaBByAxaEEG4DioQQdgONfEBZOU1ZhbHVlVHJhbnNm
-b3JtZXJOYW1lXxAWU3RyaW5nVG9VUkxUcmFuc2Zvcm1lctIADgA+BCEEIoDnrxAfAtwCHAQlAHABRQHR
-ATABNgBBANoAewK/AMYATgJqAZYBNABxATEDIwBvALsBMwEyAbcB7AE1AHMCBQD3AHKAk4BfgOWAGYA1
-gE+AKYBbgAeAHYARgIiAaIAMgHSARYBRgHKAPoCfgA+AbIBLgEaASoBVgFaAjYBagCGAhtIADgAyADME
-RIAEgOZdTlNBcHBsaWNhdGlvbtIANwA4BEcCMaICMQA70gAOAD4EIQRKgOevEB8AcwE2AB8ATgEwATMA
-2gDaAB8AcABvAHIAcABBAHEBMQDaAE4A2gAfAE4AcADaANoBMgE0ANoATgE1AHAAToCNgFuAAoAMgCmA
-S4AdgB2AAoAZgA+AhoAZgAeAcoA+gB2ADIAdgAKADIAZgB2AHYBGgFGAHYAMgFaAGYAM0gAOAD4EIQRs
-gOevECAC3AIcBCUAcAFFAdEBMAE2AEEA2gDGAHsCvwBOAmoBlgMjAHEBNAExAG8AuwEzATIAHwD3ATUA
-cwHsAbcCBQBygJOAX4DlgBmANYBPgCmAW4AHgB2AaIARgIiADIB0gEWAn4BygFGAPoAPgGyAS4BGgAKA
-IYBWgI2AVYBKgFqAhtIADgA+BCEEj4DnrxAgBJAEkQSSBJMElASVBJYElwSYBJkEmgSbBJwEnQSeBJ8E
-oAShBKIEowSkBKUEpgSnBKgEqQSqBKsErAStBK4Er4DrgOyA7YDugO+A8IDxgPKA84D0gPWA9oD3gPiA
-+YD6gPuA/ID9gP6A/4EBAIEBAYEBAoEBA4EBBIEBBYEBBoEBB4EBCIEBCYEBCllQYXRoIENlbGxfEB1U
-ZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktMVtBcHBsaWNhdGlvbltTY3JvbGwgVmlld18QG1RleHQg
-RmllbGQgQ2VsbCAoVGV4dCBDZWxsKV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS00XxAUVGFi
-bGUgQ29sdW1uICh0aXRsZSlfEBRUYWJsZSBDb2x1bW4gKHRyYWNrKV8QG1BhbmVsIChPcGVuIGZyb20g
-U3BvdGxpZ2h0KV8QSlNwb3RsaWdodCBQbGF5bGlzdCBWaWV3IChUaXRsZSwgQXJ0aXN0LCBBbGJ1bSwg
-TGVuZ3RoLCBZZWFyLCBHZW5yZSwgVHJhY2spXxARVmVydGljYWwgU2Nyb2xsZXJfEB1CdXR0b24gQ2Vs
-bCAoQWRkIHRvIFBsYXlsaXN0KV8QHlRleHQgRmllbGQgQ2VsbCAoU2VhcmNoIFBhdGg6KVxDb250ZW50
-IFZpZXdfEBFTZWFyY2ggRmllbGQgQ2VsbF8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS0zXxAd
-U3BvdGxpZ2h0IFBsYXlsaXN0IENvbnRyb2xsZXJcU2VhcmNoIEZpZWxkXxATVGFibGUgQ29sdW1uICh5
-ZWFyKV8QFVRhYmxlIENvbHVtbiAoYXJ0aXN0KV8QHVB1c2ggQnV0dG9uIChBZGQgdG8gUGxheWxpc3Qp
-XxATSG9yaXpvbnRhbCBTY3JvbGxlcl8QFVRhYmxlIENvbHVtbiAobGVuZ3RoKV8QFFRhYmxlIENvbHVt
-biAoYWxidW0pXEZpbGUncyBPd25lcl8QEVRhYmxlIEhlYWRlciBWaWV3XxAUVGFibGUgQ29sdW1uIChn
-ZW5yZSlfEBpQb3AgVXAgUGF0aCBDb250cm9sIFdpZGdldF8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBD
-ZWxsKS0yXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTVfEB1UZXh0IEZpZWxkIENlbGwgKFRl
-eHQgQ2VsbCktNl8QGlN0YXRpYyBUZXh0IChTZWFyY2ggUGF0aDop0gAOAD4EIQTSgOeiANoDI4AdgJ/S
-AA4APgQhBNeA56IBAwM5gB6AoNIADgA+BCEE3IDnrxAyAtwEJQBwAUUBNgBBAHsCvwMZAxUCagGWATQB
-MQBvALsDGwIFAB8A9wMSAhwDDQHRAxQDEQEwAx0A2gDGAw8DEwBOAxADHAMaAxgDIwBxAw4BMwEyAbcB
-7AMXAHMBNQMWAwwAcoCTgOWAGYA1gFuAB4ARgIiAzoC8gHSARYBRgD6AD4BsgNaAWoACgCGAs4BfgKiA
-T4C3gLGAKYDegB2AaICsgLWADICugNqA0oDKgJ+AcoCqgEuARoBKgFWAxoCNgFaAwICegIbSAA4APgQh
-BRGA568QMgUSBRMFFAUVBRYCqwUYBRkFGgUbBRwFHQUeBR8FIAUhBSIFIwUkBSUFJgUnBSgFKQUqBSsF
-LAUtBS4FLwUwBTEFMgUzBTQFNQU2BTcFOAU5BToFOwU8BT0FPgU/BUAFQQVCBUOBAQ+BARCBARGBARKB
-AROAgYEBFIEBFYEBFoEBF4EBGIEBGYEBGoEBG4EBHIEBHYEBHoEBH4EBIIEBIYEBIoEBI4EBJIEBJYEB
-JoEBJ4EBKIEBKYEBKoEBK4EBLIEBLYEBLoEBL4EBMIEBMYEBMoEBM4EBNIEBNYEBNoEBN4EBOIEBOYEB
-OoEBO4EBPIEBPYEBPoEBPxBZE//////////9EBgQJRAdEFAQaBCiEDgQJxAiEAUQGhBmECsQpBCfECwQ
-lRApEJoQoBAkEJ0QHBAbED0QSBCjEGUQXhBpEBAQNxChECAQIRAoECoQXRBYEB4QaxCXEE/SAA4APgBt
-BXOAYKDSAA4APgQhBXaA56DSAA4APgQhBXmA56DSADcAOAV7BXyiBXwAO15OU0lCT2JqZWN0RGF0YQAI
-ABkAIgAnADEAOgA/AEQAUgBUAGYC8gL4A0MDSgNRA18DcQONA5sDpwOzA8EDzAPaA/YEBAQXBCkEQwRN
-BFoEXARfBGEEZARnBGkEawRtBHAEcwR1BHgEegR8BH4EgQSDBIYEjwSbBJ0EnwS7BMQEzQTYBN0E7AT1
-BQgFEQUcBR4FIQUjBVQFYQVuBXwFhgWUBa0FugXMBeAF6gX2BfgF+gX8Bf4GAwYFBgcGCQYLBg0GDwYR
-BiwGQgZKBlUGcgaEBo8GmAakBq0GuQa7Br0GvwbCBsQGxgbIBtEG0wbeBuAG4gbkBuYG6AcJBxEHGAci
-ByQHJgcoByoHLQcuBzAHMgdMB30HiQefB7QHwwfVB+AH6gf4CAoIFwglCCoILAguCDAIMgg0CDYIOAg6
-CDwIQQhKCFwIbQh0CHsIhAiGCI8IkQiUCKEIqgivCLYItwjACMkI1gjjCOwI9wkACQoJEQkdCVwJaAlx
-CX4JkQmeCaoJuAnGCcgJygnMCc4J0QnTCdUJ1wnqCe0J7wnxCfMJ9Qn3CgAKAgoNCg8KEQoTChUKFwpE
-Ck4KWApiCmQKZgpoCmoKbQpvCnEKcwp1CncKgAqCCoUKhwrmCwgLEgsoCzULSQteC3gLlAuvC74Lygvp
-C/gMBAwGDAgMCgwTDBUMFwwZDBoMHAwlDCcMMAwzDDUMNgw4DDoMPAw+DEAMQgxEDE0MZQxxDHwMmQyb
-DJ0MnwyhDKMMpQzSDNQM1gzYDNoM3AzeDOAM4gzkDOYM8Az5DQINFg0vDTENMw01DT4NQA1CDVkNYg1r
-DXkNgg2EDZMNlQ2XDZkNmw2dDZ8NoQ3KDdkN5g3zDfsOBg4VDiAOKw4sDi4OMA4yDjsOPQ4/DkgOUQ5T
-DlkOdg6CDocOiQ6LDo0Ojw6RDpcOqA6qDrMOtQ64DsUO0g7aDtwO6A7xDvYO/g8TDx8PLQ8vDzEPMw81
-DzcPPg9QD10PXw9iD2sPdg+KD5wPvQ/CD8QPxg/ID8oPzA/PD9EP2w/wD/IP9A/2D/gQERAeECAQLBBB
-EEMQRRBHEEkQXBBlEG4QdxB8EIoQsxC0ELYQuBC6EMMQxRDOENAQ1xD0EPYQ+BD6EPwQ/hEFERoRHBEe
-ESARIhEuETsRPRFAEWERYxFlEWcRaRFrEW0RlhGXEZkRmxGdEaYRqBGxEbMRuRHWEdgR2hHcEd4R4BHm
-EgcSCRILEg0SDxIREhMSQBJJEkoSSxJNEk8SURJaElwSZRJnEm4SixKNEo8SkRKTEpgSmhKhEsISxBLG
-EsgSyhLMEtES0xMAEwETAhMEEwYTCBMRExMTHBMeEyMTQBNCE0QTRhNIE0oTTxNwE3ITdBN2E3gTehN8
-E6kTqhOrE60TrxOxE7oTvBO+E8QT4RPjE+UT5xPpE+sT8RQSFBQUFhQYFBoUHBQeFEcUSBRKFEwUThRX
-FFkUYhRkFGoUhxSJFIsUjRSPFJEUlxS4FLoUvBS+FMAUwhTEFM0U1BTjFOsVABUCFQQVBhUIFRIVHxUh
-FSYVPRVGFUsVWhVyFXsVhBWPFbQVvRXGFdAV0hXUFdYV2BXaFdwV3hXnFf4WCxYUFh8WKhZTFlUWVxZZ
-FlsWXRZfFmEWahaCFosWjRaQFpIWqxa0Fr0WyhbrFu0W7xbxFvMW9hb3FvkW+xcUF0kXXhdxF4UXmhet
-F7IXtBe2F7gXuhe8F74XwxfEF8YXyBfKF98X4RfjF+UX5xf9GC4YMBg1GDcYORg7GD0YPxhCGEQYSRhQ
-GGYYmxjBGMMYxRjHGMkYyxjNGM8Y1RjeGOAY4xjlGPIY+hj8GQEZAxkFGQoZDBkOGRwZSBlPGVgZXxl1
-GYIZmBmhGawZwBnJGdYZ5BnwGhEaExoVGhcaGRocGh0aHxohGjgaWRpeGmAaYhpkGmYaaBptGm8afBqR
-GpMalRqXGpkaphqvGroa3xrrGu0a7xrxGvMa9Rr2Gvga+hsDGwUbChsMGw4bKhtCG0sbUhtfG2Ubfhuf
-G6sbwhvNG9Ib1BvWG9gb2xvdG98b6BvqG+sb9Bv9HAgcERwcHCocNRw+HEUcXRxoHHEcdhyJHJIclBy7
-HL0cvxzBHMMcxRzHHMkcyxzNHM8c0RzTHNUc1xzZHNsc3RzfHPAc/h0HHQ8dER0THRUdFx1IHWUdfB2H
-HZkdrR28HeEd/B4VHhYeGB4ZHhseHB4eHiAeIh4jHiUeJh4nHkUeWR5iHmQedR53Hnkeex59Hn8egR6D
-HoUekx6YHpoeox6oHrMevB7DHtoe6R76Hvwe/h8AHwIfDB8dHx8fIR8jHyUfOh9LH00fTx9RH1Mfax98
-H34fgB+CH4Qfkx+cH6Mfux/MH84f0B/SH9Qf8CABIAMgBSAHIAkgFSAmICggKiAsIC4gNSBSIFwgZiCF
-IIcgiSCLII0gjyCRIKcgrSC6IMMgyiDiIP8hASEDIQUhByEJIQshKSE2IUQhZSFvIXEhcyF1IXcheSF7
-IX0hnCG0IcEhwyHGIcghyyHNIesh9CH5IhoiHCIeIiAiIiIkIiYiKCJHIl8ibCJuInEicyJ2IngimSKb
-Ip0inyKhIqMipSKnIsci4CLtIu8i8iL0Ivci+SMaIxwjHiMgIyIjJCMmIygjSCNhI24jcCNzI3UjeCN6
-I5sjnSOfI6EjoyOlI6cjqSPHI94j6yPtI/Aj8iP1I/ckGCQaJBwkHiQgJCIkJCQmJEUkXSRqJGwkbyRx
-JHQkdiSXJJkkmySdJJ8koSSjJKUkxCTcJOkk6yTuJPAk8yT1JRYlGCUaJRwlHiUgJSIlJCVBJVclZCVm
-JWklayVuJXAliSWiJaslrSXuJfAl8iX0JfYl+CX6Jfwl/iYAJgImBCYGJggmCiYMJg4mECYSJhQmFiYY
-JhomHCYeJiAmIiYkJiYmKCYqJiwmNSY3JjkmRyZQJlUmXiZgJqEmoyalJqcmqSarJq0mryaxJrMmtSa3
-Jrkmuya9Jr8mwSbDJsUmxybJJssmzSbPJtEm0ybVJtcm2SbbJt0m3yboJuonLScvJzEnMyc1JzcnOSc7
-Jz0nPydBJ0MnRSdHJ0knSydNJ08nUSdTJ1UnVydZJ1snXSdfJ2EnYydlJ2cnaSdrJ20ndid4J7snvSe/
-J8EnwyfFJ8cnySfLJ80nzyfRJ9Mn1SfXJ9kn2yfdJ98n4SfjJ+Un6CfrJ+4n8Sf0J/cn+if9KAAoAygG
-KBAoMCg8KEgoZiiGKJ0otCjSKR8pMylTKXQpgSmVKbUp1SniKfgqECowKkYqXip1KoIqliqtKsoq6isK
-KyorRytQK1IrVytZK1srZCtmK2srbStvK3greivhK+Mr5SvnK+kr6yvtK+8r8SvzK/Ur9yv5K/sr/Sv/
+SQJYAPwBJgBlAkwAcAJcgBmAGYBrgG2ADYBqgBkjP+2kYQAAAABfEBl7ey0xMDAsIC0xMDB9LCB7NDQw
+LCAxNX190gAOAD4AbQJggGChAPeAIV8QFnt7MjAsIDQ0fSwgezQ0MCwgMjI4fX3SADcAOAJkAmWkAmUA
+rwCwADtcTlNTY3JvbGxWaWV32ABfAA4AdQB2AGEAdwBjAGQATgJoAmkCagJrAH0AZQBOgAyAhYBzgHQR
+AQoJgA2ADF8QFnt7MjAsIDI4Mn0sIHszMTMsIDIyfX3dAIIADgJxAOgAhwCIAIkAiwJyAnMCdAJ1AUwC
+dgJ3AngCeQCPAJQAcQJ9APwAfQJ/AoABel8QEk5TQ2FuY2VsQnV0dG9uQ2VsbF8QEE5TVGV4dEJlemVs
+U3R5bGVfEBFOU0RyYXdzQmFja2dyb3VuZF8QEk5TU2VhcmNoQnV0dG9uQ2VsbF8QEE5TTWF4aW11bVJl
+Y2VudHMSFHH+QICEgHqAdYAWgBOAchIQAAQACYB3EP+AOtUADgFgAVoBYgFjAVwBowFmAoUBaIAvgESA
+doAxXxATdGV4dEJhY2tncm91bmRDb2xvctwCRACCAA4AhACFAIYAhwCJAIoAiwJFAIwCagKKAI4CjADz
+AI8CjgBxApAA8wKRApKAdBIAAf4AgBcQS4AWgHiAchEBkIB5EghEQP9Wc2VhcmNoXxATX3NlYXJjaEZp
+ZWxkU2VhcmNoOt0CRACCAA4AhACFAIYClgCHAIkAigCLAkUAjAJqAooAjgKMAPMAjwKaApsAcQKQAPMC
+nQKSXxAjTlNBY2Nlc3NpYmlsaXR5T3ZlcnJpZGRlbkF0dHJpYnV0ZXOAdIAXgBaAfIB7gHKAg1VjbGVh
+ctIADgA+AG0CoYBgoQKigH3TAA4CpAA+AqUCpgKpV05TLmtleXOAgqICpwKogH6Af6ICqgKrgICAgV1B
+WERlc2NyaXB0aW9uXxApTlNBY2Nlc3NpYmlsaXR5RW5jb2RlZEF0dHJpYnV0ZXNWYWx1ZVR5cGVWY2Fu
+Y2Vs0gA3ADgCsAKxowKxArIAO18QE05TTXV0YWJsZURpY3Rpb25hcnlcTlNEaWN0aW9uYXJ5XxATX3Nl
+YXJjaEZpZWxkQ2FuY2VsOtIANwA4ArUCtqUCtgFxAKoAdgA7XxARTlNTZWFyY2hGaWVsZENlbGzSADcA
+OAK4ArmmArkCugCuAK8AsAA7XU5TU2VhcmNoRmllbGRbTlNUZXh0RmllbGTYAF8ADgB1AHYAYQB3AGMA
+ZABOAr0CvgK/AsAAfQBlAE6ADICMgIeAiBEBIQmADYAMXxAUe3s4OCwgMTR9LCB7OTYsIDE3fX3YAIIA
+DgDoAIcAiACJAIsBTALGAXQCyALJAJQAcgLMAXoSBAH+QIA8gIqAiYATgIYSEEAEAIA6XFNlYXJjaCBQ
+YXRoOtUADgFgAVoBYgFjAVwBfgFmAtIBaIAvgDmAi4AxXGNvbnRyb2xDb2xvctIANwA4AtYCuqUCugCu
+AK8AsAA72QBfAA4AdQB2AtgAYQB3AGMAZABOAtoC2wLcAt0CwAB9AGUATltOU0RyYWdUeXBlc4AMgJaA
+koCTgI4JgA2ADNIADgA+AD8C44CRogLkAuWAj4CQXxAZQXBwbGUgVVJMIHBhc3RlYm9hcmQgdHlwZV8Q
+FU5TRmlsZW5hbWVzUGJvYXJkVHlwZdIANwA4AukC6qMC6gLrADtcTlNNdXRhYmxlU2V0VU5TU2V0XxAW
+e3sxODksIDEwfSwgezI3MSwgMjZ9fdgC7gCCAA4AiACJAIsC7wLwAFYC8QLyAJQAcwL1AvYAc1tOU1Bh
+dGhTdHlsZV8QFE5TUGF0aENvbXBvbmVudENlbGxzWk5TRGVsZWdhdGUSFCH+AYCVgBOAjRGAAICUgI3S
+AA4APgBtAvqAYKDSADcAOAL8Av2kAv0AqgB2ADtaTlNQYXRoQ2VsbNIANwA4Av8DAKUDAACuAK8AsAA7
+XU5TUGF0aENvbnRyb2xaezQ4MCwgMzIwfdIANwA4AwMAr6MArwCwADtfEBV7ezAsIDB9LCB7MTI4MCwg
+Nzc4fX1aezQwMCwgMjc2fdIANwA4AwcDCKIDCAA7XxAQTlNXaW5kb3dUZW1wbGF0ZdIADgA+AG0DC4Bg
+rxASAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdgJ6AoYCkgK2Ar4CxgLOAtYC3gL+A
+w4DHgMuAz4DSgNaA2oDg1AAOAx8DIAMhAyIAQQAfAyVdTlNEZXN0aW5hdGlvblhOU1NvdXJjZVdOU0xh
+YmVsgKCAB4ACgJ9Wd2luZG930gA3ADgDKAMpowMpAyoAO18QFE5TTmliT3V0bGV0Q29ubmVjdG9yXk5T
+TmliQ29ubmVjdG9y1AAOAx8DIAMhAywAHwBvAy+Ao4ACgA+Aol5hZGRUb1BsYXlsaXN0OtIANwA4AzID
+M6MDMwMqADtfEBVOU05pYkNvbnRyb2xDb25uZWN0b3LUAA4DHwMgAyEDIgM2AB8DOICggKWAAoCs3AM6
+AA4DOwDmAzwDPQM+Az8DQAAyA0EDQgB9APQAfQNGAH0DSANJA0oAfQNMAH0AfV8QGk5TRmlsdGVyUmVz
+dHJpY3RzSW5zZXJ0aW9uXxAUTlNQcmVzZXJ2ZXNTZWxlY3Rpb25aTlNFZGl0YWJsZV8QD19OU01hbmFn
+ZWRQcm94eV8QEU5TT2JqZWN0Q2xhc3NOYW1lXk5TRGVjbGFyZWRLZXlzXxAiTlNDbGVhcnNGaWx0ZXJQ
+cmVkaWNhdGVPbkluc2VydGlvbl8QGE5TU2VsZWN0c0luc2VydGVkT2JqZWN0c18QFk5TQXZvaWRzRW1w
+dHlTZWxlY3Rpb24JgGUJgKcJgKqAqYCoCYCmCQlfEBtTcG90bGlnaHRQbGF5bGlzdENvbnRyb2xsZXJf
+EBFOU0FycmF5Q29udHJvbGxlctIADgA+AG0DU4BgqAFQAUMB6QGUAbUCAgHOAhqALIAqgFKAP4BHgFeA
+TIBcXVBsYXlsaXN0RW50cnnRAA4DXoCr0gA3ADgDYAM9ogM9ADtfEBJwbGF5bGlzdENvbnRyb2xsZXLU
+AA4DHwMgAyEDIgM2ANoDZoCggKWAHYCuWmRhdGFTb3VyY2XUAA4DHwMgAyEDIgDaAzYDbICggB2ApYCw
+WXRhYmxlVmlld9QADgMfAyADIQMiAHEAQQNygKCAcoAHgLJfEBVpbml0aWFsRmlyc3RSZXNwb25kZXLU
+AA4DHwMgAyEDIgAfAzYDeICggAKApYC0XxAZc3BvdGxpZ2h0V2luZG93Q29udHJvbGxlctQADgMfAyAD
+IQMiAHMAHwN+gKCAjYACgLZbcGF0aENvbnRyb2zYAA4DHwOBA4IDIAMhA4MDhAOFAzYDhwOIATMDigOL
+AFZZTlNLZXlQYXRoWU5TQmluZGluZ1lOU09wdGlvbnNfEBxOU05pYkJpbmRpbmdDb25uZWN0b3JWZXJz
+aW9ugL6ApYC6gLmAS4C4gLtfEB12YWx1ZTogYXJyYW5nZWRPYmplY3RzLmxlbmd0aFV2YWx1ZV8QFmFy
+cmFuZ2VkT2JqZWN0cy5sZW5ndGjTAA4CpAA+A5ADkQOTgL2hA5KAvKECq4CBXxAbTlNDb25kaXRpb25h
+bGx5U2V0c0VkaXRhYmxl0gA3ADgDlwKyogKyADvSADcAOAOZA5qjA5oDKgA7XxAVTlNOaWJCaW5kaW5n
+Q29ubmVjdG9y2AAOAx8DgQOCAyADIQODA4QDhQM2A54DiAEyA6EDogBWgL6ApYDBgLmARoDAgMJfEBx2
+YWx1ZTogYXJyYW5nZWRPYmplY3RzLmFsYnVtXxAVYXJyYW5nZWRPYmplY3RzLmFsYnVt0wAOAqQAPgOQ
+A6cDqYC9oQOSgLyhAquAgdgADgMfA4EDggMgAyEDgwOEA4UDNgOuA4gBNgOxA7IAVoC+gKWAxYC5gFuA
+xIDGXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50cmFja18QFWFycmFuZ2VkT2JqZWN0cy50cmFja9MA
+DgKkAD4DkAO3A7mAvaEDkoC8oQKrgIHYAA4DHwOBA4IDIAMhA4MDhAOFAzYDvgOIATUDwQPCAFaAvoCl
+gMmAuYBWgMiAyl8QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMuZ2VucmVfEBVhcnJhbmdlZE9iamVjdHMu
+Z2VucmXTAA4CpAA+A5ADxwPJgL2hA5KAvKECq4CB2AAOAx8DgQOCAyADIQODA4QDhQM2A84DiAE0A9ED
+0gBWgL6ApYDNgLmAUYDMgM5fEBt2YWx1ZTogYXJyYW5nZWRPYmplY3RzLnllYXJfEBRhcnJhbmdlZE9i
+amVjdHMueWVhctMADgKkAD4DkAPXA9mAvaEDkoC8oQKrgIHXAA4DHwOBA4IDIAMhA4QDhQAfA94DiABx
+A+EAVoC+gAKA0YC5gHKA0F8QE3ZhbHVlOiBzZWFyY2hTdHJpbmdcc2VhcmNoU3RyaW5n2AAOAx8DgQOC
+AyADIQODA4QDhQM2A+cDiAExA+oD6wBWgL6ApYDUgLmAPoDTgNVfEB12YWx1ZTogYXJyYW5nZWRPYmpl
+Y3RzLmFydGlzdF8QFmFycmFuZ2VkT2JqZWN0cy5hcnRpc3TTAA4CpAA+A5AD8APygL2hA5KAvKECq4CB
+1wAOAx8DgQOCAyADIQOEA4UAHwP3A/gDNgP6AFaAvoACgNmA2IClgNdfEBtjb250ZW50QXJyYXk6IHF1
+ZXJ5LnJlc3VsdHNcY29udGVudEFycmF5XXF1ZXJ5LnJlc3VsdHPYAA4DHwOBA4IDIAMhA4MDhAOFAB8E
+AQOIAHMEBAQFAFaAvoACgNyAuYCNgNuA3V8QGnZhbHVlOiBzcG90bGlnaHRTZWFyY2hQYXRoXxATc3Bv
+dGxpZ2h0U2VhcmNoUGF0aNMADgKkAD4DkAQKBAyAvaEEC4DeoQQNgN9fEBZOU1ZhbHVlVHJhbnNmb3Jt
+ZXJOYW1lXxAWU3RyaW5nVG9VUkxUcmFuc2Zvcm1lctgADgMfA4EDggMgAyEDgwOEA4UDNgQTA4gBMAQW
+BBcAVoC+gKWA4oC5gCmA4YDjXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50aXRsZV8QFWFycmFuZ2Vk
+T2JqZWN0cy50aXRsZdMADgKkAD4DkAQcBB6AvaEDkoC8oQKrgIHSAA4APgQhBCKA568QHwE1AtwEJQIF
+Ar8B0QBxATMBMQBBALsDNgBvAbcATgE2AHsAcAE0AmoA2gFFAMYA9wByAHMBMAIcATIB7AGWgFaAk4Dl
+gFqAiIBPgHKAS4A+gAeAbIClgA+ASoAMgFuAEYAZgFGAdIAdgDWAaIAhgIaAjYApgF+ARoBVgEXSAA4A
+MgAzBESABIDmXU5TQXBwbGljYXRpb27SADcAOARHAjGiAjEAO9IADgA+BCEESoDnrxAfANoAcwAfATUA
+cgEzAE4A2gDaAB8AcAAfAE4BMgBBANoAbwBOANoAcQBwATAAcABwAE4ATgDaATYA2gE0ATGAHYCNgAKA
+VoCGgEuADIAdgB2AAoAZgAKADIBGgAeAHYAPgAyAHYBygBmAKYAZgBmADIAMgB2AW4AdgFGAPtIADgA+
+BCEEbIDnrxAgATUC3AQlAgUCvwHRAHEBMwExAEEAuwM2AG8BtwBOATYAcAB7ATQCagDaAMYA9wFFAHIA
+cwEwAhwAHwEyAZYB7IBWgJOA5YBagIiAT4BygEuAPoAHgGyApYAPgEqADIBbgBmAEYBRgHSAHYBogCGA
+NYCGgI2AKYBfgAKARoBFgFXSAA4APgQhBI+A568QIASQBJEEkgSTBJQElQSWBJcEmASZBJoEmwScBJ0E
+ngSfBKAEoQSiBKMEpASlBKYEpwSoBKkEqgSrBKwErQSuBK+A64DsgO2A7oDvgPCA8YDygPOA9ID1gPaA
+94D4gPmA+oD7gPyA/YD+gP+BAQCBAQGBAQKBAQOBAQSBAQWBAQaBAQeBAQiBAQmBAQpfEBRUYWJsZSBD
+b2x1bW4gKGdlbnJlKVlQYXRoIENlbGxbQXBwbGljYXRpb25fEBtUZXh0IEZpZWxkIENlbGwgKFRleHQg
+Q2VsbClfEB5UZXh0IEZpZWxkIENlbGwgKFNlYXJjaCBQYXRoOilfEB1UZXh0IEZpZWxkIENlbGwgKFRl
+eHQgQ2VsbCktMVxTZWFyY2ggRmllbGRfEBVUYWJsZSBDb2x1bW4gKGxlbmd0aClfEBVUYWJsZSBDb2x1
+bW4gKGFydGlzdClfEBtQYW5lbCAoT3BlbiBmcm9tIFNwb3RsaWdodClfEBNIb3Jpem9udGFsIFNjcm9s
+bGVyXxAdU3BvdGxpZ2h0IFBsYXlsaXN0IENvbnRyb2xsZXJfEB1QdXNoIEJ1dHRvbiAoQWRkIHRvIFBs
+YXlsaXN0KV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS02XENvbnRlbnQgVmlld18QFFRhYmxl
+IENvbHVtbiAodHJhY2spW1Njcm9sbCBWaWV3XxAdQnV0dG9uIENlbGwgKEFkZCB0byBQbGF5bGlzdClf
+EBNUYWJsZSBDb2x1bW4gKHllYXIpXxARU2VhcmNoIEZpZWxkIENlbGxfEEpTcG90bGlnaHQgUGxheWxp
+c3QgVmlldyAoVGl0bGUsIEFydGlzdCwgQWxidW0sIExlbmd0aCwgWWVhciwgR2VucmUsIFRyYWNrKV8Q
+EVZlcnRpY2FsIFNjcm9sbGVyXxARVGFibGUgSGVhZGVyIFZpZXdfEB1UZXh0IEZpZWxkIENlbGwgKFRl
+eHQgQ2VsbCktNV8QGlN0YXRpYyBUZXh0IChTZWFyY2ggUGF0aDopXxAaUG9wIFVwIFBhdGggQ29udHJv
+bCBXaWRnZXRfEBRUYWJsZSBDb2x1bW4gKHRpdGxlKV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxs
+KS0zXEZpbGUncyBPd25lcl8QFFRhYmxlIENvbHVtbiAoYWxidW0pXxAdVGV4dCBGaWVsZCBDZWxsIChU
+ZXh0IENlbGwpLTJfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktNNIADgA+BCEE0oDnogDaAzaA
+HYCl0gAOAD4EIQTXgOeiAQMDTIAegKbSAA4APgQhBNyA568QMgQlAr8DHQMcATMBMQC7AG8DFwMTAE4B
+NgB7AHADFQJqANoBRQDGAPcDDQIcAxgDFgMRATIBlgMUAxIBNQLcAwwDEAIFAdEDDwBxAEEDGgM2Aw4B
+twMbATQAcgBzATAAHwMZAeyA5YCIgOCA2oBLgD6AbIAPgMeAtYAMgFuAEYAZgL+AdIAdgDWAaIAhgKGA
+X4DLgMOAsYBGgEWAt4CzgFaAk4CegK+AWoBPgK2AcoAHgNKApYCkgEqA1oBRgIaAjYApgAKAz4BV0gAO
+AD4EIQURgOevEDIFEgUTBRQFFQUWBRcFGAUZBRoFGwUcBR0FHgUfBSAFIQUiBSMFJAUlBSYFJwUoBSkF
+KgUrBSwFLQUuBS8FMAUxBTIFMwU0BTUFNgKrBTgFOQU6BTsFPAU9BT4FPwVABUEFQgVDgQEPgQEQgQER
+gQESgQETgQEUgQEVgQEWgQEXgQEYgQEZgQEagQEbgQEcgQEdgQEegQEfgQEggQEhgQEigQEjgQEkgQEl
+gQEmgQEngQEogQEpgQEqgQErgQEsgQEtgQEugQEvgQEwgQExgQEygQEzgIGBATSBATWBATaBATeBATiB
+ATmBATqBATuBATyBAT2BAT6BAT8T//////////0QUBBdEJ0QIBAiEBoQBRBmEJ8QHRAYEGUQOBAcECUQ
+GxCjECwQXhBrED0QIRAnEGkQoBAeEFkQSBCVECsQKRCXEDcQaBAQEKEQKBCmEE8QWBAkEKcQmhAq0gAO
+AD4AbQVzgGCg0gAOAD4EIQV2gOeg0gAOAD4EIQV5gOeg0gA3ADgFewV8ogV8ADteTlNJQk9iamVjdERh
+dGEACAAZACIAJwAxADoAPwBEAFIAVABmAvIC+ANDA0oDUQNfA3EDjQObA6cDswPBA8wD2gP2BAQEFwQp
+BEMETQRaBFwEXwRhBGQEZwRpBGsEbQRwBHMEdQR4BHoEfAR+BIEEgwSGBI8EmwSdBJ8EuwTEBM0E2ATd
+BOwE9QUIBREFHAUeBSEFIwVUBWEFbgV8BYYFlAWtBboFzAXgBeoF9gX4BfoF/AX+BgMGBQYHBgkGCwYN
+Bg8GEQYsBkIGSgZVBnIGhAaPBpgGpAatBrkGuwa9Br8GwgbEBsYGyAbRBtMG3gbgBuIG5AbmBugHCQcR
+BxgHIgckByYHKAcqBy0HLgcwBzIHTAd9B4kHnwe0B8MH1QfgB+oH+AgKCBcIJQgqCCwILggwCDIINAg2
+CDgIOgg8CEEISghcCG0IdAh7CIQIhgiPCJEIlAihCKoIrwi2CLcIwAjJCNYI4wjsCPcJAAkKCREJHQlc
+CWgJcQl+CZEJngmqCbgJxgnICcoJzAnOCdEJ0wnVCdcJ6gntCe8J8QnzCfUJ9woACgIKDQoPChEKEwoV
+ChcKRApOClgKYgpkCmYKaApqCm0KbwpxCnMKdQp3CoAKggqFCocK5gsICxILKAs1C0kLXgt4C5QLrwu+
+C8oL6Qv4DAQMBgwIDAoMEwwVDBcMGQwaDBwMJQwnDDAMMww1DDYMOAw6DDwMPgxADEIMRAxNDGUMcQx8
+DJkMmwydDJ8MoQyjDKUM0gzUDNYM2AzaDNwM3gzgDOIM5AzmDPAM+Q0CDRYNLw0xDTMNNQ0+DUANQg1Z
+DWINaw15DYINhA2TDZUNlw2ZDZsNnQ2fDaENyg3ZDeYN8w37DgYOFQ4gDisOLA4uDjAOMg47Dj0OPw5I
+DlEOUw5ZDnYOgg6HDokOiw6NDo8OkQ6XDqgOqg6zDrUOuA7FDtIO2g7cDugO8Q72Dv4PEw8fDy0PLw8x
+DzMPNQ83Dz4PUA9dD18PYg9rD3YPig+cD70Pwg/ED8YPyA/KD8wPzw/RD9sP8A/yD/QP9g/4EBEQHhAg
+ECwQQRBDEEUQRxBJEFwQZRBuEHcQfBCKELMQtBC2ELgQuhDDEMUQzhDQENcQ9BD2EPgQ+hD8EP4RBREa
+ERwRHhEgESIRLhE7ET0RQBFhEWMRZRFnEWkRaxFtEZYRlxGZEZsRnRGmEagRsRGzEbkR1hHYEdoR3BHe
+EeAR5hIHEgkSCxINEg8SERITEkASSRJKEksSTRJPElESWhJcEmUSZxJuEosSjRKPEpESkxKYEpoSoRLC
+EsQSxhLIEsoSzBLREtMTABMBEwITBBMGEwgTERMTExwTHhMjE0ATQhNEE0YTSBNKE08TcBNyE3QTdhN4
+E3oTfBOpE6oTqxOtE68TsRO6E7wTvhPEE+ET4xPlE+cT6RPrE/EUEhQUFBYUGBQaFBwUHhRHFEgUShRM
+FE4UVxRZFGIUZBRqFIcUiRSLFI0UjxSRFJcUuBS6FLwUvhTAFMIUxBTNFNQU4xTrFQAVAhUEFQYVCBUS
+FR8VIRUmFT0VRhVLFVoVchV7FYQVjxW0Fb0VxhXQFdIV1BXWFdgV2hXcFd4V5xX+FgsWFBYfFioWUxZV
+FlcWWRZbFl0WXxZhFmoWhhaPFpEWlBaWFq8WuBbBFs4W7xbxFvMW9Rb3FvoW+xb9Fv8XGBdNF2IXdReJ
+F54XsRe2F7gXuhe8F74XwBfCF8cXyBfKF8wXzhfjF+UX5xfpF+sYARgyGDQYORg7GD0YPxhBGEMYRhhI
+GE0YVBhqGJ8YxRjHGMkYyxjNGM8Y0RjTGNkY4hjkGOcY6Rj2GP4ZABkFGQcZCRkOGRAZEhkgGUwZUxlc
+GWMZeRmGGZwZpRmwGcQZzRnaGegZ9BoVGhcaGRobGh0aIBohGiMaJRo8Gl0aYhpkGmYaaBpqGmwacRpz
+GoAalRqXGpkamxqdGqoasxq+GuMa7xrxGvMa9Rr3Gvka+hr8Gv4bBxsJGw4bEBsSGy4bRhtPG1YbYxtp
+G4IboxuvG8Yb0RvWG9gb2hvcG98b4RvjG+wb7hvvG/gcARwMHBUcIBwuHDkcQhxJHGEcbBx1HHocjRyW
+HJgcvxzBHMMcxRzHHMkcyxzNHM8c0RzTHNUc1xzZHNsc3RzfHOEc4xz0HQIdCx0THRUdFx0ZHRsdIh0r
+HTIdSR1YHWkdax1tHW8dcR2AHYkdkB2oHbkdux29Hb8dwR3yHg8eJh4xHkMeVx5mHoseph6/HsAewh7D
+HsUexh7IHsoezB7NHs8e0B7RHu8fAx8MHw4fHx8hHyMfJR8nHykfKx8tHy8fPR9CH0QfTR9SH2cfeB96
+H3wffh+AH4sfnB+eH6Afoh+kH64fvx/BH8MfxR/HH98f8B/yH/Qf9h/4IBQgJSAnICkgKyAtIDkgWiBk
+IG4geCCXIJkgmyCdIJ8goSCjIKUgxSDLIOQg8SDzIPYg+CD7IP0hGyEkISkhMiE5IVEhciF0IXYheCF6
+IXwhfiGAIZ8htyHEIcYhySHLIc4h0CHxIfMh9SH3Ifkh+yH9If8iHiI2IkMiRSJIIkoiTSJPInAiciJ0
+InYieCJ6InwifiKdIrUiwiLEIsciySLMIs4i7yLxIvMi9SL3Ivki+yL9IxsjMiM/I0EjRCNGI0kjSyNo
+I2ojbCNuI3AjciN0I4ojlyO4I7ojvCO+I8AjwiPEI8Yj5iP/JAwkDiQRJBMkFiQYJDUkNyQ5JDskPSQ/
+JEEkXyRsJHokmySdJJ8koSSjJKUkpySpJMYk3CTpJOsk7iTwJPMk9SUOJSclSCVKJUwlTiVQJVIlVCVW
+JXUljSWaJZwlnyWhJaQlpiWvJbEl8iX0JfYl+CX6Jfwl/iYAJgImBCYGJggmCiYMJg4mECYSJhQmFiYY
+JhomHCYeJiAmIiYkJiYmKCYqJiwmLiYwJjkmOyY9JksmVCZZJmImZCalJqcmqSarJq0mryaxJrMmtSa3
+Jrkmuya9Jr8mwSbDJsUmxybJJssmzSbPJtEm0ybVJtcm2SbbJt0m3ybhJuMm7CbuJzEnMyc1JzcnOSc7
+Jz0nPydBJ0MnRSdHJ0knSydNJ08nUSdTJ1UnVydZJ1snXSdfJ2EnYydlJ2cnaSdrJ20nbydxJ3onfCe/
+J8EnwyfFJ8cnySfLJ80nzyfRJ9Mn1SfXJ9kn2yfdJ98n4SfjJ+Un5yfpJ+wn7yfyJ/Un+Cf7J/4oASgE
+KAcoCighKCsoNyhVKHYoliijKLso0yjxKQcpJylHKWcpdCmLKZcptynNKeEqLipCKlYqdiqTKrAqxyrn
+KvQrCysrK0srVCtWK1srXStfK2graitvK3Ercyt8K34r5SvnK+kr6yvtK+8r8SvzK/Ur9yv5K/sr/Sv/
LAEsAywFLAcsCSwLLA0sDywRLBMsFSwXLBksGywdLB8sISwjLCUsJywpLCssLSwvLDEsMyw1LDcsOSw7
-LD0sPyxBLEMsRSxOLFAstyy6LL0swCzDLMYsyCzLLM4s0SzULNcs2izdLOAs4yzmLOks7CzvLPIs9Sz4
-LPss/i0BLQQtBy0KLQ0tEC0TLRYtGS0cLR8tIi0lLSgtKy0uLTEtNC03LTotPS1ALUMtRi1JLUwtTi1X
+LD0sPyxBLEMsRSxHLEksUixULLssvizBLMQsxyzKLM0s0CzTLNYs2SzcLN8s4izlLOgs6yzuLPEs9Cz3
+LPos/S0ALQMtBi0JLQwtDy0SLRUtGC0bLR4tIS0kLSctKi0sLS8tMi01LTgtOy0+LUEtRC1HLUotTS1Q
LVktWy1dLV8tYS1jLWUtZy1pLWstbS1vLXEtcy11LXcteS17LX0tfy2BLYMthS2HLYktiy2NLY8tkS2T
-LZUtly2ZLZstnS2fLaEtoy2lLactqS2rLa0tti24Lbktwi3ELcUtzi3QLdEt2i3fAAAAAAAAAgIAAAAA
-AAAFfQAAAAAAAAAAAAAAAAAALe4
+LZUtly2ZLZstnS2fLaEtoy2lLactqS2rLa0try2xLbotvC29LcYtyC3JLdIt1C3VLd4t4wAAAAAAAAIC
+AAAAAAAABX0AAAAAAAAAAAAAAAAAAC3yA
diff --git a/Spotlight/SpotlightTransformers.m b/Spotlight/SpotlightTransformers.m
index 6ead43643..1bedbbe2f 100644
--- a/Spotlight/SpotlightTransformers.m
+++ b/Spotlight/SpotlightTransformers.m
@@ -10,6 +10,7 @@
@interface StringToURLTransformer: NSValueTransformer {}
@end
+
@implementation StringToURLTransformer
+ (Class)transformedValueClass { return [NSURL class]; }
+ (BOOL)allowsReverseTransformation { return YES; }
@@ -27,4 +28,6 @@
return [value absoluteString];
}
+@end
+
@end
\ No newline at end of file
diff --git a/Spotlight/SpotlightWindowController.h b/Spotlight/SpotlightWindowController.h
index f0b5f2e40..e9c56b8d8 100644
--- a/Spotlight/SpotlightWindowController.h
+++ b/Spotlight/SpotlightWindowController.h
@@ -17,6 +17,7 @@
NSMetadataQuery *query;
NSString *searchString;
NSString *spotlightSearchPath;
+ NSArray *oldResults;
}
- (IBAction)addToPlaylist:(id)sender;
@@ -27,5 +28,6 @@
@property(retain) NSMetadataQuery *query;
@property(copy) NSString *searchString;
@property(copy) NSString *spotlightSearchPath;
+@property(retain) NSArray *oldResults;
@end
diff --git a/Spotlight/SpotlightWindowController.m b/Spotlight/SpotlightWindowController.m
index d05acea0f..3a9962777 100644
--- a/Spotlight/SpotlightWindowController.m
+++ b/Spotlight/SpotlightWindowController.m
@@ -189,6 +189,7 @@ static NSPredicate * musicOnlyPredicate = nil;
[self.query release];
[self.searchString release];
[musicOnlyPredicate release];
+ [self.oldResults release];
[super dealloc];
}
@@ -202,6 +203,19 @@ static NSPredicate * musicOnlyPredicate = nil;
[self.query enableUpdates];
}
+// Don't update the track list until some results have been gathered
+- (id)valueForKeyPath:(NSString *)keyPath
+{
+ if([keyPath isEqualToString:@"query.results"])
+ {
+ if(([self.query.results count] == 0) && [self.query isGathering])
+ return self.oldResults;
+ self.oldResults = [NSArray arrayWithArray:self.query.results];
+ return self.oldResults;
+ }
+ return [super valueForKeyPath:keyPath];
+}
+
#pragma mark NSMetadataQuery delegate methods
// replace the NSMetadataItem with a PlaylistEntry
@@ -249,4 +263,6 @@ replacementObjectForResultObject:(NSMetadataItem*)result
}
}
+@synthesize oldResults;
+
@end