From ba0746b5036d2650d6aa6b781a8058d6a306c86f Mon Sep 17 00:00:00 2001 From: matthewleon Date: Sat, 16 Feb 2008 22:59:27 +0000 Subject: [PATCH] New fix to Spotlight flicker issue. Still not ideal. --- Cog.xcodeproj/project.pbxproj | 2 + Spotlight/SpotlightPanel.xib | 1062 ++++++++++++----------- Spotlight/SpotlightPlaylistController.h | 3 - Spotlight/SpotlightPlaylistController.m | 26 - Spotlight/SpotlightTransformers.h | 20 + Spotlight/SpotlightTransformers.m | 24 +- Spotlight/SpotlightWindowController.h | 2 - Spotlight/SpotlightWindowController.m | 16 +- 8 files changed, 586 insertions(+), 569 deletions(-) create mode 100644 Spotlight/SpotlightTransformers.h diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index 31ac1be55..ad2537d48 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -603,6 +603,7 @@ 5604D45A0D60349B004F5C5D /* SpotlightWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightWindowController.h; path = Spotlight/SpotlightWindowController.h; sourceTree = ""; }; 5604D4F40D60726E004F5C5D /* SpotlightPlaylistEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightPlaylistEntry.h; path = Spotlight/SpotlightPlaylistEntry.h; sourceTree = ""; }; 5604D4F50D60726E004F5C5D /* SpotlightPlaylistEntry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightPlaylistEntry.m; path = Spotlight/SpotlightPlaylistEntry.m; sourceTree = ""; }; + 563EBE1D0D67987E00E12948 /* SpotlightTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightTransformers.h; path = Spotlight/SpotlightTransformers.h; sourceTree = ""; }; 56462DD80D61D71E000AB68C /* SpotlightPlaylistView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightPlaylistView.h; path = Spotlight/SpotlightPlaylistView.h; sourceTree = ""; }; 56462DD90D61D71E000AB68C /* SpotlightPlaylistView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightPlaylistView.m; path = Spotlight/SpotlightPlaylistView.m; sourceTree = ""; }; 56462EAE0D6341F6000AB68C /* SpotlightTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightTransformers.m; path = Spotlight/SpotlightTransformers.m; sourceTree = ""; }; @@ -1110,6 +1111,7 @@ 56DB08340D67166000453B6A /* Categories */, 56462EB00D634206000AB68C /* SpotlightPlaylistController.h */, 56462EB10D634206000AB68C /* SpotlightPlaylistController.m */, + 563EBE1D0D67987E00E12948 /* SpotlightTransformers.h */, 56462EAE0D6341F6000AB68C /* SpotlightTransformers.m */, 5604D45A0D60349B004F5C5D /* SpotlightWindowController.h */, 5604D4590D60349B004F5C5D /* SpotlightWindowController.m */, diff --git a/Spotlight/SpotlightPanel.xib b/Spotlight/SpotlightPanel.xib index e410509a2..9fdb39eb8 100644 --- a/Spotlight/SpotlightPanel.xib +++ b/Spotlight/SpotlightPanel.xib @@ -8,8 +8,8 @@ 352.00 YES + - YES @@ -53,7 +53,7 @@ 134217728 Add to Playlist - LucidaGrande + LucidaGrande 1.300000e+01 1044 @@ -110,7 +110,7 @@ 0 Title - + 1.100000e+01 3100 @@ -120,7 +120,7 @@ 6 - System + System headerTextColor 3 @@ -131,12 +131,12 @@ 337772096 2048 - Text Cell + Text Cell 6 - + controlBackgroundColor 3 @@ -145,7 +145,7 @@ 6 - + controlTextColor @@ -166,7 +166,7 @@ 6 - + headerColor 3 @@ -178,7 +178,7 @@ 337772096 2048 - + @@ -204,7 +204,7 @@ 337772096 2048 - + @@ -311,7 +311,7 @@ 337772096 67110912 - + @@ -327,7 +327,7 @@ 6 - + gridColor 3 @@ -418,7 +418,7 @@ 1 6 - + textBackgroundColor @@ -452,7 +452,7 @@ YES cancel - + @@ -483,7 +483,7 @@ 6 - + controlColor @@ -553,11 +553,11 @@ 1048576 2147483647 - NSImage + NSImage NSMenuCheckmark - + NSMenuMixedState @@ -807,22 +807,6 @@ 163 - - - contentArray: query.results - - - - - - - contentArray - query.results - 2 - - - 166 - showEntryInFinder: @@ -847,6 +831,26 @@ 179 + + + contentArray: query.results + + + + + + + contentArray + query.results + + NSValueTransformerName + PausingQueryTransformer + + 2 + + + 181 + @@ -1190,10 +1194,10 @@ - {{34, 66}, {480, 320}} + {{34, 66}, {480, 320}} {196, 240} - {{34, 66}, {480, 320}} + {400, 260} SpotlightPlaylistController @@ -1271,7 +1275,7 @@ - 180 + 183 @@ -1298,56 +1302,10 @@ - IBProjectSource + IBProjectSource Spotlight/SpotlightPlaylistController.h - - PlaylistController - DNDArrayController - - YES - - YES - clear: - clearFilterPredicate: - searchByAlbum: - searchByArtist: - showEntryInFinder: - takeRepeatFromObject: - takeShuffleFromObject: - - - YES - id - - - - - - - - - - YES - - YES - entriesController - playlistLoader - spotlightWindowController - - - YES - EntriesController - PlaylistLoader - SpotlightWindowController - - - - - Playlist/PlaylistController.h - - TrackingSlider NSSlider @@ -1370,7 +1328,7 @@ - + Utils/TrackingSlider.h @@ -1402,24 +1360,24 @@ YES - - - - - - - - - - - - - - - - - - + id + + + + + + + + + + + + + + + + + @@ -1446,69 +1404,10 @@ - + Application/PlaybackController.h - - PlaylistView - NSTableView - - YES - - YES - scrollToCurrentEntry: - shufflePlaylist: - sortByPath: - toggleColumn: - - - YES - - - - - - - - YES - - YES - playbackController - playlistController - - - YES - PlaybackController - PlaylistController - - - - - Playlist/PlaylistView.h - - - - DNDArrayController - NSArrayController - - YES - - YES - - - YES - - - - tableView - NSTableView - - - - Playlist/DNDArrayController.h - - EntriesController @@ -1531,37 +1430,29 @@ - + Playlist/EntriesController.h - SpotlightWindowController - NSWindowController + DNDArrayController + NSArrayController - addToPlaylist: - - - YES - + YES - pathControl - playlistController - playlistLoader - searchField YES - NSPathControl - NSArrayController - PlaylistLoader - NSSearchField + + tableView + NSTableView + - - Spotlight/SpotlightWindowController.h + + Playlist/DNDArrayController.h @@ -1586,13 +1477,51 @@ - + Spotlight/SpotlightPlaylistView.h - - + PlaylistView + NSTableView + + YES + + YES + scrollToCurrentEntry: + shufflePlaylist: + sortByPath: + toggleColumn: + + + YES + + + + + + + + YES + + YES + playbackController + playlistController + + + YES + PlaybackController + PlaylistController + + + + + Playlist/PlaylistView.h + + + + PlaylistLoader + YES @@ -1603,17 +1532,58 @@ + playlistController + PlaylistController + + + + Playlist/PlaylistLoader.h + + + + PlaylistController + DNDArrayController + YES - + YES + clear: + clearFilterPredicate: + searchByAlbum: + searchByArtist: + showEntryInFinder: + takeRepeatFromObject: + takeShuffleFromObject: YES + + + + + + + + + + + YES + + YES + entriesController + playlistLoader + spotlightWindowController + + + YES + EntriesController + PlaylistLoader + SpotlightWindowController - - ThirdParty/UKKQueue/UKKQueue.h + + Playlist/PlaylistController.h @@ -1638,85 +1608,7 @@ - - ThirdParty/NDHotKeys/NDHotKeyEvent.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/AppleRemote/AppleRemote.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - - ThirdParty/UKKQueue/UKMainThreadProxy.h - - - - - - - YES - - YES - - - YES - - - - YES - - YES - - - YES - - - - + ThirdParty/UKKQueue/UKFileWatcher.h @@ -1742,13 +1634,13 @@ - - ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h + + ThirdParty/UKKQueue/UKKQueue.h - PlaylistLoader - + + YES @@ -1759,12 +1651,124 @@ - playlistController - PlaylistController + YES + + YES + + + YES + - - Playlist/PlaylistLoader.h + + ThirdParty/NDHotKeys/NDHotKeyEvent.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/UKKQueue/UKMainThreadProxy.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/AppleRemote/AppleRemote.h + + + + + + + YES + + YES + + + YES + + + + YES + + YES + + + YES + + + + + ThirdParty/GCWindowMenu/GCOneShotEffectTimer.h + + + + SpotlightWindowController + NSWindowController + + addToPlaylist: + + + + YES + + YES + pathControl + playlistController + playlistLoader + searchField + + + YES + NSPathControl + NSArrayController + PlaylistLoader + NSSearchField + + + + + Spotlight/SpotlightWindowController.h @@ -1774,261 +1778,263 @@ 3 YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBXwALAAwAMQA1ADYAPAA9 -AEEARQBdAGUAdQB/AAsAgACaAJsAowCkAKcAsQCyALMAuAC6AL8AwADDANYA1wDYANwA5QDmAOoA8wD0 -APUAlQD2APoA/gD/AQMBCgELAQ8BFAEuAS8BMAExATIBOgFDAUQBUgFTAVQBVwFvAXcBhQGJAasBrAGt -Aa4BtQHAAcEBxAHKAcsBzgHYAeoB6wHyAfMB+AH7AgACAQIEAg0CDgITAhQCFwIZAhwCJQImAiwCLQIy -AjMCOgJDAkQCSgJLAlICXQJeAmUCZgINAm4CeAJ5An8CgAKHApACkQKXApgCnwKnAqgCrgKvArYCuwK8 -Ar8CwALDAsQCxwLRAtIC0wLWAuAC4QHAAuUC5gLpAvIC8wL8Av0DAgMDAwUDDwMUAxUDFgMXAyIDJQMo -AysACwMsAy4DLwMwAzMDNAM5AzoDPwNNA04DTwNZA1oDXANeA18DZANlA2gDbQNzA3QDeAOHA4gDjQOO -A48DkgOWA5cDmgOcA50DogOjA6gDqQOuA68DtAO1A7oDuwPHA8gDyQPKA9AD0QPSA9QD1wPfA+AD4QPn -A+gD8APxA/ID+AP/BAAEAQQJBAoECwQRBBkEGgQbBCEEKQQqBCsEMQQ5BDoEOwRBBEgESQRKBEsEUwRU -BFUEWwR/BIIEgwSFBKkEzgTzBPQE9QT2BPcE+AT5BPoE+wT8BP0E/gT/BQAFAQUCBQMFBAUFBQYFBwUI -BQkFCgULBQwFDQUOBQ8FEAURBRIFEwUUBRUFGgUfBVkFkwWUBZUBZAWWBZcBKgWYBZkFmgWbBZwFnQWe -BZ8FoAWhBaIFowWkBaUFpgWnBagFqQWqBasFrAWtBa4FrwWwBbEFsgWzBbQFtQCuBbYFtwW4BbkFugW7 -BbwFvQW+Bb8FwAXBBcIBSQXDBcQFxQXIBcsFzlUkbnVsbN8QEgANAA4ADwAQABEAEgATABQAFQAWABcA -GAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMFZOU1Jvb3RWJGNs -YXNzXU5TT2JqZWN0c0tleXNfEA9OU0NsYXNzZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlPaWRzVmFs -dWVzXU5TQ29ubmVjdGlvbnNbTlNOYW1lc0tleXNbTlNGcmFtZXdvcmtdTlNDbGFzc2VzS2V5c1pOU09p -ZHNLZXlzXU5TTmFtZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlDb25uZWN0b3JzXU5TRm9udE1hbmFn -ZXJfEBBOU1Zpc2libGVXaW5kb3dzXxAPTlNPYmplY3RzVmFsdWVzXxAXTlNBY2Nlc3NpYmlsaXR5T2lk -c0tleXNZTlNOZXh0T2lkXE5TT2lkc1ZhbHVlc4ACgQFegPiBASKBAV2ACID9gAWBASGBASOA/oEBW4AA -gAaA/IEBXBC2gQEk0gAOADIAMwA0W05TQ2xhc3NOYW1lgASAA18QGVNwb3RsaWdodFdpbmRvd0NvbnRy -b2xsZXLSADcAOAA5ADpYJGNsYXNzZXNaJGNsYXNzbmFtZaIAOgA7Xk5TQ3VzdG9tT2JqZWN0WE5TT2Jq -ZWN0XxAQSUJDb2NvYUZyYW1ld29ya9IADgA+AD8AQFpOUy5vYmplY3RzgAeg0gA3ADgAQgBDowBDAEQA -O1xOU011dGFibGVTZXRVTlNTZXTSAA4APgBGAEeAKK8QFQBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBU -AFUAVgBXAFgAWQBaAFsAXIAJgC6ApICmgK+AsoDBgMOAxYDHgMmAy4DUgNmA3YDggOSA6IDsgPCA9NQA -DgBeAF8AYABhAGIAHwBkXU5TRGVzdGluYXRpb25YTlNTb3VyY2VXTlNMYWJlbIAtgAqAAoAs2ABmAA4A -ZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwBtXxAPTlNOZXh0UmVzcG9uZGVyV05TRnJhbWVWTlNDZWxs -WE5TdkZsYWdzWU5TRW5hYmxlZFhOU1dpbmRvd1tOU1N1cGVydmlld4ALgCuADIAOEQEKCYANgAvXAGYA -DgB2AGkAdwBrAGwAcwB5AHoAewB8AHMAflpOU1N1YnZpZXdzW05TRnJhbWVTaXplgA2An4A0EQEAgJ2A -DYCeXxAWe3syMCwgMjgyfSwgezMxMywgMjJ9fd0AgQAOAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4A -jwCQAJEAkgBiAJQAlQByAJcAmACZW05TQ2VsbEZsYWdzXxASTlNDYW5jZWxCdXR0b25DZWxsXxARTlNC -YWNrZ3JvdW5kQ29sb3JaTlNDb250ZW50c1lOU1N1cHBvcnRdTlNDb250cm9sVmlld1xOU0NlbGxGbGFn -czJfEBBOU1RleHRCZXplbFN0eWxlXxARTlNEcmF3c0JhY2tncm91bmRfEBJOU1NlYXJjaEJ1dHRvbkNl -bGxfEBBOU01heGltdW1SZWNlbnRzW05TVGV4dENvbG9yEhRx/kCAKoAfgBOAD4AQgAoSEAAEABABCYAb -EP+AGFDUAA4AnACdAJ4AnwCgAKEAolZOU1NpemVWTlNOYW1lWE5TZkZsYWdzgBIjQCoAAAAAAACAEREE -FFxMdWNpZGFHcmFuZGXSADcAOAClAKaiAKYAO1ZOU0ZvbnTVAA4AqACpAKoAqwCsAK0ArgCvALBXTlND -b2xvclxOU0NvbG9yU3BhY2VbTlNDb2xvck5hbWVdTlNDYXRhbG9nTmFtZYAXgBYQBoAVgBRWU3lzdGVt -XxATdGV4dEJhY2tncm91bmRDb2xvctMADgCpALQArAC2ALdXTlNXaGl0ZYAXEANCMQDSADcAOAC5AKii -AKgAO9UADgCoAKkAqgCrAKwAvACuAL0AsIAXgBqAGYAUXxAQY29udHJvbFRleHRDb2xvctMADgCpALQA -rAC2AMKAF0IwANwAxACBAA4AxQDGAMcAhACGAMgAhwDJAMoAcADMAM0AzgDPAJEA0QBiANMAzwDUANVY -TlNUYXJnZXRfEBJOU1BlcmlvZGljSW50ZXJ2YWxeTlNCdXR0b25GbGFnczJfEA9OU0tleUVxdWl2YWxl -bnRfEA9OU1BlcmlvZGljRGVsYXlYTlNBY3Rpb25dTlNCdXR0b25GbGFnc4AOEgAB/gCAHhBLEACAD4Ac -gAoRAZCAHRIIRED/VnNlYXJjaF8QE19zZWFyY2hGaWVsZFNlYXJjaDrSADcAOADZANqkANoA2wBoADtc -TlNCdXR0b25DZWxsXE5TQWN0aW9uQ2VsbN0AxACBAA4AxQDGAMcA3QCEAIYAyACHAMkAygBwAMwAzQDO -AM8AkQDhAOIAYgDTAM8A5ADVXxAjTlNBY2Nlc3NpYmlsaXR5T3ZlcnJpZGRlbkF0dHJpYnV0ZXOADoAe -gA+AIYAggAqAKVVjbGVhctIADgA+AEYA6IAooQDpgCLTAA4A6wA+AOwA7QDwV05TLmtleXOAJ6IA7gDv -gCOAJKIA8QDygCWAJl1BWERlc2NyaXB0aW9uXxApTlNBY2Nlc3NpYmlsaXR5RW5jb2RlZEF0dHJpYnV0 -ZXNWYWx1ZVR5cGVWY2FuY2Vs0gA3ADgA9wD4owD4APkAO18QE05TTXV0YWJsZURpY3Rpb25hcnlcTlNE -aWN0aW9uYXJ50gA3ADgA+wD8owD8AP0AO15OU011dGFibGVBcnJheVdOU0FycmF5XxATX3NlYXJjaEZp -ZWxkQ2FuY2VsOtIANwA4AQABAaUBAQECANsAaAA7XxARTlNTZWFyY2hGaWVsZENlbGxfEA9OU1RleHRG -aWVsZENlbGzSADcAOAEEAQWmAQUBBgEHAQgBCQA7XU5TU2VhcmNoRmllbGRbTlNUZXh0RmllbGRZTlND -b250cm9sVk5TVmlld1tOU1Jlc3BvbmRlcltzZWFyY2hGaWVsZNIANwA4AQwBDaMBDQEOADtfEBROU05p -Yk91dGxldENvbm5lY3Rvcl5OU05pYkNvbm5lY3RvctQADgBeAF8AYABhAREAHwETgC2AL4ACgKPdARUA -DgEWARcBGAEZARoBGwEcAR0BHgEfASAAbQEiASMBJAEkASYBJwEoASkBKgErASwAK1xOU1dpbmRvd1Zp -ZXdcTlNTY3JlZW5SZWN0XxATTlNGcmFtZUF1dG9zYXZlTmFtZV1OU1dpbmRvd1RpdGxlWU5TV1RGbGFn -c11OU1dpbmRvd0NsYXNzXxAWTlNXaW5kb3dDb250ZW50TWluU2l6ZVxOU1dpbmRvd1JlY3RfEA9OU1dp -bmRvd0JhY2tpbmdfEBFOU1dpbmRvd1N0eWxlTWFza1lOU01pblNpemVbTlNWaWV3Q2xhc3OAC4CigKCA -MYAxEiAAAACAMoAzgDAQAhAPgKGAAF8QGHt7MTk2LCAxOTJ9LCB7NDgwLCAzMjB9fVlTcG90bGlnaHRX -TlNQYW5lbFp7NDAwLCAyNjB90gAOAD4ARgE0gCilATUBNgBiATgBOYA1gDuACoCNgJTYAGYADgBnAGgA -aQBqAGsAbABtATwBPQE+AT8AcgBzAG2AC4A6gDaANxEBCQmADYALXxAXe3szMzUsIDI3NX0sIHsxMzEs -IDMyfX3cAIEADgFFAMUAxgDHAIQAhQCGAMgAhwDKAUYAzQCRAUkBSgFLAUwAkgE1AU8BUAFRXxATTlNB -bHRlcm5hdGVDb250ZW50cxIEAf4AgB6ADxAZEIGAOYA4gBCANRDIEggAAAAT/////4aCQP9fEA9BZGQg -dG8gUGxheWxpc3RRDdIANwA4AVUBVqUBVgEHAQgBCQA7WE5TQnV0dG9u3xAPAGYBWAAOAGcBWQFaAVsA -dgFcAGkAawBsAV0BXgFfAG0BYQFiAWMBZAFlAWYBZwFoAWkAcwBtAWwBbQFtW05TSFNjcm9sbGVyWE5T -c0ZsYWdzXE5TQ29ybmVyVmlld18QEE5TSGVhZGVyQ2xpcFZpZXdcTlNTY3JvbGxBbXRzW05TVlNjcm9s -bGVyXU5TTmV4dEtleVZpZXddTlNDb250ZW50Vmlld4ALgIeAjICLEBCAR4BEgDxPEBAAAAAAAAAAAEGY -AABBmAAAEQESgA2AC4CDgD2APdIADgA+AEYBcYAopQFtAWwBYQFmAWWAPYCDgIeARIBH2wBmAA4AZwF4 -AHYAaQF5AGsBegBsAV4BNgF8AX0BKgF+AX8BgABzAYIBNgGAWU5TY3ZGbGFnc1lOU0RvY1ZpZXdZTlNC -R0NvbG9ygDuAgoCBgD4RCQCAP4ANgFaAO4A/0gAOAD4ARgGHgCihAYCAP98QFwBmAYoADgGLAYwBjQCD -AY4BWgGPAZABkQBpAHcAagGSAGsAMgGTAZQAbAGVAZYBbQDPAZgBmQGaAZsBggByAWUBnwCVAaABoQGi -AHIBpABzAaYBpwErAW0BqQGqXxAfTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2NhbFlOU1R2Rmxh -Z3NfEBNOU09yaWdpbmFsQ2xhc3NOYW1lXE5TSGVhZGVyVmlld18QEk5TQWxsb3dzVHlwZVNlbGVjdF8Q -F05TSW50ZXJjZWxsU3BhY2luZ1dpZHRoXxAZTlNDb2x1bW5BdXRvcmVzaXppbmdTdHlsZV8QGE5TSW50 -ZXJjZWxsU3BhY2luZ0hlaWdodF5OU0F1dG9zYXZlTmFtZVtOU0dyaWRDb2xvcl8QHE5TRHJhZ2dpbmdT -b3VyY2VNYXNrRm9yTG9jYWxeTlNUYWJsZUNvbHVtbnNbTlNSb3dIZWlnaHSAPYCAE//////bwIAAgEGA -Q4BWCYBHI0AIAAAAAAAAI0AAAAAAAAAAERESgEIJgH+ADYBAgHyAPYBKI0AxAAAAAAAAXxAVU3BvdGxp -Z2h0UGxheWxpc3RWaWV3W05TVGFibGVWaWV3Wns0MjUsIDIxMX3XAGYADgBpAHcAawBsAawBZgGwAHsB -sQBzAWYBgIBEgEaARYANgESAP9sAZgAOAXgAdgBpAHcBeQBrAXoAbAFeATYBfAG4AbkBfwG6AZsAcwGC -ATYBm4A7gIIQBICJgIqAQ4ANgFaAO4BDWXs0MjUsIDE3fdIANwA4AcIBw6QBwwEIAQkAO18QEU5TVGFi -bGVIZWFkZXJWaWV31gBmAA4AZwBpAGsAbAE2AcYBxwB7AHMBNoA7gEmASIANgDtfEBR7ezQyNSwgMH0s -IHsxNiwgMTd9fdIANwA4AcwBzaQBzQEIAQkAO11fTlNDb3JuZXJWaWV30gAOAD4ARgHQgCinAdEB0gHT -AdQB1QHWAdeAS4BbgGKAZ4BtgHKAd9oB2QAOAdoB2wHcAd0B3gHfAeABrAByAeIB4wHkAeUB5gC2AecB -6AGAXk5TSXNSZXNpemVhYmxlXE5TSGVhZGVyQ2VsbFxOU0lkZW50aWZpZXJXTlNXaWR0aFpOU0RhdGFD -ZWxsXk5TUmVzaXppbmdNYXNrWk5TTWluV2lkdGhaTlNNYXhXaWR0aAmAWoBNgEwjQF9AAAAAAACAVCNA -RIAAAAAAACNAj0AAAAAAAIA/VXRpdGxl1wCBAA4AgwCEAIUAhwCMAewB7QHuAe8B8ADPAfESBIH+AIBT -gFCAToBPgFFVVGl0bGXUAA4AnACdAJ4AnwH1AKEB94ASI0AmAAAAAAAAgBERDBzTAA4AqQC0AKwAtgH6 -gBdLMC4zMzMzMzI5OQDVAA4AqACpAKoAqwCsALwArgH+ALCAF4AagFKAFF8QD2hlYWRlclRleHRDb2xv -ctIANwA4AgICA6UCAwECANsAaAA7XxARTlNUYWJsZUhlYWRlckNlbGzYAIEADgCDAIQAhQCGAIcAjAIF -AgYBggIIAJIBgAILAJkSFCH+QIBZgFaAVYAQgD8RCACAGFlUZXh0IENlbGzVAA4AqACpAKoAqwCsAhAA -rgIRALCAF4BYgFeAFF8QFmNvbnRyb2xCYWNrZ3JvdW5kQ29sb3LTAA4AqQC0AKwAtgIWgBdLMC42NjY2 -NjY2OQDSADcAOAIYAQKkAQIA2wBoADvSADcAOAIaAhuiAhsAO11OU1RhYmxlQ29sdW1u2gHZAA4B2gHb -AdwB3QHeAd8B4AGsAHIB4gIfAiACIQIiALYCIwHoAYAJgFqAXYBcI0BeAAAAAAAAgGEjQEIAAAAAAACA -P1ZhcnRpc3TXAIEADgCDAIQAhQCHAIwBRgHtAigCKQHwAM8B8YBTgF+AXoBPgFFWQXJ0aXN01QAOAKgA -qQCqAKsArACtAK4CMACwgBeAFoBggBRbaGVhZGVyQ29sb3LYAIEADgCDAIQAhQCGAIcAjAIFAgYBggII -AJIBgAILAJmAWYBWgFWAEIA/gBjaAdkADgHaAdsB3AHdAd4B3wHgAawAcgHiAj0CPgI/AkAAtgJBAegB -gAmAWoBkgGMjQF6AAAAAAACAZiNAQ4AAAAAAAIA/VWFsYnVt1wCBAA4AgwCEAIUAhwCMAUYB7QIoAkcB -8ADPAfGAU4BfgGWAT4BRVUFsYnVt2ACBAA4AgwCEAIUAhgCHAIwCBQIGAYICCACSAYACCwCZgFmAVoBV -gBCAP4AY2wHZAlMB2gHbAA4B3AHdAd4B3wHgAawAcgByAlYCVwHiAlkCWgC2AlsB6AGAWE5TSGlkZGVu -CQmAaYBogFojQEkAAAAAAACAayNARE9gIAAAAIA/Vmxlbmd0aNcAgQAOAIMAhACFAIcAjAFGAe0CKAJh -AfACYwHxgFOAX4BqgE8SBAAAAIBRVkxlbmd0aNgAgQAOAIMAhACFAIYAhwCMAgUCBgGCAmkAkgGAAmwA -mYBZgFaAbIAQgD8SBAAIAIAY2wHZAlMB2gHbAA4B3AHdAd4B3wHgAawAcgByAnECcgHiAnQCdQC2AnYB -6AGACQmAb4BugFojQEeAAAAAAACAcSNAJAAAAAAAAIA/VHllYXLXAIEADgCDAIQAhQCHAIwBRgHtAigC -fAHwAmMB8YBTgF+AcIBPgFFUWWVhctgAgQAOAIMAhACFAIYAhwCMAgUCBgGCAmkAkgGAAmwAmYBZgFaA -bIAQgD+AGNsB2QJTAdoB2wAOAdwB3QHeAd8B4AGsAHIAcgKKAosB4gKNAo4AtgJ2AegBgAkJgHSAc4Ba -I0BHAAAAAAAAgHaAP1VnZW5yZdcAgQAOAIMAhACFAIcAjAFGAe0CKAKUAfAAzwHxgFOAX4B1gE+AUVVH -ZW5yZdgAgQAOAIMAhACFAIYAhwCMAgUCBgGCAmkAkgGAAgsAmYBZgFaAbIAQgD+AGNoB2QAOAdoB2wHc -Ad0B3gHfAeABrAByAeICogKjAo0CpAC2AqUCjQGACYBagHmAeIB7I0AgAAAAAAAAgD9VdHJhY2vXAIEA -DgCDAIQAhQCHAIwBRgHtAigCqwHwAmMB8YBTgF+AeoBPgFFVVHJhY2vYAIEADgCDAIQAhQCGAIcAjAIF -AgYBggIIAJIBgAJsAJmAWYBWgFWAEIA/gBjVAA4AqACpAKoAqwCsArgArgK5ALCAF4B+gH2AFFlncmlk -Q29sb3LTAA4AqQC0AKwAtgK+gBdEMC41AF8QFENvZ1Nwb3RsaWdodFBsYXlsaXN00gA3ADgCwQLCogLC -ADteTlNDbGFzc1N3YXBwZXJfEBV7ezAsIDE3fSwgezQyNSwgMjExfX3SADcAOALFAsakAsYBCAEJADta -TlNDbGlwVmlld9kAZgDEAA4AZwBpAGsAyQBsAsgBNgE2AssCzAB7AHMCzgE2AtBZTlNQZXJjZW50gDuA -O4CGgISADYCFgDsjP+o3hKAAAABfEBZ7ezQyNSwgMTd9LCB7MTUsIDIxMX19XF9kb1Njcm9sbGVyOtIA -NwA4AtQC1aUC1QEHAQgBCQA7Wk5TU2Nyb2xsZXLaAGYAxAAOAGcBWQBpAGsAyQBsAsgBNgE2AssC2gCV -AtsAcwLOATYC34A7gDuAhoCIE/////+AAAEAgA2AhYA7Iz/tpGEAAAAAXxAZe3stMTAwLCAtMTAwfSwg -ezQ0MCwgMTV9fdIADgA+AEYC44AooQGbgENfEBZ7ezIwLCA0NH0sIHs0NDAsIDIyOH190gA3ADgC5wLo -pALoAQgBCQA7XE5TU2Nyb2xsVmlld9gAZgAOAGcAaABpAGoAawBsAG0C6wLsAu0C7gByAHMAbYALgJOA -joCPEQEhCYANgAtfEBR7ezg4LCAxNH0sIHs5NiwgMTd9fdgAgQAOAIMAhACFAIYAhwCMAvQCBgL2AvcA -kgE4AvoAmRIEAf5AgFmAkYCQgBCAjRIQQAQAgBhcU2VhcmNoIFBhdGg61QAOAKgAqQCqAKsArAIQAK4D -AACwgBeAWICSgBRcY29udHJvbENvbG9y0gA3ADgDBAEGpQEGAQcBCAEJADvZAGYADgBnAGgDBgBpAGoA -awBsAG0DCAMJAwoDCwLuAHIAcwBtW05TRHJhZ1R5cGVzgAuAnICYgJmAlQmADYAL0gAOAD4APwMRgAei -AxIDE4CWgJdfEBlBcHBsZSBVUkwgcGFzdGVib2FyZCB0eXBlXxAVTlNGaWxlbmFtZXNQYm9hcmRUeXBl -XxAWe3sxODksIDEwfSwgezI3MSwgMjZ9fdgDGACBAA4AhQCGAIcDGQMaASoDGwMcAJIBOQMfAyABOVtO -U1BhdGhTdHlsZV8QFE5TUGF0aENvbXBvbmVudENlbGxzWk5TRGVsZWdhdGUSFCH+AYCbgBCAlBGAAICa -gJTSAA4APgBGAySAKKDSADcAOAMmAyekAycA2wBoADtaTlNQYXRoQ2VsbNIANwA4AykDKqUDKgEHAQgB -CQA7XU5TUGF0aENvbnRyb2xaezQ4MCwgMzIwfdIANwA4Ay0BCKMBCAEJADtfEBV7ezAsIDB9LCB7MTI4 -MCwgNzc4fX1aezQwMCwgMjgyfdIANwA4AzEDMqIDMgA7XxAQTlNXaW5kb3dUZW1wbGF0ZVZ3aW5kb3fU -AA4AXgBfAGAAYQE5AB8DOIAtgJSAAoClW3BhdGhDb250cm9s1AAOAF4AXwBgAGEAHwM9Az6ALYACgKeA -rtgDQAAOAYwDQQNCA0MDRAAyAHIBmANHAHIDSQNKA0sDTF8QGk5TRmlsdGVyUmVzdHJpY3RzSW5zZXJ0 -aW9uWk5TRWRpdGFibGVfEA9fTlNNYW5hZ2VkUHJveHlfEBFOU09iamVjdENsYXNzTmFtZV5OU0RlY2xh -cmVkS2V5cwmAgICpCYCsgKuAqoCoXxAbU3BvdGxpZ2h0UGxheWxpc3RDb250cm9sbGVyXxARTlNBcnJh -eUNvbnRyb2xsZXLSAA4APgBGA1GAKKcB5AJyAiACPgKLAlcCo4BMgG6AXIBjgHOAaIB4XVBsYXlsaXN0 -RW50cnnRAA4DW4Ct0gA3ADgDXQNCogNCADtfEBlzcG90bGlnaHRXaW5kb3dDb250cm9sbGVy1AAOAF4A -XwBgA2AAHwE1A2OAsYACgDWAsF5hZGRUb1BsYXlsaXN0OtIANwA4A2YDZ6MDZwEOADtfEBVOU05pYkNv -bnRyb2xDb25uZWN0b3LUAA4AXgBfAGAAYQNqAYADbIAtgLOAP4DA0wAOA24DbwNwA3EDcldOU1RpdGxl -W05TTWVudUl0ZW1zgL+AtIC1XkNvbnRleHR1YWxNZW510gAOAD4ARgN2gCihA3eAttgADgNuA3kDegN7 -A3wDfQN+A38DgAOBAJEDgwOEA4UDal8QEU5TS2V5RXF1aXZNb2RNYXNrWk5TS2V5RXF1aXZdTlNNbmVt -b25pY0xvY1lOU09uSW1hZ2VcTlNNaXhlZEltYWdlVk5TTWVudYC+gLcSABAAAIAPEn////+AuIC8gLNe -U2hvdyBpbiBGaW5kZXLTAA4AMgOJA4oDiwOMXk5TUmVzb3VyY2VOYW1lgLuAuYC6V05TSW1hZ2VfEA9O -U01lbnVDaGVja21hcmvSADcAOAOQA5GiA5EAO18QEE5TQ3VzdG9tUmVzb3VyY2XTAA4AMgOJA4oDiwOV -gLuAuYC9XxAQTlNNZW51TWl4ZWRTdGF0ZdIANwA4A5gDmaIDmQA7Wk5TTWVudUl0ZW3SADcAOAObA36i -A34AO1RtZW511AAOAF4AXwBgAGEDPQAfA6GALYCngAKAwl8QEnBsYXlsaXN0Q29udHJvbGxlctQADgBe -AF8AYANgAz0DdwOngLGAp4C2gMRfEBJzaG93RW50cnlJbkZpbmRlcjrUAA4AXgBfAGAAYQGAAz0DrYAt -gD+Ap4DGWXRhYmxlVmlld9QADgBeAF8AYABhAz0BgAOzgC2Ap4A/gMhaZGF0YVNvdXJjZdQADgBeAF8A -YABhAGIBEQO5gC2ACoAvgMpfEBVpbml0aWFsRmlyc3RSZXNwb25kZXLYAA4AXgO8A70AXwBgA74DvwPA -AB8DwgPDATkDxQPGASpZTlNLZXlQYXRoWU5TQmluZGluZ1lOU09wdGlvbnNfEBxOU05pYkJpbmRpbmdD -b25uZWN0b3JWZXJzaW9ugNOAAoDOgM2AlIDMgM9fEBp2YWx1ZTogc3BvdGxpZ2h0U2VhcmNoUGF0aFV2 -YWx1ZV8QE3Nwb3RsaWdodFNlYXJjaFBhdGjTAA4A6wA+A8sDzAPOgNKhA82A0KEDz4DRXxAWTlNWYWx1 -ZVRyYW5zZm9ybWVyTmFtZV8QFlN0cmluZ1RvVVJMVHJhbnNmb3JtZXLSADcAOAPTAPmiAPkAO9IANwA4 -A9UD1qMD1gEOADtfEBVOU05pYkJpbmRpbmdDb25uZWN0b3LYAA4AXgO8A70AXwBgA74DvwPAAz0D2gPD -AdID3QPeASqA04CngNaAzYBbgNWA118QHXZhbHVlOiBhcnJhbmdlZE9iamVjdHMuYXJ0aXN0XxAWYXJy -YW5nZWRPYmplY3RzLmFydGlzdNMADgDrAD4DywPjA+WA0qED5IDYoQDygCZfEBtOU0NvbmRpdGlvbmFs -bHlTZXRzRWRpdGFibGXYAA4AXgO8A70AXwBgA74DvwPAAz0D6wPDAdMD7gPvASqA04CngNuAzYBigNqA -3F8QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMuYWxidW1fEBVhcnJhbmdlZE9iamVjdHMuYWxidW3TAA4A -6wA+A8sD9AP2gNKhA+SA2KEA8oAm1wAOAF4DvAO9AF8AYAO/A8AAHwP7A8MAYgP+ASqA04ACgN+AzYAK -gN5fEBN2YWx1ZTogc2VhcmNoU3RyaW5nXHNlYXJjaFN0cmluZ9gADgBeA7wDvQBfAGADvgO/A8ADPQQE -A8MB1AQHBAgBKoDTgKeA4oDNgGeA4YDjXxAddmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5sZW5ndGhfEBZh -cnJhbmdlZE9iamVjdHMubGVuZ3Ro0wAOAOsAPgPLBA0ED4DSoQPkgNihAPKAJtgADgBeA7wDvQBfAGAD -vgO/A8ADPQQUA8MB1wQXBBgBKoDTgKeA5oDNgHeA5YDnXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50 -cmFja18QFWFycmFuZ2VkT2JqZWN0cy50cmFja9MADgDrAD4DywQdBB+A0qED5IDYoQDygCbYAA4AXgO8 -A70AXwBgA74DvwPAAz0EJAPDAdUEJwQoASqA04CngOqAzYBtgOmA618QG3ZhbHVlOiBhcnJhbmdlZE9i -amVjdHMueWVhcl8QFGFycmFuZ2VkT2JqZWN0cy55ZWFy0wAOAOsAPgPLBC0EL4DSoQPkgNihAPKAJtgA -DgBeA7wDvQBfAGADvgO/A8ADPQQ0A8MB0QQ3BDgBKoDTgKeA7oDNgEuA7YDvXxAcdmFsdWU6IGFycmFu -Z2VkT2JqZWN0cy50aXRsZV8QFWFycmFuZ2VkT2JqZWN0cy50aXRsZdMADgDrAD4DywQ9BD+A0qED5IDY -oQDygCbXAA4AXgO8A70AXwBgA78DwAAfBEQERQM9BEcBKoDTgAKA84DygKeA8V8QG2NvbnRlbnRBcnJh -eTogcXVlcnkucmVzdWx0c1xjb250ZW50QXJyYXldcXVlcnkucmVzdWx0c9gADgBeA7wDvQBfAGADvgO/ -A8ADPQROA8MB1gRRBFIBKoDTgKeA9oDNgHKA9YD3XxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5nZW5y -ZV8QFWFycmFuZ2VkT2JqZWN0cy5nZW5yZdMADgDrAD4DywRXBFmA0qED5IDYoQDygCbSAA4APgRcBF2A -+68QIQKOA3cCIgERAz0BgAKkATgAbQHUAdIB1gRqAkAB1wE+AdEBOQJaATUBNgLtAnUBbABwAWEDagMK -AGIB1QHmAZsB04B2gLaAYYAvgKeAP4B7gI2AC4BngFuAcoD5gGaAd4A3gEuAlIBrgDWAO4CPgHGAg4AO -gIeAs4CZgAqAbYBUgEOAYtIADgAyADMEgYAEgPpdTlNBcHBsaWNhdGlvbtIANwA4BIQA/aIA/QA70gAO -AD4EXASHgPuvECEB1gNqAdIAHwAfATYB1wBtAREBgAGAAYAAHwHTAYABNQGAAG0B1ABtAG0BOAHVATYA -YgE2AB8BOQBtAYAB0QE2AYCAcoCzgFuAAoACgDuAd4ALgC+AP4A/gD+AAoBigD+ANYA/gAuAZ4ALgAuA -jYBtgDuACoA7gAKAlIALgD+AS4A7gD/SAA4APgRcBKuA+68QIgKOA3cCIgERAz0BgAKkATgAbQHUAdIB -1gRqAkAB1wE+AdEBOQFsATUBNgLtAloCdQNqAWEAcAAfAGIDCgGbAdUB5gHTgHaAtoBhgC+Ap4A/gHuA -jYALgGeAW4BygPmAZoB3gDeAS4CUgIOANYA7gI+Aa4BxgLOAh4AOgAKACoCZgEOAbYBUgGLSAA4APgRc -BNCA+68QIgTRBNIE0wTUBNUE1gTXBNgE2QTaBNsE3ATdBN4E3wTgBOEE4gTjBOQE5QTmBOcE6ATpBOoE -6wTsBO0E7gTvBPAE8QTygP+BAQCBAQGBAQKBAQOBAQSBAQWBAQaBAQeBAQiBAQmBAQqBAQuBAQyBAQ2B -AQ6BAQ+BARCBARGBARKBAROBARSBARWBARaBAReBARiBARmBARqBARuBARyBAR2BAR6BAR+BASBfEB1U -ZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktMl8QGk1lbnUgSXRlbSAoU2hvdyBpbiBGaW5kZXIpXxAd -VGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTFfEBFQYW5lbCAoU3BvdGxpZ2h0KV8QHVNwb3RsaWdo -dCBQbGF5bGlzdCBDb250cm9sbGVyXxBKU3BvdGxpZ2h0IFBsYXlsaXN0IFZpZXcgKFRpdGxlLCBBcnRp -c3QsIEFsYnVtLCBMZW5ndGgsIFllYXIsIEdlbnJlLCBUcmFjaylfEB1UZXh0IEZpZWxkIENlbGwgKFRl -eHQgQ2VsbCktM18QGlN0YXRpYyBUZXh0IChTZWFyY2ggUGF0aDopXENvbnRlbnQgVmlld18QFVRhYmxl -IENvbHVtbiAobGVuZ3RoKV8QFVRhYmxlIENvbHVtbiAoYXJ0aXN0KV8QFFRhYmxlIENvbHVtbiAoZ2Vu -cmUpW0FwcGxpY2F0aW9uXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTZfEBRUYWJsZSBDb2x1 -bW4gKHRyYWNrKV8QHUJ1dHRvbiBDZWxsIChBZGQgdG8gUGxheWxpc3QpXxAUVGFibGUgQ29sdW1uICh0 -aXRsZSlfEBpQb3AgVXAgUGF0aCBDb250cm9sIFdpZGdldF8QEVZlcnRpY2FsIFNjcm9sbGVyXxAdUHVz -aCBCdXR0b24gKEFkZCB0byBQbGF5bGlzdClbU2Nyb2xsIFZpZXdfEB5UZXh0IEZpZWxkIENlbGwgKFNl -YXJjaCBQYXRoOilfEBtUZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbClfEB1UZXh0IEZpZWxkIENlbGwg -KFRleHQgQ2VsbCktNV8QFU1lbnUgKENvbnRleHR1YWxNZW51KV8QE0hvcml6b250YWwgU2Nyb2xsZXJf -EBFTZWFyY2ggRmllbGQgQ2VsbFxGaWxlJ3MgT3duZXJcU2VhcmNoIEZpZWxkWVBhdGggQ2VsbF8QEVRh -YmxlIEhlYWRlciBWaWV3XxATVGFibGUgQ29sdW1uICh5ZWFyKV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4 -dCBDZWxsKS00XxAUVGFibGUgQ29sdW1uIChhbGJ1bSnSAA4APgRcBReA+6IDPQGAgKeAP9IADgA+BFwF -HID7ogNMAaaAqIBA0gAOAD4EXAUhgPuvEDcAWwBSAiIDPQKkAFEAbQHUAdIEagBPATkBbABMAu0AcAFh -A2oAHwBiAFoAXABTAE4CjgN3AE0BEQBWAYAASABJATgB1gBXAkAB1wBQAT4B0QJ1AloBNQE2AFkASwBU -AEoDCgBYAdUB5gGbAFUB04DwgMmAYYCngHuAx4ALgGeAW4D5gMOAlICDgK+Aj4AOgIeAs4ACgAqA7ID0 -gMuAwYB2gLaAsoAvgN2AP4AJgC6AjYBygOCAZoB3gMWAN4BLgHGAa4A1gDuA6ICmgNSApICZgOSAbYBU -gEOA2YBi0gAOAD4EXAVbgPuvEDcFXAVdBV4FXwVgBWEFYgVjBWQFZQVmBWcFaAVpBWoFawVsBW0FbgVv -BXAFcQVyBXMFdAV1BXYA8gV4BXkFegV7BXwFfQV+BX8FgAWBBYIFgwWEBYUFhgWHBYgFiQWKBYsFjAWN -BY4FjwWQBZEFkoEBJYEBJoEBJ4EBKIEBKYEBKoEBK4EBLIEBLYEBLoEBL4EBMIEBMYEBMoEBM4EBNIEB -NYEBNoEBN4EBOIEBOYEBOoEBO4EBPIEBPYEBPoEBP4AmgQFAgQFBgQFCgQFDgQFEgQFFgQFGgQFHgQFI -gQFJgQFKgQFLgQFMgQFNgQFOgQFPgQFQgQFRgQFSgQFTgQFUgQFVgQFWgQFXgQFYgQFZgQFaEKYQPRAn -ECwQlxAgECIT//////////0QrxBYEBsQoxBQEDgQGhCrELUQNxBdEGYQnRChECsQrBCwEJoQHBCzEEgQ -TxAeEGkQKBAdEJUQJBAqECkQBRAYEF4QoBBoEJ8QWRBrEB8QJRBlECHSAA4APgBGBceAKKDSAA4APgRc -BcqA+6DSAA4APgRcBc2A+6DSADcAOAXPBdCiBdAAO15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/ -AEQAUgBUAGYDKAMuA3kDgAOHA5UDpwPDA9ED3QPpA/cEAgQQBCwEOgRNBF8EeQSDBJAEkgSVBJcEmgSd -BJ8EoQSjBKYEqQSrBK4EsASyBLQEtwS5BLwExQTRBNME1QTxBPoFAwUOBRMFIgUrBT4FRwVSBVQFVQVe -BWUFcgV4BYEFgwWwBbIFtAW2BbgFugW8Bb4FwAXCBcQFxgXIBcoFzAXOBdAF0gXUBdYF2AXaBesF+QYC -BgoGDAYOBhAGEgYzBkUGTQZUBl0GZwZwBnwGfgaABoIGhAaHBogGigaMBqkGtAbABsIGxAbGBskGywbN -Bs8G6AcdBykHPgdSB10HZwd1B4IHlQepB74H0QfdB+IH5AfmB+gH6gfsB+4H8wf1B/YH+Af6B/wH/QgO -CBUIHAglCCcIMAgyCDUIQghLCFAIVwhsCHQIgQiNCJsInQifCKEIowilCKwIwgjPCNcI2QjbCN4I5wjs -CQEJAwkFCQcJCQkcCSkJKwkuCV8JaAl9CYwJngmwCbkJxwnJCc4J0AnSCdQJ1gnYCdoJ3QnfCeQJ6woB -CgoKEwogCi0KYgqICooKjAqOCpAKkgqUCpYKnAqlCqcKqgqsCrkKwQrDCsgKygrMCtEK0wrVCuMLDwsW -Cx8LJgs8C0kLUgtZC2gLcAuGC48LmguuC8ALyQvWC+QL8Av6DAEMDQwZDCIMKQxADE8MYAxiDGQMZgxo -DJ0Mqgy3DM0M2wzlDPMNDA0ZDSsNPw1JDVUNVw1ZDVsNXQ1fDWQNZg1oDWoNbA1uDXANcg2NDZcNnw2q -DbMNtQ3ADcINxA3GDcgNyg3rDe0N7w3xDfMN9g33DfkN+w4VDkYOXA5hDmMOZQ5nDmkOaw5tDm8OcQ5z -DngOgQ6TDpUOng6pDrIO8Q79DwYPEw8mDzMPPw9ND1sPXQ9fD2EPYw9lD2cPaQ9rD34PgQ+DD4UPhw+J -D4sPlA+WD6EPow+lD6cPqQ+rD9gP4g/sD/YP+A/6D/wP/hABEAMQBRAHEAkQCxAUEBYQGRAbEHoQnBCm -ELwQyRDeEPgRFBEvET4RShFpEXgRhBGGEYgRkRGTEZURlxGYEZoRoxGsEa8RsRGyEbQRthG4EboRvBG+ -EccR3xHrEfYSExIVEhcSGRIbEh0SHxJMEk4SUBJSElQSVhJYEloSXBJeEmASahJzEnwSkBKpEqsSrRKv -ErESsxLKEtMS3BLqEvMS9RMEEwYTCBMKEwwTDhMQExITOxNKE1cTZBNsE3cThhORE5wTnROfE6EToxOs -E64TtxPAE8ITyBPlE+oT7BPuE/AT8hP0E/oUCxQNFBYUGBQbFCgUKhQ2FEsUTRRPFFEUUxRlFG4UeRSN -FK4UsxS1FLcUuRS7FL0UwBTCFMwU4RTjFOUU5xTpFQIVDxURFR0VJhUvFTgVPRVLFXQVdRV3FXkVexWE -FYYVjxWRFZgVtRW3FbkVuxW9Fb8VxhXbFd0V3xXhFeMV7xYQFhIWFBYWFhgWGhYcFkUWRhZIFkoWTBZV -FlcWYBZiFmgWhRaHFokWixaNFo8WlRa2FrgWuha8Fr4WwBbCFu8W+Bb5FvoW/Bb+FwAXCRcLFxQXFhcd -FzoXPBc+F0AXQhdHF0kXUBdxF3MXdRd3F3kXexeAF4IXrxewF7EXsxe1F7cXwBfCF8sXzRfSF+8X8Rfz -F/UX9xf5F/4YHxghGCMYJRgnGCkYKxhYGFkYWhhcGF4YYBhpGGsYbRhzGJAYkhiUGJYYmBiaGKAYwRjD -GMUYxxjJGMsYzRj2GPcY+Rj7GP0Y/xkIGQoZEBktGS8ZMRkzGTUZNxk9GV4ZYBliGWQZZhloGWoZfxmB -GYMZhRmHGZEZnhmgGaUZvBnFGcoZ2RnxGfoaAxoOGjMaPRo/GkEaQxpFGkcaSRpLGlQabRp6GoMajhqZ -GsIaxBrGGsgayhrTGtUa1xrZGuIa/hsHGwkbDBsOGycbMBs5G0YbZxtpG2sbbRtvG3Ibcxt1G3cbjhuv -G7Qbthu4G7obvBu+G8MbxRvSG+cb6RvrG+0b7xv8HAUcEBw1HEEcQxxFHEccSRxLHEwcThxQHFkcWxxg -HGIcZByAHJgcsRzSHN4c9R0AHQUdBx0JHQsdDh0QHRIdGx0dHR4dJx0wHTsdRB1PHV0daB1xHXgdkB2b -HaQdqR28HcMd1B3WHdgd2h3cHegd+R37Hf0d/x4BHiIePx5KHlwecB5/HoAegh6EHoUehx6JHosejR6r -Hr8eyB7KHtke2x7dHt8e4R7jHuUe5x71Hvoe/B8FHwofJh83HzkfOx89Hz8fTh9XH14fdh+HH4kfix+N -H48fnB+kH7Afsh+0H7YfxR/OH9Af0x/VH/YgCiAVICMgLSA6IEEgQyBFIEogTCBRIFMgVSBXIGYgcyCC -IIQghiCIIJAgoiCrILAgwyDQINIg1CDWIOkg8iD3IQIhCyEQIRUhJiEoISohLCEuIUMhVCFWIVghWiFc -IXEhgiGEIYYhiCGKIZQhpSGnIakhqyGtIbghySHLIc0hzyHRIekiCiIUIh4iKCJHIkkiSyJNIk8iUSJT -IlUiciJ4Io4imyKdIqAioiKlIqciwCLZIuIi5yLwIvcjDyMwIzIjNCM2IzgjOiM8Iz4jXiN3I4QjhiOJ -I4sjjiOQI64jzyPRI9Mj1SPXI9kj2yPdI/wkFCQhJCMkJiQoJCskLSRKJEwkTiRQJFIkVCRWJGwkeSSa -JJwkniSgJKIkpCSmJKgkyCThJO4k8CTzJPUk+CT6JRslHSUfJSElIyUlJSclKSVIJWAlbSVvJXIldCV3 -JXklmiWcJZ4loCWiJaQlpiWoJcYl3SXqJewl7yXxJfQl9iYXJhkmGyYdJh8mISYjJiUmRCZcJmkmayZu -JnAmcyZ1JpImlCaWJpgmmiacJp4mvCbJJtcm+Cb6Jvwm/icAJwInBCcGJyUnPSdKJ0wnTydRJ1QnVidf -J2EnpieoJ6onrCeuJ7Ansie0J7YnuCe6J7wnvifAJ8InxCfGJ8gnyifMJ84n0CfSJ9Qn1ifYJ9on3Cfe -J+An4ifkJ+Yn6CfxJ/Mn9SgDKAwoESgaKBwoYShjKGUoZyhpKGsobShvKHEocyh1KHcoeSh7KH0ofyiB -KIMohSiHKIkoiyiNKI8okSiTKJUolyiZKJsonSifKKEooyisKK4o9Sj3KPko+yj9KP8pASkDKQUpBykJ -KQspDSkPKREpEykVKRcpGSkbKR0pHykhKSMpJSknKSkpKyktKS8pMSkzKTUpNyk5KUIpRCmLKY0pkCmT -KZYpmSmcKZ8poimlKagpqymuKbEptCm3KbopvSnAKcMpxinJKcwpzynSKdUp2CnbKd4p4SnkKecp6int -KfAqECotKk0qYSqBKs4q7isLKxgrMCtIK18rayuLK6IrwivZK/YsCiwqLDYsVyx1LJUsrSzDLNcs5Czx -LPstDy0lLUUtXC1lLWctbC1uLXAteS17LYAtgi2ELY0tjy4ALgIuBC4GLgguCi4MLg4uEC4SLhQuFi4Y -LhouHC4eLiAuIi4kLiYuKC4qLiwuLi4wLjIuNC42LjguOi48Lj4uQC5CLkQuRi5ILkouTC5OLlAuUi5U -LlYuWC5aLlwuXi5gLmIuZC5mLmguai5sLm4udy55Luou7S7wLvMu9i75Lvwu/y8CLwUvCC8LLw4vES8U -LxcvGi8dLyAvIy8mLykvLC8vLzIvNS84LzsvPS9AL0MvRi9JL0wvTy9SL1UvWC9bL14vYS9kL2cvai9t -L3Avcy92L3kvfC9/L4IvhS+IL4svji+QL5IvlC+WL5gvmi+cL6Uvpy+pL6svrS+vL7Evsy+1L7cvuS+7 -L70vvy/BL8MvxS/HL8kvyy/NL88v0S/TL9Uv1y/ZL9sv3S/fL+Ev4y/lL+cv6S/rL+0v7y/xL/Mv9S/3 -L/kwAjAEMAUwDjAQMBEwGjAcMB0wJjArAAAAAAAAAgIAAAAAAAAF0QAAAAAAAAAAAAAAAAAAMDo +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEBYgALAAwAMQA1ADYAPAA9 +AEEARQBdAGUAdAB1AHYAgACBAIIAgwCEAIUAhgCHAIsAjACOAJAAkwCUAJgAnQDJAMoAywDdAAsA3gDm +APEA8gD3AP0BEwEUARcBIQE0AUABQQFJAUoBTQFSAVUBXQFeAV8BYgFoAXIBcwF4AX0BfgGBAYYBhwGJ +AYwBlQGcAZ0BogGjAaYBrQG2AbwBvQHEAc8B1gHXAXIB3wHpAe8B8AH3AgACBgIHAg4CFgIcAh0CJAIp +AioCLQIuAi8CNAI/AkYCSwJMAk0CTgJZAlwCXwJjAmQCaQJyAnMChQKGAocCiAKLAo4CjwKSApcCnQKe +AqICsQKyArcCuAK5ArwCwALBAsQCxgLHAswC5ALlAuYC5wLoAvAC+AL8Av0DAAMMAw0DDgMRAxsDHADx +AyADIQMkAy0DLgNAA0UDRgNRA1IDUwNcA10DYQNqA2sDbAC8A20DcQNyA3UDeQOBA4IDiwOMA5EDkgOU +AAsDlQOXA5gDmQOcA50DogOjA6gDqQOuA68DtAO1A7oDuwPHA8gDyQPKA9AD0QPTA9YD3gPfA+AD5gPu +A+8D8AP2A/0D/gP/BAcECAQJBA8EFwQYBBkEHwQgBCEEKQQqBCsELAQfBDIEMwQ7BDwEPQRDBEsETARN +BFMEWwRcBF0EYwSHBIoEiwSNBLEE1gT7BPwE/QT+BP8FAAUBBQIFAwUEBQUFBgUHBQgFCQUKBQsFDAUN +BQ4FDwUQBREFEgUTBRQFFQUWBRcFGAUZBRoFGwUcBR0FIgUnBWEFmwWcBZ0FngWfBaAFoQWiBaMFpAWl +AnwFpgWnBagFqQWqANUFqwFaBawFrQWuBa8FsAWxBbIFswW0BbUFtgW3BbgBCAW5BboFuwW8Bb0FvgW/ +BcAFwQXCBcMFxAXFBcYFxwXIBckFygXLBcwFzQXQBdMF1lUkbnVsbN8QEgANAA4ADwAQABEAEgATABQA +FQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMFZOU1Jv +b3RWJGNsYXNzXU5TT2JqZWN0c0tleXNfEA9OU0NsYXNzZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlP +aWRzVmFsdWVzXU5TQ29ubmVjdGlvbnNbTlNOYW1lc0tleXNbTlNGcmFtZXdvcmtdTlNDbGFzc2VzS2V5 +c1pOU09pZHNLZXlzXU5TTmFtZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlDb25uZWN0b3JzXU5TRm9u +dE1hbmFnZXJfEBBOU1Zpc2libGVXaW5kb3dzXxAPTlNPYmplY3RzVmFsdWVzXxAXTlNBY2Nlc3NpYmls +aXR5T2lkc0tleXNZTlNOZXh0T2lkXE5TT2lkc1ZhbHVlc4ACgQFhgPuBASWBAWCACIEBAIAFgQEkgQEm +gQEBgQFegACABoD/gQFfELmBASfSAA4AMgAzADRbTlNDbGFzc05hbWWABIADXxAZU3BvdGxpZ2h0V2lu +ZG93Q29udHJvbGxlctIANwA4ADkAOlgkY2xhc3Nlc1okY2xhc3NuYW1logA6ADteTlNDdXN0b21PYmpl +Y3RYTlNPYmplY3RfEBBJQkNvY29hRnJhbWV3b3Jr0gAOAD4APwBAWk5TLm9iamVjdHOAB6DSADcAOABC +AEOjAEMARAA7XE5TTXV0YWJsZVNldFVOU1NldNIADgA+AEYAR4AVrxAVAEgASQBKAEsATABNAE4ATwBQ +AFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcgAmAHIBkgHCAe4CKgMGAw4DFgMeAyYDLgNOA14DbgN6A4oDo +gO+A84D31AAOAF4AXwBgAGEAHwBjAGRdTlNEZXN0aW5hdGlvblhOU1NvdXJjZVdOU0xhYmVsgBuAAoAK +gBrYAGYADgBnAGgAaQBqAGsAMgBsAG0AbgBsAHAAcQByAHNfEBpOU0ZpbHRlclJlc3RyaWN0c0luc2Vy +dGlvbl8QE05TT3JpZ2luYWxDbGFzc05hbWVaTlNFZGl0YWJsZV8QD19OU01hbmFnZWRQcm94eV8QEU5T +T2JqZWN0Q2xhc3NOYW1lXk5TRGVjbGFyZWRLZXlzCYAZgAwJgBeAFoANgAtfEBtTcG90bGlnaHRQbGF5 +bGlzdENvbnRyb2xsZXJfEBFOU0FycmF5Q29udHJvbGxlctIADgA+AEYAeIAVpwB5AHoAewB8AH0AfgB/ +gA6AD4AQgBGAEoATgBRVdGl0bGVUeWVhclZhcnRpc3RVYWxidW1VZ2VucmVWbGVuZ3RoVXRyYWNr0gA3 +ADgAiACJowCJAIoAO15OU011dGFibGVBcnJheVdOU0FycmF5XVBsYXlsaXN0RW50cnnRAA4AjYAY0gA3 +ADgAjwBpogBpADvSADcAOACRAJKiAJIAO15OU0NsYXNzU3dhcHBlcl8QGXNwb3RsaWdodFdpbmRvd0Nv +bnRyb2xsZXLSADcAOACVAJajAJYAlwA7XxAUTlNOaWJPdXRsZXRDb25uZWN0b3JeTlNOaWJDb25uZWN0 +b3LUAA4AXgBfAGAAYQCaAGMAnIAbgB2ACoBj3xAXAJ4AnwAOAKAAZwChAKIAowCkAKUApgCnAKgAqQCq +AKsArAAyAK0ArgCvALAAsQCyALMAbQC1ALYAtwC4AGwAugC7ALwAvQC+AL8AbADBAMIAwwDEAMUAsgDH +AMhfEA9OU05leHRSZXNwb25kZXJfEB9OU0RyYWdnaW5nU291cmNlTWFza0Zvck5vbkxvY2FsWU5TVHZG +bGFnc1xOU0hlYWRlclZpZXdfEBFOU0JhY2tncm91bmRDb2xvcl8QEk5TQWxsb3dzVHlwZVNlbGVjdFxO +U0Nvcm5lclZpZXdfEBdOU0ludGVyY2VsbFNwYWNpbmdXaWR0aF8QGU5TQ29sdW1uQXV0b3Jlc2l6aW5n +U3R5bGVfEBhOU0ludGVyY2VsbFNwYWNpbmdIZWlnaHRYTlN2RmxhZ3NbTlNGcmFtZVNpemVZTlNFbmFi +bGVkXk5TQXV0b3NhdmVOYW1lWE5TV2luZG93W05TR3JpZENvbG9yXxAcTlNEcmFnZ2luZ1NvdXJjZU1h +c2tGb3JMb2NhbFtOU1N1cGVydmlld15OU1RhYmxlQ29sdW1uc1tOU1Jvd0hlaWdodIAgEACAGRP///// +28CAAIAfgCOAPAmAJyNACAAAAAAAABABI0AAAAAAAAAAERESgCEJgGKAIoAegF8QD4AggCsjQDEAAAAA +AABfEBVTcG90bGlnaHRQbGF5bGlzdFZpZXdbTlNUYWJsZVZpZXfbAJ4ADgDMAM0AzgCoAM8ArADQAK8A +0QDSANMA1ADVANYA1wCaAMIAuADSAJpXTlNGcmFtZVlOU2N2RmxhZ3NaTlNTdWJ2aWV3c1lOU0RvY1Zp +ZXdZTlNCR0NvbG9yXU5TTmV4dEtleVZpZXeAKICUgJMQAoCSEQkAgB2AIoA8gCiAHVp7NDI1LCAyMTF9 +1wCeAA4AqACpAKwArwDKAN8A4ADhAOIAwgDfAJqAJIAmEQEAgCWAIoAkgB3bAJ4ADgDNAM4AqACpAM8A +rADQAK8A0QDSANMA6QDqANcA6wC3AMIAuADSALeAKICUEASAm4CcgCOAIoA8gCiAI1l7NDI1LCAxN33S +ADcAOADzAPSkAPQA9QD2ADtfEBFOU1RhYmxlSGVhZGVyVmlld1ZOU1ZpZXdbTlNSZXNwb25kZXLWAJ4A +DgDMAKgArACvANIA+QD6AOEAwgDSgCiAKoApgCKAKN8QDwCeAP4ADgDMAP8ApAEAAM4BAQCoAKwArwEC +ANEBAwEEAQUBBgEHAQgAugDfAQsBDAENAMIBBAEQALIAsltOU0hTY3JvbGxlclhOU3NGbGFnc18QEE5T +SGVhZGVyQ2xpcFZpZXdcTlNTY3JvbGxBbXRzW05TVlNjcm9sbGVyXU5TQ29udGVudFZpZXeAZoCZgJ6A +nRAQgCeAJICRTxAQAAAAAAAAAABBmAAAQZgAABEBEoAigGaAlYAggCBfEBR7ezQyNSwgMH0sIHsxNiwg +MTd9fdIANwA4ARUBFqQBFgD1APYAO11fTlNDb3JuZXJWaWV30gAOAD4ARgEZgBWnARoBGwEcAR0BHgEf +ASCALIBDgEqAToBTgFeAW9oBIgAOASMBJAElASYBJwEoASkAygBsASsBLAB5AS4BLwEwATEBMgCaXk5T +SXNSZXNpemVhYmxlXE5TSGVhZGVyQ2VsbFxOU0lkZW50aWZpZXJXTlNXaWR0aFpOU0RhdGFDZWxsXk5T +UmVzaXppbmdNYXNrWk5TTWluV2lkdGhaTlNNYXhXaWR0aAmAQoAtgA4jQF9AAAAAAACAORADI0BEgAAA +AAAAI0CPQAAAAAAAgB3XATUADgCiATYBNwE4ATkBOgE7ATwBPQE+ALMBP1tOU0NlbGxGbGFnc1pOU0Nv +bnRlbnRzWU5TU3VwcG9ydFxOU0NlbGxGbGFnczJbTlNUZXh0Q29sb3ISBIH+AIA4gDKALoAvgDRVVGl0 +bGXUAA4BQgFDAUQBRQFGAUcBSFZOU1NpemVWTlNOYW1lWE5TZkZsYWdzgDEjQCYAAAAAAACAMBEMHFxM +dWNpZGFHcmFuZGXSADcAOAFLAUyiAUwAO1ZOU0ZvbnTTAA4BTgFPAVABMAFRXE5TQ29sb3JTcGFjZVdO +U1doaXRlgDNLMC4zMzMzMzI5OQDSADcAOAFTAVSiAVQAO1dOU0NvbG9y1QAOAVQBTgFWAVcBUAFZAVoB +WwFcW05TQ29sb3JOYW1lXU5TQ2F0YWxvZ05hbWWAM4A3EAaANoA1VlN5c3RlbV8QD2hlYWRlclRleHRD +b2xvctMADgFOAU8BUAEwAWGAM0IwANIANwA4AWMBZKUBZAFlAWYBZwA7XxARTlNUYWJsZUhlYWRlckNl +bGxfEA9OU1RleHRGaWVsZENlbGxcTlNBY3Rpb25DZWxsVk5TQ2VsbNgBNQAOAKIBNgE3AWkBOAE5AWoB +awC4AW0BbgCaAXABcV1OU0NvbnRyb2xWaWV3EhQh/kCAQYA8gDqAO4AdEQgAgD9ZVGV4dCBDZWxs1AAO +AUIBQwFEAUUBdQFHAXeAMSNAKgAAAAAAAIAwEQQU1QAOAVQBTgFWAVcBUAF6AVoBewFcgDOAPoA9gDVf +EBZjb250cm9sQmFja2dyb3VuZENvbG9y0wAOAU4BTwFQATABgIAzSzAuNjY2NjY2NjkA1QAOAVQBTgFW +AVcBUAFZAVoBhAFcgDOAN4BAgDVfEBBjb250cm9sVGV4dENvbG9y0gA3ADgBiAFlpAFlAWYBZwA70gA3 +ADgBigGLogGLADtdTlNUYWJsZUNvbHVtbtoBIgAOASMBJAElASYBJwEoASkAygBsASsBjwB7AZEBkgEw +AZMBMgCaCYBCgESAECNAXgAAAAAAAIBJI0BCAAAAAAAAgB3XATUADgCiATYBNwE4ATkBlgE7AZgBmQE+ +ALMBPxIEAf4AgDiARoBFgC+ANFZBcnRpc3TVAA4BVAFOAVYBVwFQAZ8BWgGgAVyAM4BIgEeANVtoZWFk +ZXJDb2xvctMADgFOAU8BUAEwAaWAM0IxANgBNQAOAKIBNgE3AWkBOAE5AWoBawC4AW0BbgCaAXABcYBB +gDyAOoA7gB2AP9oBIgAOASMBJAElASYBJwEoASkAygBsASsBsAB8AbIBswEwAbQBMgCaCYBCgEuAESNA +XoAAAAAAAIBNI0BDgAAAAAAAgB3XATUADgCiATYBNwE4ATkBlgE7AZgBuQE+ALMBP4A4gEaATIAvgDRV +QWxidW3YATUADgCiATYBNwFpATgBOQFqAWsAuAFtAW4AmgFwAXGAQYA8gDqAO4AdgD/bASIBxQEjASQA +DgElASYBJwEoASkAygBsAGwByAB+ASsBywHMATABzQEyAJpYTlNIaWRkZW4JCYBPgBOAQiNASQAAAAAA +AIBRI0BET2AgAAAAgB3XATUADgCiATYBNwE4ATkBlgE7AZgB0gE+AdQBP4A4gEaAUIAvEgQAAACANFZM +ZW5ndGjYATUADgCiATYBNwFpATgBOQFqAWsAuAHaAW4AmgHdAXGAQYA8gFKAO4AdEgQACACAP9sBIgHF +ASMBJAAOASUBJgEnASgBKQDKAGwAbAHiAHoBKwHlAeYBMAHnATIAmgkJgFSAD4BCI0BHgAAAAAAAgFYj +QCQAAAAAAACAHdcBNQAOAKIBNgE3ATgBOQGWATsBmAHsAT4B1AE/gDiARoBVgC+ANFRZZWFy2AE1AA4A +ogE2ATcBaQE4ATkBagFrALgB2gFuAJoB3QFxgEGAPIBSgDuAHYA/2wEiAcUBIwEkAA4BJQEmAScBKAEp +AMoAbABsAfoAfQErAf0B/gEwAecBMgCaCQmAWIASgEIjQEcAAAAAAACAWoAd1wE1AA4AogE2ATcBOAE5 +AZYBOwGYAgMBPgCzAT+AOIBGgFmAL4A0VUdlbnJl2AE1AA4AogE2ATcBaQE4ATkBagFrALgB2gFuAJoB +cAFxgEGAPIBSgDuAHYA/2gEiAA4BIwEkASUBJgEnASgBKQDKAGwBKwIRAH8B/QITATACFAH9AJoJgEKA +XIAUgF4jQCAAAAAAAACAHdcBNQAOAKIBNgE3ATgBOQGWATsBmAIZAT4B1AE/gDiARoBdgC+ANFVUcmFj +a9gBNQAOAKIBNgE3AWkBOAE5AWoBawC4AW0BbgCaAd0BcYBBgDyAOoA7gB2AP9UADgFUAU4BVgFXAVAC +JgFaAicBXIAzgGGAYIA1WWdyaWRDb2xvctMADgFOAU8BUAEwAiyAM0QwLjUAXxAUQ29nU3BvdGxpZ2h0 +UGxheWxpc3RZdGFibGVWaWV31AAOAF4AXwBgAGECMQAfAjOAG4BlgAKAb9kAngAOAMwBZwI1AKgAqgCs +AK8BBAI3AjgCOQI6AjsAbADCAQRbTlNEcmFnVHlwZXOAZoBugGqAa4BnEQEhCYAigGbXAJ4ADgDOAKgA +qQCsAK8AwgJBAkIA4QJDAMICRYAigLyAkIC6gCKAu9IADgA+AD8CSIAHogJJAkqAaIBpXxAZQXBwbGUg +VVJMIHBhc3RlYm9hcmQgdHlwZV8QFU5TRmlsZW5hbWVzUGJvYXJkVHlwZV8QFnt7MTg5LCAxMH0sIHsy +NzEsIDI2fX3YAk8BNQAOATcBaQE4AlACUQDVAlICUwFuAjECVgJXAjFbTlNQYXRoU3R5bGVfEBROU1Bh +dGhDb21wb25lbnRDZWxsc1pOU0RlbGVnYXRlEhQh/gGAbYA7gGURgACAbIBl0gAOAD4ARgJbgBWg0gA3 +ADgCXQJepAJeAWYBZwA7Wk5TUGF0aENlbGzSADcAOAJgAmGlAmECYgD1APYAO11OU1BhdGhDb250cm9s +WU5TQ29udHJvbFtwYXRoQ29udHJvbNQADgBeAF8AYAJlAB8CZwJogHqAAoBxgHnYAJ4ADgDMAWcAqACq +AKwArwEEAmsCbAJtAm4AbADCAQSAZoB4gHKAcxEBCQmAIoBmXxAXe3szMzUsIDI3NX0sIHsxMzEsIDMy +fX3cATUADgJ0AnUCdgJ3ATYBNwFpAngBOAJ5AZYCegJ7AnwCfQJ+An8BbgJnAoICgwKEXxATTlNBbHRl +cm5hdGVDb250ZW50c18QEk5TUGVyaW9kaWNJbnRlcnZhbF5OU0J1dHRvbkZsYWdzMl8QD05TS2V5RXF1 +aXZhbGVudF8QD05TUGVyaW9kaWNEZWxheV1OU0J1dHRvbkZsYWdzgHeAdRAZEIGAdoB0gDuAcRDIEggA +AAAT/////4aCQP9fEA9BZGQgdG8gUGxheWxpc3RQUQ3SADcAOAKJAoqkAooBZgFnADtcTlNCdXR0b25D +ZWxs0gA3ADgCjAKNpQKNAmIA9QD2ADtYTlNCdXR0b25eYWRkVG9QbGF5bGlzdDrSADcAOAKQApGjApEA +lwA7XxAVTlNOaWJDb250cm9sQ29ubmVjdG9y1AAOAF4AXwBgAGEClACaApaAG4B8gB2AidMADgKYApkC +mgKbApxXTlNUaXRsZVtOU01lbnVJdGVtc4CIgH2Afl5Db250ZXh0dWFsTWVuddIADgA+AEYCoIAVoQKh +gH/YAA4CmAKjAqQCpQKmAqcCqAKpAqoCqwJ7Aq0CrgKvApRfEBFOU0tleUVxdWl2TW9kTWFza1pOU0tl +eUVxdWl2XU5TTW5lbW9uaWNMb2NZTlNPbkltYWdlXE5TTWl4ZWRJbWFnZVZOU01lbnWAh4CAEgAQAACA +dRJ/////gIGAhYB8XlNob3cgaW4gRmluZGVy0wAOADICswK0ArUCtl5OU1Jlc291cmNlTmFtZYCEgIKA +g1dOU0ltYWdlXxAPTlNNZW51Q2hlY2ttYXJr0gA3ADgCugK7ogK7ADtfEBBOU0N1c3RvbVJlc291cmNl +0wAOADICswK0ArUCv4CEgIKAhl8QEE5TTWVudU1peGVkU3RhdGXSADcAOALCAsOiAsMAO1pOU01lbnVJ +dGVt0gA3ADgCxQKoogKoADtUbWVuddQADgBeAF8AYABhAskCygLLgBuAn4CLgMDdAs0ADgLOAs8C0ALR +AtIC0wLUAtUC1gLXAtgBBALaAtsC3ALcAt4C3wLgAuEA1QDFAuIAK1xOU1dpbmRvd1ZpZXdcTlNTY3Jl +ZW5SZWN0XxATTlNGcmFtZUF1dG9zYXZlTmFtZV1OU1dpbmRvd1RpdGxlWU5TV1RGbGFnc11OU1dpbmRv +d0NsYXNzXxAWTlNXaW5kb3dDb250ZW50TWluU2l6ZVxOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tp +bmdfEBFOU1dpbmRvd1N0eWxlTWFza1lOU01pblNpemVbTlNWaWV3Q2xhc3OAZoC/gL2AjYCNEiAAAACA +joCPgIyAvoAAXxAYe3sxOTYsIDE5Mn0sIHs0ODAsIDMyMH19WVNwb3RsaWdodFdOU1BhbmVsWns0MDAs +IDI2MH3SAA4APgBGAuqAFaUCZwDSAskC7gIxgHGAKICfgLOAZdIADgA+AEYC8oAVpQCyARABBQDfALqA +IICVgJmAJIAn0gAOAD4ARgL6gBWhAJqAHV8QFXt7MCwgMTd9LCB7NDI1LCAyMTF9fdIANwA4Av4C/6QC +/wD1APYAO1pOU0NsaXBWaWV32QCeAwEADgDMAKgArAMCAK8DAwDSANIDBgMHAOEAwgMJANIDC1hOU1Rh +cmdldFhOU0FjdGlvbllOU1BlcmNlbnSAKIAogJiAloAigJeAKCM/6jeEoAAAAF8QFnt7NDI1LCAxN30s +IHsxNSwgMjExfX1cX2RvU2Nyb2xsZXI60gA3ADgDDwMQpQMQAmIA9QD2ADtaTlNTY3JvbGxlctoAngMB +AA4AzAD/AKgArAMCAK8DAwDSANIDBgMVALwDFgDCAwkA0gMagCiAKICYgJoT/////4AAAQCAIoCXgCgj +P+2kYQAAAABfEBl7ey0xMDAsIC0xMDB9LCB7NDQwLCAxNX190gAOAD4ARgMegBWhALeAI18QFnt7MjAs +IDQ0fSwgezQ0MCwgMjI4fX3SADcAOAMiAyOkAyMA9QD2ADtcTlNTY3JvbGxWaWV32ACeAA4AzAFnAKgA +qgCsAK8BBAMmAycDKAMpAGwAwgEEgGaAsoCggKERAQoJgCKAZl8QFnt7MjAsIDI4Mn0sIHszMTMsIDIy +fX3dATUADgMvAKIBNgE3AWkBOAMwAzEDMgMzATkDNAM1AzYDNwJ7AW4CyQM7ALwAbAM9Az4BcV8QEk5T +Q2FuY2VsQnV0dG9uQ2VsbF8QEE5TVGV4dEJlemVsU3R5bGVfEBFOU0RyYXdzQmFja2dyb3VuZF8QEk5T +U2VhcmNoQnV0dG9uQ2VsbF8QEE5TTWF4aW11bVJlY2VudHMSFHH+QICxgKeAooB1gDuAnxIQAAQACYCk +EP+AP9UADgFUAU4BVgFXAVABnwFaA0MBXIAzgEiAo4A1XxATdGV4dEJhY2tncm91bmRDb2xvctwDAQE1 +AA4CdQJ2AncBNgFpAngBOAMCAnkDKANIAnoDSgCzAnsDTALJA04AswNPA1CAoRIAAf4AgHcQS4B1gKWA +nxEBkICmEghEQP9Wc2VhcmNoXxATX3NlYXJjaEZpZWxkU2VhcmNoOt0DAQE1AA4CdQJ2AncDVAE2AWkC +eAE4AwICeQMoA0gCegNKALMCewNYA1kCyQNOALMDWwNQXxAjTlNBY2Nlc3NpYmlsaXR5T3ZlcnJpZGRl +bkF0dHJpYnV0ZXOAoYB3gHWAqYCogJ+AsFVjbGVhctIADgA+AEYDX4AVoQNggKrTAA4DYgA+A2MDZANn +V05TLmtleXOAr6IDZQNmgKuArKIDaANpgK2Arl1BWERlc2NyaXB0aW9uXxApTlNBY2Nlc3NpYmlsaXR5 +RW5jb2RlZEF0dHJpYnV0ZXNWYWx1ZVR5cGVWY2FuY2Vs0gA3ADgDbgNvowNvA3AAO18QE05TTXV0YWJs +ZURpY3Rpb25hcnlcTlNEaWN0aW9uYXJ5XxATX3NlYXJjaEZpZWxkQ2FuY2VsOtIANwA4A3MDdKUDdAFl +AWYBZwA7XxARTlNTZWFyY2hGaWVsZENlbGzSADcAOAN2A3emA3cDeAJiAPUA9gA7XU5TU2VhcmNoRmll +bGRbTlNUZXh0RmllbGTYAJ4ADgDMAWcAqACqAKwArwEEA3sDfAN9AjsAbADCAQSAZoC5gLSAtQmAIoBm +XxAUe3s4OCwgMTR9LCB7OTYsIDE3fX3YATUADgCiATYBNwFpATgBOQODAWsDhQOGAW4C7gOJAXESBAH+ +QIBBgLeAtoA7gLMSEEAEAIA/XFNlYXJjaCBQYXRoOtUADgFUAU4BVgFXAVABegFaA48BXIAzgD6AuIA1 +XGNvbnRyb2xDb2xvctIANwA4A5MDeKUDeAJiAPUA9gA7Wns0ODAsIDMyMH3SADcAOAOWAPWjAPUA9gA7 +XxAVe3swLCAwfSwgezEyODAsIDc3OH19Wns0MDAsIDI4Mn3SADcAOAOaA5uiA5sAO18QEE5TV2luZG93 +VGVtcGxhdGVfEBVpbml0aWFsRmlyc3RSZXNwb25kZXLUAA4AXgBfAGAAYQBjAB8DoYAbgAqAAoDCXxAS +cGxheWxpc3RDb250cm9sbGVy1AAOAF4AXwBgAGECyQAfA6eAG4CfgAKAxFtzZWFyY2hGaWVsZNQADgBe +AF8AYAJlAGMCoQOtgHqACoB/gMZfEBJzaG93RW50cnlJbkZpbmRlcjrUAA4AXgBfAGAAYQBjAJoDs4Ab +gAqAHYDIWmRhdGFTb3VyY2XUAA4AXgBfAGAAYQLKAB8DuYAbgIuAAoDKVndpbmRvd9gADgBeA7wDvQBf +AGADvgO/A8AAYwPCA8MBHgPFA8YA1VlOU0tleVBhdGhZTlNCaW5kaW5nWU5TT3B0aW9uc18QHE5TTmli +QmluZGluZ0Nvbm5lY3RvclZlcnNpb26A0oAKgM6AzYBTgMyAz18QG3ZhbHVlOiBhcnJhbmdlZE9iamVj +dHMueWVhclV2YWx1ZV8QFGFycmFuZ2VkT2JqZWN0cy55ZWFy0wAOA2IAPgPLA8wDzoDRoQPNgNChA2mA +rl8QG05TQ29uZGl0aW9uYWxseVNldHNFZGl0YWJsZdIANwA4A9IDcKIDcAA70gA3ADgD1APVowPVAJcA +O18QFU5TTmliQmluZGluZ0Nvbm5lY3RvctgADgBeA7wDvQBfAGADvgO/A8AAYwPZA8MBHQPcA90A1YDS +gAqA1YDNgE6A1IDWXxAddmFsdWU6IGFycmFuZ2VkT2JqZWN0cy5sZW5ndGhfEBZhcnJhbmdlZE9iamVj +dHMubGVuZ3Ro0wAOA2IAPgPLA+ID5IDRoQPNgNChA2mArtgADgBeA7wDvQBfAGADvgO/A8AAYwPpA8MB +GgPsA+0A1YDSgAqA2YDNgCyA2IDaXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50aXRsZV8QFWFycmFu +Z2VkT2JqZWN0cy50aXRsZdMADgNiAD4DywPyA/SA0aEDzYDQoQNpgK7XAA4AXgO8A70AXwBgA78DwAAf +A/kDwwLJA/wA1YDSgAKA3YDNgJ+A3F8QE3ZhbHVlOiBzZWFyY2hTdHJpbmdcc2VhcmNoU3RyaW5n2AAO +AF4DvAO9AF8AYAO+A78DwABjBAIDwwEbBAUEBgDVgNKACoDggM2AQ4DfgOFfEB12YWx1ZTogYXJyYW5n +ZWRPYmplY3RzLmFydGlzdF8QFmFycmFuZ2VkT2JqZWN0cy5hcnRpc3TTAA4DYgA+A8sECwQNgNGhA82A +0KEDaYCu2AAOAF4DvAO9AF8AYAO+A78DwAAfBBIDwwIxBBUEFgDVgNKAAoDkgM2AZYDjgOVfEBp2YWx1 +ZTogc3BvdGxpZ2h0U2VhcmNoUGF0aF8QE3Nwb3RsaWdodFNlYXJjaFBhdGjTAA4DYgA+A8sEGwQdgNGh +BByA5qEEHoDnXxAWTlNWYWx1ZVRyYW5zZm9ybWVyTmFtZV8QFlN0cmluZ1RvVVJMVHJhbnNmb3JtZXLY +AA4AXgO8A70AXwBgA74DvwPAAB8EJAQlAGMEJwQoANWA0oACgOuA6oAKgOmA7F8QG2NvbnRlbnRBcnJh +eTogcXVlcnkucmVzdWx0c1xjb250ZW50QXJyYXldcXVlcnkucmVzdWx0c9MADgNiAD4DywQuBDCA0aEE +L4DtoQQxgO5fEBdQYXVzaW5nUXVlcnlUcmFuc2Zvcm1lctgADgBeA7wDvQBfAGADvgO/A8AAYwQ2A8MB +IAQ5BDoA1YDSgAqA8YDNgFuA8IDyXxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy50cmFja18QFWFycmFu +Z2VkT2JqZWN0cy50cmFja9MADgNiAD4DywQ/BEGA0aEDzYDQoQNpgK7YAA4AXgO8A70AXwBgA74DvwPA +AGMERgPDAR8ESQRKANWA0oAKgPWAzYBXgPSA9l8QHHZhbHVlOiBhcnJhbmdlZE9iamVjdHMuZ2VucmVf +EBVhcnJhbmdlZE9iamVjdHMuZ2VucmXTAA4DYgA+A8sETwRRgNGhA82A0KEDaYCu2AAOAF4DvAO9AF8A +YAO+A78DwABjBFYDwwEcBFkEWgDVgNKACoD5gM2ASoD4gPpfEBx2YWx1ZTogYXJyYW5nZWRPYmplY3Rz +LmFsYnVtXxAVYXJyYW5nZWRPYmplY3RzLmFsYnVt0wAOA2IAPgPLBF8EYYDRoQPNgNChA2mArtIADgA+ +BGQEZYD+rxAhAu4DKAEdAR4A0gRrAsoBGwH+ASAAYwJnAJoCyQEaAeYCMQC3ARABswI5AS8BBAEcAm0B +zAEFAR8ClAGSA30CEwKhgLOAoYBOgFOAKID8gIuAQ4BagFuACoBxgB2An4AsgFaAZYAjgJWATYBrgDmA +ZoBKgHOAUYCZgFeAfIBJgLWAXoB/0gAOADIAMwSJgASA/V1OU0FwcGxpY2F0aW9u0gA3ADgEjACKogCK +ADvSAA4APgRkBI+A/q8QIQEEAskAmgCaAQQAHwAfAJoBHwCaAB8BBADSAQQAmgEeAQQA0gDSARwCMQEa +AsoAmgJnAR0A0gCaAB8BGwLuASAClIBmgJ+AHYAdgGaAAoACgB2AV4AdgAKAZoAogGaAHYBTgGaAKIAo +gEqAZYAsgIuAHYBxgE6AKIAdgAKAQ4CzgFuAfNIADgA+BGQEs4D+rxAiAu4DKAEdAR4A0gBjAsoEawAf +ARsBIAJnAJoCyQEaAf4B5gIxALcBEAGzAjkBLwEEARwCbQKUAQUBHwHMAZIDfQITAqGAs4ChgE6AU4Ao +gAqAi4D8gAKAQ4BbgHGAHYCfgCyAWoBWgGWAI4CVgE2Aa4A5gGaASoBzgHyAmYBXgFGASYC1gF6Af9IA +DgA+BGQE2ID+rxAiBNkE2gTbBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgE6QTqBOsE7ATtBO4E7wTw +BPEE8gTzBPQE9QT2BPcE+AT5BPqBAQKBAQOBAQSBAQWBAQaBAQeBAQiBAQmBAQqBAQuBAQyBAQ2BAQ6B +AQ+BARCBARGBARKBAROBARSBARWBARaBAReBARiBARmBARqBARuBARyBAR2BAR6BAR+BASCBASGBASKB +ASNfEBpTdGF0aWMgVGV4dCAoU2VhcmNoIFBhdGg6KV8QEVNlYXJjaCBGaWVsZCBDZWxsXxAVVGFibGUg +Q29sdW1uIChsZW5ndGgpXxATVGFibGUgQ29sdW1uICh5ZWFyKVtTY3JvbGwgVmlld18QHVNwb3RsaWdo +dCBQbGF5bGlzdCBDb250cm9sbGVyXxARUGFuZWwgKFNwb3RsaWdodClbQXBwbGljYXRpb25cRmlsZSdz +IE93bmVyXxAVVGFibGUgQ29sdW1uIChhcnRpc3QpXxAUVGFibGUgQ29sdW1uICh0cmFjaylfEB1QdXNo +IEJ1dHRvbiAoQWRkIHRvIFBsYXlsaXN0KV8QSlNwb3RsaWdodCBQbGF5bGlzdCBWaWV3IChUaXRsZSwg +QXJ0aXN0LCBBbGJ1bSwgTGVuZ3RoLCBZZWFyLCBHZW5yZSwgVHJhY2spXFNlYXJjaCBGaWVsZF8QFFRh +YmxlIENvbHVtbiAodGl0bGUpXxAdVGV4dCBGaWVsZCBDZWxsIChUZXh0IENlbGwpLTZfEB1UZXh0IEZp +ZWxkIENlbGwgKFRleHQgQ2VsbCktMV8QGlBvcCBVcCBQYXRoIENvbnRyb2wgV2lkZ2V0XxARVGFibGUg +SGVhZGVyIFZpZXdfEBFWZXJ0aWNhbCBTY3JvbGxlcl8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxs +KS01WVBhdGggQ2VsbF8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS00XENvbnRlbnQgVmlld18Q +FFRhYmxlIENvbHVtbiAoYWxidW0pXxAdQnV0dG9uIENlbGwgKEFkZCB0byBQbGF5bGlzdClfEBVNZW51 +IChDb250ZXh0dWFsTWVudSlfEBNIb3Jpem9udGFsIFNjcm9sbGVyXxAUVGFibGUgQ29sdW1uIChnZW5y +ZSlfEBtUZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbClfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2Vs +bCktMl8QHlRleHQgRmllbGQgQ2VsbCAoU2VhcmNoIFBhdGg6KV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4 +dCBDZWxsKS0zXxAaTWVudSBJdGVtIChTaG93IGluIEZpbmRlcinSAA4APgRkBR+A/qIAmgBjgB2ACtIA +DgA+BGQFJID+ogDDAHOAHoAL0gAOAD4EZAUpgP6vEDcDKAEdAR4AVwEbAB8ATQJnAJoAWQHmALcBEABL +AE8AUgBVAQQAUwJtAFwBHwBbAhMCoQBOAEkC7gBUBGsA0gLKAf4BIABjARoCyQIxAFAAUQGzAEoCOQEv +AFoAWABWARwBzABMAQUClAGSA30ASIChgE6AU4DegEOAAoCKgHGAHYDogFaAI4CVgHCAw4DJgNeAZoDL +gHOA94BXgPOAXoB/gMGAHICzgNOA/IAogIuAWoBbgAqALICfgGWAxYDHgE2AZIBrgDmA74DigNuASoBR +gHuAmYB8gEmAtYAJ0gAOAD4EZAVjgP6vEDcFZAVlBWYFZwVoBWkFagVrBWwFbQVuBW8FcAVxBXIFcwV0 +BXUFdgV3BXgFeQV6BXsFfAV9BX4FfwWABYEFggNpBYQFhQWGBYcFiAWJBYoFiwWMBY0FjgWPBZAFkQWS +BZMFlAWVBZYFlwWYBZkFmoEBKIEBKYEBKoEBK4EBLIEBLYEBLoEBL4EBMIEBMYEBMoEBM4EBNIEBNYEB +NoEBN4EBOIEBOYEBOoEBO4EBPIEBPYEBPoEBP4EBQIEBQYEBQoEBQ4EBRIEBRYEBRoCugQFHgQFIgQFJ +gQFKgQFLgQFMgQFNgQFOgQFPgQFQgQFRgQFSgQFTgQFUgQFVgQFWgQFXgQFYgQFZgQFagQFbgQFcgQFd +EDgQIBAfEGgQIhC4ED0QBRAcELUQKhAbEKMQsxBIEF0QXhBlEB4QZhAsEKwQoRCVEE8QaRP///////// +/RAYECsQHRAkEDcQWBCvEJcQKBCfEFkQJRBrEJ0QmhAhECkQsBAaEKsQJxBQEKDSAA4APgBGBc+AFaDS +AA4APgRkBdKA/qDSAA4APgRkBdWA/qDSADcAOAXXBdiiBdgAO15OU0lCT2JqZWN0RGF0YQAIABkAIgAn +ADEAOgA/AEQAUgBUAGYDLgM0A38DhgONA5sDrQPJA9cD4wPvA/0ECAQWBDIEQARTBGUEfwSJBJYEmASb +BJ0EoASjBKUEqASqBK0EsASzBLYEuAS6BLwEvwTBBMQEzQTZBNsE3QT5BQIFCwUWBRsFKgUzBUYFTwVa +BVwFXQVmBW0FegWABYkFiwW4BboFvAW+BcAFwgXEBcYFyAXKBcwFzgXQBdIF1AXWBdgF2gXcBd4F4AXi +BfMGAQYKBhIGFAYWBhgGGgY7BlgGbgZ5BosGnwauBq8GsQazBrQGtga4BroGvAbaBu4G9wb5BwgHCgcM +Bw4HEAcSBxQHFgccByEHKAcuBzQHOwdBB0oHUQdgB2gHdgd7B30HhgeLB5QHmQeoB8QHzQfUB+sH+ggL +CA0IDwgRCBMIcgiECKYIsAi9CNEI5gjzCQ0JKQlECU0JWQljCXIJewmHCaYJsgnBCc0JzwnRCdMJ3Ane +CeAJ4gnjCeUJ7gnwCfkJ/An+Cf8KAQoDCgUKBwoJCgsKDQoWCi4KOgpnCm8KeQqECo4KmAqmCqgKqgqs +Cq4KsAqzCrUKtwq5CrsKvQrICuUK5wrpCuwK7grwCvIK9AshCyMLJQsnCykLKwstCy8LMQszCzULPwtI +C1ELZQtsC3gLkQuTC5ULlwuZC5sL2gvmC+8MAgwPDBsMKQwrDC0MLwwxDDMMNQw3DDkMTAxPDFEMUwxV +DFcMWQxwDHkMggyQDJkMmwyqDKwMrgywDLIMtAy2DLgM4QzwDP0NCg0SDR0NLA03DUINQw1FDUcNSQ1S +DVQNVg1fDWgNag2HDZMNng2oDbUNwQ3GDcgNyg3MDc4N0A3WDecN7g31Df4OAA4JDgsODg4bDiQOKQ4w +Dj0OSg5SDlQOYA5pDm4Odg6LDpcOpQ6nDqkOqw6tDq8Otg7IDtUO1w7aDuMO7g8CDxQPIQ8oD0kPVw9c +D14PYA9iD2QPZg9pD2sPdQ+GD4gPkQ+TD5YPqw+tD68PsQ+zD8wP2Q/bD+cP/A/+EAAQAhAEEBcQIBAp +EDIQNxBFEG4QbxBxEHMQdRB+EIAQiRCLEKgQrRCvELEQsxC1ELcQvhDTENUQ1xDZENsQ5xD0EPYQ+REa +ERwRHhEgESIRJBEmEU8RUBFSEVQRVhFfEWERahFsEYkRixGNEY8RkRGTEZkRuhG8Eb4RwBHCEcQRxhHz +EfwR/RH+EgASAhIEEg0SDxIYEhoSNxI5EjsSPRI/EkQSRhJNEm4ScBJyEnQSdhJ4En0SfxKsEq0SrhKw +ErIStBK9Er8SyBLKEucS6RLrEu0S7xLxEvYTFxMZExsTHRMfEyETIxNQE1ETUhNUE1YTWBNhE2MTZROC +E4QThhOIE4oTjBOSE7MTtRO3E7kTuxO9E78T6BPpE+sT7RPvE/ET+hP8FBkUGxQdFB8UIRQjFCkUShRM +FE4UUBRSFFQUVhRrFG0UbxRxFHMUfRSKFIwUkRSoFLIUwxTFFMcUyRTLFPAU/BT+FQAVAhUEFQYVCRUK +FQwVDhUrFS0VLxUxFTMVNRU3FUAVQhVHFUkVSxVnFX8VmBW5FcUV3BXnFewV7hXwFfIV9RX3FfkWAhYE +FgUWDhYXFiIWKxY2FkQWThZaFmsWbRZvFnEWcxaUFpYWmBaaFpwWnxagFqIWpBa+Fu8XBRcaFykXOxdN +F1sXXRdfF2EXYxdlF2cXaRdrF20Xchd7F40XjheQF5kXohevF7gXwxfMF9sX5BfrGAMYFBgWGBgYGhgc +GCkYMRg9GD8YQRhDGFIYWxhdGGAYYhiDGJcYohiwGLoYxxjOGNAY0hjXGNkY3hjgGOIY5BjzGQAZDxkR +GRMZFRkdGS8ZOBk9GVAZXRlfGWEZYxl2GX8ZhBmPGZgZnRmiGbMZtRm3GbkZuxnwGf0aChogGi4aOBpG +Gl8abBp+GpIanBqoGqoarBquGrAashq3Grkauxq9Gr8awRrcGuYa7hr5GwIbBBsPGxEbExsVGxcbGRsi +GyQbLxsxGzMbNRs3GzkbQhtEG0cbSRthG2obcxt+G6MbrBu1G78bwRvDG8UbxxvJG8sbzRvWG+8b/BwF +HBAcGxxEHEYcSBxKHEwcVRxXHFkcWxxkHIAciRyLHI4ckBypHLIcuxzIHOkc6xztHO8c8Rz0HPUc9xz5 +HRIdRx1cHW8dgx2YHasdsB2yHbQdth24HbodvB3BHcIdxB3GHcgd3R3fHeEd4x3lHfseLB4uHjMeNR43 +HjkeOx49HkAeQh5HHk4eZB6ZHr8ewR7DHsUexx7JHssezR7THtwe3h7hHuMe8B74Hvoe/x8BHwMfCB8K +HwwfGh9GH00fVh9dH3MfgB+WH58fqh++H8cf1B/iH+4gDyARIBMgFSAXIBggGiAcIDMgVCBZIFsgXSBf +IGEgYyBoIGogdyCMII4gkCCSIJQgoSCqILUgwCDJINAg6CDzIPwhASEUISwhPSE/IUEhQyFFIVohayFt +IW8hcSFzIX8hkCGSIZQhliGYIa0hviHAIcIhxCHGIdEh4iHkIeYh6CHqIfEiEiIcIiYiMCJPIlEiUyJV +IlciWSJbIl0ieyKBIpgipSKnIqoirCKvIrEizyLYIt0i5iLtIwUjJiMoIyojLCMuIzAjMiM0I1QjbSN6 +I3wjfyOBI4QjhiOnI6kjqyOtI68jsSOzI7Uj1CPsI/kj+yP+JAAkAyQFJCIkJCQmJCgkKiQsJC4kRCRR +JHIkdCR2JHgkeiR8JH4kgCSgJLkkxiTIJMskzSTQJNIk8yT1JPck+ST7JP0k/yUBJR4lNCVBJUMlRiVI +JUslTSVmJX8loCWiJaQlpiWoJaolrCWuJcwl2SXnJfQl9iX5Jfsl/iYAJhomOyY9Jj8mQSZDJkUmRyZJ +JmgmgCaNJo8mkiaUJpcmmSa6JrwmvibAJsImxCbGJsgm5yb/JwwnDicRJxMnFicYJzknOyc9Jz8nQSdD +J0UnRydmJ34niyeNJ5AnkieVJ5cnoCeiJ+cn6SfrJ+0n7yfxJ/Mn9Sf3J/kn+yf9J/8oASgDKAUoBygJ +KAsoDSgPKBEoEygVKBcoGSgbKB0oHyghKCMoJSgnKCkoMig0KDYoRChNKFIoWyhdKKIopCimKKgoqiis +KK4osCiyKLQotii4KLoovCi+KMAowijEKMYoyCjKKMwozijQKNIo1CjWKNgo2ijcKN4o4CjiKOQo7Sjv +KTYpOCk6KTwpPilAKUIpRClGKUgpSilMKU4pUClSKVQpVilYKVopXCleKWApYilkKWYpaClqKWwpbilw +KXIpdCl2KXgpeimDKYUpzCnPKdIp1SnYKdsp3inhKeQp5ynqKe0p8CnzKfYp+Sn8Kf8qAioFKggqCyoO +KhEqFCoXKhoqHSogKiMqJiopKiwqLyoyKk8qYyp7KpEqnSq9KtEq3SrqKwIrGSs5K4YrkyuqK8or6iwH +LBssLyxPLFkseSyGLJ0svSzVLOstAi0gLUAtYS2BLZ4tpy2pLa4tsC2yLbstvS3CLcQtxi3PLdEuQi5E +LkYuSC5KLkwuTi5QLlIuVC5WLlguWi5cLl4uYC5iLmQuZi5oLmoubC5uLnAuci50LnYueC56Lnwufi6A +LoIuhC6GLoguii6MLo4ukC6SLpQuli6YLpounC6eLqAuoi6kLqYuqC6qLqwuri6wLrkuuy8sLy8vMi81 +LzgvOy8+L0EvRC9HL0ovTS9QL1MvVi9ZL1wvXy9iL2UvaC9rL24vcS90L3cvei99L4Avgy+GL4kviy+O +L5EvlC+XL5ovnS+gL6Mvpi+pL6wvry+yL7UvuC+7L74vwS/EL8cvyi/NL9Av0i/UL9Yv2C/aL9wv3i/g +L+Iv5C/mL+gv6i/sL+4v8C/yL/Qv9i/4L/ov/C/+MAAwAjAEMA0wDzARMBMwFTAXMBkwGzAdMB8wITAj +MCUwJzApMCswLTAvMDEwMzA1MDcwOTA7MEQwRjBHMFAwUjBTMFwwXjBfMGgwbQAAAAAAAAICAAAAAAAA +BdkAAAAAAAAAAAAAAAAAADB8A diff --git a/Spotlight/SpotlightPlaylistController.h b/Spotlight/SpotlightPlaylistController.h index d04c1867f..bd780ffbe 100644 --- a/Spotlight/SpotlightPlaylistController.h +++ b/Spotlight/SpotlightPlaylistController.h @@ -10,11 +10,8 @@ #import "PlaylistController.h" @interface SpotlightPlaylistController : PlaylistController { - NSArray *oldObjects; } - (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard; -@property(retain) NSArray *oldObjects; - @end diff --git a/Spotlight/SpotlightPlaylistController.m b/Spotlight/SpotlightPlaylistController.m index 82171bfa2..51aa67628 100644 --- a/Spotlight/SpotlightPlaylistController.m +++ b/Spotlight/SpotlightPlaylistController.m @@ -11,15 +11,6 @@ @implementation SpotlightPlaylistController -- (id)init -{ - if(self = [super init]) - { - oldObjects = nil; - } - return self; -} - // Allow drag and drop from Spotlight into main playlist - (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes @@ -45,21 +36,4 @@ return NSDragOperationNone; } -// Don't update until something has been found -- (NSArray *)arrangeObjects:(NSArray *)objects -{ - if((![spotlightWindowController.query isGathering]) || ([objects count] > 0)) - self.oldObjects = [super arrangeObjects:objects]; - - return self.oldObjects; -} - -- (void)dealloc -{ - [oldObjects release]; - [super dealloc]; -} - -@synthesize oldObjects; - @end \ No newline at end of file diff --git a/Spotlight/SpotlightTransformers.h b/Spotlight/SpotlightTransformers.h new file mode 100644 index 000000000..0350039a5 --- /dev/null +++ b/Spotlight/SpotlightTransformers.h @@ -0,0 +1,20 @@ +// +// SpotlightTransformers.h +// Cog +// +// Created by Matthew Grinshpun on 16/02/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import +@class SpotlightWindowController; + +@interface StringToURLTransformer: NSValueTransformer {} +@end + +@interface PausingQueryTransformer: NSValueTransformer { + NSArray *oldResults; +} + +@property(copy) NSArray *oldResults; +@end \ No newline at end of file diff --git a/Spotlight/SpotlightTransformers.m b/Spotlight/SpotlightTransformers.m index ea6f0acec..c2005d761 100644 --- a/Spotlight/SpotlightTransformers.m +++ b/Spotlight/SpotlightTransformers.m @@ -6,10 +6,8 @@ // Copyright 2008 Matthew Leon Grinshpun. All rights reserved. // -#include - -@interface StringToURLTransformer: NSValueTransformer {} -@end +#import "SpotlightTransformers.h" +#import "SpotlightWindowController.h" @implementation StringToURLTransformer + (Class)transformedValueClass { return [NSURL class]; } @@ -18,7 +16,7 @@ // Convert from string to NSURL - (id)transformedValue:(id)value { if (value == nil) return nil; - + return [NSURL URLWithString:value]; } @@ -28,4 +26,20 @@ return [value absoluteString]; } +@end + +@implementation PausingQueryTransformer ++ (Class)transformedValueClass { return [NSArray class]; } ++ (BOOL)allowsReverseTransformation { return NO; } + +// Convert from string to NSURL +- (id)transformedValue:(id)value { + if([(NSArray *)value count] > 0) { + self.oldResults = (NSArray *)value; + } + return self.oldResults; +} + +@synthesize oldResults; + @end \ No newline at end of file diff --git a/Spotlight/SpotlightWindowController.h b/Spotlight/SpotlightWindowController.h index b9c0a6f49..8193f5850 100644 --- a/Spotlight/SpotlightWindowController.h +++ b/Spotlight/SpotlightWindowController.h @@ -18,7 +18,6 @@ NSMetadataQuery *query; NSString *searchString; NSString *spotlightSearchPath; - NSArray *oldResults; } - (IBAction)addToPlaylist:(id)sender; @@ -32,6 +31,5 @@ @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 f3e9cbf3e..873c4c2af 100644 --- a/Spotlight/SpotlightWindowController.m +++ b/Spotlight/SpotlightWindowController.m @@ -13,6 +13,7 @@ #import "NSArray+CogSort.h" #import "NSString+CogSort.h" #import "NSNumber+CogSort.h" +#import "SpotlightTransformers.h" // Minimum length of a search string (searching for very small strings gets ugly) #define MINIMUM_SEARCH_STRING_LENGTH 3 @@ -36,6 +37,14 @@ static NSPredicate * musicOnlyPredicate = nil; NSDictionary *searchDefault = [NSDictionary dictionaryWithObject:homeDir forKey:@"spotlightSearchPath"]; + + // Register value transformers + NSValueTransformer *stringToURLTransformer = [[[StringToURLTransformer alloc]init]autorelease]; + [NSValueTransformer setValueTransformer:stringToURLTransformer + forName:@"StringToURLTransformer"]; + NSValueTransformer *pausingQueryTransformer = [[[PausingQueryTransformer alloc] init] autorelease]; + [NSValueTransformer setValueTransformer:pausingQueryTransformer forName:@"PausingQueryTransformer"]; + [defaults registerDefaults:searchDefault]; } @@ -54,7 +63,7 @@ static NSPredicate * musicOnlyPredicate = nil; [[NSSortDescriptor alloc]initWithKey:@"kMDItemAudioTrackNumber" ascending:YES selector:@selector(compareTrackNumbers:)], - Nil]; + nil]; } return self; @@ -198,7 +207,7 @@ static NSPredicate * musicOnlyPredicate = nil; } if ([subpredicates count] == 0) - return Nil; + return nil; else if ([subpredicates count] == 1) return [subpredicates objectAtIndex: 0]; @@ -226,7 +235,6 @@ static NSPredicate * musicOnlyPredicate = nil; [self.query release]; [self.searchString release]; [musicOnlyPredicate release]; - [self.oldResults release]; [super dealloc]; } @@ -289,6 +297,4 @@ replacementObjectForResultObject:(NSMetadataItem*)result } } -@synthesize oldResults; - @end